Диагностика проблем с поиском DNS - возможно, плохой файл nsswitch.conf или другая проблема

tl:dr моя система Ubuntu 16.04 часто пытается разрешить DNS, с которыми у моих коллег (в основном использующих OSX/mac) нет проблем. Мы все используем 8.8.8.8 из той же сети Wi-Fi. Указанные домены - это URL-адреса AWS, которые часто создаются или обновляются. Прочитав этот вопрос - я боюсь, что мой nsswitch.conf не имеет смысла.

/etc/nsswitch.conf содержит строку:

hosts:          files mdns4_minimal [NOTFOUND=return] dns

Это выглядит правильно? Если я правильно понимаю, он проверит (по порядку) файл hosts, mdns (локальный dns?), А затем провалится, прежде чем проверит DNS-серверы?

запуск команды nmcli dev show | grep DNS (из этого вопроса - как узнать, какой днс я использую) возвращает следующее:

IP4.DNS[1]:                             8.8.8.8
IP4.DNS[2]:                             8.8.4.4

Я также проверил, что мой хост-файл не содержит неожиданных конфликтующих записей. Где еще мне искать улики?

Поиск DNS не выполняется постоянно (т. Е. Это не медленный DNS-сервер, который дает сбой с первой попытки, пока значение не будет кэшировано).

Пример неудачного nslookup (с измененным доменом для удаления рабочего домена) выглядит так:

> nslookup example.somedomain.com:      127.0.1.1
Address:    127.0.1.1#53

Non-authoritative answer:
*** Can't find example.somedomain.com: No answer

Онлайновые инструменты nslookup могут корректно разрешать URL-адреса и показывать, что время жизни составляет 59 секунд, довольно мало, но не безумно.

Изменить: Дополнительная информация (которую я не очень понимаю, но может помочь эксперту) после прочтения еще нескольких вопросов:

вышеупомянутый nslookup, кажется, использует локальный сервер DNS (127.0.1.1) с помощью nslookup, но при явной настройке сервера DNS правильно разрешил URL-адреса:

> nslookup example.somedomain.com 8.8.8.8
Server:     8.8.8.8
Address:    8.8.8.8#53

Non-authoritative answer:
Name:   example.somedomain.com
Address: 10.116.[blah].[blah]
Name:   example.somedomain.com
Address: 10.116.[blah].[blah]

/etc/NetworkManager/NetworkManager.conf выглядит следующим образом:

[main]
plugins=ifupdown,keyfile,ofono
dns=dnsmasq

[ifupdown]
managed=false

1 ответ

Решение

Кажется, есть проблема с механизмом локального кэша DNS, предоставляемым dnsmasq (который работает на localhost, 127.0.1.1). Не уверен, что именно, но если вы отключите кэш dnsmasq и всегда будете запрашивать первичный (8.8.8.8) и вторичный (8.8.4.4) DNS-серверы напрямую, это может работать лучше.

Чтобы отключить dnsmasq, вы редактируете файл /etc/NetworkManager/NetworkManager.conf и закомментировать dns=dnsmasq как в конфиге ниже:

[main]
plugins=ifupdown,keyfile,ofono
#dns=dnsmasq

Надеюсь, что это работает для вас:)

Другие вопросы по тегам