web-dev-qa-db-ja.com

Mac ElCapitanでDNS検索順序を変更する

ローカルネットワーク上のマシンの名前を含むDNSも実行しているルーターがあります。リクエストを転送するように設定されているため、どのパブリックマシンでも、ISPから提供されたDNSにアクセスします。ルーターはプライマリDNSになるように構成されており、ISPのDNSはセカンダリとしてリストされています。静的IPを持つマシンがいくつかあります(プライベートDNSにエントリがあるマシン)。この質問の対象であるMacを含む他のマシンは、DHCPによってアドレスを取得します。

このネットワーク上のWindowsマシンは完全に機能しています。彼らは私のネットワーク上のマシンにプライベート名を解決し、パブリックインターネットにもアクセスできます。

私の1台のMacラップトップが機能していません。パブリックインターネットに問題なくアクセスしますが、内部DNSにアクセスして内部名を取得することはありません。たとえば、内部マシンにpingを実行すると、

ping internal.example.com

パケットが返されますが、ホバーに対応するIPアドレスが表示されます。 (どうやらホバーは、パブリックルートがないサブドメインのランディングページを表示しています。)

nslookup internal.example.com

ただし、ローカルネットワーク上のマシンの正しい(内部)IPを取得します。

最後に、もう一度pingを実行したが、今回は内部DNS(192.168.1.2)を使用するように強制した場合、

ping internal.example.com 192.168.1.2

ローカルネットワーク上の正しいマシンから応答があります。これは、適切なDNSを使用するだけであれば、「ネイティブ」アプローチでも私が望むことを実行できることを示しているようです。

この問題について説明している記事をたくさん見つけましたが、これまでに実際に見つけたものは、古くなっているか、問題の完全な解決策ではありません。私がこれまで一緒に石畳にしたもの:

  • Appleは、いくつかのOSアップグレードの過程で、DNS解決の方法論を変更しているため、オンラインでの回答はすぐに時代遅れになります。
  • Macには、El Capitanの時点で(少なくとも)2つのDNS解決スキームが同時に実行されています。これは、上記のように、pingとnslookupから異なる結果を取得することに関連しています。 「通常の」Linuxシステムで動作するコマンドラインユーティリティは、少なくともこれをmanページ、通常は「Mac OSXNotice」などのタイトルのセクションに記載しているようです。残念ながら、どのユーティリティがどのユーティリティを使用しているかは、1つずつチェックしないと正確にはわかりません。 (これまでのところ、nslookupとDigはLinuxの方法論を使用しており、pingはMac OSに「ネイティブ」なものを使用しているようです。)
  • これは、使用するDNSを動的に選択する「ネイティブ」DNSメソッドの(多かれ少なかれ)文書化された機能です。つまり、特に、ネットワークコントロールパネルなどのウィンドウに表示される順序や、ルーターによって指定された順序(私の場合)は尊重されません。
  • コマンドラインでコマンドSudo killall -INFO mDNSResponderを使用して、「ネイティブ」DNSツールからいくつかの情報を取得しました。メッセージを/var/log/system.logにダンプします。そのログメッセージから、私のISPのDNSがそのシステム内で最初にリストされているように見えます。 (繰り返しになりますが、ルーターの構成とネットワークコントロールパネルにsecondと表示されます。実行すると、2番目にも表示されます。 scutil。)
  • Sudo dscacheutil -flushcache; Sudo killall -HUP mDNSResponder;を使用してmDNSResponderのキャッシュをフラッシュしようとしましたが、それは役に立ちませんでした。
  • これらの手順のようにファイルcom.Apple.mDNSResponder.plistを編集してみました( https://www.cnet.com/news/os-x-10-6-3-and-dns-server-priority-changes / )ですが、ファイルを編集できませんでした。 (Sudo viを使用しても、読み取り専用です。)さらに、私のシステム上のファイルの内容は、これらの手順で明示的に参照されているものとは異なります。

しかし、これらすべてを除けば、私はまだ、うまく機能する他のコンピューターでいっぱいのネット​​ワーク上で機能していないMacを持っています。ルーター上のISPのDNSを取り出して、提供されないようにすることもできますが、それはハックのように感じます。エルキャピタンでこれに対する良い修正はありますか?

これがすでに回答されている場合は申し訳ありません。 (私はそれがどこかにあるに違いないように感じます!)私は一日のほとんどを何度も掘り下げて、今のところエルキャピタンで解決策を見つけていません。

4
Brick

macOSには、VPNのようなケースを処理するための、DNS要求ルーティング(「スコープクエリ」)用の高度なシステムがあります。VPNのような場合、仕事のドメイン名の要求をVPNトンネルに通して、仕事の内部DNSサーバーから回答を得ることができます。 、仕事の外部DNSサーバーよりも多くの/異なる情報を持っている可能性があります。

MacOSが使用しているすべてのDNSサーバー、およびクエリスコープの設定方法を確認するには、次を使用します。

_scutil --dns
_

MacOSと同じようにDNSを照会するには、次を使用します。

_dns-sd -G v4v6 example.com
_

…または…

_dns-sd -q example.com 255 255
_

詳細については、scutil(8)およびdns-sd(1)のマニュアルページを参照してください。

nslookup(1)Dig(1)Host(1)などのDNSトラブルシューティングツールには、独自のDNSリゾルバーコードが含まれており、システムのDNSクエリAPIを使用しません。彼らはシステムの振る舞いをしません。使用するDNSサーバーを指定しない場合、おそらく_/etc/resolv.conf_にリストされているDNSサーバーのいずれかを使用します。これは自動生成され、スコープ外のクエリ用のデフォルトのDNSサーバーのみが含まれます。

ping(8)などのDNSに固有ではない従来のUnixコマンドラインツールは、おそらく従来のgethostbyname(3) AP​​Iを呼び出します。これは、macOSではシステムのDNSリゾルバーの動作を利用します。 。

DHCPサーバーがMacに使用するように指示した内容を確認するには、次の出力の_domain_name_server_行を確認してください。

_ipconfig getpacket en0
_

ifconfigに表示されるように、en0を正しいBSDスタイルのインターフェース名に置き換えます)

DNS RFCは、サーバーのリストを優先順位でランク付けすることを検討するためにDNS実装を必要としないことに注意してください。 DNS実装がそれらをそのように扱うことは一般的ですが、関連する標準で指定されていない場合、すべての実装に依存してそのように実装することはおそらく賢明ではありません。

また、ネットワーク上でアクティブな場合、MacがIPv6ルーターアドバタイズメントまたはDHCP6からDNSサーバーリストを取得している可能性があることにも注意してください。そしてもちろん、VPN設定、インストールされた構成プロファイル、Open Directory、Active Directoryなど、これらのいずれかが環境で使用されている場合。

10
Spiff