Що перезаписує /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~його місце, і на його місці був той самий стандартний файл, який переслідував мене.

Вміст файлу змушує мене повірити, що він отримує інформацію від самої мережі. Під час запуску програми .isoVirtualbox без доступу до Інтернету мій файл зберігається таким, який він є.

Я спробував змінитись, /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
Встановлення непорушного прапора на resolutionv.conf не працює так, як ви очікували, оскільки файл не змінено. Запис в каталозі / etc було змінено, коли файл перейменовано. Вам доведеться встановити / тощо, щоб бути незмінними - те, чого ви насправді не хочете робити.
doneal24

@ DougO'Neal Я бачу. Дякую за голову вгору
Мінікс

Відповіді:


24

1) Не слід вручну оновлювати свою резолюцію.conf, оскільки всі зміни будуть замінені даними, які надає ваш локальний сервер DHCP. Якщо ви хочете, щоб воно було статичним, запустіть sudo dpkg-reconfigure resolvconfі відповідь "ні" на динамічні оновлення. Якщо ви хочете додати туди нові записи, відредагувати /etc/resolvconf/resolv.conf.d/baseта запустити sudo resolvconf -u, вони додадуть ваші записи та записи сервера DHCP.

2) Спробуйте відредагувати / etc / network / інтерфейси та додати там свої записи, наприклад

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. На жаль, це не спрацювало.
Мінікс

Ви намагалися запустити sudo dpkg-переконфігурувати Resolvconf? Після запуску resolutionvconf -u ваші записи не були у файлі результатів? Як ви додали їх, як-от "nameserver 127.0.0.1" чи "search google.com"?
kirill-a

Я бігав dpkg-reconfigure resolvconf. Записів там не було. І в мене є записи з обома nameserver ipі search domain.
Minix

Ні, запуск dpkg-reconfigure resolvconfне додаватиме записи, але ви можете вимкнути автоматичні оновлення. Якщо ви вимкнете оновлення, ви можете редагувати resoluv.conf вручну, і його не слід перезаписувати.
kirill-a

Моє погано за те, що висловлювали це так незграбно, я відповідав на ваш коментар за пропозицією. Після запуску resolvconf -uзаписи не додавали.
Мінікс

4

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

Також я не використовую resolvconf, просто просто /etc/resolv.conf.

Я не намагався застосувати chattr +iзамок, resolv.confтому що це здається занадто хитким. Також я хочу, щоб лялечка могла змінювати, 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. Відкрийте файл з іменем хвіст і помістіть домен туди. Перезавантажте.


Цей каталог за замовчуванням не існує в Ubuntu 18.04. Вам потрібно встановити службу, яка її створює?
Дан Даскалеску

0

У Azure VM /etc/resolv.conf не можна редагувати безпосередньо.

Спробуйте додати вхідні дані DNS у файли конфігурації мережі / etc / sysconfig / network-script / ifcfg-eth0 тощо, як нижче:

DOMAIN = example.com

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

та перезапустіть послугу мережі після збереження файлів. ви побачите, що конфігурація також буде додана до резолюції.conf.


0

Щоб змінити пов’язані з DNS resolv.confпостійні зміни , вам потрібно змінити файл конфігурації 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

Використовуйте команду нижче, щоб запобігти перезапису резолюції.conf або будь-якого файлу після перезавантаження

chattr -V + i назва файлу, наприклад, chattr -V + i /etc/resolv.conf

Щоб повернути зміни, скористайтеся командою нижче:

chattr -i ім'я файлу - для повторного включення вставки у файл

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


Я вважаю, що користувач у запитанні насправді намагався chattr, але зауважив, що це не мало ефекту.
Kusalananda

Це буде працювати напевно, користувач опціонної намагався для редагування файлу не робить його незмінна
Ashish джайнского

Будь ласка, запустіть команду з назвою файлу sudo chattr -V + i, наприклад, sudo chattr -V + i /etc/resolv.conf
Ashish Jain

-1

У ubuntu 18.04 за допомогою NetworkManager. Вам потрібно видалити файл 'resolutionv.conf' і дозволити NetworkManager створити один для вас.

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

Перезавантажте систему, і NetworkManager створить для вас файл resv.conf.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.