DNS

MacでDNSの問い合わせがVPNの外に出てしまう

VPNがオンのときは、通常DNSクエリをVPNのサーバに送りたいはずです。設定によっては、代わりにローカルネットワークのサーバに送られます。

対象:「システム設定」の手順はmacOS 13 Ventura以降。ターミナルのコマンドは現在のすべてのmacOSバージョンで使えます。確認日:2026年10月29日

症状

  • VPNは接続されているのに、DNSテストでは地元のプロバイダのサーバが表示されます。
  • VPNがオンなのに、サイトからはローカルネットワークのDNSサーバが見えています。
  • 社内の名前は使えますが、ほかの名前にはローカルネットワークのDNSが使われます。

考えられる原因

  • Wi-FiやEthernetに手動で設定したDNSサーバ。ネットワークサービスに入力したサーバが、VPNのサーバと並んで使われ続けることがあります。
  • スプリットトンネルのVPN。VPNの中には、一部のドメインやネットワークだけをトンネル経由で送るものがあります。それ以外のクエリはローカルのサーバを使います。
  • 暗号化DNSのプロファイルやDNSアプリ。DNS設定のプロファイルや別のDNSアプリが、クエリを独自のサーバに送ることがあります。
  • VPNアプリの設定。多くのVPNアプリには独自のDNSオプションがあります。macOSがどのサーバを受け取るかは、そのオプションで決まります。

確認方法

  1. VPNを接続します。DNS構成を表示します。ほとんどの名前には、resolver #1がデフォルトで使われます。

    scutil --dns

    出力各リゾルバと、そのnameserverアドレス、if_indexインターフェイス、さらに一部にはdomain。

  2. resolver #1のインターフェイスを調べます。VPNのインターフェイスには、多くの場合utunのような名前が付いています。

    ifconfig -l
  3. 物理サービスに手動で設定したDNSサーバがないか確認します。

    networksetup -getdnsservers Wi-Fi
  4. プロファイルがないか確認します。macOS 15以降では、アップルメニュー >「システム設定」>「一般」>「デバイス管理」と選択します。

  5. macOS 13と14では、アップルメニュー>「システム設定」>「プライバシーとセキュリティ」>「プロファイル」を選択します。

解決方法

  1. Wi-FiやEthernetに手動で設定したDNSサーバが不要なら、削除します。

    networksetup -setdnsservers Wi-Fi empty

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

  2. VPNアプリの設定を開きます。VPNのDNSを使うオプションがあれば、オンにします。

  3. 不要なDNSプロファイルを削除します。「デバイス管理」または「プロファイル」でそれを選択し、削除ボタンをクリックします。

  4. VPNを切断して、もう一度接続します。もう一度scutil --dnsを実行して比べます。

  5. トンネルでどのDNSサーバを使うべきか、VPNプロバイダや管理者に問い合わせます。

Kilobatを使う場合

  1. Kilobatは、VPNインターフェイスを物理インターフェイスと並べて表示します。

    kilobat interfaces --json
  2. プライベートな名前の場合、whyはどのVPNリゾルバに問い合わせたか、応答があったかを示します。直接の経路とトンネルの比較も行います。

    kilobat why intranet.corp.example

よくある質問

VPNは常にすべてのDNSを処理しますか?

いいえ。それはVPNが決めます。スプリットトンネルのVPNは、一部のドメインだけを自分のDNSサーバに送ることがあります。

リゾルバが複数表示されるのはなぜですか?

macOSは多くのリゾルバを使えます。domain行のあるリゾルバは、そのドメインにだけ応答します。scutilのmanページで説明されています。

出典

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