web-dev-qa-db-ja.com

ubuntuサーバーがLANホスト名を解決しない

ここにビットが詰まっています。

/ etc/hostsに特定のエントリがない限り、LANホスト名を解決できないマシンが2台あります

しかし、LAN上の他のマシンcanはホスト名を解決します。

私のLAN:

  • DNSMasqを有効にしたDD-WRT v24-sp2を実行している1台のCiscoルーター。 LAN上のホスト名とIPを使用してこれを構成しました。
  • 1 x Kubuntu 12.10(ルーターのDNSMasqに入力されている限り、すべてのホスト名を正しく解決します)
  • 2 x NAS(すべての名前も正しく解決する)

  • 1 x Ubuntu Server 12.04(/ etc/hostsに入力されない限り、これはローカルホスト名を解決しません)

  • 1 x XBMCLive(Dharma)(同じ-エントリが/ etc/hostsにない限り解決しない)

ルーターでDNSMasqエントリを使用する最後の2つを取得するにはどうすればよいですか?各マシンは、ルーターをネームサーバーとして使用するように設定されており、すべてのユニットが外部アドレスを正しく解決します。

ありがとう。

さらに詳しい情報:

サーバー上で、別のPC(wstation)をpingする場合

$ ping wstation
PING wstation.local.domain (x.x.x.x) 

次に。localを追加した場合

$ ping wstation.local
PING wstation.local.local.domain (x.x.x.x)

そして直接

$ ping 10.0.0.4
PING 10.0.0.4 (10.0.0.4) 56(84) bytes of data.
64 bytes from 10.0.0.4: icmp_req=1 ttl=64 time=0.387 ms
64 bytes from 10.0.0.4: icmp_req=2 ttl=64 time=0.316 ms
64 bytes from 10.0.0.4: icmp_req=3 ttl=64 time=0.312 ms
64 bytes from 10.0.0.4: icmp_req=4 ttl=64 time=0.280 ms
64 bytes from 10.0.0.4: icmp_req=5 ttl=64 time=0.322 ms
^C
--- 10.0.0.4 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 3998ms
rtt min/avg/max/mdev = 0.280/0.323/0.387/0.038 ms                                                                       
14
teracow

現在の出力について

ping wstation
PING wstation.local.domain

PCが.local.domainを非FQDNクエリに追加していることを明確に示します。これは、不適切に構成されているか、少なくともセットアップで間違っているものです。 (実際に.local.domainサフィックスを意図的に使用しない限り)

名前解決とピリオド

多くの人が知らない重要なことの1つは、フルネームは常にピリオド(.)で終わる必要があるということです。これを省略すると、マシンはローカル検索ドメイン(mydomain.tldなど)内で解決しようとします。その場合、mypc.localのクエリはmypc.local.mydomain.tldになります。これを防ぐには、with期間をクエリします。

リゾルバーの構成

リゾルバの設定はここで非常に重要です。 Ubuntu(およびDebian)では、これは/etc/network/interfacesファイルで設定されます(NetworkManagerを実行していない場合):

iface eth0 inet static
   address 192.168.3.3
   netmask 255.255.255.0
   gateway 192.168.3.1
   dns-nameservers 192.168.3.45 192.168.8.10
   dns-search foo.org bar.com                      # <-- these are the search domains

Linuxでの名前解決は、他の方法でも実現できます。これはすべて、ローカルDNSサーバーがこのすべてについて照会されているだけではありません。 hosts解決の構成については、/etc/nsswitch.confファイルをご覧ください。

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

これは、最初にファイル(これは/etc/hostsファイル)が試行され、次にmDNSが試行され、その後で実際のDNSサーバーが照会されることを意味します。 mDNSはLinuxのAvahiを使用して実装され、AppleデバイスではBonjourと呼ばれます。デフォルトでは.localサフィックスを使用しており、ブロードキャストメッセージを介して機能します。 ARPによく似ていますが、それからDNSになります。

これらすべてのシステムは、mDNSデバイスと混合した通常のDNSセットアップで.localを使用すると非常に混乱し、さらに複雑になる可能性があります。これが、あるデバイスが機能し、他のデバイスが機能しない理由について、今あなたが混乱している理由だと思います:すべて同じ解決方法を使用しているわけではありません

物事を整理するには

  • MDNSに完全に依存する場合を除き、.localの場合は使用しないでください。あなたの質問から、私はあなたが物事を中央の場所に自分で構成したいことを理解しているので、ここでの私のアプローチはそれを避けることです。
  • ローカルDNSサーバー(この場合はDD-WRTデバイス)を構成して、特別なドメイン名を使用します。 my.home。 dnsmasqの場合、これは単一の設定ですが、通常のセットアップでは、DNSサーバーとDHCPサーバーの両方で構成する必要があります(DHCPでアナウンスされているため)。
  • シンプルで一意のホスト名を持つようにすべてのPCを構成します。 DHCPの要求でこれを使用し、ルーターで実行されているdnsmasqでこれを使用して解決します。または、DHCPに依存しないように手動で構成します。
  • 過去に変更した場合に備えて、/etc/resolv.confの残りの構成を削除します。
  • ネットワーク内のPCを構成して、my.homeをローカル検索ドメインとして使用します。これは、DHCPを介して自動的に行うことができます。または、/etc/network/interfacesファイルまたはNetwork Managerで静的アドレスを使用する場合:

    enter image description here

  • これで、単純な名前解決(ping hostname)とフルネーム(ping hostname.my.home)の両方が機能するはずです。
15
gertvdijk

Gertvdijkの回答に基づいて、nsswitch.confの行をコメントアウトしました

Sudo vim /etc/nsswitch.conf

.
.
.
hosts:          files dns # mdns4_minimal [NOTFOUND=return] dns
1
falnyr

代わりにTABを使用して、IPとホスト名の間に複数のスペースを含む/ etc/hostsで同様の問題が発生しました。 TABに変更した後、ホスト名はpingで解決できます。

127.0.0.1        test.local
         ^^^^^^^^ → Should be a TAB not multiple spaces.

https://superuser.com/a/938366/467479 も参照してください

0
Thomas Lauria