J'exécute Ubuntu (12.04) sur Virtual Box et souhaite que ma machine puisse rechercher son propre nom d'hôte, de la même manière que les autres machines virtuelles fonctionneront sur ce réseau (j'essaie de créer un cluster virtuel). Il n'y a pas de serveur DNS, les adresses IP sont attribuées par VirtualBox, et je les mappe dans/etc/hosts.
Le nom de la machine est node1 et j'ai/etc/hosts comme ça:
user@node1-VirtualBox:~$ cat /etc/hosts
127.0.0.1 localhost
192.168.56.103 node1-VirtualBox.cs.ucl.ac.uk node1-VirtualBox
#10.0.2.15 node1-VirtualBox
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
Donc, je suppose que
De nom d'hôte, je reçois ceci:
$hostname -> node1-VirtualBox (OK)
$hostname --fqdn -> node1-VirtualBox.cs.ucl.ac.uk (OK)
$hostname --A -> node1.local node1.cs.ucl.ac.uk (OK i guess)
le nom d'hôte semble prometteur, mais lorsque j'essaie d'obtenir des adresses IP à l'aide de Host, cela ne fonctionne pas ...
user@node1-VirtualBox:~$ Host -v -t A node1-VirtualBox
Trying "node1-VirtualBox.cs.ucl.ac.uk"
Trying "node1-VirtualBox"
Host node1-VirtualBox not found: 3(NXDOMAIN)
Received 110 bytes from 127.0.0.1#53 in 1 ms
user@node1-VirtualBox:~$ Host -v -t A 192.168.56.103
Trying "103.56.168.192.in-addr.arpa"
Host 103.56.168.192.in-addr.arpa. not found: 3(NXDOMAIN)
Received 108 bytes from 127.0.0.1#53 in 2 ms
Une idée pourquoi ça ne marche pas? D'après ce que je lis et vois dans config, si le DNS est fait sur localhost, il devrait juste vérifier/etc/hosts ... et tout est là, non? Et SSH fonctionne, alors clairement ce fichier est correct?
Ci-dessous ma configuration:
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.
passwd: compat group: compat shadow: compat
hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 networks: files
protocols: db files services: db files ethers: db files rpc: db files
netgroup: nis
resolv.conf:
# 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
nameserver 127.0.0.1
search cs.ucl.ac.uk
ifconfig:
eth0 Link encap:Ethernet HWaddr 08:00:27:da:a1:bc
inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:feda:a1bc/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:169 errors:0 dropped:0 overruns:0 frame:0
TX packets:176 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:123968 (123.9 KB) TX bytes:21551 (21.5 KB)
eth1 Link encap:Ethernet HWaddr 08:00:27:99:65:51
inet addr:192.168.56.103 Bcast:192.168.255.255 Mask:255.255.0.0
inet6 addr: fe80::a00:27ff:fe99:6551/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:268 errors:0 dropped:0 overruns:0 frame:0
TX packets:252 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:78333 (78.3 KB) TX bytes:71866 (71.8 KB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:12527 errors:0 dropped:0 overruns:0 frame:0
TX packets:12527 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:23857104 (23.8 MB) TX bytes:23857104 (23.8 MB)
POST MORTEM:
Ok, il s’avère que la commande "Host" qui ne résout pas le problème est un peu compliqué par rapport à mon problème initial - cela ne pourrait pas fonctionner car il ne prend pas en compte/etc/hosts, comme expliqué dans les réponses ci-dessous.
Le problème original était l’absence de nom d’hôte canonique, c.-à-d. hostname --fqdn
retournait localhost. Pour résoudre ce problème, je devais avoir ceci: 192.168.56.103 node1-VirtualBox.cs.ucl.ac.uk node1-VirtualBox
en deuxième ligne de mon/etc/hosts.
Cependant, pour que cela fonctionne réellement, je devais redémarrer mes machines et réinstaller Cloudera sur mon cluster.
Vous faites tout ce que vous voulez, comme mettre les entrées dans /etc/hosts
, l'adresse du serveur dans /etc/resolv.conf
, le /etc/nsswitch.conf
a également une belle apparence.
Le problème que vous rencontrez est dû à la compréhension d'un terme très spécifique "serveur de noms". Toutes les commandes utilisées pour résoudre l'adresse IP en nom d'hôte et inversement utilisaient les adresses de serveur de noms de /etc/resolv.conf
sauf mention explicite. Vous avez mis nameserver 127.0.0.1
qui n'est pas un serveur de noms valide car il n'est pas configuré en tant que serveur de noms. C’est là parce que dnsmasq
agit comme un cache DNS (et un serveur DHCP), mais Host
, Dig
, nslookup
prennent uniquement les données d’un serveur de noms valide et configuré.
Comme les commandes Host
, nslookup
, Dig
utiliseront le "serveur de noms" mentionné dans /etc/resolv.conf
(sauf indication contraire), la résolution du nom d'hôte ne fonctionnera pas dans votre cas. Bien que les programmes qui utilisent /etc/nsswitch.conf
ou read /etc/hosts
résolvent le nom d'hôte en adresses IP et inversement.
Si vous voulez résoudre les noms d’hôte à partir de /etc/hosts
vous devez utiliser getent
. Par exemple, pour résoudre "node1-VirtualBox", vous avez besoin de la commande suivante:
getent hosts node1-VirtualBox
Les utilitaires de commande hôte/nslookup tentent de résoudre les requêtes DNS directement à l’aide de serveurs de noms. Ils n'utilisent pas/etc/hosts. Mais les applications font. Par exemple, ping devrait fonctionner. En d'autres termes, "ping node1-VirtualBox" doit être remplacé par 192.168.56.103 dans votre cas. Que veux-tu faire exactement?