Вопрос: Linux продолжает повторять неудачный DNS-сервер


Всякий раз, когда один из серверов в /etc/resolv.conf недостижимо, Linux / glibc / что-то не достаточно умное, чтобы не повторять его некоторое время. Это приводит к тому, что многие сервисы становятся недоступными, поскольку многие из них выполняют обратный поиск во всех входящих соединениях (например, SSH), которые будут зависать для тайм-аута первого запроса DNS-сервера.

Как я могу сделать свои ящики Ubuntu умными в отношении DNS-серверов, которые он использует? Я мог бы взломать скрипт bash, который запускается каждую минуту, которая вставляет правило REJECT в iptables для серверов, которые не отвечают на запросы на dig, но я бы не сделал этого так ...

Мне сказали, что Windows делает это правильно, BTW.

Редактирование: я немного поработал над этим, поставив это в /etc/resolv.conf (или /etc/resolvconf/resolv.conf.d/base):

options timeout:2 rotate

Все еще не идеальный, но более работоспособный.


5
2017-12-28 15:39


Источник


Я предсказываю, что у вас не будет никакой пользы от REJECTing трафика до мертвых серверов, так как многие приложения не будут проверять причину отсутствия ответа и, таким образом, продолжать с глупым поведением. - Karma Fusebox
Не будет ли проверен следующий сервер, если будет отклонено первое? - Halfgaar
Мой комментарий - просто предсказание, поскольку я не знаю точно. Файл resolv.conf - это всего лишь файл с адресами, и в нем находятся библиотеки кода приложения, как обрабатывается фактический поиск. Предположим, вы запустили скрипт, написанный в FOOLANG, тогда FOOLANG-Core должен быть достаточно умным, чтобы читать более одной записи resolv.conf и решать «эй, REJECT, я попробую следующий». Если вы запускаете приложения с не очень умными библиотеками, вам не повезло. - Karma Fusebox


Ответы:


Почему 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-преобразователями.


5
2017-12-28 16:21



Все наши серверы используют DNS-серверы нашего провайдера. Они могут спуститься; я ничего не могу с этим поделать. И без поворота все поисковые запросы задерживаются на 1 секунду, если первичный сбой. При вращении половина из них ... - Halfgaar
Измените порядок поиска или включите nscd кэширование. - ewwhite


Тьфу. Я столкнулся с этой проблемой в своих системах. Когда основной DNS-сервер отключается, вся система в лучшем случае становится невероятно медленной.

Фактически, я задал подобный вопрос об этом довольно давно: Параметры DNS / resolv.conf для отказа основного DNS-сервера?, Там были действительно хорошие ответы, которые вы могли бы найти полезными.

Я закончил только редактирование /etc/resolv.conf с более низкими значениями таймаута. (options timeout:1) Во многом потому, что это было самое легкое обходное решение, а не самое эффективное. Это изменение означает, что серверы тратят меньше времени на ожидание мертвых резольверов. Поисковые запросы занимают 2 секунды, а не 10. Это все еще ужасно, если вы пытаетесь сделать что-то, что не является пакетом, но, по крайней мере, привело к очень небольшим сбоям в обслуживании.


3
2017-12-28 15:56



Я на самом деле просто нашел аналогичное решение, но я добавил следующее: timeout time: 2 rotate ». Вращение также помогает, но оно все еще не идеально. - Halfgaar