Windows主机异常使用IPv6 DNS替代配置的IPv4 DNS,导致部分域名解析失败求助
Windows主机异常使用IPv6 DNS替代配置的IPv4 DNS,导致部分域名解析失败求助
嘿,我太懂你这种折腾到头大的感觉了——好好的Windows机器突然就抽风,平时正常的部分域名居然解析失败,查来查去发现是系统硬要用上IPv6 DNS,完全不管你配置的IPv4 DNS,这破事儿真的闹心!
先给你捋捋目前的核心问题:你的OpenWrt路由器之前的dnsmasq组件把那台Ubuntu k3s主机当成了DNS服务器,结果Windows自动获取到了这个IPv6的DNS地址,哪怕你删了路由器上的dnsmasq、清了DNS缓存、重置了ARP表,系统还是死磕这个IPv6 DNS不放。
给你几个亲测有效的排查和解决步骤:
一、先给Windows掰过来,让它优先用IPv4 DNS
Windows默认会偏IPv6的网络配置,这大概率是它死磕IPv6 DNS的原因,咱们手动调整:
- 打开网络和共享中心,找到当前在用的网络连接,右键选「属性」
- 在弹出的窗口里,找到「Internet 协议版本 6 (TCP/IPv6)」,把它前面的勾选去掉,先临时禁用IPv6(如果你的环境不需要IPv6的话),然后重启网络,再用
nslookup测试下解析是否正常 - 要是你得保留IPv6,那咱们调整协议优先级:
- 以管理员身份开命令提示符,先看当前优先级:
netsh interface ipv6 show prefixpolicies,你会发现IPv6的优先级比IPv4高 - 运行
netsh interface ipv6 set prefixpolicy ::/0 30 0,把IPv6的全局前缀优先级调低,这样IPv4的优先级就会上来 - 改完再用
nslookup试试,应该就会优先用IPv4 DNS了
- 以管理员身份开命令提示符,先看当前优先级:
二、彻底清掉Windows的DNS配置残留
你已经跑了ipconfig /flushdns和arp /d *,但可能还有DHCP的残留配置没清干净:
- 以管理员身份开命令提示符,依次跑这几个命令:
ipconfig /release先把当前的IP和DNS配置全释放掉ipconfig /renew重新从路由器获取DHCP配置netsh winsock reset重置Winsock目录,这招能解决很多顽固的网络配置问题- 跑完重启电脑,再用
ipconfig /all看看DNS服务器列表里是不是只有你要的IPv4地址
三、把路由器的DHCP残留也清干净
你说路由器上的dnsmasq已经删了,但DHCP租约可能还留着,得彻底清:
- 登录OpenWrt路由器后台,找到DHCP服务器的配置页面,把所有DHCP租约记录全清空
- 重启路由器,确保它不会再把Ubuntu的IPv6地址推给Windows当DNS
- 另外,手动指定路由器的DNS服务器地址(比如Cloudflare的1.1.1.1,或者One.com的官方IPv4 DNS),别让路由器再自动瞎选其他机器当DNS
四、给Ubuntu主机做个“体检”,避免再被路由器盯上
虽然问题根源在路由器,但保险起见,确认下那台Ubuntu k3s主机有没有偷偷开了DNS服务:
- 登录Ubuntu,跑
systemctl status systemd-resolved和systemctl status dnsmasq,看看有没有意外启动的DNS服务 - 要是有的话,直接停掉并禁用:
systemctl stop systemd-resolved、systemctl disable systemd-resolved,免得以后路由器又抽风把它选成DNS
五、实在不行就来硬的——手动指定Windows的DNS服务器
要是上面的办法都不管用,咱们直接把DNS配置焊死:
- 打开网络连接属性,找到「Internet 协议版本 4 (TCP/IPv4)」,双击它
- 选「使用下面的DNS服务器地址」,输入你信任的IPv4 DNS地址(比如Cloudflare的1.1.1.1,或者One.com的官方DNS)
- 确定后跑
ipconfig /flushdns,再测试域名解析,这下总该正常了
对了,你之前说nslookup一直用IPv6 DNS,其实可以在nslookup里手动指定DNS测试,比如nslookup 你的问题域名 1.1.1.1,这样能排除域名本身的问题,确认是DNS服务器的锅。
备注:内容来源于stack exchange,提问作者JoSSte




