DNS
MacでDNSの問い合わせがVPNの外に出てしまう
VPNがオンのときは、通常DNSクエリをVPNのサーバに送りたいはずです。設定によっては、代わりにローカルネットワークのサーバに送られます。
症状
- VPNは接続されているのに、DNSテストでは地元のプロバイダのサーバが表示されます。
- VPNがオンなのに、サイトからはローカルネットワークのDNSサーバが見えています。
- 社内の名前は使えますが、ほかの名前にはローカルネットワークのDNSが使われます。
考えられる原因
- Wi-FiやEthernetに手動で設定したDNSサーバ。ネットワークサービスに入力したサーバが、VPNのサーバと並んで使われ続けることがあります。
- スプリットトンネルのVPN。VPNの中には、一部のドメインやネットワークだけをトンネル経由で送るものがあります。それ以外のクエリはローカルのサーバを使います。
- 暗号化DNSのプロファイルやDNSアプリ。DNS設定のプロファイルや別のDNSアプリが、クエリを独自のサーバに送ることがあります。
- VPNアプリの設定。多くのVPNアプリには独自のDNSオプションがあります。macOSがどのサーバを受け取るかは、そのオプションで決まります。
確認方法
VPNを接続します。DNS構成を表示します。ほとんどの名前には、resolver #1がデフォルトで使われます。
scutil --dns出力各リゾルバと、その
nameserverアドレス、if_indexインターフェイス、さらに一部にはdomain。resolver #1のインターフェイスを調べます。VPNのインターフェイスには、多くの場合
utunのような名前が付いています。ifconfig -l物理サービスに手動で設定したDNSサーバがないか確認します。
networksetup -getdnsservers Wi-Fiプロファイルがないか確認します。macOS 15以降では、アップルメニュー >「システム設定」>「一般」>「デバイス管理」と選択します。
macOS 13と14では、アップルメニュー>「システム設定」>「プライバシーとセキュリティ」>「プロファイル」を選択します。
解決方法
Wi-FiやEthernetに手動で設定したDNSサーバが不要なら、削除します。
networksetup -setdnsservers Wi-Fi empty管理者パスワードが必要です。
VPNアプリの設定を開きます。VPNのDNSを使うオプションがあれば、オンにします。
不要なDNSプロファイルを削除します。「デバイス管理」または「プロファイル」でそれを選択し、削除ボタンをクリックします。
VPNを切断して、もう一度接続します。もう一度
scutil --dnsを実行して比べます。トンネルでどのDNSサーバを使うべきか、VPNプロバイダや管理者に問い合わせます。
Kilobatを使う場合
Kilobatは、VPNインターフェイスを物理インターフェイスと並べて表示します。
kilobat interfaces --jsonプライベートな名前の場合、
whyはどのVPNリゾルバに問い合わせたか、応答があったかを示します。直接の経路とトンネルの比較も行います。kilobat why intranet.corp.example
よくある質問
VPNは常にすべてのDNSを処理しますか?
いいえ。それはVPNが決めます。スプリットトンネルのVPNは、一部のドメインだけを自分のDNSサーバに送ることがあります。
リゾルバが複数表示されるのはなぜですか?
macOSは多くのリゾルバを使えます。domain行のあるリゾルバは、そのドメインにだけ応答します。scutilのmanページで説明されています。
出典
- scutil(8)、macOS 27.2に付属のmanページ
- resolver(5)、macOS 27.2に付属のmanページ
- Appleサポート:MacでDNS設定を変更する
- Appleサポート:Macで使用するネットワークサービスの順序を変更する
- Appleサポート:構成プロファイルを使ってMacコンピュータの設定を標準化する
出典は2026年10月29日に確認しました。manページはmacOSに付属のものです。「ターミナル」でman <name>を実行すると開けます。