私はUbuntu(12.04)をVirtual Boxで実行していますが、このネットワークで他のVMが行うのと同じように、自分のマシンが自身のホスト名を検索できるようにしたいです(仮想クラスターを構築しようとしています)。 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で行われている場合、configで読み取って確認した内容から、/ 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)
事後調査:
[OK]、解決しない「ホスト」コマンドは、私の元の問題の少しのニシンであることがわかりました-以下の回答で説明されているように、/ etc/hostsを調べないため動作しませんでした。
元の問題は、正規のホスト名の不足でした。つまり、hostname --fqdn
はlocalhostを返していました。これを修正するには、/ etc/hostsの2行目に192.168.56.103 node1-VirtualBox.cs.ucl.ac.uk node1-VirtualBox
が必要でした。
ただし、実際に機能させるには、マシンを再起動して、Clouderaをクラスターに再インストールする必要がありました。
/etc/hosts
にエントリを配置する、/etc/resolv.conf
にサーバーアドレスを配置する、/etc/nsswitch.conf
を入力するなど、すべてを正しく実行しています。
あなたが抱えている問題は、非常に特定の用語「ネームサーバー」の理解によるものです。 IPアドレスをホスト名に解決するために使用されるすべてのコマンド、およびその逆は、明示的に言及されない限り、/etc/resolv.conf
からのネームサーバーアドレスを使用しました。ネームサーバーとして構成されていないため、有効なネームサーバーではないnameserver 127.0.0.1
を配置しました。これは、DNSキャッシュ(およびDHCPサーバー)として機能するdnsmasq
が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に解決されるはずです。正確に何をしたいですか?