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

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

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

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

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

  • Что я должен положить в resolv.conf, если что-нибудь?
  • Как узнать, какие серверы имен запрашивает мой компьютер?
  • Где искать дальше, чтобы выяснить, почему серверы имен, полученные по DHCP, не используются?

Сначала вам нужно немного узнать о том, как работает разрешение имен в Ubuntu начиная с Ubuntu 12.04.

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

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-шине. Вы можете увидеть, что 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        

Я внес изменения, предложенные по ссылке ниже (отключение 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

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

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

На самом деле это очень просто.

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

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

# nmcli dev list iface wlan0 | grep IP4.DNSIP4.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 loiface lo inet loopback

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

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

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

Не открываю другой поток, потому что это точная проблема, за исключением того, что сейчас я нахожусь на 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 по-прежнему ожидает, что он будет.

На самом деле это очень просто.

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

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

address 192.168.22.71netmask 255.255.255.0gateway 192.168.22.1

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

Таким образом, ваша конфигурация должна быть:

address 192.168.22.71netmask 255.255.255.0gateway 192.168.22.1dns-nameservers 8.8.8.8 8.8.8.9

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

Я использую Pop!ОС, но я думаю, что мое решение может быть применимо и к пользователям ubuntu.Для меня было затронуто 2 вопроса.

Первый systemd-resolved не был настроен на использование mdns.Так что это должно быть включено путем редактирования /etc/systemd/resolved.confи включение опции MulticastDNS=yes

после этого изменения systemd-resolved необходимо перезапустить.

systemctl restart systemd-resolved.service

Затем проверьте, была ли конфигурация обновлена с помощьюsystemd-resolve --status

Это должно было иметь

Global LLMNR setting: noMulticastDNS setting: yesно если вы проверите конкретный интерфейс, у него будет отключена многоадресная рассылка.

Current Scopes: noneDefaultRoute setting: no LLMNR setting: yesMulticastDNS setting: no DNSOverTLS setting: no DNSSEC setting: no

Проблема в том, что включение многоадресных сетей не может быть выполнено из (по крайней мере, моего) Конфигуратор сетевого интерфейса пользовательского интерфейса, поэтому вам нужно выполнить настройку командной строки nmcli.

nmcli connection edit enp4s0

вас интересует property connection.mdnsвы можете получить более подробную информацию об этом, позвонив

describe connection.mdns

так set connection.mdns reslove (или что вы предпочитаете)

затемsave persistentquitтеперь mdns должны работать

Бежать:

sudo systemd-resolve --flush-caches

Эта проблема может быть связана с systemd-resolve не перенаправляет DNS-запросы на указанный DNS-сервер

Более новый systemd-resolved отказывается разрешать простые имена через DNS, т.е. myhost и будет только разрешать myhost.somedomain.com через DNS.

Это изменение сделано специально. Обход / удаление systemd-разрешено, если вы используете простые имена хостов.

Создать рабочую /etc/resolv.conf и chattr +i /etc/resolv.conf чтобы инструменты systemd не вмешивались в это, при необходимости удалите systemd-resolved с помощью apt.

Причина в том, что systemd-resolved предполагает, что DNS-сервер вашей интрасети находится в Интернете, и не предоставляет механизма, указывающего, что это не так.

Я получал ежедневные сбои DNS с момента обновления до 16.10 несколько дней назад.

У меня возникла та же проблема при обновлении с 12.04 до 14.04.

У @ WindRider та же проблема, трюк с dnsmasq, приведенный ниже, похоже, работает.

У меня возникла проблема при новой установке Lubuntu 17.04, и я решил ее, вручную добавив необходимые URL-адреса в файл hosts: https://askubuntu.com/a/936972/34298