MacOS Monterey系统DNS缓存无法清除的技术求助
MacOS Monterey系统DNS缓存无法清除的技术求助
遇到这种明明改了DNS配置,却还是能查到旧IP的情况,真的挺闹心的!我帮你梳理几个大概率的原因和对应的解决办法,你可以逐一排查:
1. 忽略了系统里的其他DNS缓存组件
MacOS Monterey 之后,除了大家熟知的mDNSResponder,还新增了unbound这个本地递归DNS服务,它也会缓存DNS记录,常规的缓存清除命令可能没覆盖到它。你可以试试手动重启这个服务:
sudo launchctl stop com.apple.unbound sudo launchctl start com.apple.unbound
另外,浏览器自带的独立DNS缓存也容易被忽略——比如Chrome、Safari都有自己的缓存池,单纯重启浏览器不一定能清干净:
- Chrome可以打开
chrome://net-internals/#dns,点击「Clear host cache」按钮 - Safari可以在「偏好设置->隐私->管理网站数据」里搜索对应的域名,直接删除相关缓存
2. 系统DNS配置里还残留了旧服务器
先确认你真的把旧DNS服务器从系统配置里删掉了!有时候手动改DNS后,系统可能还保留着DHCP自动获取的旧条目。你可以:
- 打开「系统偏好设置->网络」,选中你的WLAN连接
- 点击「高级->DNS」,检查列表里是不是只有你要的那个正确DNS,把其他条目全部移除
也可以用终端命令快速查看当前DNS配置:
scutil --dns
重点看resolver #下面的nameserver列表,确认没有旧服务器的痕迹。
另外,还要排查DNS服务器本身的问题:会不会你现在用的“正确DNS”本身就返回两个IP?你可以临时换成公共DNS(比如8.8.8.8),然后用dig your-domain.com测试,如果还是返回两个IP,那问题就出在DNS服务器上,不是你的Mac缓存。
3. mDNSResponder缓存清除不彻底
有时候用killall -HUP只是让mDNSResponder重新加载配置,并没有完全清空缓存。试试直接重启这个服务:
sudo launchctl stop com.apple.mDNSResponder sudo launchctl start com.apple.mDNSResponder
你也可以用下面的命令查看系统缓存里的域名记录,确认旧IP是不是还在:
dscacheutil -q host -a name your-domain.com
如果输出里还有旧IP,那说明缓存确实没清掉,再试试上面的重启命令。
4. VPN/代理软件的干扰
如果你之前用过VPN或者代理工具,它们可能会强制覆盖系统DNS设置,即使你在系统偏好里改了,代理依然会用自己的DNS服务器。先关掉所有VPN和代理软件,再重新测试DNS查询。
备注:内容来源于stack exchange,提问作者ventle




