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?

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

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

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

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

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.


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.


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.


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.


-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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.