Удаляется файл resolv conf
I need help figuring out why my resolv.conf keeps changing to this, causing me to not be able to access the outside internet and only the local network:
I thought I fixed it by getting rid of the loopback interface and adding in the eth0 interface in /etc/network/interfaces with the instructions on jontsai's posterous blog.
I've tried things like doing:
And then things would work temporarily, and eventually the nameserver in resolv.conf would get reverted again.
P.S. I also posted this on ubuntuforums.
So I am trying this:
while true; do echo listening; lsof | grep /etc/resolv.conf; echo sleeping; sleep 1; done
Adding output of files:
No such file as /etc/NetworkManager/NetworkManager.conf
I suspect either a Network Manager bug, or more likely a misconfiguration. What version of Ubuntu are you running? Do you have the resolvconf package installed? Post the contents of /etc/network/interfaces , /etc/NetworkManager/NetworkManager.conf and /etc/NetworkManager/system-connections/* .
I'm running 10.04, no resolvconf package. At some point, my DSL modem was going bad (behind router) while my local network was fine, so I might have tried installing nscd or dnsmasq --they're uninstalled now, but it might have left some artifacts that are interfering?
Okay, I just rebooted my computer for the first time in 3 weeks, and I think the problem went away. o_O
This whole discussion is of diminished relevance since Ubuntu 12.04 which introduced resolvconf in the base system, fundamentally changing the way resolv.conf is handled.
14 Answers 14
You can make static additions to /etc/resolv.conf . Those additions could override the things that are being automatically added.
First, install the resolvconf package.
Then, press Alt+F2 and run gksudo nautilus . Open /etc/resolvconf/resolv.conf.d/head if you want to add to the start of the file; open /etc/resolvconf/resolv.conf.d/tail if you want to add to the end. Make your changes, save/close the files, and then run sudo resolvconf -u to apply the changes.
(Sorry that I don't remember if the settings at the start or end of the file have the highest priority.)
My network manager changes would be reverted on connecting to any VPN. This allowed me to keep 8.8.8.8 in the resolver list irrespective of which network I connected to.
(This answer contains ways to investigate what's going on. I may be able to give an actual solution if you use these methods to gather and provide more information.)
A possible trigger for the seemingly spontaneous updates to /etc/resolv.conf is when your DHCP lease is renewed. Check how long you get DHCP leases for (this should appear in the system logs, I think in /var/log/syslog ).
You can use auditd to find out what modifies the file. Start the daemon ( sudo service auditd start ) and tell it to watch for modifications to that file:
Audit logs are in /var/log/audit/audit.log . You'll see the time the file was modified and the name of the program that modified it.
If you have the resolvconf package installed, Network Manager may be stepping on its toes. Try bringing all network interfaces down, then stop Network Manager ( sudo service network-manager stop ), then restart it.
I believe you are right about DHCP releases. You can change the DHCP settings in the network manager as follows: Run nm-connection-editor in your terminal. Select your interface and hit edit. Under IPv4 settings there should be a method called only DHCP adresses (or something similar). If I'm not mistaken this will allow you to obtain IP adresses through DHCP but not nameservers (you can specify them in the fields below).
I set my router to map MAC address to static IPs, so the DNS lease is for a long time. The auditctl line doesn't work for me, and I believe that the service name for Network Manager is network-manager (includes the hyphen). I didn't have a resolvconf package installed, but I had stuff inside the /etc/resolvconf/ folder, and when I compared it to another Ubuntu machine, it didn't have it, so I installed and uninstalled the package, and manually removed that folder. /etc/resolv.conf just got rewritten again, so I think getting auditctl to work would be very helpful.
@jontsai The presence of /etc/resolvconf is normal even if you don't have the resolvconf package, some packages drop hooks in there, and these hooks are only used if resolvconf is installed. I've fixed the auditctl line, in case the problem appears again.
I liked the idea of user auditd to find out what was editing the file, but it looks like it get started after the file is already modified.
I had the exact same problem - resolv.conf would be rewritten every time the server was rebooted.
It was caused by DHCP. To set resolv.conf to what I want it to be, I edited /etc/dhcp/dhclient.conf and added the following:
You can actually control quite a bit about your resolv.conf file by making changes to this.
This would be the cleanest solution but for some reason it stopped working on my systems a few years back. I've been stuck with disabling resolvconf script or chattr +i /etc/resolv.conf ever since.
Open up a terminal and type
the +i takes care that the file wont be reseted on a boot even by root.
To undo the above
this did not work for me. Restarting network manager still overwrites /etc/resolv.conf with the DHCP nameservers.
Another option that I've had some luck with involves using resolvconf .
Add any entries to this file:
And they will be added to the /etc/resolv.conf .
I disable the update of resolv.conf by creating a file called disable_make_resolv_conf in /etc/dhcp3/dhclient-enter-hooks.d
It replaces the standard function by the same name that's responsible for the resolv.conf refresh.
Careful. I thought this was the most elegant solution for me, but it ended up bringing down the entire GCP node because networking couldn't start. I had to dismount the disk, mount to another node, remove the change, and remount.
Late at this but I will post my case as it was different from all of the above.
In my case, /etc/resolv.conf is a symlink to /var/run/NetworkManager/resolv.conf , and for some reason cat /etc/resolv.conf gives me error no such file or directory (maybe because it's empty?)
If I open it with vi and add nameserver x.x.x.x it works, but is cleared on reboot.
I tried to edit /etc/network/interfaces and add dns-nameservers x.x.x.x , changed /etc/dhcp/dhclient.conf and removed under request domain-name-servers , also edited prepend domain-name-servers x.x.x.x .
Resolvconf binary is not installed, NetworkManager.conf didn't have anything relevant. But everytime I restarted the machine, there was no domain server.
I'm not sure what the reason is but it seems to have to do with the fact that this is a VBox machine, started by GNS3 and because of that inside VBox setting, I have to leave it with no interface created. Apparently GNS3 creates a "UDP interface" on the fly when I start the machine, provided that I start it from GNS3.
So, to save me from searching endlessly, I just added echo nameserver x.x.x.x> /etc/resolv.conf to /etc/profile , problem solved (not solved, but worked around hehe). But it could be interesting to know what goes on with that scenario if anyone ran into it.
Бился в попытках понять, почему в свежепоставленном убунту через 30 секунд после установки связи, переставали грузиться сайты. Обнаружил, что правильный dns прописан в /etc/ppp/resolv.conf а в /etc/resolv.conf прописан локальный хост.
Пробовал прописывать правильные значения. но каждые 30 секунд файл затирался!
В процессах обнаружил dhclient почитал к нему маны и посмотрел конфиг почти уверен что это он.
Но не подскажете, как запретить ему затирать мой конфиг? Не пойму никак.
Отключить получение адреса по dhcp?
дык в этом-то и проблема . что-то никак не выкопаю, как это сделать .
что за дистр?
нужно отключить эту фичу просто
для шапкоподобных:
PEERDNS="no"
в /etc/sysconfig/network
для зузи:
DHCLIENT_MODIFY_RESOLV_CONF="no"
в /etc/sysconfig/network/dhcp.
MODIFY_RESOLV_CONF_DYNAMICALLY="no"
в /etc/sysconfig/network/config.
Ubuntu 7.04 единственная созвучная опция, которую найти удалось - это usepeerdns в /etc/ppp/peers/dsl-provider но если её закомментирую, не помогает . да и не должно по логике, этот-то файл при подключении только юзается, а resolv.conf и после отключения перезатирается в /etc ни одного файла содержащего строчку RESOLV_CONF не нашёл.
отключи NetworkManager - /etc/init.d/NetworkManager stop
chattr +i /etc/resolv.conf =))
Что говорит "aptitude search resolvconf"?
p resolvconf - nameserver information handler
остановка и удаление всего связанного с NetworkManager не помогло
сейчас просто прошёлся по списку в ps -ax -убивал очередной "подозрительный" процесс, восстанавливал руками resolv.conf и ждал что с ним будет .
высказанные в первом посте подозрения оправдались - всё заработало после прибивания dhclient3
ожидал что после этого не смогу законнектится и динамический IP получить, ан нет, вроде пока тьфу*тьфу*тьфу, живу.
т.е. можно совсем его отключить чтоли? в конфигах dhclient3 покопался, но что там можно сделать, пока не осознал
Если соединение только ppp (например, ADSL), то dhclient не нужен, его можно снести. Если локалка с динамическим получением адреса, а поверх нее VPN в интернет, то лучше поставить resolvconf --- он предназначен для разруливания DNS'ов, получаемых из разных источников.
Если dhcp нужен, то смотри в /etc/dhcp3/dhclient.conf
можно добавить строку
prepend domain-name-servers xxx.xxx.xxx.xxx, yyy.yyy.yyy.yyy;
Иначе, отключить.
ясно, спасибо, снесу тогда!
правда работать тоже удалось заставить, просто в dhclient.conf добавил строчку:
Это вывод ifcfg-enp0s31f6 так что, конечно же, это DHCP:
С другой стороны, я не знаю, делает ли Network Manager что-то еще вокруг этого.
Обновление: содержимое NetworkManager.conf (я удалил комментарии, поскольку они бесполезны)
Могу ли я помочь с этим? Это означает, что нужно настроить файл один раз и один раз при каждой перезагрузке.
ОБНОВЛЕНИЕ 2
Через месяц у меня все еще такая же проблема, когда файл удаляется «чем-то».
Вот шаги, которые я сделал, чтобы сделать новый тест:
После перезапуска ПК откройте терминал и, конечно же, попробуйте выполнить ping серверов Google без успеха:
Проверьте конфигурацию сети, все было в порядке:
Перезапустите службу network :
Попробуйте снова ping серверы Google, без каких-либо успехов:
Проверьте файл /etc/resolv.conf :
Файл больше не существует – и это проблема, что-то удаляет его при каждой перезагрузке
Создайте файл и добавьте содержимое DNS:
Ping серверы Google на этот раз с успехом:
Любые идеи в том, что здесь может происходить?
По моему опыту, /etc/resolv.conf восстанавливается при загрузке, поэтому любые ручные изменения в нем сбрасываются.
Чтобы обойти это, вы можете создать /etc/resolv.conf.head (или .tail зависимости от того, к какому концу файла, который вы хотите добавить), и вставить .tail вам настройки (как правило, изменения в nameserver ). Затем содержимое этого файла автоматически добавляется, когда /etc/resolv.conf генерируется NetworkManager (или какая бы служба не отвечала за файл в вашей системе).
Возможно, NetworkManager настраивает resolve.conf . если вы этого не хотите, измените настройку rc-manager в NetworkManager.conf. См. man NetworkManager.conf .
Чтобы предотвратить обновление resolv.conf во время загрузки, вы должны внести следующие изменения:
Изменить PEERDNS=yes для PEERDNS=no
PEERDNS=no
Это предотвратит обновление сетевой службы /etc/resolv.conf серверами DNS, полученными от DHCP-сервера.
упомянутый на @Ipor Sircer comment's
Я думаю, вы были на правильном пути.
Теперь он работает для меня, но я не делал:
После того, как я перезапустил диспетчер сети, он автоматически создал resolv:
Я нуждаюсь в помощи, выясняя почему мой resolv.conf продолжает изменяться на это, заставляя меня не смочь получить доступ к внешнему Интернету и только локальной сети:
Я думал, что зафиксировал его путем избавления от петлевого интерфейса и добавления в интерфейсе eth0 в /etc/network/interfaces с инструкциями относительно блога posterous jontsai.
Я попробовал вещи как выполнение:
И затем вещи работали бы временно, и в конечном счете сервер имен в resolv.conf вернуться снова.
P.S. Я также отправил это на ubuntuforums.
Таким образом, я пробую это:
while true; do echo listening; lsof | grep /etc/resolv.conf; echo sleeping; sleep 1; done
Добавление вывода файлов:
Никакой такой файл как /etc/NetworkManager/NetworkManager.conf
Вы можете сделать статические дополнения к /etc/resolv.conf . Эти дополнения могут переопределять автоматически добавляемые вещи.
Сначала установите пакет resolvconf .
Затем нажмите Alt+F2 и запустите gksudo nautilus . Откройте /etc/resolvconf/resolv.conf.d/head , если хотите добавить в начало файла; откройте /etc/resolvconf/resolv.conf.d/tail , если хотите добавить в конец. Внесите изменения, сохраните/закройте файлы, а затем запустите sudo resolvconf -u , чтобы применить изменения.
(К сожалению, я не помню, имеют ли настройки в начале или в конце файла наивысший приоритет.)
(В этом ответе содержатся способы исследования происходящего. Я могу дать реальное решение, если вы используете эти методы для сбора и предоставления дополнительной информации.)
Возможным триггером для, казалось бы, спонтанных обновлений /etc/resolv.conf является момент, когда DHCP-аренда обновляется. Проверьте, на какой период времени вы получаете DHCP-аренду (это должно появиться в системных журналах, я думаю, в /var/log/syslog ).
Вы можете использовать auditd для того, чтобы узнать, что изменяет файл. Запустите демона ( sudo service auditd start ) и скажите ему, чтобы он следил за изменениями в этом файле:
Audit logs находятся в /var/log/audit/audit.log . Вы увидите время, когда файл был изменен, и имя программы, которая его модифицировала.
Если у вас установлен пакет resolvconf , Network Manager может наступать на ноги. Попробуйте выключить все сетевые интерфейсы, затем остановить сетевой менеджер ( sudo service network-manager stop ), затем перезапустить его.
Я отключаю обновление разрешения -to . conf , создав файл с именем disable_make_resolv_conf в /etc/dhcp3/dhclient-enter-hooks.d
Он заменяет стандартную функцию тем же именем, которое отвечает за обновление resolv.conf .
У меня была точно такая же проблема - resolv.conf переписывался каждый раз при перезагрузке сервера.
Это было вызвано DHCP. Чтобы установить resolv.conf таким, каким я хочу его видеть, я отредактировал /etc/dhcp/dhclient.conf и добавил следующее:
Фактически, вы можете немного контролировать свой файл resolv.conf. внесением изменений в это.
Надеюсь, это поможет.
Откройте терминал и введите
+ i позаботится о том, чтобы файл не сбрасывался при загрузке даже с правами root.
Для отмены вышеуказанного
Другой вариант, который мне повезло, связан с использованием resolvconf .
Добавьте любые записи в этот файл:
И они будут добавлены в /etc/resolv.conf .
Поздно, но я опубликую свой случай, поскольку он отличался от всего вышеперечисленного.
В моем случае /etc/resolv.conf является символической ссылкой на /var/run/NetworkManager/resolv.conf и по какой-то причине cat / etc /resolv.conf выдает ошибку: нет такого файла или каталога (может быть, потому что он пуст?)
Если я открою его с помощью vi и добавлю сервер имен xxxx , он будет работать, но очищается при перезагрузке.
Я попытался отредактировать / etc / network / interfaces и добавить dns-nameservers xxxx , изменить /etc/dhcp/dhclient.conf и удалить в запрос серверы доменных имен , также отредактированный , добавление серверов доменных имен xxxx [1170 403].
Двоичный файл Resolvconf не установлен, NetworkManager.conf не содержит ничего важного. Но каждый раз, когда я перезагружал машину, сервер домена отсутствовал.
Я не уверен, в чем причина, но похоже, что это связано с тем, что это машина VBox, запущенная GNS3 и из-за этого внутри Настройка VBox, я должен оставить его без создания интерфейса. Очевидно, GNS3 создает «интерфейс UDP» на лету, когда я запускаю машину, при условии, что я запускаю его из GNS3.
Итак, чтобы избавить меня от бесконечного поиска,Я только что добавил сервер имен echo x.x.x.x> /etc/resolv.conf в / etc / profile , проблема решена (не решена, но обошлось, хе-хе). Но было бы интересно узнать, что происходит с этим сценарием, если бы кто-нибудь с ним столкнулся.
Мне дали файлы для мини linux , который загружается прямо в firefox . Это работает для всего, что он должен делать, только то, что я не получаю подключение к интернету.
У нас есть 3 DNS-сервера в сети, которые все работают. Я тоже могу пинговать их. Но при попытке ping google.de или wget google.de я получаю bad address ошибку.
nslookup google.de работает по какой-то причине.
Я обнаружил проблему resolv.conf в загруженной системе, не имеющей того содержимого, resolv.conf которое я положил в .iso файл.
Я попытался понять все факторы, которые входят в создание и изменение resolv.conf . Я не совсем уверен, что все понял, но я определенно не нашел там своего решения.
Так что в качестве последней попытки я попытался сделать resolv.conf файл неизменным, используя
Когда я перестраивался и загружался снова, к моему удивлению, мой файл был переименован resolv.conf~ и на его месте был тот же стандартный файл, который преследовал меня.
Содержимое файла заставляет меня поверить, что оно получает информацию из самой сети. При запуске .iso в Virtualbox без доступа к Интернету мой файл сохраняется как есть.
Я попытался изменить, /etc/dhcp/dhclient.conf чтобы не получить информацию из сети, удалив domain-name-server и domain-name-search из request части файла.
К сожалению, не сработало.
У меня не установлен NetworkManager. ISO основан на Ubuntu 14.04.
Вероятно, отсутствует жизненно важная информация. Я рад предоставить это.
Я думаю, что нашел файл, который очищает resolv.conf .
Это кажется /usr/share/udhcpc/default.script
Это часть udhcpc программы. Крошечный клиент DHCP, который является частью busybox
Будем расследовать дальше.
ОБНОВЛЕНИЕ 2 И РЕШЕНИЕ:
Я изменил вопрос, чтобы отразить, что на самом деле нужно знать, чтобы решить мою проблему, так что было бы легче найти людей с такой же проблемой, чтобы я мог принять ответ.
Спасибо за помощь в выяснении вещей.
Установка неизменяемого флага на resolv.conf не работает, как вы ожидали, поскольку файл не был изменен. Запись каталога в / etc была изменена, когда файл был переименован. Вы должны были бы установить / etc, чтобы быть неизменным - то, что вы действительно не хотите делать.
1) Вам не следует обновлять свой resolv.conf вручную, потому что все изменения будут перезаписаны данными, которые предоставляет ваш локальный DHCP-сервер. Если вы хотите, чтобы он был статическим, запустите sudo dpkg-reconfigure resolvconf и ответьте «нет» динамическим обновлениям. Если вы хотите добавить новые записи туда, отредактировать /etc/resolvconf/resolv.conf.d/base и запустить sudo resolvconf -u , он добавит ваши записи и записи DHCP-сервера.
2) Попробуйте отредактировать ваш / etc / network / interfaces и добавьте туда свои записи, например
а затем перезапустите /etc/init.d/networking restart или sudo ifdown -a и sudo ifup -a
3) Ваша система использует udhcp, которая является очень маленькой клиентской программой DHCP. Клиент udhcp согласовывает аренду с сервером DHCP и уведомляет набор сценариев, когда аренда получена или потеряна. Вы можете прочитать о его использовании здесь или просто отредактировать этот скрипт (как вы сделали).
Я добавил записи в /etc/resolvconf/resolv.conf.d/base и побежал resolvconf -u . К сожалению, это не сработало.
Я бегал dpkg-reconfigure resolvconf . Записи не были там. И у меня есть записи с обоими nameserver ip и search domain .
Нет, запуск dpkg-reconfigure resolvconf не добавит записи, но вы можете отключить автоматические обновления. Если вы отключите обновления, вы можете редактировать resolv.conf вручную, и он не должен быть перезаписан.
Мой плохой, так неуклюже сформулировать это, я отвечал на ваш комментарий предложение за предложением. После запуска resolvconf -u записи не были добавлены.
Я столкнулся с этим тоже. Комментирование domain-name-server не исправило это для меня также.
Кроме того, я не использую resolvconf , просто ясно /etc/resolv.conf .
Я не пытался использовать chattr +i для блокировки, resolv.conf потому что это кажется слишком хакерским. Кроме того, я хочу, чтобы Puppet мог изменять resolv.conf при необходимости.
Лучшее решение я нашел переопределяет поведение по умолчанию , dhclient используя его документированные крючками.
Создайте новый файл /etc/dhcp/dhclient-enter-hooks.d/nodnsupdate со следующим содержимым:
Затем сделайте файл исполняемым:
Теперь, когда dhclient запускается - либо при перезагрузке, либо когда вы запускаете вручную sudo ifdown -a ; sudo ifup -a - он загружает этот скрипт nodnsupdate . Этот скрипт переопределяет внутреннюю функцию make_resolv_conf() , которая обычно перезаписывается, resolv.conf и ничего не делает.
Это работало для меня на Ubuntu 12.04.
Ubuntu 16.04 Если сетевые интерфейсы для вашего экземпляра сервера управляются DHCP, программа dhclient перезапишет ваш /etc/resolv.conf файл при каждом перезапуске сетевой службы.
Вы можете решить проблему путем редактирования /etc/dhcp/dhclient.conf файла и добавления «SUPERSEDE» заявления для доменного имени , домен-поиска и имя домена-серверов следующим образом :
Обратите внимание, что каждая строка заканчивается точкой с запятой, а имя домена заключено в двойные кавычки.
К сожалению, это не сработало в Ubuntu 18.04. После перезагрузки /etc/resolv.conf был перезаписан с 127.0.0.53.
Читайте также: