Як імітувати час очікування відповіді сервера DNS?


19

Мені потрібно перевірити поведінку програми, коли вона не може вирішити ім'я хоста через час очікування. Установка nameserver 127.0.0.1в /etc/resolv.confне працює: відповідні функції негайно повернутися з виключенням. Тестова установка - це VM, створений з Vagrant, який отримує свою IP-адресу через DHCP.

Відповіді:


11

nameserver 127.0.0.1не працюватиме, оскільки поведінка за замовчуванням - це вже те. Натомість спробуйте використовувати неіснуючий DNS. Щоб переконатися, ви можете зробити:

nslookup example.com 192.0.2.10

Якщо ви не отримаєте жодної відповіді, ви можете використовувати її 192.0.2.10як свій DNS-сервер.


Це не гарантує створення тайм-ауту, оскільки 192.0.2.10 може (хоча це не ймовірно) бути справжнім хостом, і, як і 127.0.0.1, він може повернути "порт недоступний" одразу після запиту. Вам не потрібно , щоб вибрати хост , який ви будете впевнені , що не працює DNS (наприклад , ваші NSlookup перевірки команди) , ви повинні вибрати хост ви впевнені , що не відповідатиме на всі .
Джефф Меден

nslookup example.com non_existent_dns_ipВиходи: ;; connection timed out; trying next origin ;; connection timed out; no servers could be reached
sysfiend

4
@JeffMeden Ви, мабуть, знаєте, але діапазон 192.0.2.0/24 зарезервований для цілей документації , тому його не слід використовувати ніде (а відмовляти як богон будь-яким поважаючим себе брандмауером).
Дубу

2
@Dubu - це насправді цікавіший застереження; за специфікацією, трафік повинен бути відхилений на маршрутизаторі, що, ймовірно, поверне стеку "хост призначення недоступний", який знову відрізняється від таймауту.
Джефф Меден

26

Тайм-аут підключення виникає, коли сервер DNS взагалі не реагує або не реагує своєчасно.

Перший можна імітувати, просто заблокувавши весь трафік на вашому сервері DNS, наприклад, у системі Linux, наприклад:

# iptables -I OUTPUT -p udp -d <iIP of DNS server> --dport 53 -j DROP

Використання DROP як цілі означає, що ви навіть не отримаєте помилку відмови в з’єднанні, це стає просто чорною дірою. (Малоймовірно, що ви зазвичай виконували б передачу зон, тому блокування протоколу TCP на додаток до UDP не потрібно.)

Створення затримок дещо більше. З netemпосібника :

# tc qdisc add dev eth0 root handle 1: prio
# tc qdisc add dev eth0 parent 1:3 handle 30: tbf rate 20kbit buffer 1600 limit  3000
# tc qdisc add dev eth0 parent 30:1 handle 31: netem  delay 200ms 10ms distribution normal
# tc filter add dev eth0 protocol ip parent 1:0 prio 3 u32  match ip dst <IP_of_DNS_server>/32 flowid 1:3

Що створює затримку 200 мс з випадковим відхиленням ± 10 мс.


18

Вам потрібен "сервер чорної діри". Ви можете використовувати blackhole.webpagetest.org( 72.66.115.13), який мовчки відкине всі запити.

Чому я пропоную це над іншими відповідями, це тому, що вищезгаданий сервер був створений для цієї єдиної мети.

Приклад:

barend@shells:~$ dig example.com @72.66.115.13

; <<>> DiG 9.10.3-P4-Debian <<>> example.com @72.66.115.13
;; global options: +cmd
;; connection timed out; no servers could be reached

2
Просто коли я думав, що все це бачив; виділений сервер, який спеціально не робить ... нічого. Блискуче! (напевно, лише мережева конфігурація, а не власне сервер із брандмауером для всіх фільтрів, але все ж)
Джефф Меден

1
Це Raspberry PI зі встановленим брандмауером, щоб відкинути все, щоб воно все-таки рухалося та відповідало ARP (просто щоб бути впевненим, що трафік не отримує ICMP недоступних відповідей).
pmeenan

@pmeenan, що цікаво! Дякую, що поділились! (Нічого собі, не можу повірити, що ви приєдналися просто до коментаря: D)
grooveplex

3

Якщо у вашій тестовій системі не працює DNS-сервер, ви повинні мати можливість використовувати його IP-адресу.

Ви можете спробувати використати невикористану rfc1918 адресу.

Ви можете використовувати брандмауер свого сервера для блокування вихідних пакетів з портом призначення 53.


1
Деякі міжмережеві екрани також можуть повертати ICMP-пакети, щоб час очікування був миттєвим.
Натан їде
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.