常识来了
白蓝主题五 · 清爽阅读
首页  > 网络排错

主机名解析服务本地缓存怎么设?改完DNS还连不上网站可能就卡在这儿

你有没有试过刚改完路由器DNS,或者在电脑上手动配了新的DNS服务器,结果打开公司内部系统还是打不开,ping 一个内网主机名却提示“找不到主机”?别急着重装网卡驱动——大概率是本地缓存没清,或者压根没开缓存服务。

主机名解析不是每次都要问外网

浏览器输网址、SSH连服务器、甚至Windows里双击访问\fileserver,背后都得先把“名字”变成“IP”。这个过程叫主机名解析。系统默认会走几个环节:先查本地hosts文件,再查本机DNS缓存,最后才发请求给配置的DNS服务器。如果本地缓存关了、坏了,或者缓存里存着过期记录,就容易出现“明明DNS已更新,却还是连错地址”的情况。

不同系统,缓存服务不一样

Windows默认自带 DNS Client 服务(Win10/11里叫 DNS Cache),开机自动运行,负责缓存最近查过的域名和主机名。Linux常见的是 systemd-resolved(Ubuntu 17.10+、CentOS 8+默认启用),也有用 nscddnsmasq 的;macOS则靠 mDNSResponder 管理本地DNS缓存。

Windows:检查+重启缓存服务

按 Win+R,输入 services.msc 回车,找到“DNS Client”服务,右键看状态。如果是“已停止”,点“启动”;如果状态是“正在运行”,右键选“重新启动”。顺手清下缓存:

ipconfig /flushdns
执行完会提示“已刷新DNS解析程序缓存”。

Linux(systemd-resolved):确认是否启用

终端敲:

sudo systemctl is-active systemd-resolved
如果返回 active,说明开着;返回 inactive 就得手动启:
sudo systemctl enable --now systemd-resolved
再查缓存内容(可选):
systemd-resolve --statistics

macOS:重启mDNSResponder

终端运行:

sudo killall -HUP mDNSResponder
这条命令相当于温柔重启,不中断当前网络连接,但会清空DNS缓存。

hosts文件也算“本地缓存”的一部分

很多人忘了 /etc/hosts(Linux/macOS)或 C:\Windows\System32\drivers\etc\hosts(Windows)这个小文件。它优先级比DNS高,里面写了一条 192.168.1.100 gitlab.local,哪怕DNS服务器已经把 gitlab.local 解析成 10.20.30.40,你的电脑还是会坚持用 192.168.1.100。排查时记得顺手打开看看有没有“悄悄躺着”的旧记录。

什么时候该关本地缓存?

一般不建议关。但真遇到特殊情况——比如开发环境频繁切换测试域名指向,每次都要等TTL过期太慢——可以临时禁用。Windows下停掉DNS Client服务;Linux下停掉 systemd-resolved 后,把 /etc/resolv.conf 指向真实DNS服务器(如 nameserver 114.114.114.114)即可。不过切记:关了之后所有解析都变慢,尤其内网主机名多的办公环境,体验会明显变卡。