macos静态dns生效需满足三条件:仅最高优先级活动服务的dns被采用,同一服务内dns按响应质量动态排序,修改后须刷新缓存。需在“网络”设置中拖拽排序服务、配置对应dns列表,并执行dscacheutil或killall命令刷新。

macOS 设置静态 DNS 服务器不是简单填几个 IP 就完事——系统有明确的服务优先级规则和单服务内动态评分机制,填对位置、排好顺序、理解降级逻辑,才能真正稳定生效。
DNS 只用最高优先级活动服务的列表
macOS 不会合并 Wi-Fi、以太网等所有接口的 DNS 列表。它只认当前**正在使用且服务序号最高的那个网络服务**所配置的 DNS 地址。服务序号由“系统设置 > 网络”里拖拽排序决定:顶部的服务拥有最高优先级。
- 打开“系统设置 > 网络”,点击右下角“详细信息…”
- 点左下角齿轮图标 → “设定服务顺序…”,确认你希望生效的服务在最上面
- 该服务的“DNS”标签页里填的地址,才是系统实际使用的唯一 DNS 来源
同一服务内 DNS 地址按质量自动调整顺序
你在 DNS 列表里手动排的上下顺序,只是初始尝试顺序。系统会持续监测每台服务器的响应时间、超时次数和错误率,并动态调整使用倾向:
- 首台服务器响应快且无错误,后续查询继续发给它
- 连续超时(默认 5 秒)或返回 SERVFAIL/NXDOMAIN,系统会临时跳过它,转向下一台
- 被跳过的服务器若后续恢复稳定,几分钟内会自动“回升”重新参与轮询
- IPv4 和 IPv6 地址独立评分,互不影响
让特定域名走指定 DNS 的两种可靠方式
如果只想让某些域名(比如 company.internal 或 example.com)走专用 DNS,而不影响全局解析,可选以下任一方案:
-
/etc/resolver/ 文件法:创建
/etc/resolver/example.com,内容写nameserver 10.0.0.5;权限设为 root:wheel,不可被组/其他写入 -
dnsmasq 本地代理法:用 Homebrew 安装 dnsmasq,加转发规则如
server=/company.internal/10.0.0.5,再把系统 DNS 设为127.0.0.1
改完 DNS 后必须刷新缓存才见效
图形界面或命令行改完 DNS,旧缓存还在,新配置不会立刻起作用。务必执行刷新命令:
- macOS Ventura 及更新:运行
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder - macOS Monterey 及更早:只需
sudo killall -HUP mDNSResponder - 验证是否生效:终端输入
scutil --dns,看nameserver[0]是否为你设的第一台











