DNS
连接 VPN 时内部名称无法解析
macOS 可以把某个域名的查询发给一个 DNS 服务器,把其他查询发给另一个。VPN 就是用这种分离 DNS 来解析内部名称的。
症状
intranet.corp.example等内部名称无法访问,但公共网站正常。- 内部 IP 地址能访问,但它的名称不行。
dig或nslookup失败,但浏览器正常,或者反过来。
可能的原因
- VPN 没有为该域名添加解析器。VPN 必须告诉 macOS 哪些域名要发往它的 DNS 服务器。
- 测试工具绕过了 macOS 的规则。
dig使用/etc/resolv.conf中的服务器,而不是 App 所用的按域名解析器。 - 手动设置的 DNS 服务器。在 Wi-Fi 上手动设置的 DNS 服务器不认识内部名称。
- 短名称缺少搜索域。像
intranet这样的短名称需要搜索域才能变成完整名称。
如何检查
连接 VPN,显示所有解析器。查找带有公司域名
domain行的解析器。scutil --dns通过 macOS 解析器查询该名称,而不是通过
dig。dscacheutil -q host -a name intranet.corp.example显示该服务的搜索域。
networksetup -getsearchdomains Wi-Fi
如何修复
询问管理员 VPN 应使用哪个域名和 DNS 服务器。
如果按域名解析器的文件夹不存在,就创建它。
sudo mkdir -p /etc/resolver需要管理员密码。
创建一个以该域名命名的文件。每个服务器在其中写一行
nameserver。sudo nano /etc/resolver/corp.example需要管理员密码。
在一行中输入内部 DNS 服务器的地址。
nameserver 10.0.0.53保存文件。运行
scutil --dns,查找新添加的域名。使用完整名称,或在“系统设置”>“网络”> 该服务 >“详细信息”>“DNS”中添加搜索域。
不再需要时,删除该文件。
sudo rm /etc/resolver/corp.example需要管理员密码。
使用 Kilobat
对于私有名称,
why会说明查询发往了哪个 VPN 解析器,以及该解析器是否应答。kilobat why intranet.corp.example
常见问题
为什么浏览器正常,dig 却失败?
dig 询问的是 /etc/resolv.conf 中的服务器。浏览器使用 macOS 解析器,而它还会使用按域名解析器。
可以编辑 /etc/resolv.conf 吗?
不可以。resolver 的 man 手册页说明,此文件由 macOS 自动维护。请使用“网络”设置或 /etc/resolver。
参考资料
- resolver(5),macOS 27.2 自带的 man 手册页
- scutil(8),macOS 27.2 自带的 man 手册页
- dig(1),macOS 27.2 自带的 man 手册页
- Apple 支持:在 Mac 上更改 DNS 设置
参考资料核查于 2026年10月29日。man 手册页为 macOS 自带版本;在“终端”中用 man <name> 打开。