nameserver 127.0.1.1 в resolv.conf не исчезнет!


60

Я прочитал, что я должен иметь nameserver 127.0.1.1в своем /etc/resolv.confфайле, только если у моей машины есть собственный DNS-сервер. Поскольку это не так, то это вызывает проблемы. Но независимо от того, что я делаю, я не могу избавиться от этого!

Вот что я сделал до сих пор:

  1. Добавление nameserver 192.168.1.3в /etc/resolvconf/resolv.conf.d/baseфайл. (192.168.1.3 - это DNS нашей сети).
  2. Продолжительность: sudo resolvconf --enable-updates.
  3. Продолжительность: sudo resolvconf -u.
  4. Запуск: sudo service network-manager restart(просто чтобы убедиться).

Тем не менее , когда я открываю /etc/resolv.confфайл , он говорит: nameserver 127.0.1.1! У кого-нибудь есть идеи, что не так?

Обратите внимание, что это на самом деле 127.0.1.1! И я понятия не имею, почему это не так 127.0.0.1!

Даже когда я обновляю /etc/resolv.confвручную и заменяю его на что-либо еще, sudo resolvconf -uон вернется к 127.0.1.1! Откуда этот адрес?

Ответы:


100

NetworkManager это программа , которая ( с помощью утилиты Resolvconf) вставляет адрес 127.0.1.1в resolv.conf. NM вставляет этот адрес только в том случае, если он настроен на запуск экземпляра программы dnsmasq, служащего в качестве локального сервера пересылки имен. Этот экземпляр dnsmasq прослушивает запросы по адресу 127.0.1.1.

Если вы не хотите использовать локальный сервер переадресации имен, настройте NetworkManager, чтобы он не запускал экземпляр dnsmasq и не вставлял этот адрес. В /etc/NetworkManager/NetworkManager.confкомментируем строчкуdns=dnsmasq

sudo nano /etc/NetworkManager/NetworkManager.conf

[main]
plugins=ifupdown,keyfile,ofono
#dns=dnsmasq

и перезапустите службу NetworkManager.

sudo service network-manager restart

В этом режиме NetworkManager обновляет /etc/resolv.conf(все еще через resolvconf), чтобы включить адреса серверов имен, которые NetworkManager имеет для активных соединений.

Если вы хотите отключить механизм resolvconf для обновления resolv.conf и просто использовать статический файл resolv.conf, выполните следующие действия.

sudo rm -f /etc/resolv.conf  # Delete the symbolic link
sudo nano /etc/resolv.conf   # Create static file

# Content of static resolv.conf
nameserver 8.8.4.4
nameserver 8.8.8.8

У меня есть 3 DNS, и запрос никогда не достигает 3-го, если я отключаю dnsmasq, любой совет? Я хочу запросить Google, а затем запросить интрасеть DNS. Спасибо
JorgeeFG

3
restart network-managerне работает на Xenial, так как он использует systemd вместо upstart. попробуйsystemctl restart network-manager
Матиас Вейлер

Мой вопрос, программа dnsmasq спросит, какой DNS-сервер? он запросит у DNS-сервера DHCP запрос IP-адреса хоста?
Часы ZHONG

11

Возможно, resolvconf настроен неправильно. Это особенно вероятно, если вы играли с его конфигурационными файлами, не понимая, как работают resolvconf и NetworkManager.

Для получения дополнительной информации, пожалуйста, прочитайте документацию resolvconf и сообщение в блоге Стефана Грабера.

https://www.stgraber.org/2012/02/24/dns-in-ubuntu-12-04/

Во-первых, вы должны знать, что как Ubuntu Desktop, так и Ubuntu Server по умолчанию имеют и активируют resolvconf. Resolvconf предоставляет платформу для динамического обновления файла /etc/resolv.conf упорядоченным и обратимым способом.

Во-вторых, вы должны знать, что по умолчанию в Ubuntu Desktop установлен и активирован NetworkManager. По умолчанию NetworkManager запускает экземпляр dnsmasq в качестве локального сервера пересылки имен. Этот контролируемый NetworkManager экземпляр dnsmasq прослушивает запросы в 127.0.1.1. Когда NetworkManager запускает экземпляр dnsmasq, он говорит resolvconf вставить адрес 127.0.1.1в resolv.conf. Как упоминалось в другом ответе, если вы настроите NetworkManager не запускать экземпляр сервера локальной пересылки имен, то он не запустит сервер имен локальной пересылки и не скажет resolvconf вставить адрес 127.0.1.1в resolv.conf.

Эта конфигурация по умолчанию работает правильно, поэтому, если ваша ситуация не является особенной, вы должны восстановить конфигурацию по умолчанию.

Чтобы восстановить конфигурацию по умолчанию, проследите, чтобы

  • /etc/resolvconf/resolv.conf.d/head содержит только текст заголовка resolvconf, состоящий из двух строк, начинающихся с #символа
  • /etc/resolvconf/resolv.conf.d/base - пустой файл
  • /etc/resolvconf/resolv.conf.d/tail - это пустой файл
  • /etc/resolv.conf - это символическая ссылка с контентом ../run/resolvconf/resolv.conf

Для этого выполните следующие команды.

sudo su
dpkg-reconfigure resolvconf   # And answer `Yes` to agree to dynamic updates
cd /etc/resolvconf/resolv.conf.d
echo '# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN' > head
rm -f base tail original
:> base
:> tail

Исходная конфигурация NetworkManager должна иметь

[main]
...
dns=dnsmasq
...

в /etc/NetworkManager/NetworkManager.conf. Это разумный выбор, чтобы отключить управляемый NetworkManager локальный сервер пересылки имен, закомментировав dns=dnsmasqстроку.

[main]
...
#dns=dnsmasq
...

После всего этого рекомендуется перезагрузить компьютер, чтобы очистить устаревшие записи информации сервера имен.

sudo reboot

1

В моем случае dns=dnsmasqв /etc/NetworkManager/NetworkManager.confфайле не было ни одной строки, и /etc/resolv.confон все еще был перезаписан сетевым менеджером, чтобы иметь толькоnameserver 127.0.1.1

Исправление состояло в том, чтобы восстановить символическую ссылку для правильного обновления:

sudo ln -sf /run/resolvconf/resolv.conf /etc/resolv.conf
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.