serwer nazw 127.0.1.1 w resolv.conf nie zniknie!

60

Przeczytałem, że powinienem mieć nameserver 127.0.1.1w swoim /etc/resolv.confpliku tylko wtedy, gdy mój komputer ma własny serwer DNS. Ponieważ tak się nie dzieje, posiadanie go powoduje problemy. Ale bez względu na to, co robię, nie mogę się tego pozbyć!

Oto rzeczy, które zrobiłem do tej pory:

  1. Dodawanie nameserver 192.168.1.3do /etc/resolvconf/resolv.conf.d/basepliku. (192.168.1.3 to DNS naszej sieci).
  2. Uruchamianie: sudo resolvconf --enable-updates.
  3. Uruchamianie: sudo resolvconf -u.
  4. Uruchamianie: sudo service network-manager restart(dla pewności).

Jednak kiedy otwieram /etc/resolv.confplik, mówi nameserver 127.0.1.1:! Czy ktoś ma pojęcie, co jest nie tak?

Pamiętaj, że tak naprawdę jest 127.0.1.1! I nie mam pojęcia, dlaczego tak nie jest 127.0.0.1!

Nawet gdy zaktualizuję /etc/resolv.confręcznie i zmienię na cokolwiek innego, sudo resolvconf -uprzywróci to z powrotem do 127.0.1.1! Skąd pochodzi ten adres?

Mehran
źródło

Odpowiedzi:

100

NetworkManager to program, który (za pomocą narzędzia resolvconf) wstawia adres 127.0.1.1do resolv.conf. NM wstawia ten adres, jeśli tylko jeśli jest skonfigurowany do uruchamiania instancji programu dnsmasq, który ma służyć jako lokalny serwer nazw przesyłania dalej. Ta instancja dnsmasq nasłuchuje zapytań pod adresem 127.0.1.1.

Jeśli nie chcesz używać lokalnego serwera nazw przesyłania dalej, skonfiguruj NetworkManager, aby nie uruchamiał instancji dnsmasq i nie wstawiał tego adresu. W /etc/NetworkManager/NetworkManager.confWykomentuj liniidns=dnsmasq

sudo nano /etc/NetworkManager/NetworkManager.conf

[main]
plugins=ifupdown,keyfile,ofono
#dns=dnsmasq

i uruchom ponownie usługę NetworkManager.

sudo service network-manager restart

W tym trybie NetworkManager aktualizuje /etc/resolv.conf(wciąż przez resolvconf), aby uwzględnić adresy serwerów nazw, które NetworkManager ma dla aktywnych połączeń.

Jeśli chcesz wyłączyć mechanizm resolvconf w celu aktualizacji resolv.conf i po prostu użyć statycznego pliku resolv.conf, wykonaj następujące czynności.

sudo rm -f /etc/resolv.conf  # Delete the symbolic link
sudo nano /etc/resolv.conf   # Create static file

# Content of static resolv.conf
nameserver 8.8.4.4
nameserver 8.8.8.8
2707974
źródło
Mam 3 DNS, a zapytanie nigdy nie osiąga trzeciego, jeśli wyłączę dnsmasq, jakaś wskazówka? Chcę wysłać zapytanie do Google, a następnie wysłać zapytanie do intranetowej usługi DNS. Dzięki
JorgeeFG
3
restart network-managernie działa na Xenial, ponieważ używa systemd zamiast upstart. spróbujsystemctl restart network-manager
Matthias Weiler
Moje pytanie brzmi: program dnsmasq zapyta, który serwer DNS? zapyta serwer DNS DHCP o zapytanie o adres IP hosta?
Zegar ZHONG
11

Możliwe, że resolvconf jest źle skonfigurowany. Jest to szczególnie prawdopodobne, jeśli bawiłeś się z jego plikami konfiguracyjnymi, nie bardzo rozumiejąc, jak działają resolvconf i NetworkManager.

Aby uzyskać dodatkowe informacje, przeczytaj dokumentację resolvconf i post na blogu Stéphane Grabera.

https://www.stgraber.org/2012/02/24/dns-in-ubuntu-12-04/

Najpierw powinieneś wiedzieć, że zarówno Ubuntu Desktop, jak i Ubuntu Server domyślnie mają zainstalowaną i aktywowaną resolvconf. Resolvconf zapewnia platformę do dynamicznej aktualizacji pliku /etc/resolv.conf w uporządkowany i odwracalny sposób.

Po drugie, powinieneś wiedzieć, że Ubuntu Desktop domyślnie ma zainstalowany i aktywowany NetworkManager. Domyślnie NetworkManager uruchamia instancję dnsmasq, która ma służyć jako lokalny serwer nazw przekazywania. Ta kontrolowana przez NetworkManager instancja dnsmasq nasłuchuje zapytań pod numerem 127.0.1.1. Kiedy NetworkManager uruchamia instancję dnsmasq, informuje resolvconf, aby wstawił adres 127.0.1.1do resolv.conf. Jak wspomniano w innej odpowiedzi, jeśli skonfigurujesz NetworkManager, aby nie uruchamiał lokalnej instancji serwera przekierowań nazw, wówczas nie uruchomi lokalnego serwera nazw przekierowań i nie powie resolvconf, aby wstawił adres 127.0.1.1do resolv.conf.

Ta domyślna konfiguracja działa poprawnie, więc jeśli sytuacja nie jest wyjątkowa, należy przywrócić konfigurację domyślną.

Aby przywrócić domyślną konfigurację, zajmij się tym

  • /etc/resolvconf/resolv.conf.d/head zawiera tylko tekst nagłówka resolvconf składający się z dwóch linii rozpoczynających się od #znaku
  • /etc/resolvconf/resolv.conf.d/base jest pustym plikiem
  • /etc/resolvconf/resolv.conf.d/tail jest pustym plikiem
  • /etc/resolv.conf jest dowiązaniem symbolicznym do treści ../run/resolvconf/resolv.conf

Aby to osiągnąć, wykonaj następujące polecenia.

sudo su
dpkg-reconfigure resolvconf   # And answer `Yes` to agree to dynamic updates
cd /etc/resolvconf/resolv.conf.d
echo '# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN' > head
rm -f base tail original
:> base
:> tail

Oryginalna konfiguracja NetworkManager ma mieć

[main]
...
dns=dnsmasq
...

w /etc/NetworkManager/NetworkManager.conf. Rozsądnym rozwiązaniem jest wyłączenie lokalnego serwera nazw przesyłania dalej kontrolowanego przez NetworkManager, komentując dns=dnsmasqlinię.

[main]
...
#dns=dnsmasq
...

Po wykonaniu wszystkich tych czynności zaleca się zrestartowanie komputera w celu wyczyszczenia nieaktualnych rekordów informacji o serwerze nazw.

sudo reboot
jdthood
źródło
1

W moim przypadku dns=dnsmasqw /etc/NetworkManager/NetworkManager.confpliku nie było wiersza , a /etc/resolv.confMenedżer sieci nadpisał go, aby go miećnameserver 127.0.1.1

Poprawka polegała na przywróceniu dowiązania symbolicznego w celu właściwej aktualizacji:

sudo ln -sf /run/resolvconf/resolv.conf /etc/resolv.conf
Valery Markov
źródło