nsswitch.conf 内のホストの順序を変更する必要があるのはなぜですか?

nsswitch.conf 内のホストの順序を変更する必要があるのはなぜですか?

私の会社では、Ubuntu をインストールすると、どのローカル マシンにも ping できません。

$ ping foobar.mycompany.local
ping foobar.mycompany.local: Name or service not known

しかし、リストの先頭に入力すると、機能しますdns:/etc/nsswitch.conf

# hosts:          files mdns4_minimal [NOTFOUND=return] dns
hosts:          dns files mdns4_minimal [NOTFOUND=return]

その理由を理解したいと思います。

答え1

あなたの会社は で終わるDNSドメインを使用していますが.local、これは実際には特別な目的のサフィックスであり、IETFによって予約されています。マルチキャストDNSmDNS クライアント (mdns4_minimal) がインストールされているため、すべての*.local名前を優先的に処理するように構成されます。

(残念ながら、企業のイントラネットでは、存在しないドメイン名やIPアドレス範囲とそれが永遠に存在しないままであることを望みます...)


設定したモジュールを 1 つずつ確認します。

hosts: files mdns4_minimal [NOTFOUND=return] dns
  1. 「files」モジュールは /etc/hosts を検索し、「見つかりません」を返します。
  2. 処理は次のモジュールに進みます。
  3. 「mdns4_minimal」モジュールは、マルチキャスト DNS (mDNS) を使用してローカル LAN サブネットを検索し、「見つかりません」を返します。
  4. [NOTFOUND=return]このエラーの後は処理を続行しないことを示します。つまり、プログラムに「見つかりません」が直ちに返される必要があります。
  5. 「dns」モジュールに到達できません。

なぜ「[NOTFOUND=return]」が追加で追加されるのでしょうか? さまざまな情報源によると、これは失敗したクエリを高速化し、情報漏洩を防ぎ、パブリック DNS サーバーの負荷を軽減するために追加されるそうです。

誰かのネットワークが実際に使用されたmDNS (Linux/macOS では一般的)。ユーザーが「MyLittleLaptop.local」を解決しようとして見つからない場合、システムは次のモジュール (「dns」) を試行し続け、クエリはパブリック DNS (学校の DNS サーバーやコーヒー ショップのルーターなど) に送信されます。

しかし、IETF の規定によれば、*.local名前がパブリック DNS に存在するはずがないので、このようなクエリは役に立たず、ネットワーク管理者に個人情報を明らかにするだけです。そのため、[NOTFOUND=return] タグが追加され、DNS に完全に到達するのを阻止します。


企業ネットワークが.local内部DNSを使用していて、かなり確実mDNS は使用されないので、モジュール全体を削除できます。結果は次のようになります。

hosts: files dns

DNS を優先したいが、mDNS を使用する可能性を残しておきたい場合は、それを最後に移動します。

hosts: files dns mdns_minimal

関連情報