DNS
Mac 上 DNS 无法解析
DNS 出故障时,Mac 无法把 apple.com 这样的名称转换成 IP 地址。网络连接可能正常,但所有通过名称访问的网站都会失败。
症状
- 浏览器对许多网站显示“找不到服务器”或类似错误。
- “终端”工具显示“Could not resolve host”或“nodename nor servname provided”。
- 使用 IP 地址的 App 仍然正常,但名称无法使用。
- 问题出现在切换网络、连接 VPN 或设置自定 DNS 服务器之后。
可能的原因
- 没有连接。Mac 没有可用的互联网路径,DNS 查询发不出去。
- DNS 服务器有误或无法访问。手动填写的 DNS 服务器可能已停止工作,或在当前网络上被屏蔽。
- 路由器的 DNS 出故障。许多网络会把 DNS 查询发给路由器。如果路由器不再响应,所有设备都无法解析名称。
- VPN、描述文件或过滤器更改了 DNS。VPN、加密 DNS 描述文件和内容过滤器可能会把查询发往其他服务器。
- 缓存中的旧回答。Mac 会把回答保留一段时间。网站迁移后,旧回答可能导致访问失败。
如何检查
确认网络连接正常:ping 一个 IP 地址,这样不会用到 DNS。
ping -c 3 1.1.1.1再 ping 一个名称。如果 IP 地址正常而名称失败,问题就出在 DNS。
ping -c 3 apple.com向 macOS 解析器查询一个名称。这与大多数 App 走的是同一路径。
dscacheutil -q host -a name apple.com输出
ip_address和ipv6_address行。没有这些行即表示查询失败。显示 macOS 当前使用的 DNS 配置。第一个解析器是默认解析器。
scutil --dns显示在 Wi-Fi 服务上手动设置的 DNS 服务器。
networksetup -getdnsservers Wi-Fi输出 一组 IP 地址,或者提示未设置 DNS 服务器,此时由网络提供服务器。
如何修复
移除手动填写的 DNS 服务器。选取苹果菜单 >“系统设置”>“网络”。
点按网络服务,点按“详细信息”,然后点按“DNS”。选择每个手动添加的服务器,然后点按移除按钮。
也可以在“终端”中清除它们:用
empty一词代替服务器地址。networksetup -setdnsservers Wi-Fi empty需要管理员密码。
清除 DNS 缓存。请参阅在 Mac 上刷新 DNS 缓存。
sudo killall -HUP mDNSResponder需要管理员密码。
从路由器获取新的地址和新的 DNS 服务器。请参阅在 Mac 上续租 DHCP。
暂时断开 VPN 进行测试。如果名称随后能解析,请检查 VPN 的 DNS 设置。请参阅Mac 上 DNS 查询绕过了 VPN。
如果所有设备的 DNS 都失败,请重启路由器。
使用 Kilobat
Kilobat 会测量一次 DNS 查询并列出正在使用的解析器。请查看
dnsMilliseconds、dnsServers和captivePortal。kilobat diagnose --json针对某个网站或 API,找出失败的那一层。它会先检查 DNS,再检查连接。
kilobat why api.example.comCLI 免费。在 App 中,“健康”标签页会显示 DNS 服务器和查询耗时。请参阅找出某个网站或 API 连不上的原因。
常见问题
为什么 ping 1.1.1.1 正常,网站却打不开?
ping IP 地址不会用到 DNS。如果它正常而名称失败,问题出在 DNS,而不是连接。
为什么 dig 正常,App 却失败?
dig 会把查询发给 /etc/resolv.conf 中的服务器。App 使用的是 macOS 解析器,它还可能用到 VPN 和按域名设置的规则。
路由器会重新提供 DNS 服务器吗?
会。“网络”设置中的 DNS 列表为空时,macOS 会使用网络通过 DHCP 提供的服务器。
参考资料
- Apple 支持:在 Mac 上更改 DNS 设置
- Apple 支持(已归档):在 OS X 中重设 DNS 缓存
- scutil(8),macOS 27.2 自带的 man 手册页
- dscacheutil(1),macOS 27.2 自带的 man 手册页
- networksetup(8),macOS 27.2 自带的 man 手册页
参考资料核查于 2026年10月29日。man 手册页为 macOS 自带版本;在“终端”中用 man <name> 打开。