DNS
VPN接続中に社内の名前が解決されない
macOSは、あるドメインのクエリを特定のDNSサーバに、それ以外のクエリを別のサーバに送れます。VPNは社内の名前にこのスプリットDNSを使います。
症状
intranet.corp.exampleのような社内の名前は解決できないのに、公開サイトは使えます。- 社内のIPアドレスでは接続できるのに、その名前では接続できません。
digやnslookupは失敗するのにブラウザでは使える、またはその逆です。
考えられる原因
- VPNがそのドメインのリゾルバを追加していない。VPNは、どのドメインを自分のDNSサーバに送るかをmacOSに伝える必要があります。
- macOSのルールを無視するテストツール。
digは/etc/resolv.confにあるサーバを使い、アプリが使うドメインごとのリゾルバは使いません。 - 手動で設定したDNSサーバ。Wi-Fiに手動で設定したDNSサーバは、社内の名前を知りません。
- 検索ドメインのない短い名前。
intranetのような短い名前を完全な名前にするには、検索ドメインが必要です。
確認方法
VPNを接続します。すべてのリゾルバを表示します。会社のドメインの
domain行があるリゾルバを探します。scutil --dnsdigではなく、macOSのリゾルバで名前を検索します。dscacheutil -q host -a name intranet.corp.exampleサービスの検索ドメインを表示します。
networksetup -getsearchdomains Wi-Fi
解決方法
VPNでどのドメインとDNSサーバを使うべきか、管理者に問い合わせます。
ドメインごとのリゾルバ用のフォルダがなければ作成します。
sudo mkdir -p /etc/resolver管理者パスワードが必要です。
ドメイン名を付けたファイルを作成します。サーバごとに
nameserver行を1つずつ書きます。sudo nano /etc/resolver/corp.example管理者パスワードが必要です。
社内DNSサーバのアドレスを1行で入力します。
nameserver 10.0.0.53ファイルを保存します。
scutil --dnsを実行し、新しいドメインがあるか確認します。完全な名前を使うか、「システム設定」>「ネットワーク」> サービス >「詳細」>「DNS」で検索ドメインを追加します。
不要になったらファイルを削除します。
sudo rm /etc/resolver/corp.example管理者パスワードが必要です。
Kilobatを使う場合
プライベートな名前の場合、
whyはどのVPNリゾルバに問い合わせたか、そのリゾルバが応答するかを示します。kilobat why intranet.corp.example
よくある質問
ブラウザでは使えるのにdigが失敗するのはなぜですか?
digは/etc/resolv.confにあるサーバに問い合わせます。ブラウザはmacOSのリゾルバを使い、こちらはドメインごとのリゾルバも使います。
/etc/resolv.confを編集してもいいですか?
いいえ。resolverのmanページによると、このファイルはmacOSが自動的に管理しています。「ネットワーク」設定か/etc/resolverを使ってください。
出典
- resolver(5)、macOS 27.2に付属のmanページ
- scutil(8)、macOS 27.2に付属のmanページ
- dig(1)、macOS 27.2に付属のmanページ
- Appleサポート:MacでDNS設定を変更する
出典は2026年10月29日に確認しました。manページはmacOSに付属のものです。「ターミナル」でman <name>を実行すると開けます。