Nameserver errato impostato da resolvconf e NetworkManager


34

Il mio server DNS è 192.168.1.152.

Questo DNS è fornito ai client da DHCP. I client Windows sulla mia LAN risolvono correttamente i nomi usando quel DNS, ma la mia macchina virtuale Ubuntu no.

La macchina virtuale è configurata con bridge e viene fornita correttamente il server DNS, ma i miei nomi host locali non vengono risolti da nslookup o browser.

Ecco nslookupuno dei miei domini locali:

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

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

Ecco cosa dovrebbe risolvere usando il mio server 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 ha un nameserver sbagliato:

# 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

Ho eseguito quel comando. Sotto Server DNS, confusamente, specifica il server corretto (e il mio gateway predefinito).

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

Non voglio "codificare" l'IP del server DNS in un file di configurazione perché non sarò in grado di risolvere quando cambio rete.

Come posso ottenere resolvconf e NetworkManager per impostare automaticamente l'IP del server DHCP /etc/resolv.conf?

Risposte:


37

Prova a modificare /etc/systemd/resolved.conf, aggiungendo il server DNS desiderato:

cambia questo:

[Resolve]
#DNS=

a questo (ma usa quello che vuoi - questo è un esempio):

[Resolve]
DNS=192.168.1.152

successivamente, riavvia il servizio:

service systemd-resolved restart

E quando controlli lo stato dovresti vedere

$ 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

Ecco il systemd-resolver --status dopo aver cambiato /etc/systemd/resolved.conf pastebin.com/AeUFQkyB I browser non riescono ancora a risolvere i nomi.
FireSpore

12
systemd è così rotto. DHCP dice all'host quale DNS dovrebbe essere (e un sacco di altre impostazioni di rete) non dovresti cambiare alcun file sull'host per farlo funzionare.
Teknopaul,

4
Non sembra ottimale, dovrai farlo ogni volta che cambi server / rete DNS
Victor

1
Dovresti riconfigurare ogni volta che cambia l'IP DNS (ad esempio su reti diverse).
Victor,

34

Bug noto di systemd .

Soluzione temporanea senza necessità di riconfigurare se l'IP DNS cambia:

sudo rm -f /etc/resolv.conf
sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
reboot

2
Questa soluzione ha funzionato in qualche modo, i comandi host e nslookup risolvono correttamente i nomi, ma wget e browser non lo sono
FireSpore

1
questo è corretto ... il bug attuale è che il link a cui /etc/resolv.confproviene /run/systemd/resolve/stub-resolv.confè bollox, si dovrebbe /run/systemd/resolve/resolv.conf notare che /etc/resolv.confin entrambi i casi non esiste davvero
Heelis

@FireSpore: pingallora funziona? hoste nslookuprisolvere i nomi host in modo diverso da pingo wget. Potrebbe essere necessario cercare /etc/nsswitch.confun solutioin.
HongboZhu

9

Finalmente ho ottenuto una soluzione a questo problema per Ubuntu 17.10. Di default usa questa versione di Ubuntu systemd-resolved, che spero sarà stabile per le prossime versioni.

Per utilizzare DNS personalizzati anziché la cache locale risolta dal sistema, procedere come segue:

  1. aggiungi nuovi nameserver. Modifica il file /etc/systemd/resolved.confcome sudoer. Qui ho commentato la voce DNS e ho inserito il mio DNS [Resolve] DNS=10.96.0.10 8.8.8.8 8.8.4.4

  2. annulla il link simbolico effettivo a /etc/resolv.conf

  3. crea un nuovo link simbolico sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
  4. riavviare il servizio sudo service systemd-resolved restart
  5. riavvia il gestore di rete sudo systemctl restart networking

E ora se scavi a un nome fornito dal tuo add dns, dovresti vedere il record risolto dig nexus.default.svc.cluster.mydomain

L'ultimo passo è aggiornare l'ordine di risoluzione /etc/nsswitch.conf, posizionando il DNS prima del mdns4_minimal

hosts           files dns mdns4_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] myhostname

1
Dovresti riconfigurare ogni volta che cambia l'IP DNS (ad esempio su reti diverse).
Victor,

Victor hai la soluzione migliore? questo è lo stesso se usi la configurazione di rete statica
Fabio Fumarola,

Questa risposta funziona sia per le configurazioni statiche che dinamiche: askubuntu.com/a/974482/343617
Victor

grazie, la soluzione che ho indicato era statica. Sono d'accordo
Fabio Fumarola,

Questo ha funzionato per me su una nuova installazione del 18.04
JamesCW il

1

Ho messo insieme uno script che risolve il problema di Netplan che attualmente non supporta la possibilità di sostituire i server DNS e l'ordine di ricerca del dominio forniti da DHCP. Crea il file ypl di Netplan e configura systemd risolto per funzionare come previsto.

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

La soluzione che ha funzionato per me è pubblicata qui sul mio blog

Utilizzare nano editor per modificare questi 2 file

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

Aggiungi i server DNS che desideri utilizzare

nameserver 9.9.9.9
nameserver 127.0.0.1

Quindi riavviare il servizio

service systemd-resolved restart

Controllo finale:

cat /etc/resolv.conf

Fai nslookup

nslookup google.com 

l'ho appena usato e risolto il problema sul mio laptop a casa, ma in futuro, quando sarò fuori dalla mia rete domestica, vedrò che causerà problemi, perché il server DNS primario e secondario sarà ancora la mia casa server con i loro indirizzi lan.


2
Dovresti riconfigurare ogni volta che cambia l'IP DNS (ad esempio su reti diverse).
Victor,

non è elegante, ma a volte funziona gcloud sabotando la mia ora di andare a letto.
Rodrigo Ferrari,

La modifica /etc/resolv.confnon funziona poiché il file verrà sovrascritto durante il systemd-resolvedriavvio. Modifica /etc/systemd/resolved.conf. Vedi la mia risposta qui: askubuntu.com/questions/977243/ubuntu-17-10-disable-netplan/…
EnzoR

1

/etc/resolv.confNon è il tuo problema. systemd-resolvedper impostazione predefinita è non configurato, quindi non riesce tutte le ricerche. Sentiti libero di parlare di Unconfigured vs A Reasonable Default.

Aggiungi manualmente i nameserver a systemd-resolved. (modifica per il commento di Olorin di seguito per aggiungere mkdir, percorso corretto /etcno /lib, per sopravvivere agli aggiornamenti di sistema)

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

Inserisci:

[Resolved]
Cache=yes
DNS=192.168.1.152

Poi...

sudo systemctl daemon-reload

systemd-resolvedè intelligente, ma non configurato come lo è, dai manutentori dei pacchetti, SEMPRE SEMBRA stupido perché i manutentori dei pacchetti non credono in un ragionevole valore predefinito. Siamo in grado di mettere 13 server root su Internet alias "djb way" o 10 server opennici: https://pastebin.com/JBfYVVtG o i tre server opennici più veloci, misurati da namebench. Più server dei nomi ISP, certo. Inoltre Google, certo. systemd-resolvednon è il problema. Io sono il problema


Sebbene probabilmente non desideri modificare un file /usr/lib, questi saranno probabilmente sovrascritti durante l'aggiornamento del pacchetto. Penso che un file corrispondente da qualche parte /etc/systemdsia la strada da percorrere (dovrebbe già avere un /etc/systemd/resolved.confpronto per essere modificato dagli amministratori).
Olorin

1
man resolved.conf.d, con d, yes /etc/systemd/resolved.d è il posto giusto. Sto notando che spesso dobbiamo mkdir /etc/[path[.d. bob @ laptop l /etc/systemd/resolved.conf.d ls: impossibile accedere a '/etc/systemd/resolved.conf.d': nessun file o directory del genere
BobDodds

0

Sul mio sistema ho trovato un cattivo collegamento simbolico: /etc/resolv.confera un collegamento simbolico a cui punta/run/systemd/resolve/stub-resolv.conf

Questo file contiene solo una riga:

nameserver 127.0.0.53#53

Di conseguenza, la ricerca DNS della rete locale mancava spesso.

Quindi, invece, ho cambiato /etc/reolv.confpunto/run/systemd/resolve/resolv.conf

e ora funziona correttamente.


0

È strano ma l'unica soluzione che ha funzionato per me su Ubuntu 18.04 era quella che ho trovato qui :

Innanzitutto, modifica /etc/resolv.confimpostando il nameserver desiderato :

# nano /etc/resolv.conf

Impostare, ad esempio,

nameserver 8.8.8.8

E poi fallo

# chattr +i /etc/resolv.conf

Questo protegge il /etc/resolv.conffile in modo che nessuno possa modificarlo, incluso l'utente root.


-3

Ho lo stesso problema. Ad ogni riavvio, nulla si risolverà. Ho disinstallato tutto e reinstallato circa 50 volte. È semplicemente rotto.

quindi la soluzione è .... "basta applicare alcune impostazioni ogni volta che si avvia il PC, il che consente di risolvere il 90% dei nomi host, ma gli aggiornamenti e gli aggiornamenti di wget e apt-get falliranno casualmente senza motivo"

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

Quando si utilizza Ubuntu 17.10 Desktop, è necessario modificare l'unico file che dice NON MODIFICARE QUESTO FILE BLAH BLAH BLAH

bene, questo è l'UNICO modo in cui funziona ~!

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

Quindi rimuovere l'IP 127.0.0.53 come server dei nomi e inserirne un altro, ad esempio Google. Sembra che il mio attuale indirizzo IP DNS non risolva i nomi host (anche se funziona su altre 10 macchine e dispositivi in ​​casa), ma Google funziona bene.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.