Что перезаписывает /etc/resolv.conf при каждой загрузке?


23

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

У нас есть 3 DNS-сервера в сети, которые все работают. Я тоже могу пинговать их. Но при попытке ping google.deили wget google.deя получаю bad addressошибку.

nslookup google.de работает по какой-то причине.

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

Я попытался понять все факторы, которые входят в создание и изменение resolv.conf. Я не совсем уверен, что все понял, но я определенно не нашел там своего решения.

Так что в качестве последней попытки я попытался сделать resolv.confфайл неизменным, используя

:~# chattr +i /etc/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

#!/bin/sh

# udhcpc script edited by Tim Riker <Tim@Rikers.org>

[ -z "$1" ] && echo "Error: should be called from udhcpc" && exit 1

RESOLV_CONF="/etc/resolv.conf"
[ - n "$broadcast" ] && BROADCAST="broadcast $broadcast"
[ -n "$subnet" ] && NETMASK="netmask $subnet"

case "$1" in
    deconfig)
        /bin/ifconfig $interface 0.0.0.0
        for i in /etc/ipdown.d/*; do
            [ -e $i ] && . $i $interface
        done
        ;;

    renew|bound)
        /bin/ifconfig $interface $ip $BROADCAST $NETMASK

        if [ -n "$router" ] ; then
            echo "deleting routers"
            while route del default gw 0.0.0.0 dev $interface ; do
                :
            done

            metric=0
            for i in $router ; do
                route add default gw $i dev $interface metric $((metric++))
            done
        fi

        echo -n > $RESOLV_CONF # Start ----------------  
        [ -n "$domain" ] && echo search $domain >> $RESOLV_CONF
        for i in $dns ; do
            echo adding dns $i
            echo nameserver $i >> $RESOLV_CONF
        done
        for i in /etc/ipup.d/*; do
            [ -e $i ] && . $i $interface $ip $dns 
        done # End ------------------
        ;;
esac

exit 0

Это часть udhcpcпрограммы. Крошечный клиент DHCP, который является частьюbusybox

Будем расследовать дальше.


ОБНОВЛЕНИЕ 2 И РЕШЕНИЕ:

Я закомментировал часть (#Start to #End), которая, казалось бы, перезаписывает /etc/resolv.confфайл и достаточно точно. Это был виновник. Так что неясный сценарий вызвал все эти неприятности.

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

Спасибо за помощь в выяснении вещей.


1
Установка неизменяемого флага на resolv.conf не работает, как вы ожидали, поскольку файл не был изменен. Запись каталога в / etc была изменена, когда файл был переименован. Вы должны были бы установить / etc, чтобы быть неизменным - то, что вы действительно не хотите делать.
doneal24

@ Дуго'Нил, я вижу. Спасибо за внимание.
Minix

Ответы:


24

1) Вам не следует обновлять свой resolv.conf вручную, потому что все изменения будут перезаписаны данными, которые предоставляет ваш локальный DHCP-сервер. Если вы хотите, чтобы он был статическим, запустите sudo dpkg-reconfigure resolvconfи ответьте «нет» динамическим обновлениям. Если вы хотите добавить новые записи туда, отредактировать /etc/resolvconf/resolv.conf.d/baseи запустить sudo resolvconf -u, он добавит ваши записи и записи DHCP-сервера.

2) Попробуйте отредактировать ваш / etc / network / interfaces и добавьте туда свои записи, например

auto eth0 
iface eth0 inet dhcp 
dns-search google.com 
dns-nameservers dnsserverip 

а затем перезапустите /etc/init.d/networking restartили sudo ifdown -aиsudo ifup -a

3) Ваша система использует udhcp, которая является очень маленькой клиентской программой DHCP. Клиент udhcp согласовывает аренду с сервером DHCP и уведомляет набор сценариев, когда аренда получена или потеряна. Вы можете прочитать о его использовании здесь или просто отредактировать этот скрипт (как вы сделали).


1
Я добавил записи в /etc/resolvconf/resolv.conf.d/baseи побежал resolvconf -u. К сожалению, это не сработало.
Minix

Вы пытались запустить sudo dpkg-переконфигурировать resolvconf? После запуска resolvconf -u ваши записи не попали в файл результатов? Как вы их добавили, например, «nameserver 127.0.0.1» или «search google.com»?
Кирилл-а

Я бегал dpkg-reconfigure resolvconf. Записи не были там. И у меня есть записи с обоими nameserver ipи search domain.
Minix

Нет, запуск dpkg-reconfigure resolvconfне добавит записи, но вы можете отключить автоматические обновления. Если вы отключите обновления, вы можете редактировать resolv.conf вручную, и он не должен быть перезаписан.
Кирилл

Мой плохой, так неуклюже сформулировать это, я отвечал на ваш комментарий предложение за предложением. После запуска resolvconf -uзаписи не были добавлены.
Minix

4

Я столкнулся с этим тоже. Комментирование domain-name-serverне исправило это для меня также.

Кроме того, я не использую resolvconf, просто ясно /etc/resolv.conf.

Я не пытался использовать chattr +iдля блокировки, resolv.confпотому что это кажется слишком хакерским. Кроме того, я хочу, чтобы Puppet мог изменять resolv.confпри необходимости.

Лучшее решение я нашел переопределяет поведение по умолчанию , dhclientиспользуя его документированные крючками.

Создайте новый файл /etc/dhcp/dhclient-enter-hooks.d/nodnsupdateсо следующим содержимым:

#!/bin/sh
make_resolv_conf() {
    :
}

Затем сделайте файл исполняемым:

chmod +x /etc/dhcp/dhclient-enter-hooks.d/nodnsupdate

Теперь, когда dhclient запускается - либо при перезагрузке, либо когда вы запускаете вручную sudo ifdown -a ; sudo ifup -a- он загружает этот скрипт nodnsupdate. Этот скрипт переопределяет внутреннюю функцию make_resolv_conf(), которая обычно перезаписывается, resolv.confи ничего не делает.

Это работало для меня на Ubuntu 12.04.


Не работал на Ubuntu 18.04 :( /etc/resolv.confбыл перезаписан после перезагрузки.
Дан Даскалеску

3

Ubuntu 16.04 Если сетевые интерфейсы для вашего экземпляра сервера управляются DHCP, программа dhclient перезапишет ваш /etc/resolv.confфайл при каждом перезапуске сетевой службы.

Вы можете решить проблему путем редактирования /etc/dhcp/dhclient.confфайла и добавления «SUPERSEDE» заявления для доменного имени , домен-поиска и имя домена-серверов следующим образом :

supersede domain-name "local.com";
supersede domain-search "local.com";
supersede domain-name-servers 192.168.56.103;

В этом конкретном случае сервер имен расположен по адресу «192.168.56.103», а доменное имя - «local.com».

Обратите внимание, что каждая строка заканчивается точкой с запятой, а имя домена заключено в двойные кавычки.


К сожалению, это не сработало в Ubuntu 18.04. После перезагрузки /etc/resolv.confбыл перезаписан с 127.0.0.53.
Дан Дакалеску

Может быть, вы можете попробовать это askubuntu.com/questions/1031279/…
Sand1512

Также проверьте, если вы работаетеdnsmasq
Sand1512

0

перейти в этот каталог:

  cd /etc/resolvconf/resolv.conf.d

Откройте файл с именем head и поместите туда IP-адреса или имена DNS. Откройте файл с именем tail и поместите туда домен. Перезагружать.


Этот каталог не существует по умолчанию в Ubuntu 18.04. Вам нужно установить сервис, который его создает?
Дан Дакалеску

0

В виртуальных машинах Azure файл /etc/resolv.conf не редактируется напрямую.

Попробуйте добавить записи DNS в свои файлы конфигурации сети / etc / sysconfig / network-scripts / ifcfg-eth0 и так далее, как показано ниже:

DOMAIN = example.com

DNS1 = 10. , . *
DNS2 = 10. , . *
DNS3 = 10. , . *

и перезапустите сетевой сервис после сохранения файлов. вы увидите, что конфигурация будет добавлена ​​также в resol.conf.


0

Для внесения resolv.confпостоянных изменений, связанных с DNS , необходимо изменить файл конфигурации DHCP с именем dhclient.conf. Вы можете найти файл в /etc/dhcp/dhclient.conf.

Откройте файл для редактирования (не забудьте использовать sudo). Вы увидите такие строки:

#supersede domain-name "fugue.com home.vix.com";
#prepend domain-name-servers 127.0.0.1;

Удалите предыдущий «#» и используйте серверы доменных имен и / или доменных имен, которые вам нужны. Сохрани это. Теперь изменения, связанные с DNS, будут постоянными.

Кредиты идут по адресу : https://itsfoss.com/resolvconf-permanent-ubuntu/


Этот ответ был дан уже 2 года назад .
Дан Дакалеску

0

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

chattr -V + i имя файла, например, chattr -V + i /etc/resolv.conf

Чтобы отменить изменение, используйте следующую команду:

chattr -i имя файла - чтобы снова включить вставку в файл

chattr (Change Attribute) - это утилита командной строки Linux, которая используется для установки / отмены определенных атрибутов файла в системе Linux для обеспечения случайного удаления или изменения важных файлов и папок, даже если вы вошли в систему как пользователь root.


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

Это будет работать наверняка, опция, которую попробовал пользователь, заключается в том, чтобы отредактировать файл, а не сделать его неизменным
Ashish Jain

Пожалуйста, запустите команду с sudo chattr -V + i имя файла, например sudo chattr -V + i /etc/resolv.conf
Ашиш Джейн

-1

На Ubuntu 18.04 с помощью NetworkManager. Вам нужно удалить файл 'resolv.conf' и позволить NetworkManager создать его для вас.

Удалить файл в терминале типа sudo rm -f /etc/resolv.conf; это удалит файл для вас.

Перезагрузите систему, и NetworkManager создаст для вас файл resolv.conf.

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