域名DNS服务器修改后不生效?刷新本地DNS缓存方法
相信不少做网站的朋友都遇到过这种情况:明明在域名注册商那边把DNS服务器地址改好了,系统也提示修改成功,可等了大半天,甚至过了一两天,网站还是访问不了,或者一会儿能访问一会儿又不能。说实话,这种不上不下的状态最磨人,你说是改了吧,它没生效,你说没改吧,设置那边又显示已经改完了。
其实绝大多数时候,问题并不出在域名解析本身,而是你本地电脑上的DNS缓存还在“记着”旧的那一套。这就像你搬家之后,老邻居的脑子里还存着你原来的地址,自然会跑错地方。
先说一个最基本的概念:DNS解析到底是怎么一回事?
简单点理解,互联网上的每一台服务器都有一个数字门牌号,也就是IP地址,比如像192.168.1.1这样。但我们人类记不住这种数字串,所以就有了域名,比如baidu.com。DNS服务器就是负责翻译的,你输入一个域名,它帮你找到对应的IP地址。
当你修改域名DNS服务器的时候,这个变更首先要在全球的DNS系统里慢慢扩散。这个过程最长可能需要48到72小时,但现实中一般几个小时也就搞定了。
问题是,就算全球DNS系统已经更新完毕,你的电脑可能还在犯倔。因为操作系统为了提高效率,会把之前查到的DNS结果暂时存下来,这就是DNS缓存。缓存没到期之前,你的电脑根本不会去问新的DNS服务器,自然就感觉“修改不生效”了。
所以,最直接也最有效的办法,就是强制刷新你本地的DNS缓存。
不同的操作系统,方法不太一样,但都不难。
Windows系统应该是最常见的。你只需要按下键盘上的Win键和R键,调出运行窗口,输入cmd然后回车。在弹出的黑色命令窗口里,输入下面这行命令:
ipconfig /flushdns
输完按回车,如果看到“已成功刷新DNS解析缓存”的提示,那就说明缓存已经清掉了。然后再去访问你的网站,大概率就正常了。
顺便说一下,Windows不同版本这个提示可能略有差异,有的显示英文,有的是中文,但意思都一样。
Mac系统稍微复杂一点点,主要看你是哪一年的系统。比较新的Mac,打开终端(在启动台的“其他”文件夹里能找到),输入:
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder
输完按回车,因为前面有个sudo,系统会问你要密码,注意输入的时候屏幕上是不会显示星号的,直接输完按回车就行。旧一点的Mac版本命令不一样,但如果你用的是macOS 10.10以上的版本,上面这条命令就够用了。
Linux系统的话,不同的发行版命令差别比较大。常见的有:
sudo systemd-resolve --flush-caches
或者
sudo resolvectl flush-caches
如果你不确定自己Linux是什么版本,可以两条都试试,总有一条能成。
说完电脑,再说说浏览器。很多人不知道,Chrome、Edge这些浏览器自己也有DNS缓存。有时候你系统缓存清完了,浏览器还倔着。
拿Chrome来说,你可以在地址栏输入:
chrome://net-internals/#dns
然后点击页面上的“Clear host cache”按钮,就清干净了。Edge浏览器类似,用edge://net-internals/#dns就行。
不过话说回来,有时候问题还真不是缓存的锅。
有一种情况特别容易被忽略,就是你的域名NS记录(也就是DNS服务器记录)虽然改了,但老的DNS服务器那边还在继续提供解析服务。这种情况怎么理解呢?就好比你办了个手机号携号转网,运营商那边系统已经显示你转走了,但某个业务员还按老路子给你发短信。
等全球的DNS缓存都过期之后,自然就正常了,但你如果等不了那么久,可以手动去查询一下域名当前的NS记录到底变成了什么。网上有很多在线工具,输入你的域名,就能看到当前生效的DNS服务器是哪些。如果显示的跟你刚改的不一致,那就说明还没扩散完成。
另外还有一个常见误区,很多人修改DNS服务器之后,忘了修改DNS解析记录本身。这两个是不同的概念。DNS服务器是负责帮你解析的“翻译机构”,而解析记录(比如A记录、CNAME记录)是这个机构手里的“翻译词典”。你换了翻译机构,但新机构那边还没有你的词典,或者词典里的地址是错的,那自然也是访问不了的。
所以修改DNS服务器的正确操作应该是:先去新DNS服务商那边把你的域名添加进去,把所有的解析记录都配好,确认无误之后,再去域名注册商那里改DNS服务器地址。这个顺序很重要,搞反了的话,中间就会有一段真空期,网站彻底访问不了。
还有一些更隐蔽的原因,比如运营商的DNS劫持。
中国的网络环境比较特殊,有些宽带运营商会强行缓存DNS结果,甚至篡改解析记录。这种情况你本地怎么刷新都没用,因为问题出在运营商那层。解决办法也简单,把电脑或者路由器的DNS改成公共DNS,改完之后记得再去刷新一遍本地DNS缓存,基本就能绕过运营商那层恶心人的东西了。
最后说个冷知识:有时候你访问不了自己的网站,但别人能访问。这种情况99%是你自己电脑的问题,缓存或者hosts文件。如果你以前修改过hosts文件(就在C盘WindowsSystem32driversetc目录下),里面可能会有旧的手工指定记录,那个优先级比DNS还高。检查一下,如果有就删掉。
说到底,DNS修改不生效这事,急不得,但也不能干等着。按顺序排查:先查NS记录是否已经更新,再刷新本地DNS缓存,接着检查新DNS服务商的解析记录是否配置正确,最后看看是不是运营商在捣乱。这套组合拳打下来,99%的问题都能解决。
剩下的1%?那可能是注册商那边的系统有延迟,或者刚好赶上全球DNS根服务器维护。这种情况就只能等等了,喝杯茶,过几个小时再试试。毕竟互联网本质上也是无数台机器组成的系统,机器有时候就是会犯懒,你得给它点时间反应。
CN
EN