Мне нужно проверить поведение приложения, когда оно не может разрешить имя хоста из-за тайм-аута. Установка nameserver 127.0.0.1
в /etc/resolv.conf
не сработала: соответствующие функции сразу возвращаются с исключением. Тестовая установка - это виртуальная машина, созданная с помощью Vagrant, которая получает свой IP-адрес через DHCP.
19
nslookup example.com non_existent_dns_ip
выходы:;; connection timed out; trying next origin ;; connection timed out; no servers could be reached
Тайм-аут соединения возникает, когда DNS-сервер вообще не отвечает или не отвечает своевременно.
Первый можно смоделировать, просто блокируя весь трафик на ваш DNS-сервер, например, в системе Linux с помощью:
Использование DROP в качестве цели означает, что вы даже не получите ошибку отказа в соединении, она становится просто черной дырой. (Маловероятно, что вы обычно выполняете зонную передачу, поэтому блокирование протокола TCP в дополнение к UDP не требуется.)
Создание задержек немного сложнее. Из
netem
руководства :Что создает задержку 200 мс с случайным отклонением ± 10 мс.
источник
Что вам нужно, это «сервер черной дыры». Вы можете использовать
blackhole.webpagetest.org
(72.66.115.13
), который будет молча отбрасывать все запросы.Почему я предлагаю это поверх других ответов, потому что вышеупомянутый сервер был создан для этой единственной цели.
Пример:
источник
Если вы не используете DNS-сервер в своей тестовой системе, вы сможете использовать его IP-адрес.
Вы можете попробовать использовать неиспользуемый адрес rfc1918 .
Вы можете использовать брандмауэр вашего сервера для блокировки исходящих пакетов с портом назначения 53.
источник