65 votes

Mauvais serveur de noms défini par resolvconf et NetworkManager

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 en utilisant ce DNS, mais ma VM Ubuntu ne le fait pas.

La VM est configurée avec un réseau en pont et reçoit correctement le serveur DNS, mais mes noms d'hôtes locaux ne sont pas résolus par nslookup ou les navigateurs.

Voici un nslookup d'un 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 devrait 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 lancé cette commande. Sous Serveurs DNS, confusément, elle spécifie 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 la résoudre si je change de réseau.

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

1voto

ookangzheng Points 21

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

Utilisez l'éditeur nano pour modifier ces 2 fichiers

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

Ajouter les serveurs DNS que vous voulez 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églé le problème sur mon ordinateur portable à la maison, mais à l'avenir, lorsque je ne serai pas sur mon réseau domestique, je peux voir que cela posera des problèmes, car les serveurs DNS primaire et secondaire seront toujours mes serveurs domestiques avec leurs adresses lan.

1voto

Wildstalker Points 31

J'ai mis en place un script qui contourne le problème de Netplan qui ne prend pas actuellement en charge la possibilité de remplacer les serveurs DNS fournis par DHCP et l'ordre de recherche de domaine. Il crée le fichier yaml de Netplan et configure systemd-resolved 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

0voto

Artem S Points 1

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

D'abord, changez /etc/resolv.conf en réglant les serveur de noms :

# nano /etc/resolv.conf

Set, par exemple,

nameserver 8.8.8.8

Et ensuite faire

# chattr +i /etc/resolv.conf

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

0voto

BobDodds Points 51

Je viens de repasser par là sur une autre machine. J'ai décidé de vivre avec le résolu de systemd et avec networkmanager en éditant le fichier resolved.conf, /etc/systemd/resolved.conf, et en configurant networkmanager pour qu'il utilise le même serveur dns. Empêchez le stub listener de prendre en charge le dns :

/etc/systemd/resolved.conf:
[Resolve]
DNS=192.168.0.1
#FallbackDNS=
#Domains=
#LLMNR=no
#MulticastDNS=no
#DNSSEC=no
#Cache=yes
DNSStubListener=no

...puis allez dans NetworkManager et empêchez nm d'utiliser dhcp pour acquérir une IP de serveur de noms. Désactivez l'option Automatique pour le DNS, définissez l'adresse IP du serveur de noms.

0voto

Je n'ai réussi à faire fonctionner la résolution de nom avec Docker qu'en désactivant systemd-resolved complètement :

systemctl stop systemd-resolved
systemctl disable systemd-resolved

Puis éditez /etc/resolv.conf comme vous l'auriez fait à l'époque pré-systemd.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X