Я запускаю Ubuntu (12.04) на Виртуальном Поле и хочу, чтобы моя машина смогла к поиску свое собственное имя хоста, тот же способ, которым другой VMs сделает в этой сети (я пытаюсь создать виртуальный кластер). Нет никакого сервера DNS, IP присвоены VirtualBox, и я просто отображаю их в/etc/hosts.
Название машины является node1, и у меня есть/etc/hosts как этот:
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
Таким образом, я принял бы это
От имени хоста я получаю это:
$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-адреса с помощью хоста, оно не работает...
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
Какая-либо идея, почему это не работает? Из того, что я читал и вижу в конфигурации, если 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)
После смерти:
Хорошо, оказывается, что команда "хоста", не решая была небольшим количеством отвлекающего маневра для моей исходной проблемы - это не могло работать, потому что это не изучает/etc/hosts, как объяснено в ответах ниже.
Первичным размещением было отсутствие канонического имени хоста т.е. hostname --fqdn
возвращал localhost. Для фиксации его, у меня должно было быть это: 192.168.56.103 node1-VirtualBox.cs.ucl.ac.uk node1-VirtualBox
как вторая строка в моем/etc/hosts.
Однако для того, чтобы заставить его на самом деле работать я должен был перезапустить свои машины и переустановить Cloudera на моем кластере.
Вы делаете все правильно как вставление записей /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 должен работать. Таким образом, "проверьте с помощью ping-запросов node1-VirtualBox", должен решить к 192.168.56.103 в Вашем случае. Что Вы хотите сделать точно?