web-dev-qa-db-ja.com

オフィスLANの内部の.localドメインを解決できません

Linux Debian 9では、特定のローカルドメインを解決できます。 my.sample-domain.localnslookupHostなどの一部のコマンドを使用しますが、pingやPostgresクライアントpsqlなどの他のコマンドは使用しません。

Network ManagerなどでDNSリゾルバーが正しく設定されていると思うので(/etc/resolv.confの内容)、なぜこれが起こっているのかわかりません。

私はWindows 10を使用している同僚に確認しましたが、彼らのHostファイルにはカスタムエントリがありませんが、Windows版のpingとPostgresのデータベースUIは、ドメインをIPアドレスに解決することで期待どおりに機能します。

下記を参照してください:

$ ping my.sample-domain.local
ping: my.sample-domain.local: Name or service not known

$ Host my.sample-domain.local
my.sample-domain.local has address <THE_IP_REPRESENTING_THE_LOCAL_DOMAIN>

$ ping -c 5 <THE_IP_REPRESENTING_THE_LOCAL_DOMAIN>
PING <THE_IP_REPRESENTING_THE_LOCAL_DOMAIN> (<THE_IP_REPRESENTING_THE_LOCAL_DOMAIN>) 56(84) bytes of data.
64 bytes from <THE_IP_REPRESENTING_THE_LOCAL_DOMAIN>: icmp_seq=1 ttl=128 time=1.16 ms
64 bytes from <THE_IP_REPRESENTING_THE_LOCAL_DOMAIN>: icmp_seq=2 ttl=128 time=0.644 ms
64 bytes from <THE_IP_REPRESENTING_THE_LOCAL_DOMAIN>: icmp_seq=3 ttl=128 time=0.758 ms
64 bytes from <THE_IP_REPRESENTING_THE_LOCAL_DOMAIN>: icmp_seq=4 ttl=128 time=0.684 ms
64 bytes from <THE_IP_REPRESENTING_THE_LOCAL_DOMAIN>: icmp_seq=5 ttl=128 time=0.794 ms

--- <THE_IP_REPRESENTING_THE_LOCAL_DOMAIN> ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4056ms
rtt min/avg/max/mdev = 0.644/0.808/1.160/0.183 ms

$ nslookup my.sample-domain.local
Server:        <THE_IP_REPRESENTING_THE_NAMESERVER>
Address:    <THE_IP_REPRESENTING_THE_NAMESERVER>#53

Non-authoritative answer:
Name:    my.sample-domain.local
Address: <THE_IP_REPRESENTING_THE_LOCAL_DOMAIN>


$ cat /etc/resolv.conf
domain <AN_INTERNAL_DOMAIN>
search <AN_INTERNAL_DOMAIN>
nameserver <THE_IP_REPRESENTING_THE_NAMESERVER>
nameserver <ANOTHER_IP_REPRESENTING_THE_NAMESERVER>

編集:

その間、同じオフィスLANにUbuntu 16仮想マシンがあることに気づいたので、それにログインして、そこで動作しているpingコマンドを試しました。

また、Ubuntu VMは/etc/hostsに特定のカスタム設定がありません(カスタマイズされていない/etc/hostsを使用した私のDebian 9ラップトップと同じです)。

両方の/etc/resolv.confは似ています(一部の共有ドメイン/ IP、同じドメインの他のIP)。

ただし、ファイル/etc/nsswitch.confは異なるため、mdsn4_minimalmdsn4_minimalのようなホスト解決の順序で何かが起こっていると思います。dnsの前に来ます。

hosts:      files mdns4_minimal [NOTFOUND=return] dns

そしてUbuntuでは:

hosts:      files dns

編集2:

Ubuntu 16 VMと私のDebian 9ラップトップはどちらも、Digコマンドを使用して.localドメインを解決できます。

9
TPPZ

HostおよびnslookupはDNSルックアップを実行しますが、ほとんどのアプリケーションはglibcName Service Switchを使用してホスト名の外観を決定しますアップ。

君の /etc/nsswitch.confはmDNSを有効にする可能性があり、解決時に問題が発生する可能性があります.local名前。ルックアップの順序を変更したり、必要がなければmDNSサービスを削除したりできます。

君の nsswitch.confにはmdns4_minimalmDNS ルックアップを実行します(.local名)。 [NOTFOUND=return]その後、検索が停止するため、DNSは使用されず、アプリケーションはホスト名を解決できません。全体を削除することもできますmdns4_minimal [NOTFOUND=return]なので、mDNSルックアップは使用されません、または単にNOTFOUNDアクションを削除して、mDNSルックアップが失敗した場合にDNSルックアップが行われるようにします。

詳細については、 Name Service Switchのドキュメント を確認することをお勧めします。

18
sebasth

ここでのより大きな問題は、DNSインフラストラクチャを設定するときに.localで終わる既知のDNSドメイン名を使用しないことです。

.local useはzeroconf/avahi別名bonjourの使用のために予約されています。これは、DNS以外のローカル名/サービスを解決するための並列サービスです。

内部DNSネームサービスは、いくつかのシナリオで確実にzeroconfと競合しています。したがって、あなたが受け入れた質問の解決策。

長期的には、内部ネットワークのDNS名の末尾が.localであってはなりません。

PS余談ですが、DNS以外に、ローカルのMicrosoft DC/ADにも.localという名前を付けないでください。これを行うと、奇妙な問題が発生します。

マルチキャストDNS(mDNS)標準。
インターネットエンジニアリングタスクフォース(IETF)標準トラックRFC 6762(2013年2月20日)は、ローカルエリアネットワークのホスト名の疑似トップレベルドメインとして、ドメイン名ラベルlocalの使用を予約しています。マルチキャストDNS名前解決プロトコルを介して解決されます。

MS Technet(wikipedia)から

Macintosh OS Xバージョン10.3以降のオペレーティングシステムを実行しているMacintoshクライアントコンピュータがある場合、…内部ドメインの完全なDNS名には.localラベルを使用しないことをお勧めします。 .localラベルを使用する必要がある場合は、Macintoshコンピューターの設定も構成して、ネットワーク上の他のコンピューターを検出できるようにする必要があります。

RFC 6762

「.local」で終わる名前のDNSクエリ。に送信する必要があります
mDNS IPv4リンクローカルマルチキャストアドレス224.0.0.251(またはそのIPv6
同等のFF02 :: FB)。

…….

  1. 逆アドレスマッピング

    「.local。」と同様に、IPv4およびIPv6の逆マッピングドメインもリンクローカルであると定義されています。

    「254.169.in-addr.arpa」で終わる名前のDNSクエリ。 mDNS IPv4リンクローカルマルチキャストアドレス224.0.0.251またはmDNS IPv6マルチキャストアドレスFF02 :: FBに送信する必要があります。このドメインの下の名前はIPv4リンクローカルアドレスに対応しているため、これらの名前に関連する情報を検索するには、ローカルリンクが最適な場所であることが論理的です。

…….

明示的に「.local」で終わる名前のマルチキャストDNSを有効または無効にするための特別な制御は必要ありません。ユーザーが入力したとおり。
ユーザーは、「。local。」で終わる名前のマルチキャストDNSを無効にする方法を必要としません。これは、ユーザーがマルチキャストDNSを使用したくない場合、それらの名前を使用しないことでこれを実現できるためです。 。
ユーザーがdoesで終わる名前を「.local。」で入力した場合、ユーザーの意図はおそらくそれがうまくいくはずです。

公式ソースからではありませんが、これも見つけました。問題をうまく説明している段落があります。 。localをLANのトップレベルドメインとして使用しないでください

.localドメインは、いわゆる疑似トップレベルドメインです。どういう意味ですか?これは、インターネット上で使用可能な(ルーティング可能な)公式のトップレベルドメインではないことを意味しますが、一部のアプリケーションで使用されているため、準公式の地位を持っています。
。localの場合、マルチキャストドメインネームサービス(mDNS)によって使用されます。このサービスを実装するホストは、ドメイン名として.localを使用し、独自の方法で名前を解決します。通常、これは問題にはなりません。ただし、.localをトップレベルドメインとしてネットワークにDNSも実装すると、深刻な名前解決の問題が発生します。
これがLinuxシステムで頻繁に発生することを確認したので、AppleのOS Xにもおそらくこれらの問題があると思います。通常、これらのタイプのネットワークでは、DNS名前解決がまったく機能しないか、一部の時間しか機能しないことがわかります。最終的に、名前が解決されるかどうかがわからないため、常にIPアドレスを使用する必要があります(これは、最初にDNSサーバーが存在するという全体のポイントを否定します)。

7
Rui F Ribeiro

[〜#〜] nbns [〜#〜][〜#〜] dns [〜#〜] と競合している可能性があるため、修正するか編集してください hosts ファイル、またはコマンドをラップします。

NAME=my.sample-domain.local
ping $(Host $NAME | Perl -pe 's/.* //g')

DNSは Dig ;で検査する必要があります。

Dig @$SERVER $NAME +short

Host は最初にNBNSを検索する(またはその逆)と思います。

0
user1133275