resolv.conf продолжает сбрасываться чем-то


29

Мне нужна помощь, чтобы выяснить, почему мои действия resolv.confменяются на это, из-за чего я не могу получить доступ к внешнему интернету и только к локальной сети:

$ cat /etc/resolv.conf
nameserver 192.168.16.1
domain localdomain
search localdomain

Я решил исправить это, избавившись от интерфейса обратной связи и добавив интерфейс eth0 в /etc/network/interfacesинструкции к постерному блогу jontsai .

Я пробовал такие вещи, как делать:

$ sudo ifconfig eth0 down
$ sudo ifconfig eth0 up
$ sudo /etc/init.d/networking restart
$ sudo dhclient

И тогда все будет работать временно, и в конце концов сервер имен в resolv.conf снова вернется.

PS Я также разместил это на Ubuntuforums .


Редактировать: Есть еще одна программа, кроме NetworkManager, которая пишет в нее resolv.conf, и я знаю это, потому что, когда я обновляю NetworkManager, resolv.confгенерируемый файл имеет комментарий # Generated by NetworkManager, а версия, на которую он продолжает изменяться, - нет.

Итак, я пытаюсь это:

while true; do echo listening; lsof | grep /etc/resolv.conf; echo sleeping; sleep 1; done


Изменить 2:

Добавление вывода файлов:

$ cat /etc/network/interfaces 
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

Нет такого файла как /etc/NetworkManager/NetworkManager.conf

$ sudo cat /etc/NetworkManager/system-connections/Auto\ Ethernet 

[connection]
id=Auto Ethernet
uuid=#######omitted#######
type=802-3-ethernet
autoconnect=true
timestamp=1314377063

[ipv4]
method=auto
ignore-auto-routes=false
ignore-auto-dns=false
dhcp-send-hostname=false
never-default=false

[802-3-ethernet]
speed=0
duplex=full
auto-negotiate=true
mtu=0

[ipv6]
method=ignore
ignore-auto-routes=false
ignore-auto-dns=false
never-default=false

Я подозреваю, что либо ошибка диспетчера сети, либо, скорее, неправильная конфигурация. Какую версию Ubuntu вы используете? У вас установлен resolvconfпакет? Опубликовать содержимое /etc/network/interfaces, /etc/NetworkManager/NetworkManager.confи /etc/NetworkManager/system-connections/*.
Жиль "ТАК ... перестать быть злым"

Я бегу 10.04, нет resolvconfпакета. В какой-то момент мой DSL модем вышел из строя (за маршрутизатором), в то время как моя локальная сеть работала нормально, поэтому я, возможно, попытался установить nscdили - dnsmasqони сейчас удалены, но, возможно, остались некоторые мешающие артефакты?
Джонцай

Хорошо, я только что перезагрузил свой компьютер впервые за 3 недели, и я думаю, что проблема ушла. o_O
Джонцай

Не уверен, но я думаю, что была какая-то проблема с vmnet1vmnet8
включенным

1
Вся эта дискуссия приобретает все меньшее значение с тех пор, как в Ubuntu 12.04 была введена resolvconf в базовой системе, фундаментально изменив способ обработки resolv.conf.
JDthood

Ответы:


13

Вы можете сделать статические дополнения к /etc/resolv.conf . Эти дополнения могут переопределить вещи, которые добавляются автоматически.

Сначала установите resolvconf пакет.

Затем нажмите Alt + F2 и запустите gksudo nautilus. Откройте, /etc/resolvconf/resolv.conf.d/headесли вы хотите добавить в начало файла; откройте, /etc/resolvconf/resolv.conf.d/tailесли хотите добавить в конец. Внесите изменения, сохраните / закройте файлы, а затем запуститеsudo resolvconf -u чтобы применить изменения.

(Извините, что я не помню, имеют ли настройки в начале или конце файла самый высокий приоритет.)


Изменения моего менеджера сети будут отменены при подключении к любой VPN. Это позволило мне сохранить список разрешений 8.8.8.8 независимо от того, к какой сети я подключался.
Стивен П

8

У меня была точно такая же проблема - resolv.conf будет перезаписываться каждый раз при перезагрузке сервера.

Это было вызвано DHCP. Чтобы установить resolv.conf на то, что я хочу, я отредактировал /etc/dhcp/dhclient.confи добавил следующее:

supersede domain-name "my.domain.com";
prepend domain-search "my.domain.com";

На самом деле вы можете контролировать свой файл resolv.conf, внеся в него изменения.

Надеюсь, это поможет.


2
Это было бы самое чистое решение, но по некоторым причинам оно перестало работать на моих системах несколько лет назад. С тех пор я застрял с отключением скрипта resolvconf или chattr + i /etc/resolv.conf.
Троник

7

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

Возможный триггер для, казалось бы, спонтанных обновлений /etc/resolv.conf- это когда ваша аренда DHCP возобновляется. Проверьте, как долго вы получаете аренду DHCP (это должно появиться в системных журналах, я думаю, в /var/log/syslog).

Вы можете использовать audd, Установить Auditd чтобы узнать, что изменяет файл. Запустите daemon ( sudo service auditd start) и скажите ему, чтобы он следил за изменениями в этом файле:

sudo auditctl -w /etc/resolv.conf -p w

Журналы аудита находятся в /var/log/audit/audit.log. Вы увидите время изменения файла и название программы, которая его изменила.

Если у вас установлен resolvconfпакет, Network Manager может наступить на него. Попробуйте отключить все сетевые интерфейсы, затем остановите Network Manager ( sudo service network-manager stop) и перезапустите его.


1
Я верю, что вы правы насчет выпусков DHCP. Вы можете изменить настройки DHCP в диспетчере сети следующим образом: Запустить nm-connection-editorна своем терминале. Выберите интерфейс и нажмите «Изменить». В настройках IPv4 должен быть метод, называемый только адресами DHCP (или что-то подобное). Если я не ошибаюсь, это позволит вам получать IP-адреса через DHCP, но не на серверах имен (вы можете указать их в полях ниже).
Кристиан Скьёдт

Я настроил свой маршрутизатор для сопоставления MAC-адреса со статическими IP-адресами, поэтому аренда DNS на длительное время. auditctlЛиния не работает для меня, и я считаю , что имя службы для Network Manager является network-manager(включает в себя дефис). У меня не было установленного resolvconfпакета, но у меня было что-то внутри /etc/resolvconf/папки, и когда я сравнивал его с другим компьютером с Ubuntu, у него его не было, поэтому я установил и удалил пакет и вручную удалил эту папку. /etc/resolv.confтолько что переписали снова, так что я думаю, что начало auditctlработы было бы очень полезно.
Jontsai

@jontsai Присутствие /etc/resolvconfнормально, даже если у вас нет resolvconfпакета, некоторые пакеты сбрасывают туда хуки, и эти хуки используются только в том случае, если они resolvconfустановлены. Я исправил auditctlлинию, на случай, если проблема появится снова.
Жиль "ТАК - перестать быть злым"

Мне понравилась идея пользователя audd, чтобы выяснить, что редактировало файл, но похоже, что он запускается после того, как файл уже изменен.
Петр Санкаускас

4

Откройте терминал и введите

sudo chattr +i /etc/resolv.conf

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

Отменить вышеуказанное

sudo chattr -i /etc/resolv.conf

Для большего

man chattr

это не сработало для меня. Перезапуск сетевого менеджера все еще перезаписывает /etc/resolv.conf серверами имен DHCP.
Томми

работал для меня на виртуальной машине Debian 9, работающей внутри GCP. ура! Благодарность!
17

3

Еще один вариант, с которым мне посчастливилось использовать resolvconf.

Добавьте любые записи в этот файл:

/etc/resolvconf/resolv.conf.d/base

И они будут добавлены в /etc/resolv.conf.

Благодаря этой записи Ask Ubuntu: Как включить строки в resolv.conf, которые не будут потеряны при перезагрузке?


3

Я отключаю обновление resolv.conf, создавая файл с именем disable_make_resolv_confв/etc/dhcp3/dhclient-enter-hooks.d

#!/bin/sh
make_resolv_conf(){
}

Он заменяет стандартную функцию с тем же именем, которая отвечает за resolv.confобновление.


1

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

В моем случае, /etc/resolv.confэто символическая ссылка /var/run/NetworkManager/resolv.conf, и по какой-то причине cat /etc/resolv.confвыдает мне ошибку, нет такого файла или каталога (может быть, потому что он пуст?)

Если я открою его с помощью vi и добавлю, nameserver x.x.x.xон работает, но очищается при перезагрузке.

Я пытался редактировать /etc/network/interfacesи добавлять dns-nameservers x.x.x.x, изменял /etc/dhcp/dhclient.confи удалял под request domain-name-servers, тоже редактировал prepend domain-name-servers x.x.x.x.

Resolvconf бинарный не установлен, NetworkManager.confне имеет ничего релевантного. Но каждый раз, когда я перезагружал машину, не было сервера домена.

Я не уверен, в чем причина, но, похоже, это связано с тем фактом, что это машина VBox, запущенная GNS3, и из-за этого в настройках VBox я должен оставить ее без созданного интерфейса. Очевидно, GNS3 создает «интерфейс UDP» на лету, когда я запускаю машину, при условии, что я запускаю ее с GNS3.

Таким образом, чтобы спасти меня от поиска бесконечно, я просто добавил echo nameserver x.x.x.x> /etc/resolv.confк /etc/profile, проблема решена (не решена, но работал вокруг хе - хе). Но было бы интересно узнать, что происходит с этим сценарием, если кто-то столкнется с ним.


1

Если у вас есть файл /etc/NetworkManager/NetworkManager.conf

cat /etc/NetworkManager/NetworkManager.conf

вы можете настроить NetworkManager, чтобы он перестал сбрасывать resolv.conf с помощью

sudo sh -c 'echo "
[main]
dns=none
" >> /etc/NetworkManager/NetworkManager.conf'
cat /etc/NetworkManager/NetworkManager.conf

Теперь вручную измените ваш /etc/resolv.confи проверьте его постоянство с

sudo systemctl restart NetworkManager
# sudo service network-manager restart
cat /etc/resolv.conf

Источник: https://askubuntu.com/a/623956/452398


Спасибо, добавление dns = none исправляет проблему должным образом.
Шины

0

Просто сделайте записи в ваших файлах ifcfg-ethX примерно так

DNS1 = 192.168.xx

DNS2 = 192.168.xx

DOMAIN = yourdomain.com

затем сетевой менеджер опубликует ожидающие эти записи в файле resolv.conf после перезапуска служб или перезапуска вашего ящика.


0

На всякий случай, если кто-то попадет в тот же случай:

Я забыл установить dhcp на интерфейс внутри файла /etc/network/interfaces

Networkmanager изменит /etc/resolv.confответ от DHCP, который он получает.

НТН


0

Когда есть # Generated by NetworkManagerв/etc/resolv.conf

Редактировать конфигурацию Network Manager:

sudo vim /etc/NetworkManager/NetworkManager.conf

в [main]разделе добавить rc-manager=unmanaged:

[main]                                                                                                                                   
rc-manager=unmanaged

Зачем?

rc-manager- Установите режим управления resolv.conf. Значение по умолчанию зависит от параметров сборки NetworkManager, и эта версия NetworkManager была собрана с значением по умолчанию «symlink».

(...)

unmanaged: не трогай /etc/resolv.conf.

Ссылка на конфигурацию для получения дополнительной информации: https://developer.gnome.org/NetworkManager/stable/NetworkManager.conf.html

Затем отредактируйте ваш /etc/resolv.confи перезапустите Network Manager, чтобы увидеть, если он /etc/resolv.confостается нетронутым:

sudo systemctl restart NetworkManager

или

sudo service network-manager restart

чем:

cat /etc/resolv.conf

Если процедура завершилась неудачно и /etc/resolv.confбыла перезаписана при перезапуске Network Manager, попробуйте добавить dns=noneв [main]раздел конфигурации, как указано в https://askubuntu.com/a/1150326/364772.

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