ローカルネットワーク上のマシンの名前を含む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を使用するだけであれば、「ネイティブ」アプローチでも私が望むことを実行できることを示しているようです。
この問題について説明している記事をたくさん見つけましたが、これまでに実際に見つけたものは、古くなっているか、問題の完全な解決策ではありません。私がこれまで一緒に石畳にしたもの:
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を取り出して、提供されないようにすることもできますが、それはハックのように感じます。エルキャピタンでこれに対する良い修正はありますか?
これがすでに回答されている場合は申し訳ありません。 (私はそれがどこかにあるに違いないように感じます!)私は一日のほとんどを何度も掘り下げて、今のところエルキャピタンで解決策を見つけていません。
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)
APIを呼び出します。これは、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など、これらのいずれかが環境で使用されている場合。