Problème de résolution DNS avec Fedora 20

J'ai un nouveau server Fedora 20 que je viens d'accrocher à mon réseau. C'est un server virtuel fonctionnant sur un hôte VirtualBox. Tout semble fonctionner mais j'ai un problème avec la résolution du nom.

(Je devrais dire à ce stade que la résolution de noms est fournie par un server Windows sur un matériel séparé qui fonctionne bien pour chaque autre machine du réseau).

À partir de la command line, je peux résoudre un hôte externe comme unix.stackexchange.com . Je peux tout à fait heureusement résoudre cela et cingler, comme avec tous les autres hôtes externes que j'ai essayé.

Cependant, mon réseau local (appelons-le xyz.local ) est différent. L'interface réseau de ma machine F20 a DOMAIN=xyx.local dans le script réseau (script complet ci-dessous). À partir de la command line, je peux résoudre, disons, server-01 , mais pas server-01.xyz.local .

Je peux résoudre un alias sous forme abrégée, même si le nom canonique est la forme longue. Par exemple, ping mysql résout avec succès son alias linux-04.xyz.local , mais je ne peux résoudre ni mysql.xyz.local ni linux-04.xyz.local .

De toute évidence, j'ai manqué quelque chose. Quelqu'un peut-il suggérer quoi?

/ etc / hosts n'a que les inputs standard localhost pour 127.0.0.1

/etc/resolv.conf est la suivante:

 #Generated by Network Manager search xyz.local nameserver 192.168.xxx.xxx 

Mon script d'interface est

 TYPE=Ethernet BOOTPROTO=none DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no NAME="Wired connection 1" UUID=<uuid> ONBOOT=yes IPADDR0=192.168.xxx.xxx PREFIX0=24 GATEWAY0=192.168.xxx.xxx DNS1=192.168.xxx.xxx HWADDR=<mac> DOMAIN=xyz.local IPV6_PEERDNS=yes IPV6_PEERROUTES=yes 

Une partie de votre problème est probablement due à votre path de search généré automatiquement via NetworkManager:

 search xyz.local 

Cette ligne devrait vraiment être ceci:

 search xyz.local. 

La période à la fin est critique car cela indique au résolveur DNS de s'arrêter. Donc, ça ne vous fera pas des choses comme ça:

 mysql.xyz.local.xyz.local 

Vous pouvez le confirmer en essayant de résoudre les noms d'hôtes en ajoutant manuellement une période vous-même, temporairement.

 $ nslookup mysql.xyz.local. 

Résoudre ce domaine à l'échelle

Pour résoudre ce problème, vous devez modifier la définition de votre domaine sur votre server DHCP afin qu'il serve le domaine en tant que xyz.local. .

/etc/nsswitch.conf

La méthode utilisée pour résoudre un nom d'hôte est contrôlée par le file /etc/nsswitch.conf . La notation NSS, signifie Nom Service Switch, et vous pouvez en savoir plus à ce sujet via la page de manuel, man nss .

Voici la ligne de mon file qui contrôle comment les noms d'hôtes sont résolus:

 $ grep ^hosts /etc/nsswitch.conf hosts: files dns mdns4_minimal 

Il regarde dans mon file local, /etc/hosts , d'abord, puis interroge DNS 2ème.

Le problème est dû au mot key "mdns4_minimal" dans le file nsswitch.conf. Ce mot-key indique au résolveur que tout ce qui se termine par local doit être interrogé à l'aide de mdns. Il devrait suffire d'enlever ce mot-key (et les options supplémentaires habituellement indiquées entre crochets).

Plus de détails vous pouvez find dans mon post

La raison pour laquelle nslookup résout tout, c'est parce qu'elle ne regarde pas nsswitch.conf mais utilise directement /etc/resolv.conf. ping, d'autre part, dépend de résolveur qui regarde d'abord dans nsswitch.conf et résout le nom en utilisant ce qui y est écrit.