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

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

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

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

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

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

4 ответа

Решение

Во-первых, вам нужно немного узнать о том, как распознавание имен работает в 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        

Я внес изменения, предложенные по ссылке ниже (отключение 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: предыдущий пост был по праву удален модератором, я публикую то, что я нашел решение. Простите за это.

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

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

просто откройте файл 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 все еще ожидает его появления.

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

просто откройте файл 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", и все готово!

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

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

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

systemctl restart systemd-resolved.service

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

Он должен иметь

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

Current Scopes: none DefaultRoute setting: no LLMNR setting: yes MulticastDNS setting: no DNSOverTLS setting: no DNSSEC setting: no

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

nmcli connection edit enp4s0

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

describe connection.mdns

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

тогдаsave persistent quit теперь mdns должен быть в рабочем состоянии

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

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

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

Создать рабочий /etc/resolv.conf а также chattr +i /etc/resolv.conf чтобы инструменты systemd не вмешивались в него, при желании удалите systemd-resolve d с помощью apt.

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

Бежать:

sudo systemd-resolve --flush-caches
Другие вопросы по тегам