Linux Debian 9では、特定のローカルドメインを解決できます。 my.sample-domain.local
nslookup
やHost
などの一部のコマンドを使用しますが、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_minimal
とmdsn4_minimal
のようなホスト解決の順序で何かが起こっていると思います。dns
の前に来ます。
hosts: files mdns4_minimal [NOTFOUND=return] dns
そしてUbuntuでは:
hosts: files dns
編集2:
Ubuntu 16 VMと私のDebian 9ラップトップはどちらも、Dig
コマンドを使用して.local
ドメインを解決できます。
Host
およびnslookup
はDNSルックアップを実行しますが、ほとんどのアプリケーションはglibcName Service Switchを使用してホスト名の外観を決定しますアップ。
君の /etc/nsswitch.conf
はmDNSを有効にする可能性があり、解決時に問題が発生する可能性があります.local
名前。ルックアップの順序を変更したり、必要がなければmDNSサービスを削除したりできます。
君の nsswitch.conf
にはmdns4_minimal
、 mDNS ルックアップを実行します(.local
名)。 [NOTFOUND=return]
その後、検索が停止するため、DNSは使用されず、アプリケーションはホスト名を解決できません。全体を削除することもできますmdns4_minimal [NOTFOUND=return]
なので、mDNSルックアップは使用されません、または単にNOTFOUNDアクションを削除して、mDNSルックアップが失敗した場合にDNSルックアップが行われるようにします。
詳細については、 Name Service Switchのドキュメント を確認することをお勧めします。
ここでのより大きな問題は、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)。
…….
逆アドレスマッピング
「.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サーバーが存在するという全体のポイントを否定します)。
[〜#〜] nbns [〜#〜] が [〜#〜] dns [〜#〜] と競合している可能性があるため、修正するか編集してください hosts ファイル、またはコマンドをラップします。
NAME=my.sample-domain.local
ping $(Host $NAME | Perl -pe 's/.* //g')
DNSは Dig ;で検査する必要があります。
Dig @$SERVER $NAME +short
Host は最初にNBNSを検索する(またはその逆)と思います。