resolv.conf ciągle coś resetuje

29

Potrzebuję pomocy w ustaleniu, dlaczego moje resolv.confzmiany się zmieniają, co powoduje, że nie mogę uzyskać dostępu do zewnętrznego Internetu i tylko sieci lokalnej:

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

Myślałem, że to naprawiłem, pozbywając się interfejsu pętli zwrotnej i dodając interfejs eth0 /etc/network/interfaceswraz z instrukcjami na blogu Jontsai .

Próbowałem takich rzeczy jak:

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

A potem wszystko działałoby tymczasowo i ostatecznie serwer nazw w resolv.conf został ponownie przywrócony.

PS Wysłałem to również na ubuntuforums .


Edycja: istnieje co najmniej jeden inny program poza NetworkManager, który pisze do resolv.confi wiem o tym, ponieważ podczas odświeżania NetworkManagera, resolv.confgenerowany plik ma komentarz, który mówi # Generated by NetworkManager, a wersja, do której ciągle się zmienia, nie.

Więc próbuję tego:

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


Edycja 2:

Dodanie danych wyjściowych plików:

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

auto eth0
iface eth0 inet dhcp

Nie ma takiego pliku jak /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
jontsai
źródło
Podejrzewam albo błąd Menedżera sieci, albo bardziej prawdopodobne błędną konfigurację. Jaką wersję Ubuntu używasz? Czy masz resolvconfzainstalowany pakiet? Dodawać zawartość /etc/network/interfaces, /etc/NetworkManager/NetworkManager.confi /etc/NetworkManager/system-connections/*.
Gilles „SO- przestań być zły”
Używam 10.04, bez resolvconfpakietu. W pewnym momencie mój modem DSL był zepsuty (za routerem), podczas gdy moja sieć lokalna była w porządku, więc mogłem spróbować zainstalować nscdlub - dnsmasqzostały odinstalowane, ale może pozostawić jakieś artefakty, które przeszkadzają?
jontsai
Ok, właśnie uruchomiłem komputer po raz pierwszy od 3 tygodni i myślę, że problem zniknął. o_O
jontsai
Nie jestem pewien, ale myślę, że wystąpił problem z serwerem DHCP na vmnet1lub vmnet8(NAT i tylko host)
jontsai
1
Cała ta dyskusja ma mniejsze znaczenie od czasu Ubuntu 12.04, które wprowadziło resolvconf w systemie podstawowym, zasadniczo zmieniając sposób obsługi resolv.conf.
jdthood,

Odpowiedzi:

13

Możesz dodawać statyczne dodatki do /etc/resolv.conf. Te dodatki mogą zastąpić rzeczy dodawane automatycznie.

Najpierw zainstaluj resolvconfpakiet.

Następnie naciśnij klawisze Alt + F2 i uruchom gksudo nautilus. Otwórz, /etc/resolvconf/resolv.conf.d/headjeśli chcesz dodać na początku pliku; otwórz, /etc/resolvconf/resolv.conf.d/tailjeśli chcesz dodać do końca. Wprowadź zmiany, zapisz / zamknij pliki, a następnie uruchom, sudo resolvconf -uaby je zastosować.

(Przepraszam, że nie pamiętam, czy ustawienia na początku lub na końcu pliku mają najwyższy priorytet).

Azendale
źródło
Moje zmiany w menedżerze sieci zostaną przywrócone po podłączeniu do dowolnej sieci VPN. Pozwoliło mi to zachować 8.8.8.8 na liście resolverów niezależnie od tego, do której sieci się podłączyłem.
Steven P.
8

Miałem dokładnie ten sam problem - resolv.conf był przepisywany przy każdym ponownym uruchomieniu serwera.

Było to spowodowane przez DHCP. Aby ustawić resolv.conf na taki, jaki chcę, edytowałem /etc/dhcp/dhclient.confi dodałem:

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

Możesz naprawdę sporo kontrolować swój plik resolv.conf, wprowadzając w nim zmiany.

Mam nadzieję, że to pomoże.

Peter Sankauskas
źródło
2
To byłoby najczystsze rozwiązanie, ale z jakiegoś powodu przestało działać na moich systemach kilka lat temu. Od tego czasu utknąłem w wyłączaniu skryptu resolvconf lub chattr + i /etc/resolv.conf.
Tronic
7

(Ta odpowiedź zawiera sposoby zbadania, co się dzieje. Być może będę w stanie podać rzeczywiste rozwiązanie, jeśli użyjesz tych metod do zebrania i dostarczenia dodatkowych informacji.)

Możliwym wyzwaniem dla pozornie spontanicznych aktualizacji /etc/resolv.confjest odnowienie dzierżawy DHCP. Sprawdź, jak długo otrzymujesz dzierżawę DHCP (powinno się to pojawiać w logach systemowych /var/log/syslog).

Możesz użyć audytu, Zainstaluj auditd aby dowiedzieć się, co modyfikuje plik. Uruchom demona ( sudo service auditd start) i powiedz mu, aby sprawdził zmiany w tym pliku:

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

Dzienniki kontroli są włączone /var/log/audit/audit.log. Zobaczysz czas modyfikacji pliku i nazwę programu, który go zmodyfikował.

Jeśli masz resolvconfzainstalowany pakiet, Network Manager może nadepnąć na niego. Spróbuj wyłączyć wszystkie interfejsy sieciowe, a następnie zatrzymaj Network Managera ( sudo service network-manager stop), a następnie uruchom go ponownie.

Gilles „SO- przestań być zły”
źródło
1
Uważam, że masz rację co do wersji DHCP. Możesz zmienić ustawienia DHCP w menedżerze sieci w następujący sposób: Uruchom nm-connection-editorw swoim terminalu. Wybierz interfejs i naciśnij edytuj. W ustawieniach IPv4 powinna istnieć metoda o nazwie tylko adresy DHCP (lub coś podobnego). Jeśli się nie mylę, pozwoli to uzyskać adresy IP za pośrednictwem DHCP, ale nie serwerów nazw (możesz je podać w poniższych polach).
Christian Skjødt
Ustawiłem router tak, by mapował adres MAC na statyczne adresy IP, więc dzierżawa DNS trwa długo. auditctlLinia nie działa na mnie, a ja wierzę, że nazwa usługi jest dla Network Manager network-manager(zawiera łącznik). Nie miałem resolvconfzainstalowanego pakietu, ale miałem rzeczy w /etc/resolvconf/folderze, a kiedy porównałem go z inną maszyną Ubuntu, nie miałem go, więc zainstalowałem i odinstalowałem pakiet i ręcznie usunąłem ten folder. /etc/resolv.confwłaśnie został przepisany, więc myślę, auditctlże bardzo pomocna byłaby praca.
jontsai
@ jontsai Obecność /etc/resolvconfjest normalna, nawet jeśli nie masz resolvconfpakietu, niektóre pakiety upuszczają tam zaczepy, a te zaczepy są używane tylko wtedy, gdy resolvconfsą zainstalowane. Naprawiłem auditctllinię, na wypadek, gdyby problem pojawił się ponownie.
Gilles „SO- przestań być zły”
Podobał mi się pomysł audytującego użytkownika, aby dowiedzieć się, co edytuje plik, ale wygląda na to, że zacznie się po zmodyfikowaniu pliku.
Peter Sankauskas,
4

Otwórz terminal i wpisz

sudo chattr +i /etc/resolv.conf

+ i dba o to, aby plik nie został zresetowany przy rozruchu nawet przez root.

Aby cofnąć powyższe

sudo chattr -i /etc/resolv.conf

Po więcej

man chattr
tanmay.01
źródło
to nie działało dla mnie. Ponowne uruchamianie menedżera sieci nadal zastępuje /etc/resolv.conf serwerami nazw DHCP.
Tommy
pracował dla mnie na maszynie Wirtualnej Debian 9 działającej w GCP. tak! dzięki!
the0ther
3

Wyłączam aktualizację resolv.conf, tworząc plik o nazwie disable_make_resolv_confin/etc/dhcp3/dhclient-enter-hooks.d

#!/bin/sh
make_resolv_conf(){
}

Zastępuje funkcję standardową tą samą nazwą, która odpowiada za resolv.confodświeżenie.

Andrew Blake
źródło
1

Późno na to, ale opublikuję moją sprawę, ponieważ była inna niż wszystkie powyższe.

W moim przypadku /etc/resolv.confjest to dowiązanie symboliczne /var/run/NetworkManager/resolv.confi z jakiegoś powodu nie cat /etc/resolv.confdaje mi błędu żaden taki plik lub katalog (może dlatego, że jest pusty?)

Jeśli otworzę go za pomocą vi i dodam, nameserver x.x.x.xże działa, ale jest resetowany po ponownym uruchomieniu.

Próbowałem edytować /etc/network/interfacesi dodawać dns-nameservers x.x.x.x, zmieniać /etc/dhcp/dhclient.confi usuwać pod request domain-name-servers, również edytowałem prepend domain-name-servers x.x.x.x.

Plik binarny Resolvconf nie jest zainstalowany, NetworkManager.confnie miał nic istotnego. Ale za każdym razem, gdy ponownie uruchamiałem komputer, nie było serwera domeny.

Nie jestem pewien, jaki jest tego powód, ale wydaje się, że ma to związek z faktem, że jest to maszyna VBox, uruchomiona przez GNS3 i ze względu na to ustawienie VBox, muszę ją zostawić bez interfejsu. Najwyraźniej GNS3 tworzy „interfejs UDP” w locie, kiedy uruchamiam komputer, pod warunkiem, że uruchomię go z GNS3.

Tak więc, aby zapisać mnie od poszukiwania bez końca, po prostu dodaje echo nameserver x.x.x.x> /etc/resolv.confsię /etc/profile, problem rozwiązany (nie rozwiązany, ale pracowali hehe). Ale ciekawym może być wiedzieć, co się dzieje z tym scenariuszem, jeśli ktoś na niego wpadnie.

Adriano_epifas
źródło
1

Jeśli masz plik /etc/NetworkManager/NetworkManager.conf

cat /etc/NetworkManager/NetworkManager.conf

możesz skonfigurować NetworkManagera, aby przestał resetować resolv.conf

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

Teraz ręcznie zmień swój /etc/resolv.confi przetestuj jego trwałość za pomocą

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

Źródło: https://askubuntu.com/a/623956/452398

adabru
źródło
Dziękujemy, dodanie dns = none naprawia problem we właściwy sposób.
Opony
0

Po prostu wprowadź wpisy w swoich plikach ifcfg-ethX

DNS1 = 192.168.XX

DNS2 = 192.168.XX

DOMENA = twojadomena.com

następnie menedżer sieci opublikuje te rekordy w pliku resolv.conf po ponownym uruchomieniu usług lub ponownym uruchomieniu urządzenia.

użytkownik2564853
źródło
0

Na wypadek, gdyby ktoś wpadł w tę samą sprawę:

Zapomniałem ustawić dhcp na interfejsie w pliku /etc/network/interfaces

Networkmanager zmodyfikuje na /etc/resolv.confpodstawie otrzymanej odpowiedzi dhcp.

hth

Boop
źródło
0

Gdy nie ma # Generated by NetworkManagerw/etc/resolv.conf

Edytuj konfigurację Network Managera:

sudo vim /etc/NetworkManager/NetworkManager.conf

w [main]sekcji dodaj rc-manager=unmanaged:

[main]                                                                                                                                   
rc-manager=unmanaged

Czemu?

rc-manager- Ustaw tryb zarządzania resolv.conf. Wartość domyślna zależy od opcji kompilacji NetworkManagera, a ta wersja NetworkManagera została zbudowana z domyślnym „symlink”.

(...)

unmanaged: nie dotykaj /etc/resolv.conf.

Odwołaj się do konfiguracji, aby uzyskać więcej informacji: https://developer.gnome.org/NetworkManager/stable/NetworkManager.conf.html

Następnie dokonaj edycji /etc/resolv.confi ponownie uruchom Network Managera, aby sprawdzić, czy /etc/resolv.confpozostanie nietknięty:

sudo systemctl restart NetworkManager

lub

sudo service network-manager restart

niż:

cat /etc/resolv.conf

Jeśli procedura nie powiodła się i /etc/resolv.confzostała nadpisana podczas restartu Network Managera, spróbuj dodać dns=nonedo [main]sekcji w konfiguracji, jak powiedział https://askubuntu.com/a/1150326/364772

voy
źródło