DNS

Mac 上 DNS 查询绕过了 VPN

打开 VPN 时,你通常希望 DNS 查询发往 VPN 的服务器。但有些设置会把查询发给本地网络的服务器。

适用于:“系统设置”步骤适用于 macOS 13 Ventura 及更高版本。“终端”命令适用于所有当前 macOS 版本。核查日期:2026年10月29日

症状

  • VPN 已连接,但 DNS 测试显示的是本地运营商的服务器。
  • VPN 打开时,网站看到的是你本地网络的 DNS 服务器。
  • 内部名称正常,但其他名称使用的是本地网络的 DNS。

可能的原因

  • Wi-Fi 或以太网上手动设置的 DNS 服务器。为某个网络服务手动输入的服务器,可能会与 VPN 的服务器同时使用。
  • 分离隧道 VPN。有些 VPN 只让部分域名或网络走隧道,其他查询使用本地服务器。
  • 加密 DNS 描述文件或 DNS App。DNS 设置描述文件或其他 DNS App 可能会把查询发往它自己的服务器。
  • VPN App 的设置。许多 VPN App 有自己的 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 或以太网上手动设置的 DNS 服务器。

    networksetup -setdnsservers Wi-Fi empty

    需要管理员密码。

  2. 打开 VPN App 的设置。如果有使用 VPN DNS 的选项,将其打开。

  3. 移除不需要的 DNS 描述文件。在“设备管理”或“描述文件”中选择它,然后点按移除按钮。

  4. 断开 VPN 后重新连接。再次运行 scutil --dns 并比较结果。

  5. 向 VPN 提供商或管理员询问隧道应使用哪些 DNS 服务器。

使用 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> 打开。