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

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

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

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

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

  • Что мне добавить в resolv.conf, если что?
  • Как узнать, какие серверы имен запрашивает мой компьютер?
  • Где искать дальше, чтобы выяснить, почему серверы имен, полученные DHCP, не используются?
74
задан 25 February 2014 в 02:20

7 ответов

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

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

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

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

nmcli dev list iface eth0 | grep IP4.DNS

Update, вытекающую из комментариев:
Обратите внимание, что 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        
86
ответ дан 25 February 2014 в 02:20

Я внес изменение, предложенное по ссылке ниже (отключение 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
48
ответ дан 25 February 2014 в 02:20

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

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

Это действительно очень просто.

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

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

РЕШЕНИЕ

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

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

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

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

21
ответ дан 25 February 2014 в 02:20

Это действительно очень просто.

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

7
ответ дан 25 February 2014 в 02:20

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

Текущие области: нет Настройка DefaultRoute: нет Настройка LLMNR: да Настройка MulticastDNS: нет Настройка DNSOverTLS: нет Настройка DNSSEC: нет

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

nmcli connection edit enp4s0

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

описать connection.mdns

, поэтому установите connection.mdns reslove (или как хотите)

, затем сохранить постоянное уволиться теперь mdns должен быть в рабочем состоянии

2
ответ дан 5 January 2021 в 23:17

Выполните:

sudo systemd-resolve --flush-caches
0
ответ дан 5 January 2021 в 23:17

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

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

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

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

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

0
ответ дан 5 January 2021 в 23:17

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

Похожие вопросы: