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

60

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

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

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

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

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

4 ответа

80

Сначала вам нужно немного узнать о том, как работает решение имен в 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-сервера DNS для использования. NetworkManager запускает экземпляр сервера пересылки, который прослушивает локально в 127.0.1.1. Этот адрес, 127.0.1.1, отправляется в resolvconf, который ставит nameserver 127.0.1.1 в /etc/resolv.conf . NetworkManager также предоставляет (удаленный) IP-адрес DNS-сервера 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 31.10.2013 в 10:45
источник
47

Я сделал предложенное изменение по ссылке ниже (отключив dnsmasq). Теперь все отлично работает! Ссылка

Откройте файл /etc/NetworkManager/NetworkManager.conf .

sudo gedit /etc/NetworkManager/NetworkManager.conf

Вывод строки комментария:

#dnsmasq deactivated
#dns=dnsmasq
    
ответ дан Richard Lindstedt 10.03.2014 в 19:37
19

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

EDIT: Я только что нашел ответ, и он находится на этой самой странице - извините за мой миопию. Я опубликовал свои выводы ниже, раскрыв правильный ответ Ричарда Линдштедта, найденный на этой странице. Я оставил свое раннее урчание для небольшого контекста. Пожалуйста, воздержитесь от ответа Ричарда, он этого заслуживает.

It's actually really easy.

just open your interfaces conf file --> 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, КОТОРЫЙ Я НЕ ХОЧУ
  • Я хочу использовать 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 все еще ожидает, что он будет.

    
ответ дан Henrique 21.11.2014 в 19:01
7

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

просто откройте интерфейс 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», и вам будет хорошо!

    
ответ дан sprut 06.03.2014 в 19:36