Czy powinienem edytować plik resolv.conf, aby naprawić nieprawidłowy problem DNS?

35

Mam problem z tym, że mój komputer Ubuntu używa niewłaściwego serwera DNS. Z jakiegoś powodu urządzenie pyta localhosto informacje DNS.

Dodałem serwer DNS do GUI ustawień sieciowych, ale /etc/resolv.confnadal zawiera 127.0.0.1jako adres serwera DNS. Teraz pomyślałem, że mogę po prostu edytować plik sam, ale wyraźnie mówi, że nie powinienem edytować pliku ręcznie.

Teraz, ponieważ GUI ustawień sieciowych nie wygenerował pliku z odpowiednimi ustawieniami, jak mogę wygenerować nowy resolv.confplik sam?

Achatius
źródło
1
Jeśli używasz Ubuntu Server 12.04 LTS, po prostu zrób sobie wielką przysługę i edytuj /etc/resolvconf/resolv.conf.d/head bezpośrednio, tak jak chcesz, aby wyglądało na to starsze resolv.conf. Nie miałem nic poza rozwiązaniami, dopóki nie wykorzystałem siły.
askubuntu.com/questions/157154/… może powiązane pytanie.
Ehtesh Choudhury

Odpowiedzi:

40

Żadna z dotychczas opublikowanych odpowiedzi nie wskazuje nameserver 127.0.0.1na /etc/resolv.confto, że pytający nie rozumie, że wejście jest poprawne, zakładając, że działa lokalny serwer nazw. W Ubuntu 12.04 Desktop domyślnie działa lokalny serwer nazw, a mianowicie dnsmasqproces kontrolowany przez NetworkManager, który nasłuchuje 127.0.0.1. W Ubuntu 12.10 adres nasłuchu został zmieniony na 127.0.1.1.

Dlatego rozwiązaniem nie jest wprowadzanie żadnych zmian resolv.conf. Jest to prawidłowe, zakładając, że pytający chce użyć lokalnego serwera nazw.

Jeśli usługa nazw nie działa, lokalny serwer nazw nie otrzymuje poprawnych adresów przekazywania lub występuje inny problem z siecią.

Pytający próbował użyć „GUI ustawień sieciowych” do „wygenerowania pliku z właściwymi ustawieniami” i to nie zadziałało. Nie wiem dokładnie, co to oznacza, ale tutaj jest właściwy sposób na wprowadzenie adresów serwerów nazw, aby trafiły we resolv.confwłaściwym czasie. Zakładam, że pytający używa, NetworkManagera nie ifupkonfiguruje interfejsów.

Najczęściej interfejsy są konfigurowane przy użyciu protokołu DHCP. W takim przypadku nie trzeba nic konfigurować w systemie lokalnym. Serwer DHCP wie, jakiego adresu serwera nazw powinien używać jego klient, i wysyła te informacje do klienta DHCP, który wysyła je do NetworkManager, który przesyła je do resolvconf, w którym umieszcza informacje resolv.conf. W takim przypadku może być konieczne skonfigurowanie serwera DHCP.

Jeśli interfejs sieciowy na komputerze lokalnym jest skonfigurowany statycznie, należy wprowadzić poprawne adresy serwerów nazw w NetworkManager na przykład na wskaźniku sieci | Edytuj połączenia ... | Bezprzewodowy | myconnection | Edytuj ... | Ustawienia IPv4 | Dodatkowe serwery DNS.

Możliwe, że lokalny serwer nazw nie działa poprawnie. W takim przypadku pytający powinien dokonać edycji/etc/NetworkManager/NetworkManager.conf

sudo gedit /etc/NetworkManager/NetworkManager.conf

i skomentuj linię

dns=dnsmasq

w sekcji „[main]”. Aby skomentować linię, umieść a #na początku linii, a następnie zapisz plik. Następnie uruchom ponownie menedżera sieci.

sudo restart network-manager

Następnie resolv.confzamiast adresu 127. * zostaną wprowadzone nielokalne adresy serwerów nazw .

Jeśli pytający używa ifupraczej niż NetworkManager do konfigurowania interfejsów sieciowych, to odpowiedź jmartin2279 jest poprawna: musisz dodać adresy serwera nazw do / etc / network / interfaces w sposób opisany w jmartin2279.

Wbrew temu, co niektórzy inne odpowiedzi doradzić, w ogóle należy nie dodawać nameserver, domainalbo searchopcje w plikach /etc/resolvconf/resolv.conf.d/. Zobacz moje komentarze do tych odpowiedzi.

jdthood
źródło
1
„Serwer DHCP wie, jakiego adresu serwera nazw powinien używać jego klient” - z wyjątkiem sytuacji, gdy nie masz kontroli nad serwerem DHCP (pomyśl o publicznych hotspotach Wi-Fi) i chcesz zastąpić używany serwer nazw ... Ustawianie tej samej konfiguracji dla połączenia podstawa - w kółko dla każdego hotspotu WiFi, z którym się łączysz - nie jest rozwiązaniem.
Teoh Han Hui,
Wygląda na to, że muszę wykonać, dhclientaby zmiany ( nameserverlinie) wreszcie dotarły etc/resolv.conf. Prowadzę spersonalizowany live Xubuntu 14.04 (może to jest powód).
Sopalajo de Arrierez
Jakie mogą być wady wyłączenia DNSMasq, jdthood? Oczywiście po rozpoznaniu wydaje się, że rozpoznawanie nazw i Internet działają poprawnie.
Sopalajo de Arrierez
Zobacz bugs.launchpad.net/ubuntu/+source/dnsmasq/+bug/1003842 , np. Mój komentarz # 60.
jdthood
Mój resolv.conf ciągle zmienia się na 127.0.0.1pomimo, że mój menedżer sieci ma inne serwery nazw + dnsmasq jest komentowany + zrestartowany + dnsmasq zabity (jak się zaczyna) + sieć zrestartowana: /
jakiś użytkownik
17

Jeśli używasz ifup do statycznego konfigurowania interfejsu, możesz dodać go do pliku / etc / network / interfaces.

Otwórz terminal i wpisz:

sudo gedit /etc/network/interface*

Powinieneś zobaczyć coś takiego:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

Edytuj do:

auto eth0
iface eth1 inet static
address 192.168.1.10 
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 8.8.8.8

używając własnych informacji o sieci. pozwoli ci to ustawić dns. możesz użyć wielu serwerów dns tutaj:

dns-nameservers 8.8.8.8 8.8.4.4

Po zrobieniu tego biegnij

ifdown eth0
ifup eth0
jmartin2279
źródło
W twoim przypadku jest to rozwiązanie: „Jeśli używasz ifup do statycznego skonfigurowania interfejsu ...”
angelcervera
Czy w ogóle to przetestowałeś? ifdown: interface eth0 not configured
Cerin
3
jeśli jesteś podłączony przez ssh, nie możesz używać ifdown / ifup. zamiast tego użyjsudo /etc/init.d/networking restart
TD_Nijboer
11

W Ubuntu 12.04 zmieniła się obsługa resolv.conf.

Jeśli chcesz dodać własny adres serwera nazw, edytuj plik /etc/resolvconf/resolv.conf.d/ head

sudo nano /etc/resolvconf/resolv.conf.d/head

i dodaj tam swój serwer nazw (np. Google open dns)

nameserver 8.8.8.8

zapisz plik, a następnie uruchom

sudo resolvconf -u

Żadnego restartu ani niczego innego. Być może trzeba będzie zrestartować menedżera sieci

sudo service network-manager restart

Gotowy.

Możesz to przetestować za pomocą polecenia

nslookup www.google.com

Wynik musi być podobny do

Server: 8.8.8.8
Address: 8.8.8.8#53
NickTux
źródło
4
Dodanie wiersza „nameserver” do /etc/resolvconf/resolv.conf.d/head może działać jak szybki hack, ale nie jest to właściwe rozwiązanie jakiegokolwiek problemu. Spowoduje to, że resolver będzie używał tego adresu serwera nazw we wszystkich okolicznościach, podczas gdy używane serwery nazw zależą od okoliczności. Na przykład, jeśli jesteś podłączony do sieci LAN (być może za pośrednictwem sieci VPN), zwykle chcesz użyć serwerów nazw LAN, aby móc rozpoznawać prywatne nazwy w sieci LAN. W tym przypadku system wydaje się uruchamiać lokalny buforujący serwer nazw, ale dodanie „serwera nazw 8.8.8.8” po prostu go omija.
jdthood
@jdthood - Wskazałeś problem. Chcesz zapewnić rozwiązanie?
TJ Biddle,
@ TJ Już opublikowałem odpowiedź na główne pytanie („Jak edytować plik resolv.conf?”), Jeśli to masz na myśli.
jdthood,
1
Proszę nie polecać tego. Na samej górze pliku „NIE EDYTUJ TEGO PLIKU RĘKĄ - TWOJE ZMIANY BĘDĄ PRZEPISZONE”.
Cerin
Chciałbym zaznaczyć, że edycja /etc/resolv.conf ręcznie zastępuje zmiany przy ponownym uruchomieniu, jednak edycja /etc/resolvconf/resolv.conf.d/head ręcznie NIE zastępuje zmian przy ponownym uruchomieniu, jednak prawdopodobnie przy ponownym uruchomieniu instalacja resolvconf, co prawdopodobnie powoduje pojawienie się ostrzeżenia.
Ken
1

Aby dodać więcej wpisów /etc/resolv.conf, utwórz /etc/resolvconf/resolv.conf.d/tailplik i dodaj je tam.

Ale jeśli /etc/resolv.confzawiera 127.0.0.1, to dodanie wpisów do /etc/resolvconf/resolv.conf.d/tailniczego nie zmieni. Musisz ustawić statyczne adresy serwerów DNS w NetworkManager, który wyśle ​​je do dnsmasq, który nasłuchuje 127.0.0.1.

Konfiguracja DNS dla interfejsu statycznego powinna przebiegać jako wpisy „ dns-nameservers”, „ dns-search” i „ dns-domain” dodane do odpowiedniej sekcji iface w/etc/network/interfaces

Przeczytaj to, aby uzyskać więcej informacji.

Ponadto:

Możesz zainstalować narzędzie GUI o nazwie gnome-network-admin, które ustawi DNS. Spróbuj :

sudo apt-get install gnome-network-admin
Kevin Bowen
źródło
3
(1) Nie, nie dodawaj opcji „nameserver” do /etc/resolvconf/resolv.conf.d/tail. Jest to nieskuteczne (ponieważ inne opcje „nameserver” mają pierwszeństwo) i nieoptymalne (ponieważ jest to konfiguracja statyczna, podczas gdy konfiguracja powinna odzwierciedlać warunki sieciowe). (2) Nie, nie używaj gnome-network-admin. Nie działa poprawnie z resolvconf. Zobacz błąd nr 60518 ( bugs.launchpad.net/ubuntu/+source/gnome-system-tools/+bug/60518 ).
jdthood