Как исправить разрешение DNS, которое не работает после обновления до Ubuntu 13.10 (Saucy)

64

После обновления до 13.10 мое разрешение DNS не удается. Кажется, DNS-серверы, которые я получаю по DHCP (LAN), не используются.

Я мог бы временно решить проблему, добавив nameserver 8.8.8.8в /etc/resolv.conf. Но тогда узлы внутренней сети все еще не могут быть решены.

При нажатии на пункт меню « Информация о соединении» на индикаторе сети первичный DNS и вторичный DNS установлены правильно. Но мой компьютер, кажется, не использовать их.

Итак, мои вопросы:

  • Во что мне вложить resolv.conf, если что?
  • Как узнать, какие серверы имен запрашивает мой компьютер?
  • Где искать дальше, чтобы узнать, почему серверы имен, полученные DHCP, не используются?
Витек
источник
2
Я получил ту же проблему при обновлении с 12.04 до 14.04.
Тарраш
6
Я получил ежедневные сбои DNS с момента обновления до 16.10 несколько дней назад.
WindRider
У @WindRider та же проблема, уловка с dnsmasq ниже работает.
Suor
У меня возникла проблема с новой установкой Lubuntu 17.04, и я решил ее вручную, добавив необходимые URL-адреса в файл hosts: askubuntu.com/a/936972/34298
rubo77

Ответы:

83

Во-первых, вам нужно немного узнать о том, как распознавание имен работает в Ubuntu, начиная с Ubuntu 12.04.

Стефан Грабер опубликовал информацию об этом в прошлом году здесь . Самое важное, что нужно знать, это то, что Ubuntu Server и Ubuntu Desktop используют resolvconf для управления resolv.confфайлом. Это означает, что вы больше не должны редактировать /etc/resolv.confнапрямую; вместо этого вы должны сконфигурировать вашу утилиту настройки сетевого интерфейса, чтобы предоставить правильную информацию для resolvconf. Для Ubuntu Server утилита конфигурирования сетевого интерфейса - ifup, и она настраивается файлом /etc/network/interfaces. Для Ubuntu Desktop утилита настройки сетевого интерфейса - NetworkManager . Это то, что вы используете.

NetworkManager настраивается с помощью индикатора «Сеть»> «Редактировать соединения» . Однако для сетевых интерфейсов, настроенных DHCP, обычно нет необходимости изменять какие-либо настройки вручную. Обычно случается, что (удаленный) DHCP-сервер предоставляет NetworkManager как IP-адрес для локального интерфейса, так и адрес (удаленного) DNS-сервера имен для использования. NetworkManager запускает экземпляр перенаправляющего сервера имен, который прослушивает локально на 127.0.1.1. Этот адрес 127.0.1.1, отправляется Resolvconf , который ставит nameserver 127.0.1.1в/etc/resolv.conf, NetworkManager также передает (удаленный) IP-адрес DNS-сервера, предоставленного DHCP, перенаправляющему серверу имен. Таким образом, программа, работающая в локальной системе, просит преобразователь преобразовать имя хоста в IP-адрес; распознаватель запрашивает локальный сервер переадресации имен на 127.0.1.1; перенаправляющий сервер имен запрашивает удаленный сервер (ы), о котором ему было сказано, получает ответ и отправляет его обратно по цепочке.

NetworkManager связывается с процессом переадресации имен через D-Bus. Вы можете увидеть, что NetworkManager сказал перенаправляющему серверу имен, выполнив команду

nmcli dev list iface eth0 | grep IP4.DNS

Обновление, вытекающее из комментариев:
обратите внимание, что resolvconf фактически записывает файл, /run/resolvconf/resolv.confна который /etc/resolv.confдолжна быть символическая ссылка. Если /etc/resolv.confэто не символическая ссылка, то вам нужно восстановить ее. Для этого вы можете запустить

sudo dpkg-reconfigure resolvconf

или же

sudo ln -sf /run/resolvconf/resolv.conf /etc/resolv.conf        
jdthood
источник
Большое спасибо за эту информацию. В моем случае команда показывает правильные DNS-серверы. Но файл resolf.conf не обновляется. У него есть временная метка, с которой я положил туда свои ценности. Поэтому мне нужно выяснить, почему resolvconf не записывает файл.
Витек
15
Resolvconf фактически записывает файл /run/resolvconf/resolv.conf, и /etc/resolv.conf должен быть символической ссылкой на /run/resolvconf/resolv.conf. Если вы удалили /etc/resolv.conf, то удалили символическую ссылку. Чтобы воссоздать символическую ссылку, вы можете запустить sudo dpkg-reconfigure resolvconfили вы можете сделатьmv /etc/resolv.conf /run/resolvconf/resolv.conf && ln -s ../run/resolvconf/resolv.conf /etc/resolv.conf
jdthood
7
В этом есть все, кроме «исправить». Как я могу решить эту проблему?
Амаль Мурали
5
Исправление может состоять в том, чтобы выполнить, sudo dpkg-reconfigure resolvconfкак предложено в последней части ответа.
Jdthood
Спасибо!!! Я не уверен в том, что случилось с моей системой, но, sudo dpkg-reconfigure resolveconfпохоже, он работал отлично!
скупой
49

Я внес изменения, предложенные по ссылке ниже (отключение dnsmasq). Теперь все отлично работает! http://www.ubuntugeek.com/how-to-disable-dnsmasq-in-ubuntu-12-04precise.html

Открыть /etc/NetworkManager/NetworkManager.confфайл

sudo gedit /etc/NetworkManager/NetworkManager.conf

Закомментируйте строку как:

#dnsmasq deactivated
#dns=dnsmasq
Ричард Линдштедт
источник
4
После комментирования Dnsmasq, вам необходимо перезапустить менеджер сети: sudo restart network-manager.
Дон Киркби
2
В моем случае (Xubuntu) команда выглядит так: sudo /etc/init.d/network-manager restart
aviram83
Если у вас это происходит, даже если не установлен dnsmasq, и комментировать нечего, добавьте dns=defaultв [main]раздел. NetworkManager имеет свой собственный плагин dnsmasq, который он будет использовать иначе.
dstibbe
1
Мне нужно сделать этот перезапуск network-manager-sudo service network-manager restart
Sungam
После обновления до 17.10 у одного из моих ящиков не было днс, и оказалось, что /etc/resolv.conf не был символической ссылкой. Починил это. Другая коробка не закончила обновление, и я нашел файл .dpkg-new в директории, отличаясь от них основным отличием является dnsmasq. Скопировал его и работал без перезапуска ни одного демона
fchen
20

РЕДАКТИРОВАТЬ 2: предыдущий пост был по праву удален модератором, я публикую то, что я нашел решение. Простите за это.

РЕДАКТИРОВАТЬ: Я только что нашел ответ, и это на этой самой странице - извините за мою миопию. Я разместил свои выводы ниже, расширив правильный ответ Ричарда Линдштедта, найденный на этой странице. Я оставил свое раннее урчание для некоторого контекста. Пожалуйста, подтвердите ответ Ричарда, он этого заслуживает.

На самом деле это действительно легко.

просто откройте файл conf интерфейсов -> sudo vi / etc / network / interfaces

Это точно не помогло ОП и не помогает мне сейчас. Нам не нужны статические адреса, мы хотим использовать те, которые нам отправляет DHCP-сервер. NetworkManager, кажется, распознает их, но Ubuntu прямо игнорирует их:

# nmcli dev list iface wlan0 | grep IP4.DNS
IP4.DNS[1]:          10.*.*.*
IP4.DNS[2]:          10.*.*.*
IP4.DNS[3]:          8.8.8.8

Но...

# dig microsoft.com
; <<>> DiG 9.9.5-4.3-Ubuntu <<>> microsoft.com
;; global options: cmd
;; connection timed out; no servers could be reached

И мой / etc / network / interfaces это:

auto lo
iface lo inet loopback

что немного странно, я ожидаю, что все интерфейсы будут объявлены здесь (или я что-то упустил?).

Итак, вкратце:

  • Я не связывался ни с одним файлом, чтобы начать с
  • Я уже бегал dpkg-reconfigure resolvconf
  • Правая символическая ссылка на месте
  • NetworkManager извлекает правильные DNS-серверы из DHCP
  • Ubuntu НЕ использует такие адреса
  • Обходной путь должен поместить исправленный 8.8.8.8 в / etc / network / interfaces, КОТОРЫЙ Я НЕ ХОЧУ
  • Я хочу использовать предоставленные DHCP DNS-серверы в любых ситуациях.

Не открывать другой поток, потому что это точная проблема, за исключением того, что я сейчас на 14.10 (но это меня мучает с момента обновления с 12.10 до 13.04).

РЕШЕНИЕ

Эта последняя фраза вывела меня на правильный путь, и только тогда я заметил ответ Ричарда.

Кажется, проблема связана с конфликтом dnsmasqи resolvconfпакетами. До 12.10 dnsmasqиспользовался. Начиная с 13.04 Ubuntu, похоже, переключился на гибрид dnsmasq / resolvconf, где вы установили пакеты dnsmasq-baseи resolvconf, но не dnsmasqсебя.

Я не могу сказать, является ли это ошибкой в ​​скриптах обновления для 13.04 или чем-то еще, потому что при обновлении (как в новых установках) resolvconf установлен, dnsmasq-base обновляется, а dnsmasq (правильно) удаляется.

Уловка в том, что скрипт обновления не может закомментировать dns=dnsmasqстроку в /etc/NetworkManager/NetworkManager.conf. Таким образом, хотя демон dnsmasq больше не присутствует в системе, /etc/resolv.conf все еще ожидает его появления.

Henrique
источник
Это так здорово!
метадинги
1
Боже мой, это решило мои проблемы с DNS, которые у меня были последние 3 года! Если у вас есть dnsmasqи dnsmasq-baseустановлен, NM поместит 127.0.0.1в /etc/resolv.confвместо 127.0.1.1. Я просто удалил dnsmasq(и включил NM) и все работает просто отлично.
user1129682
4
Будущие гуглеры должны заметить, что вам нужно, чтобы sudo service network-manager restartэто вступило в силу.
таймер
Хороший пункт по перезапуску службы сетевого менеджера!
Энрике
7

На самом деле это действительно легко.

просто откройте файл conf интерфейсов -> sudo vi / etc / network / interfaces

и под вашим интерфейсом (вероятно, eth0) вы увидите все обычные конфигурации.

address 192.168.22.71
netmask 255.255.255.0
gateway 192.168.22.1

После шлюза просто добавьте 'dns-nameservers 8.8.8.8 8.8.8.9' или любой другой сервер имен, который вы собираетесь использовать.

Итак, ваш конфиг должен быть:

address 192.168.22.71
netmask 255.255.255.0
gateway 192.168.22.1
dns-nameservers 8.8.8.8 8.8.8.9

затем просто выполните «перезагрузку сети службы sudo», и все готово!

Спрут
источник