DNS
Mac 上 DNS 查询绕过了 VPN
打开 VPN 时,你通常希望 DNS 查询发往 VPN 的服务器。但有些设置会把查询发给本地网络的服务器。
症状
- VPN 已连接,但 DNS 测试显示的是本地运营商的服务器。
- VPN 打开时,网站看到的是你本地网络的 DNS 服务器。
- 内部名称正常,但其他名称使用的是本地网络的 DNS。
可能的原因
- Wi-Fi 或以太网上手动设置的 DNS 服务器。为某个网络服务手动输入的服务器,可能会与 VPN 的服务器同时使用。
- 分离隧道 VPN。有些 VPN 只让部分域名或网络走隧道,其他查询使用本地服务器。
- 加密 DNS 描述文件或 DNS App。DNS 设置描述文件或其他 DNS App 可能会把查询发往它自己的服务器。
- VPN App 的设置。许多 VPN App 有自己的 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 或以太网上手动设置的 DNS 服务器。
networksetup -setdnsservers Wi-Fi empty需要管理员密码。
打开 VPN App 的设置。如果有使用 VPN DNS 的选项,将其打开。
移除不需要的 DNS 描述文件。在“设备管理”或“描述文件”中选择它,然后点按移除按钮。
断开 VPN 后重新连接。再次运行
scutil --dns并比较结果。向 VPN 提供商或管理员询问隧道应使用哪些 DNS 服务器。
使用 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> 打开。