DNS

VPN接続中に社内の名前が解決されない

macOSは、あるドメインのクエリを特定のDNSサーバに、それ以外のクエリを別のサーバに送れます。VPNは社内の名前にこのスプリットDNSを使います。

対象:現在のすべてのmacOS。確認日:2026年10月29日

症状

  • intranet.corp.exampleのような社内の名前は解決できないのに、公開サイトは使えます。
  • 社内のIPアドレスでは接続できるのに、その名前では接続できません。
  • digやnslookupは失敗するのにブラウザでは使える、またはその逆です。

考えられる原因

  • VPNがそのドメインのリゾルバを追加していない。VPNは、どのドメインを自分のDNSサーバに送るかをmacOSに伝える必要があります。
  • macOSのルールを無視するテストツール。digは/etc/resolv.confにあるサーバを使い、アプリが使うドメインごとのリゾルバは使いません。
  • 手動で設定したDNSサーバ。Wi-Fiに手動で設定したDNSサーバは、社内の名前を知りません。
  • 検索ドメインのない短い名前。intranetのような短い名前を完全な名前にするには、検索ドメインが必要です。

確認方法

  1. VPNを接続します。すべてのリゾルバを表示します。会社のドメインのdomain行があるリゾルバを探します。

    scutil --dns
  2. digではなく、macOSのリゾルバで名前を検索します。

    dscacheutil -q host -a name intranet.corp.example
  3. サービスの検索ドメインを表示します。

    networksetup -getsearchdomains Wi-Fi

解決方法

  1. VPNでどのドメインとDNSサーバを使うべきか、管理者に問い合わせます。

  2. ドメインごとのリゾルバ用のフォルダがなければ作成します。

    sudo mkdir -p /etc/resolver

    管理者パスワードが必要です。

  3. ドメイン名を付けたファイルを作成します。サーバごとにnameserver行を1つずつ書きます。

    sudo nano /etc/resolver/corp.example

    管理者パスワードが必要です。

  4. 社内DNSサーバのアドレスを1行で入力します。

    nameserver 10.0.0.53
  5. ファイルを保存します。scutil --dnsを実行し、新しいドメインがあるか確認します。

  6. 完全な名前を使うか、「システム設定」>「ネットワーク」> サービス >「詳細」>「DNS」で検索ドメインを追加します。

  7. 不要になったらファイルを削除します。

    sudo rm /etc/resolver/corp.example

    管理者パスワードが必要です。

Kilobatを使う場合

  1. プライベートな名前の場合、whyはどのVPNリゾルバに問い合わせたか、そのリゾルバが応答するかを示します。

    kilobat why intranet.corp.example

よくある質問

ブラウザでは使えるのにdigが失敗するのはなぜですか?

digは/etc/resolv.confにあるサーバに問い合わせます。ブラウザはmacOSのリゾルバを使い、こちらはドメインごとのリゾルバも使います。

/etc/resolv.confを編集してもいいですか?

いいえ。resolverのmanページによると、このファイルはmacOSが自動的に管理しています。「ネットワーク」設定か/etc/resolverを使ってください。

出典

出典は2026年10月29日に確認しました。manページはmacOSに付属のものです。「ターミナル」でman <name>を実行すると開けます。