Mauvais serveur de noms défini par resolvconf et NetworkManager

34

Mon serveur DNS est 192.168.1.152.

Ce DNS est fourni aux clients par DHCP. Les clients Windows sur mon réseau local résolvent les noms correctement à l'aide de ce DNS, mais ce n'est pas le cas de ma machine virtuelle Ubuntu.

La machine virtuelle est configurée avec un réseau de pont et le serveur DNS est correctement fourni, mais mes noms d'hôte locaux ne sont pas résolus par nslookup ou les navigateurs.

Voici nslookupun de mes domaines locaux:

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

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

Voici ce qu'il faut résoudre en utilisant mon serveur 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 a un mauvais serveur de noms:

# 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

J'ai couru cette commande. Sous Serveurs DNS, il est difficile de spécifier le bon serveur (et ma passerelle par défaut).

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

Je ne veux pas "coder en dur" l'adresse IP du serveur DNS dans un fichier de configuration car je ne pourrai pas résoudre le problème lorsque je changerai de réseau.

Comment puis-je obtenir que resolvconf et NetworkManager définissent automatiquement l'adresse IP du serveur DHCP /etc/resolv.conf?

FireSpore
la source

Réponses:

37

Essayez de modifier /etc/systemd/resolved.confen ajoutant votre serveur DNS souhaité:

change ça:

[Resolve]
#DNS=

à ceci (mais utilisez celui que vous voulez - ceci est un exemple):

[Resolve]
DNS=192.168.1.152

après cela, redémarrez le service:

service systemd-resolved restart

Et quand vous vérifiez le statut, vous devriez voir

$ 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
la source
Voici l’état systemd-resolution --status après la modification de /etc/systemd/resolved.conf pastebin.com/AeUFQkyB. Les navigateurs ne parviennent toujours pas à résoudre les noms également.
FireSpore
12
Systemd est tellement cassé. DHCP indique à l'hôte ce que devrait être le DNS (et une foule d'autres paramètres réseau), vous ne devriez pas avoir à modifier les fichiers de l'hôte pour que cela fonctionne.
Teknopaul
4
Ne semble pas optimal, vous devrez le faire chaque fois que vous changerez de serveur / réseau DNS
Victor
1
Vous auriez besoin de reconfigurer chaque fois que l'IP DNS est modifiée (par exemple sur différents réseaux).
Victor
34

Bug système connu .

Solution de contournement temporaire sans qu'il soit nécessaire de reconfigurer si l'IP du DNS change:

sudo rm -f /etc/resolv.conf
sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
reboot
teknopaul
la source
2
Cette solution a fonctionné quelque peu, les commandes host et nslookup résolvent les noms correctement, mais wget et les navigateurs ne le sont pas
FireSpore
1
c’est correct ... le bogue actuel est que le lien menant à bollox /etc/resolv.confprovient de /run/systemd/resolve/stub-resolv.confbollox, il devrait être /run/systemd/resolve/resolv.conf noté qu’il /etc/resolv.confn’existe pas vraiment dans les deux cas
M. Heelis
@ FireSpore: ça pingmarche alors? hostet nslookuprésolvez les noms d'hôtes différemment de pingou wget. Vous devrez peut-être rechercher /etc/nsswitch.confune solution.
HongboZhu le
9

J'ai finalement obtenu une solution à ce problème pour Ubuntu 17.10. Par défaut, cette version d'Ubuntu utilise systemd-resolved, j'espère qu'elle sera stable pour les prochaines versions.

Pour utiliser des DNS personnalisés à la place du cache local résolu par systemd, procédez comme suit:

  1. ajouter de nouveaux serveurs de noms. Editez le fichier en /etc/systemd/resolved.conftant que sudoer. Ici, j'ai commenté l'entrée DNS et placé mon DNS [Resolve] DNS=10.96.0.10 8.8.8.8 8.8.4.4

  2. annuler le lien symbolique actuel vers /etc/resolv.conf

  3. créer un nouveau lien symbolique sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
  4. redémarrer le service sudo service systemd-resolved restart
  5. redémarrer le gestionnaire de réseau sudo systemctl restart networking

Et maintenant, si vous creusez un nom fourni par votre add DNS, vous devriez voir l'enregistrement résolu dig nexus.default.svc.cluster.mydomain

La dernière étape consiste à mettre à jour l’ordre de résolution dans /etc/nsswitch.conf, en plaçant le DNS avant le mdns4_minimal

hosts           files dns mdns4_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] myhostname
Fabio Fumarola
la source
1
Vous auriez besoin de reconfigurer chaque fois que l'IP DNS est modifiée (par exemple sur différents réseaux).
Victor
Victor, as-tu la meilleure solution? c'est la même chose si vous utilisez la configuration statique du réseau
Fabio Fumarola le
Cette réponse fonctionne pour les configurations statiques et dynamiques: askubuntu.com/a/974482/343617
Victor
merci, la solution que j'ai indiquée était statique. Je suis d'accord
Fabio Fumarola
Cela a juste fonctionné pour moi sur une nouvelle installation de 18.04
JamesCW
1

J'ai mis en place un script qui résout le problème de Netplan ne prenant pas en charge la possibilité de remplacer les serveurs DNS fournis par DHCP et l'ordre de recherche de domaine. Il crée le fichier Netplan yaml et configure systemd-resol pour fonctionner comme prévu.

################## 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
la source
1

La solution qui a fonctionné pour moi est affichée ici sur mon blog

Utilisez nano editor pour éditer ces 2 fichiers

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

Ajouter les serveurs DNS que vous souhaitez utiliser

nameserver 9.9.9.9
nameserver 127.0.0.1

Puis redémarrez le service

service systemd-resolved restart

Vérification finale:

cat /etc/resolv.conf

Faire nslookup

nslookup google.com 

Je viens de l'utiliser et cela a résolu le problème sur mon ordinateur portable à la maison, mais quelque temps dans l'avenir, quand je serai hors de mon réseau domestique, je peux voir que cela causera des problèmes, car le serveur DNS principal et secondaire sera toujours mon domicile. serveurs avec leurs adresses LAN.

ookangzheng
la source
2
Vous auriez besoin de reconfigurer chaque fois que l'IP DNS est modifiée (par exemple sur différents réseaux).
Victor
ce n'est pas élégant, mais ça marche parfois, sabotez mon coucher.
Rodrigo Ferrari
La modification /etc/resolv.confne fonctionne pas car le fichier sera écrasé lors du systemd-resolvedredémarrage. Juste éditer /etc/systemd/resolved.conf. Voir ma réponse ici: askubuntu.com/questions/977243/ubuntu-17-10-disable-netplan/…
EnzoR
1

Votre /etc/resolv.confn'est pas le problème. systemd-resolvedjuste par défaut à non configuré, de sorte qu'il échoue toutes les recherches. N'hésitez pas à vous plaindre à propos de Unconfigured vs A Reasonable Default.

Ajoutez manuellement des serveurs de noms à systemd-resolved. (éditer selon le commentaire d'Olorin ci-dessous pour ajouter mkdir, /etcne pas corriger le chemin /lib, afin de survivre aux mises à jour du système)

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

Ajouter:

[Resolved]
Cache=yes
DNS=192.168.1.152

Ensuite...

sudo systemctl daemon-reload

systemd-resolvedest intelligent, mais, non configuré comme il est, par les responsables de paquets, il regarde juste stupide parce que les responsables de paquets ne croient pas en un défaut raisonnable. Nous pouvons y placer 13 serveurs racine Internet "alias djb way", ou 10 serveurs opennic: https://pastebin.com/JBfYVVtG ou les trois serveurs opennic les plus rapides, tels que mesurés par namebench. Plus les serveurs de noms FAI, bien sûr. Plus Google, bien sûr. systemd-resolvedn'est pas le problème. Je suis le problème.

BobDodds
la source
Bien que vous ne souhaitiez probablement pas éditer un fichier /usr/lib, ceux-ci seront probablement écrasés lors de la mise à niveau du paquet. Je pense qu'un fichier correspondant quelque part /etc/systemdest la voie à suivre (il devrait déjà être /etc/systemd/resolved.confprêt à être édité par les administrateurs).
Olorin
1
manolved.conf.d, avec le d, oui /etc/systemd/resolved.d est l'endroit. Je remarque que nous devons souvent mkdir /etc/[path].d. bob @ laptop l /etc/systemd/resolved.conf.d ls: impossible d'accéder à '/etc/systemd/resolved.conf.d': aucun fichier ou répertoire de ce type
BobDodds le
0

J'ai trouvé un mauvais lien symbolique sur mon système: /etc/resolv.confétait-ce un lien symbolique qui pointe vers/run/systemd/resolve/stub-resolv.conf

Ce fichier contient une seule ligne:

nameserver 127.0.0.53#53

En conséquence, la recherche DNS du réseau local était souvent manquante.

Donc, au lieu de cela, j'ai changé /etc/reolv.confpour indiquer/run/systemd/resolve/resolv.conf

et fonctionne maintenant correctement.

Bánó Gábor
la source
0

C'est étrange mais la seule solution qui a fonctionné pour moi sur Ubuntu 18.04 est celle que j'ai trouvée ici :

Commencez /etc/resolv.confpar changer en définissant le serveur de noms souhaité :

# nano /etc/resolv.conf

Définir, par exemple,

nameserver 8.8.8.8

Et ensuite

# chattr +i /etc/resolv.conf

Cela protège le /etc/resolv.conffichier de sorte que personne ne puisse le modifier, y compris l'utilisateur root.

Artem S
la source
-3

J'ai le même problème. Chaque redémarrage, rien ne résoudra. J'ai tout désinstallé et déjà réinstallé environ 50 fois. C'est tout simplement cassé.

le correctif est donc .... "il suffit d'appliquer quelques paramètres chaque fois que vous démarrez votre ordinateur, ce qui permet à 90% des noms d'hôte de se résoudre, mais les mises à jour et mises à niveau de wget et apt-get échoueront de manière aléatoire sans raison"

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

Si vous utilisez Ubuntu 17.10 Desktop, vous devez éditer le fichier qui dit NE PAS MODIFIER CE FICHIER BLAH BLAH BLAH

Eh bien c'est la seule façon que cela fonctionne ~!

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

Supprimez donc l'adresse IP 127.0.0.53 en tant que serveur de noms et entrez-en un autre, Google par exemple. Il semble que mon adresse IP DNS réelle ne résolve pas non plus les noms d’hôte (même si elle fonctionne sur 10 autres machines et appareils de la maison), mais celle de Google fonctionne bien.

délirant
la source