web-dev-qa-db-fra.com

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

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:

  • Que devrais-je mettre dans 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?
64
Witek

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 a publié sur son blog des informations à ce sujet 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 fichier resolv.conf. Cela signifie que vous ne devriez plus éditer directement /etc/resolv.conf; à 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é au moyen de 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 place nameserver 127.0.1.1 dans /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 le fichier /run/resolvconf/resolv.conf dans lequel /etc/resolv.conf est censé être un lien symbolique. Si /etc/resolv.conf n'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        
83
jdthood

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

Ouvrez le fichier /etc/NetworkManager/NetworkManager.conf.

Sudo gedit /etc/NetworkManager/NetworkManager.conf

Commentez la ligne en tant que:

#dnsmasq deactivated
#dns=dnsmasq
49
Richard Lindstedt

EDIT 2: le message précédent a été supprimé de manière légitime par la modération, je publie ce que j'ai trouvé être une solution. Désolé pour cela.

EDIT: Je viens de trouver la réponse et elle se trouve sur cette page même - désolé pour ma mini-copie. J'ai posté mes conclusions 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à lancé 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 consiste à 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é aux packages dnsmasq et resolvconf en conflit. Jusqu'au 12.10, dnsmasq était utilisé. À partir de 13.04, Ubuntu a semblé basculer vers un hybride dnsmasq/resolvconf, dans lequel vous avez installé les paquets dnsmasq-base et resolvconf, mais pas dnsmasq.

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 est que le script de mise à niveau ne parvient pas à commenter la ligne dns=dnsmasq dans /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.

20
Henrique

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

il vous suffit ensuite de faire un "redémarrage du réseau de service Sudo" et vous êtes prêt à partir!

7
sprut