Каждый раз, когда один из серверов в /etc/resolv.conf
недоступен, Linux / glibc / все, что угодно, недостаточно умен, чтобы не предпринимать повторных попыток какое-то время. Это приводит к тому, что многие службы становятся недоступными, потому что многие из них выполняют обратный поиск по всем входящим соединениям (например, SSH), что приводит к зависанию на время ожидания первого запроса DNS-сервера.
Как я могу сделать так, чтобы мои ящики Ubuntu понимали, какие DNS-серверы они используют? Я мог бы взломать bash-скрипт, который запускается каждую минуту и вставляет правило REJECT в iptables для серверов, которые не отвечают на запросы поиска, но я бы предпочел не делать этого таким образом ...
Мне сказали, что Windows делает это правильно, BTW.
Изменить: я немного поработал над этим, вставив это в /etc/resolv.conf
(или /etc/resolvconf/resolv.conf.d/base
):
options timeout:2 rotate
Все еще не идеально, но более работоспособно.
Почему DNS-серверы становятся недоступными? Это проблема, на решении которой мы должны сосредоточиться ...
Вам следует опустить rotate
директиву, если вы хотите иметь детерминированный порядок повтора. rotate
в основном дает вам циклический поиск, который может иметь нежелательные результаты в вашей ситуации.
Мой DNS /etc/resolv.conf
имеет вид:
search blah.net client.blah.net
options timeout 1
nameserver 172.16.2.14
nameserver 172.16.2.18
Если не считать этого, вы делать есть возможность использовать кэширующую службу DNS на вашем локальном компьютере или даже включить Демон кэширования сервера имен (NSCD). Это поможет устранить задержки, связанные с ненадежными преобразователями DNS.
Тьфу. Я столкнулся с этой же проблемой в своих системах. Когда основной DNS-сервер отключается, вся система становится в лучшем случае невероятно медленной.
На самом деле, довольно давно я задал похожий вопрос по этому поводу: Настройки DNS / resolv.conf для сбоя основного DNS-сервера?. Там было несколько действительно хороших ответов, которые могут оказаться вам полезными.
Я просто редактировал /etc/resolv.conf
с меньшими значениями тайм-аута. (options timeout:1
) Во многом потому, что это был самый простой обходной путь, а не самый эффективный. Это изменение означает, что серверы тратят меньше времени на ожидание мертвых преобразователей. Поиск занимает 2 секунды, а не 10. Это все равно ужасно, если вы пытаетесь сделать что-то, кроме пакетного, но, по крайней мере, привело к очень небольшому количеству сбоев в работе служб.