问题描述
最近在路由器把ipv6启用之后,发现电脑上有些网页打不开了。效果大概就是连接超时,或者连接失败。比如最近网易云音乐网页版就经常打不开,从浏览器查看会问题是ERR_CONNECTION_TIMED_OUT或者ERR_FAILED(有时有其他错误)。但是切换4G或者在网卡中禁用IPv6之后就能正常打开。
问题排查
在cmd中简单ping一下网页主机(也可以用nslookup),会发现music.163.com解析结果为一个ipv6地址。猜测是当地ipv6线路质量不佳或运营商ipv6路由问题导致该服务器断续不可达。
这是由于Windows有时候会在启用ipv6后优先请求ipv6地址导致的。目前国内ipv6正在加速普及,但是很多网站的ipv6支持还不如ipv4稳定,我们考虑在保留网卡ipv6功能的基础上,让系统优先访问ipv4资源。
解决方法
参考这篇博客( https://www.cnblogs.com/qishine/p/12075916.html )的方法,找到了官方推荐的方式让Windows优先访问ipv4资源(至少可以做到解析时优先使用A记录而非AAAA记录)。
当前主流的Windows系统(从Windows 7之后)都会同时使用ipv6和ipv4,并且优先使用ipv6。当你ping另一个服务器的时候就能看到,优先使用的是ipv6进行通信。由于能够在DNS中解析到AAAA记录,所以本地服务器会优先使用ipv6进行通信,对方也会回应。
微软推荐是修改注册表来实现,而不是禁用ipv6。简单的从网卡属性里去掉ipv4的钩,并不能禁用ipv6。在以下位置添加一个REG_DWORD值,HKLM\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\DisabledComponents,并将值设置为32(10进制)或0x20(16进制)。
具体配置参数含义如下图:
默认没有这个键值的时候相当于全0,禁用ipv6是全1,不过并不推荐禁用。只要根据我们的具体需求配置对应位置的参数就可以了。我们目前需要的就是将PreferIpv4这个位置1。高位在下方,PreferIpv4在从高到低的第3位,对应的二进制值就是00100000。转换成16进制0x20或者10进制32,对应写入注册表重启就可以了。将DisabledComponents设置成32,并重启计算机。
如果想要修改回来,只要将DisabledComponents改成0或者删除这个键值,重启就可以了。全程不需要修改网卡属性上的ipv6设置。
注意事项
1. 应用本方法前,请先确认问题的确是由于ipv6导致的。具体确认方法可以是将无法正常访问的域名放到ping或nslookup中,看解析结果是否为ipv6地址。然后在网络适配器选项中——选择当前连接——右键属性——暂时取消Internet协议版本6的勾选,应用。然后再尝试刷新网页看看是否恢复。若此时访问正常,则可以尝试上文的办法。
2. 修改注册表中该键值后,需要重新启动电脑。(重新禁用启用网卡是无效的)
3. 写本文时,测试的Windows版本为Windows10 1903(18362),上述方法有效。
4. 本文方法为转载。
关键词
Windows 网页 连接超时 ipv6 ipv4 优先