本地DNS怎么重建?从“断网”到“秒开”的折腾记录
你有没有遇到过这种情况:明明WiFi连着好好的,手机刷视频也流畅,但电脑死活打不开某个网站;或者昨天还能访问的域名,今天突然就提示“DNS解析失败”,这时候,十有八九是你电脑里的本地DNS缓存闹了别扭——要么是缓存了过期的记录,要么是系统配置被某些流氓软件悄悄改了,别急着打电话找宽带师傅,咱们自己动手,把本地DNS“重建”一遍,说不定就能让网络起死回生。
“重建”这个词听着好像很玄乎,其实拆开来看,无非就是三件事:清空缓存、重置配置、或者干脆换个更靠谱的本地解析方案,下面我就按从简到繁的顺序,把每一步的实操方法和踩坑经验都写出来,保证读完你也能自己搞。
绝大多数“网页打不开,但微信能发消息”的故障,都是本地DNS缓存作祟,你的电脑会把访问过的域名和IP地址临时存起来,下次访问就直接用缓存里的记录,省得再去问上级DNS服务器,可一旦那个IP地址变了(比如网站换了服务器),缓存里的老数据就成了“死链接”。
这时候需要做的就是把这些缓存全删掉,让电脑重新去问一次。
Windows用户:按Win+R键,输入cmd打开命令提示符(记得右键“以管理员身份运行”),然后敲下:
ipconfig /flushdns
看到“已成功刷新 DNS 解析缓存”就对了,顺便可以再打两针强心剂:
ipconfig /registerdns ipconfig /release ipconfig /renew
这四条连招打完,大部分临时性DNS问题都能解决,注意最后renew那一步可能会让网络断几秒,别慌。
macOS用户:打开“终端”,输入:
sudo dscacheutil -flushcache sudo killall -HUP mDNSResponder
系统会要求你输密码(打字时屏幕不显示字符,正常),之后可以用sudo discoveryutil udnsflushcaches(旧版系统)或者直接重启电脑,效果一样。
Linux用户:视你用的服务不同而不同,如果你用的是systemd-resolved(Ubuntu默认),命令是:
sudo systemd-resolve --flush-caches
或者新版本用:
sudo resolvectl flush-caches
如果你自己装了dnsmasq,那就重启服务:
sudo systemctl restart dnsmasq
上面这些操作其实就像给路由器拔电再插电——简单粗暴,但管用,我自己试过最夸张的一次,是Windows的DNS缓存里存了半年前的一个淘宝的IP,导致我死活打不开商品详情页,一刷缓存,秒开。
二、更深层的“重建”:重置网络协议和适配器
如果清缓存没用,那问题可能出在底层了,比如你误改了网络适配器的DNS服务器地址,或者某些软件把Winsock协议给弄乱了,这时候需要来一次“出厂设置”级的重建。
Windows用户可以在管理员命令行里跑这套组合拳:
netsh winsock reset netsh int ip reset
这两条命令分别重置Winsock目录和TCP/IP协议栈,跑完之后必须重启电脑,重启后你会发现网络适配器设置可能会被恢复成“自动获取IP和DNS”,原来手动填的什么8.8.8.8、114.114.114.114都没了——别急,后面再重新填就是了。
macOS用户的话,因为系统更封闭,一般不需要动Winsock级别的东西,但你可以去“系统设置 → 网络 → 高级 → DNS”里,把列表里所有手动添加的DNS服务器删掉,让系统自动获取(或者只留一个你信任的),也可以试试删除/Library/Preferences/SystemConfiguration/com.apple.network.eapolcontroller.plist之类的配置文件,不过这个操作风险较高,建议先备份。
Linux用户最灵活,但也最容易搞乱,如果你改了/etc/resolv.conf里面的nameserver,但每次重启又被覆盖,那可能是被NetworkManager或systemd-resolved接管了,可以用nmcli或者图形界面重置:
sudo nmcli connection modify "你的连接名" ipv4.ignore-auto-dns no sudo nmcli connection down "你的连接名" && sudo nmcli connection up "你的连接名"
或者干脆把/etc/resolv.conf软链接到/run/systemd/resolve/stub-resolv.conf,让系统自己管。
三、最彻底的“重建”:自己搭一个本地DNS服务器
前面说的都是“修复”,但如果你对隐私、速度或者去广告有更高要求,那不如直接从根上重建——在自己电脑或者树莓派上跑一个本地DNS服务器,最流行的方案有俩:dnsmasq 和Pi-hole。
dnsmasq:轻量级,功能就是把你电脑上的DNS查询先在自己手里过一遍,能缓存就缓存,能转发就转发,Linux下安装:
sudo apt install dnsmasq
配置很简单,编辑/etc/dnsmasq.conf,把listen-address=127.0.0.1和server=8.8.8.8取消注释(或者换成你喜欢的上游DNS),然后启动服务,Windows下也有类似的工具比如Acrylic DNS,不过需要装GUI。
Pi-hole:功能更猛,上面加了一层广告过滤,它会把所有DNS请求和黑名单比对,发现是广告域名就直接返回0.0.0.0,广告内容压根儿都到不了你电脑,安装方式:
curl -sSL https://install.pi-hole.net | bash
装好后记得把路由器或者电脑的DNS服务器地址改成Pi-hole的IP,然后你就可以在管理面板里看到千奇百怪的查询记录——小到智能电视每秒都在打电话,大到某些App半夜还在上报日志。
为什么要自己搭? 因为默认情况下,你的电脑去问运营商DNS服务器,那些服务器不仅可能记录你的浏览历史,有时候还会故意劫持不存在的域名,跳转到广告页,而本地DNS服务器可以把查询路径缩短成“自己电脑 → 本地DNS缓存 → 公共DNS(比如Cloudflare的1.1.1.1或Google的8.8.8.8)”,中间少了几层手,既安全又快捷,我自己的树莓派24小时开着Pi-hole,网络延迟平均降了10ms,关键是再也没见过视频网站的开屏广告。
前面都在讲怎么修,但咱们也得知道病因,常见的原因有:
1、系统错误:Windows的DNS Client服务偶尔会抽风,比如服务未启动,可以在services.msc里找到“DNS Client”,重启一下。
2、软件篡改:某些“优化软件”或“加速器”会偷偷把你电脑的DNS改成它们的服务器,然后给你插广告,检查方法是去网络设置里看“首选DNS”是不是变成了奇奇怪怪的域名。
3、路由器缓存:不光电脑有缓存,你家路由器也有,如果改了路由器上的DNS,记得去路由器管理后台重启一下,或者进“系统工具 → 重启”才能生效。
4、CDN调度问题:有些大型网站(比如阿里云、腾讯云)会按地区分配不同的IP,如果你的DNS缓存了一个错误的IP,可能就会一直转圈,这时候除了刷缓存,还可以换个浏览器试——因为Chrome和Edge有自己的DNS缓存(在chrome://net-internals/#dns里可以清)。
“重建本地DNS”这件事,说大不大,说小不小,对普通用户来说,记下ipconfig /flushdns这一招就够了;对喜欢折腾的人来说,Pi-hole简直是通往新世界的大门,但不管怎么折腾,要记住一个原则:改之前先截图,把原来正常的DNS设置、网络适配器配置都拍个照,万一搞砸了还能退回去。
如果你发现自己频繁需要重建DNS(比如每隔两天就上不了网),那就不是缓存的问题了,而是你的网络环境里有什么东西在持续污染你的DNS查询,这时候可以试试换用加密DNS——比如DNS over HTTPS(DoH)或DNS over TLS(DoT),Windows 11和macOS Monterey以上都已经内置支持,在设置里找到“DNS over HTTPS”打开即可,它相当于给你的DNS查询穿了一件防弹衣,运营商和中间节点都篡改不了。
祝你网络顺畅,再也不见“解析失败”的提示,如果看完文章还是搞不定,欢迎评论区留言,咱们一起琢磨,毕竟,自己动手修好一台电脑的感觉,可比叫师傅爽多了。
文章摘自:https://idc.huochengrm.cn/dns/25879.html
评论