Niepoprawny serwer nazw ustawiony przez resolvconf i NetworkManager

34

Mój serwer DNS to 192.168.1.152.

Ten DNS jest dostarczany klientom przez DHCP. Klienci systemu Windows w mojej sieci LAN poprawnie rozpoznają nazwy przy użyciu tego DNS, ale moja maszyna wirtualna Ubuntu nie.

Maszyna wirtualna jest skonfigurowana do pracy w sieci mostowej i jest poprawnie udostępniana jako serwer DNS, ale moje lokalne nazwy hostów nie są rozwiązywane przez nslookup lub przeglądarki.

Oto nslookupjedna z moich lokalnych domen:

# nslookup unraid.local
Server:     127.0.0.53
Address:    127.0.0.53#53

** server can't find unraid.local: SERVFAIL

Oto, co powinien rozwiązać za pomocą mojego serwera DNS:

# nslookup unraid.local 192.168.1.152
Server:     192.168.1.152
Address:    192.168.1.152#53

Name:   unraid.local
Address: 192.168.1.152

/etc/resolv.conf ma zły serwer nazw:

# 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
# 127.0.0.53 is the systemd-resolved stub resolver.
# run "systemd-resolve --status" to see details about the actual nameservers.

nameserver 127.0.0.53

Uruchomiłem to polecenie. W przypadku serwerów DNS, myląco, określa poprawny serwer (i moją domyślną bramę).

root@ubuntu:~# systemd-resolve --status
Global
          DNSSEC NTA: 10.in-addr.arpa
                      16.172.in-addr.arpa
                      168.192.in-addr.arpa
                      17.172.in-addr.arpa
                      18.172.in-addr.arpa
                      19.172.in-addr.arpa
                      20.172.in-addr.arpa
                      21.172.in-addr.arpa
                      22.172.in-addr.arpa
                      23.172.in-addr.arpa
                      24.172.in-addr.arpa
                      25.172.in-addr.arpa
                      26.172.in-addr.arpa
                      27.172.in-addr.arpa
                      28.172.in-addr.arpa
                      29.172.in-addr.arpa
                      30.172.in-addr.arpa
                      31.172.in-addr.arpa
                      corp
                      d.f.ip6.arpa
                      home
                      internal
                      intranet
                      lan
                      local
                      private
                      test

Link 2 (ens33)
      Current Scopes: DNS LLMNR/IPv4 LLMNR/IPv6
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no
         DNS Servers: 192.168.1.152
                      192.168.1.1

Nie chcę „zakodować na stałe” adresu IP serwera DNS w pliku konfiguracyjnym, ponieważ nie będę w stanie rozwiązać problemu po zmianie sieci.

Jak mogę uzyskać resolvconf i NetworkManager do automatycznego ustawiania adresu IP serwera DHCP /etc/resolv.conf?

FireSpore
źródło

Odpowiedzi:

37

Spróbuj edytować /etc/systemd/resolved.conf, dodając żądany serwer DNS:

Zmień to:

[Resolve]
#DNS=

do tego (ale użyj tego, czego chcesz - to przykład):

[Resolve]
DNS=192.168.1.152

następnie uruchom ponownie usługę:

service systemd-resolved restart

A kiedy sprawdzasz status, powinieneś zobaczyć

$ systemd-resolve --status
Global
         DNS Servers: 192.168.1.152

      DNSSEC NTA: 10.in-addr.arpa
                  16.172.in-addr.arpa
                  168.192.in-addr.arpa
                  17.172.in-addr.arpa
                  18.172.in-addr.arpa
                  19.172.in-addr.arpa
Leandro Noskoski
źródło
Oto status systemd-resolver - po zmianie /etc/systemd/resolved.conf pastebin.com/AeUFQkyB Przeglądarki nadal nie potrafią również rozpoznać nazw.
FireSpore,
12
systemd jest tak zepsuty. DHCP informuje hosta, jaki powinien być DNS (i kilka innych ustawień sieciowych), aby nie działało, nie trzeba zmieniać żadnych plików na hoście.
teknopaul
4
Nie wygląda optymalnie, musisz to zrobić przy każdej zmianie serwera / sieci DNS
Victor
1
Konieczna będzie ponowna konfiguracja za każdym razem, gdy zmieni się adres IP DNS (na przykład w różnych sieciach).
Victor
34

Znany błąd systemowy .

Tymczasowe obejście bez konieczności ponownej konfiguracji w przypadku zmiany adresu IP DNS:

sudo rm -f /etc/resolv.conf
sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
reboot
teknopaul
źródło
2
To rozwiązanie działało nieco, polecenia hosta i nslookup poprawnie rozpoznają nazwy, ale wget i przeglądarki nie działają
FireSpore
1
to prawda ... aktualny błąd jest, że link do /etc/resolv.confpochodzi z /run/systemd/resolve/stub-resolv.confktórym jest bollox należy /run/systemd/resolve/resolv.conf zauważyć, że /etc/resolv.conftak naprawdę nie istnieje w obu przypadkach
Pan Heelis
@FireSpore: czy w takim razie pingdziała? hosti nslookuprozwiązywać nazwy hostów inaczej niż pinglub wget. Być może trzeba będzie poszukać /etc/nsswitch.confsolutioiny.
HongboZhu
9

W końcu mam rozwiązanie tego problemu dla Ubuntu 17.10. Domyślnie ta wersja Ubuntu używa systemd-resolved, która, mam nadzieję, będzie stabilna dla następnych wersji.

Aby użyć niestandardowej usługi DNS zamiast lokalnej pamięci podręcznej rozwiązanej przez system, wykonaj następujące czynności:

  1. dodaj nowe serwery nazw. Edytuj plik /etc/systemd/resolved.confjako sudoer. Tutaj skomentowałem wpis DNS i umieściłem moje dns [Resolve] DNS=10.96.0.10 8.8.8.8 8.8.4.4

  2. anuluj rzeczywiste dowiązanie symboliczne do /etc/resolv.conf

  3. utwórz nowe dowiązanie symboliczne sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
  4. uruchom ponownie usługę sudo service systemd-resolved restart
  5. zrestartuj menedżera sieci sudo systemctl restart networking

A teraz, jeśli przekopiesz się do nazwy podanej przez twoje add dns, powinieneś zobaczyć zapis rozwiązany dig nexus.default.svc.cluster.mydomain

Ostatnim krokiem jest aktualizacja kolejności rozdzielczości /etc/nsswitch.confpoprzez umieszczenie dns przed mdns4_minimal

hosts           files dns mdns4_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] myhostname
Fabio Fumarola
źródło
1
Konieczna będzie ponowna konfiguracja za każdym razem, gdy zmieni się adres IP DNS (na przykład w różnych sieciach).
Victor
Victor, czy masz najlepsze rozwiązanie? to samo dotyczy statycznej konfiguracji sieci
Fabio Fumarola
Ta odpowiedź działa zarówno w przypadku konfiguracji statycznych, jak i dynamicznych: askubuntu.com/a/974482/343617
Victor
dziękuję, rozwiązanie, na które wskazałem, było statyczne. Zgadzam się
Fabio Fumarola
To właśnie działało dla mnie przy nowej instalacji 18.04
JamesCW
1

Złożyłem skrypt, który działa w sprawie Netplan, nie obsługując obecnie możliwości zastępowania serwerów DNS dostarczonych przez DHCP i kolejności wyszukiwania domen. Tworzy plik yaml Netplan i konfiguruje systemd-resolved do pracy zgodnie z oczekiwaniami.

################## Start Netplan config (renderer: NetworkManager)
#  Some useful commands for customisation
# NetConn=$(nmcli device show|grep GENERAL.CONNECTION|head -n1|awk '{print $2}')
# IP=$(nmcli device show|grep IP4.ADDRESS|head -n1|awk '{print $2}')
# GATEWAY=$(nmcli device show|grep IP4.GATEWAY|head -n1|awk '{print $2}')
# sed -i 's/renderer: networkd/renderer: NetworkManager/' //etc/netplan/01-netcfg.yaml
######################################
systemctl start NetworkManager
NIC=$(nmcli device show|grep GENERAL.DEVICE|head -n1|awk '{print $2}')

#####   create Netplan yaml config file
cat >/etc/netplan/01-netcfg.yaml <<EOF 
# This file describes the network interfaces available on your system
# For more information, see netplan(5).
  network:
   version: 2
   renderer: NetworkManager
   ethernets:
EOF
echo "    ${NIC}:" >> /etc/netplan/01-netcfg.yaml
cat >>/etc/netplan/01-netcfg.yaml <<EOF
      dhcp4: yes
      nameservers:
        search: [abc.domain.edu, def.domain.edu]
        addresses: [10.10.11.22, 10.10.11.23]

EOF

#work around DNS resolv bug
systemctl stop systemd-resolved
sed -i 's/#DNS=/DNS=10.10.11.22 10.10.11.23/' /etc/systemd/resolved.conf
sed -i 's/#Domains=/Domains=abc.domain.edu def.domain.edu' /etc/systemd/resolved.conf
systemctl start systemd-resolved
systemctl restart NetworkManager
netplan apply
reboot
############### End Netplan Config
Wildstalker
źródło
1

Rozwiązanie, które dla mnie zadziałało, zostało opublikowane tutaj na moim blogu

Użyj edytora nano, aby edytować te 2 pliki

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

Dodaj serwery DNS, których chcesz używać

nameserver 9.9.9.9
nameserver 127.0.0.1

Następnie uruchom ponownie usługę

service systemd-resolved restart

Kontrola końcowa:

cat /etc/resolv.conf

Czy nslookup

nslookup google.com 

właśnie tego użyłem i naprawiłem problem na moim laptopie w domu, ale jakiś czas w przyszłości, kiedy będę poza moją siecią domową, widzę, że spowoduje to problemy, ponieważ podstawowy i pomocniczy serwer dns nadal będzie moim domem serwery z ich adresami LAN.

ookangzheng
źródło
2
Konieczna będzie ponowna konfiguracja za każdym razem, gdy zmieni się adres IP DNS (na przykład w różnych sieciach).
Victor
nie jest elegancki, ale działa, bo czasami sabotuje moją porę snu.
Rodrigo Ferrari
Edycja /etc/resolv.confnie działa, ponieważ plik zostanie zastąpiony podczas systemd-resolvedponownego uruchamiania. Po prostu edytuj /etc/systemd/resolved.conf. Zobacz moją odpowiedź tutaj: askubuntu.com/questions/977243/ubuntu-17-10-disable-netplan/…
EnzoR
1

Twój /etc/resolv.confnie jest problemem. systemd-resolvedpo prostu domyślnie jest nieskonfigurowany, więc zawodzi wszystkie wyszukiwania. Nie krępuj się narzekać na Nieskonfigurowane vs Rozsądne domyślne.

Ręcznie dodaj serwery nazw do systemd-resolved. (edycja na komentarz Olorin jest poniżej, aby dodać mkdir, właściwą ścieżkę /etcnie /lib, aby przetrwać aktualizacje systemu)

sudo mkdir -p /etc/systemd/resolved.conf.d
sudo nano /etc/systemd/resolved.conf.d/00-my-dns-server-is.conf

Dodaj:

[Resolved]
Cache=yes
DNS=192.168.1.152

Następnie...

sudo systemctl daemon-reload

systemd-resolvedjest inteligentny, ale nie jest tak skonfigurowany przez opiekunów pakietów, WYGLĄDA głupio, ponieważ opiekunowie pakietów nie wierzą w Rozsądną wartość domyślną. Możemy umieścić w nim 13 internetowych serwerów głównych, zwanych też „djb way”, lub 10 serwerami opennic: https://pastebin.com/JBfYVVtG lub trzy najszybsze serwery opennic, mierzone przez namebench. Plus, oczywiście, serwery nazw ISP. Plus Google, jasne. systemd-resolvedto nie problem. Jestem problemem.

BobDodds
źródło
Chociaż prawdopodobnie nie chcesz edytować pliku /usr/lib- prawdopodobnie zostaną one zastąpione podczas aktualizacji pakietu. Wydaje mi się, że gdzieś odpowiedni plik /etc/systemdjest już odpowiedni (powinien już być /etc/systemd/resolved.confgotowy do edycji przez administratorów).
Olorin
1
man resolved.conf.d, z d, tak /etc/systemd/resolved.d jest miejscem. Zauważam, że często musimy mkdir /etc/[path].d. bob @ laptop l /etc/systemd/resolved.conf.d ls: nie ma dostępu do '/etc/systemd/resolved.conf.d': Brak takiego pliku lub katalogu
BobDodds
0

W moim systemie znalazłem złe dowiązanie symboliczne: /etc/resolv.confbyło dowiązaniem symbolicznym, które wskazuje/run/systemd/resolve/stub-resolv.conf

Ten plik zawiera tylko jedną linię:

nameserver 127.0.0.53#53

W rezultacie często brakowało wyszukiwania DNS w sieci lokalnej.

Zamiast tego zmieniłem, /etc/reolv.confaby wskazać/run/systemd/resolve/resolv.conf

i teraz działa poprawnie.

Bánó Gábor
źródło
0

To dziwne, ale jedynym rozwiązaniem, które działało dla mnie na Ubuntu 18.04, było to, które znalazłem tutaj :

Najpierw zmień /etc/resolv.conf, ustawiając żądany serwer nazw :

# nano /etc/resolv.conf

Ustaw na przykład

nameserver 8.8.8.8

A potem zrób

# chattr +i /etc/resolv.conf

Chroni to /etc/resolv.confplik, aby nikt nie mógł go zmodyfikować, w tym użytkownik root.

Artem S.
źródło
-3

Mam ten sam problem. Przy każdym ponownym uruchomieniu nic się nie rozwiąże. Odinstalowałem wszystko i przeinstalowałem już około 50 razy. To jest po prostu zepsute.

więc poprawka jest .... „po prostu zastosuj kilka ustawień przy każdym uruchomieniu komputera, co pozwala na rozpoznanie 90% nazw hostów, ale aktualizacje i uaktualnienia wget i apt-get nie zostaną losowo zakończone bez powodu”

cat /etc/systemd/resolved.conf

#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.
#
# Entries in this file show the compile time defaults.
# You can change settings by editing this file.
# Defaults can be restored by simply deleting this file.
#
# See resolved.conf(5) for details

[Resolve]
#DNS=
#FallbackDNS=
#Domains=
#LLMNR=yes
#MulticastDNS=yes
#DNSSEC=no
#Cache=yes
#DNSStubListener=udp

Podczas korzystania z Ubuntu 17.10 Desktop musisz edytować jeden plik z napisem NIE EDYTUJ TEGO PLIKU BLAH BLAH BLAH

cóż, to jedyny sposób, w jaki działa ~!

root@nas:~# cat /etc/resolv.conf
# This file is managed by man:systemd-resolved(8). Do not edit.
#
# 127.0.0.53 is the systemd-resolved stub resolver.
# run "systemd-resolve --status" to see details about the actual nameservers.
nameserver 8.8.8.8

Usuń adres IP 127.0.0.53 jako serwer nazw i wprowadź inny, na przykład Google. Wygląda na to, że mój rzeczywisty adres IP DNS również nie rozpoznaje nazw hostów (chociaż działa na 10 innych komputerach i urządzeniach w domu), ale Google działa dobrze.

pustkowie
źródło