Поиск локального DNS не работает, несмотря на то, что все находится в /etc/hosts
Я использую Ubuntu (12.04) в Virtual Box и хочу, чтобы моя машина могла искать свое собственное имя хоста так же, как другие виртуальные машины будут делать в этой сети (я пытаюсь создать виртуальный кластер). DNS-сервера нет, IP назначаются VirtualBox, и я просто сопоставляю их в /etc/hosts.
Имя машины - node1, и у меня есть / etc / hosts вот так:
[email protected]:~$ 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
Так что я бы предположил, что
- Полностью определенное имя хоста будет node1-VirtualBox.cs.ucl.ac.uk
- node1 и node1-VirtualBox.cs.ucl.ac.uk будут преобразованы в 192.168.56.103 (и наоборот)
От имени хоста я получаю это:
$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)
имя хоста выглядит многообещающе, но когда я пытаюсь получить IP-адреса, используя хост, это не работает...
[email protected]:~$ 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
[email protected]:~$ 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
Есть идеи, почему это не работает? Из того, что я читаю и вижу в конфиге, если DNS выполняется на localhost, он должен просто проверить /etc/hosts... и все там, верно? И SSH работает, так ясно, этот файл правильный?
Ниже моей конфигурации:
# /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)
ПОСТ МОРТЕМ:
Ладно, оказалось, что не разрешенная команда "host" была немного красной селедкой для моей первоначальной проблемы - она не могла работать, потому что не просматривает / etc / hosts, как объяснено в ответах ниже.
Первоначальной проблемой было отсутствие канонического имени хоста, т.е. hostname --fqdn
возвращался localhost. Чтобы это исправить, мне нужно было это: 192.168.56.103 node1-VirtualBox.cs.ucl.ac.uk node1-VirtualBox
как вторая строка в моем /etc/hosts.
Однако для того, чтобы он действительно работал, мне пришлось перезагрузить мои машины и переустановить Cloudera на моем кластере.
2 ответа
Вы делаете все правильно, как положить записи в /etc/hosts
адрес сервера в /etc/resolv.conf
, /etc/nsswitch.conf
тоже хорошо выглядит.
Проблема, с которой вы столкнулись, связана с пониманием очень специфического термина "сервер имен". Все команды, используемые для преобразования IP-адреса в имя хоста и наоборот, использовали адреса сервера имен из /etc/resolv.conf
если не указано явно. Вы положили nameserver 127.0.0.1
который не является допустимым сервером имен, потому что он не настроен как сервер имен. Именно из-за dnsmasq
который действует как DNS-кешер (и DHCP-сервер), но host
, dig
, nslookup
принимать данные только с действительного, настроенного сервера имен.
Как host
, nslookup
, dig
Команды будут использовать "сервер имен", упомянутый в /etc/resolv.conf
(если не указано), разрешение имени хоста не будет работать, используя их в вашем случае. Хотя программы, которые используют /etc/nsswitch.conf
или читать /etc/hosts
разрешит имя хоста в IP-адреса и наоборот.
Если вы хотите разрешить имена хостов из /etc/hosts
вам нужно использовать getent
, Например, чтобы разрешить "node1-VirtualBox", вам нужна следующая команда:
getent hosts node1-VirtualBox
Командные утилиты host/nslookup пытаются разрешить DNS-запросы напрямую с помощью серверов имен. Они не используют /etc/hosts. Но приложения делают. Например, пинг должен работать. Таким образом, "ping node1-VirtualBox" должен разрешиться до 192.168.56.103 в вашем случае. Что именно вы хотите сделать?