Comment corriger la résolution DNS qui ne fonctionne pas après la mise à niveau vers Ubuntu 13.10 (Saucy)

64

Après la mise à niveau vers 13.10, la résolution DNS échoue. Il semble que les serveurs DNS que je reçois par DHCP (LAN) ne sont pas utilisés.

Je pourrais temporairement résoudre le problème en ajoutant nameserver 8.8.8.8à /etc/resolv.conf. Mais alors, les hôtes intranet ne peuvent toujours pas être résolus.

Lorsque vous cliquez sur l' élément de menu Informations de connexion sur l'indicateur de réseau, le DNS principal et le DNS secondaire sont correctement définis. Mais mon ordinateur semble ne pas les utiliser.

Donc mes questions:

  • Dans quoi devrais-je mettre resolv.conf, le cas échéant?
  • Comment savoir quels serveurs de noms sont interrogés par mon ordinateur?
  • Où chercher ensuite pour savoir pourquoi les serveurs de noms reçus par DHCP ne sont pas utilisés?
Witek
la source
2
J'ai eu le même problème lors de la mise à niveau de 12.04 à 14.04.
Tarrasch
6
J'ai eu des échecs DNS quotidiens depuis la mise à niveau à 16.10 il y a quelques jours.
WindRider
@WindRider a le même problème, le truc avec Dnsmasq ci-dessous semble fonctionner.
Suor
J'ai eu le problème sur une nouvelle installation Lubuntu 17.04 et l'a résolu en ajoutant manuellement les URL nécessaires au fichier hosts: askubuntu.com/a/936972/34298
rubo77

Réponses:

83

Tout d’abord, vous devez connaître un peu le fonctionnement de la résolution de noms sous Ubuntu depuis Ubuntu 12.04.

Stéphane Graber blogué quelques informations sur l'année dernière ici . La chose la plus importante à savoir est que Ubuntu Server et Ubuntu Desktop utilisent resolvconf pour gérer le resolv.conffichier. Cela signifie que vous ne devriez plus éditer /etc/resolv.confdirectement; à la place, vous devez configurer votre utilitaire de configuration d'interface réseau pour fournir les informations appropriées à resolvconf. Pour Ubuntu Server, l'utilitaire de configuration de l'interface réseau est ifup et il est configuré par le fichier /etc/network/interfaces. Pour Ubuntu Desktop, l’utilitaire de configuration de l’interface réseau est NetworkManager . C'est ce que vous utilisez.

NetworkManager est configuré à l'aide de l' indicateur de réseau> Modifier les connexions . Cependant, pour les interfaces réseau configurées par DHCP, il n'est normalement pas nécessaire de modifier manuellement les paramètres. Normalement, le serveur DHCP (distant) fournit à NetworkManager à la fois une adresse IP pour l'interface locale et l'adresse d'un serveur de noms DNS (distant) à utiliser. NetworkManager démarre une instance d'un serveur de noms de transfert qui écoute localement en 127.0.1.1. Cette adresse, 127.0.1.1, est envoyée à resolvconf qui met nameserver 127.0.1.1en/etc/resolv.conf. NetworkManager attribue également l'adresse IP (distante) du serveur de noms DNS fourni par DHCP au serveur de noms de transfert. Ainsi, un programme exécuté sur le système local demande au résolveur de convertir un nom d’hôte en une adresse IP; le résolveur interroge le serveur de noms de transfert local en 127.0.1.1; le serveur de noms de transfert interroge le ou les serveurs de noms distants dont il a été informé, reçoit une réponse et la renvoie dans la chaîne.

NetworkManager communique avec le processus de serveur de noms de transfert via D-Bus. Vous pouvez voir ce que NetworkManager a dit au serveur de noms de transfert en exécutant la commande

nmcli dev list iface eth0 | grep IP4.DNS

Mise à jour résultant des commentaires:
Notez que resolvconf écrit réellement le fichier /run/resolvconf/resolv.confsur lequel /etc/resolv.confest supposé être un lien symbolique. Si ce /etc/resolv.confn'est pas un lien symbolique, vous devez le recréer. Pour ce faire, vous pouvez courir

sudo dpkg-reconfigure resolvconf

ou

sudo ln -sf /run/resolvconf/resolv.conf /etc/resolv.conf        
jdthood
la source
Merci beaucoup pour cette information. Dans mon cas, la commande affiche les serveurs DNS corrects. Mais le fichier resolf.conf n'est pas mis à jour. Il a l'horodatage de quand j'y ai mis mes valeurs. Je vais donc devoir découvrir pourquoi resolvconf n'écrit pas le fichier.
Witek
15
Resolvconf écrit en fait le fichier /run/resolvconf/resolv.conf et /etc/resolv.conf est supposé être un lien symbolique vers /run/resolvconf/resolv.conf. Si vous avez supprimé /etc/resolv.conf, vous avez supprimé le lien symbolique. Pour recréer le lien symbolique, vous pouvez exécuter sudo dpkg-reconfigure resolvconfou effectuermv /etc/resolv.conf /run/resolvconf/resolv.conf && ln -s ../run/resolvconf/resolv.conf /etc/resolv.conf
jeudi
7
Cela a tout sauf le «correctif». Comment puis-je résoudre ce problème?
Amal Murali
5
La solution peut être de fonctionner sudo dpkg-reconfigure resolvconfcomme suggéré dans la dernière partie de la réponse.
jdthood
Je vous remercie!!! Je ne suis pas sûr de ce qu'il est advenu de mon système, mais cela sudo dpkg-reconfigure resolveconfsemblait fonctionner parfaitement!
meanbunny
49

J'ai apporté le changement suggéré sur le lien ci-dessous (en désactivant Dnsmasq). Maintenant tout fonctionne bien! http://www.ubuntugeek.com/how-to-disable-dnsmasq-in-ubuntu-12-04precise.html

Ouvrir le /etc/NetworkManager/NetworkManager.conffichier.

sudo gedit /etc/NetworkManager/NetworkManager.conf

Commenter la ligne en tant que:

#dnsmasq deactivated
#dns=dnsmasq
Richard Lindstedt
la source
4
Après avoir commenté sur Dnsmasq, vous devez redémarrer gestionnaire de réseau: sudo restart network-manager.
Don Kirkby
2
Dans mon cas (Xubuntu) la commande est la suivante: sudo /etc/init.d/network-manager restart
aviram83
Si cela vous arrive, même s’il n’ya pas de dnsmasq installé et qu’il n’ya rien à dire, ajoutez-le dns=defaultà la [main]section. NetworkManager a son propre plugin méchant Dnsmasq qu'il utilisera sinon.
dstibbe
1
Je dois faire ce redémarrage network-manager-sudo service network-manager restart
Sungam
Un de mes ordinateurs n’avait pas de DNS après la mise à niveau vers 17.10 et il s'avère que le fichier /etc/resolv.conf n’était pas un lien symbolique. Fixe le. Une autre boîte n’a pas terminé la mise à niveau et j’ai trouvé un fichier .dpkg-new dans le répertoire. La différence principale est Dnsmasq. Copié encore et travaillé sans redémarrer tout démon
fchen
20

EDIT 2: le post précédent a été supprimé à juste titre par la modération, je publie ce que j'ai trouvé être une solution. Désolé.

EDIT: Je viens de trouver la réponse et elle se trouve dans cette page même - désolé pour ma copie. J'ai posté mes résultats ci-dessous, développant la réponse correcte de Richard Lindstedt trouvée dans cette page. J'ai quitté mon début gronder pour un peu de contexte. S'il vous plaît upvote Richard réponse, il le mérite.

C'est vraiment très facile.

ouvrez simplement le fichier de configuration de vos interfaces -> sudo vi / etc / network / interfaces

Cela n’a pas aidé le PO et ne m’aide pas pour le moment. Nous ne voulons pas d'adresses statiques, nous voulons utiliser celles que le serveur DHCP nous envoie. NetworkManager semble les reconnaître, mais Ubuntu les ignore carrément:

# nmcli dev list iface wlan0 | grep IP4.DNS
IP4.DNS[1]:          10.*.*.*
IP4.DNS[2]:          10.*.*.*
IP4.DNS[3]:          8.8.8.8

Mais...

# dig microsoft.com
; <<>> DiG 9.9.5-4.3-Ubuntu <<>> microsoft.com
;; global options: cmd
;; connection timed out; no servers could be reached

Et mon / etc / network / interfaces est:

auto lo
iface lo inet loopback

ce qui est un peu étrange, je m'attendrais à ce que toutes les interfaces soient déclarées ici (ou est-ce que quelque chose me manque?).

Donc, en bref:

  • Je n'ai joué avec aucun fichier pour commencer
  • J'ai déjà couru dpkg-reconfigure resolvconf
  • Le bon lien symbolique est en place
  • NetworkManager récupère les serveurs DNS appropriés à partir de DHCP
  • Ubuntu n'utilise pas de telles adresses
  • La solution de contournement est de mettre 8.8.8.8 corrigé sur / etc / network / interfaces CE QUE JE NE VEUX PAS
  • Je souhaite utiliser les serveurs DNS fournis par DHCP dans toutes les situations.

Ne pas ouvrir un autre thread car c'est le problème exact, sauf que je suis sur 14.10 maintenant (mais cela me harcelait depuis la mise à jour de 12.10 à 13.04).

SOLUTION

Cette dernière phrase m'a mis sur la bonne voie, et c'est alors seulement que j'ai remarqué la réponse de Richard.

Le problème semble être lié au conflit dnsmasqet aux resolvconfpaquets. Jusqu'au 12.10, a dnsmasqété utilisé. À partir de 13.04, Ubuntu a semblé basculer vers un hybride dnsmasq / resolvconf, où vous avez installé les paquetages dnsmasq-baseet resolvconfpas dnsmasqlui-même.

Je ne peux pas dire s'il s'agit d'un bogue dans les scripts de mise à niveau pour 13.04 ou autre chose, car lors de la mise à niveau (comme dans les nouvelles installations), resolvconf est installé, dnsmasq-base est mis à niveau et dnsmasq est (correctement) désinstallé.

Le problème, c'est que le script de mise à niveau ne parvient pas à commenter la dns=dnsmasqligne /etc/NetworkManager/NetworkManager.conf. Ainsi, même si le démon dnsmasq n’est plus présent sur le système, /etc/resolv.conf s’y attend toujours.

Henrique
la source
C'EST TELLEMENT IMPRESSIONNANT!
Métadings
1
OMG cela a résolu mes problèmes de DNS que j'ai eu au cours des 3 dernières années! Si vous avez dnsmasqet dnsmasq-baseinstallé, NM mettra 127.0.0.1à la /etc/resolv.confplace de 127.0.1.1. J'ai simplement désinstallé dnsmasq(et activé NM) et tout fonctionne très bien.
user1129682
4
Les futurs Googlers doivent noter que vous devez pour sudo service network-manager restartque cela prenne effet.
Timelmer
Bon point au redémarrage du service network-manager!
Henrique
7

C'est vraiment très facile.

ouvrez simplement le fichier de configuration de vos interfaces -> sudo vi / etc / network / interfaces

et sous votre interface (probablement eth0), vous verrez toute la configuration habituelle.

address 192.168.22.71
netmask 255.255.255.0
gateway 192.168.22.1

Après la passerelle, ajoutez simplement 'dns-nameservers 8.8.8.8 8.8.8.9' ou le serveur de noms de votre choix.

Donc, votre configuration devrait être:

address 192.168.22.71
netmask 255.255.255.0
gateway 192.168.22.1
dns-nameservers 8.8.8.8 8.8.8.9

Ensuite, faites un 'redémarrage du réseau de services sudo' et vous êtes prêt à partir!

sprut
la source