关于问题
前几天有群友说自己的IPv6默认是关闭状态,因为用了很多不支持IPv6的软件,尤其是代理服务器不支持IPv6的时候,所有要通过那个代理服务器的程序都不能走IPv6。搞得很多游戏加速直接报错,部分网站根本无法访问。于是就在Windows的网络适配器属性中把“Internet协议版本6(IPv6)”前面的勾点掉了。这样系统就恢复了一个纯IPv4环境,又能愉快的玩那些游戏了。

但是,随着IPv4地址分配耗尽,普通家宽越来越难分配到公网IPv4了。之前还能靠打10000号说要装家庭监控等等理由问客服要来一个,现在要也要不来了,家宽只能拿到公网IPv6。有很多直连家宽的需求比如和小伙伴点对点共享文件还是得要IPv6。最终就造成了IPv6开开关关的,很是麻烦。

其实解决办法很简单,我们碰到的绝大多数和IPv6有关的问题,其实都不是IPv6本身的问题,而是DNS的问题。所以让Windows碰到域名解析时,优先使用IPv4就行了。在实在没有IPv4的时候再用IPv6,就不会有这种问题了。

今天我自己刚好碰到了,设置了一下。刚好想起来前几天群友问过,就把做法记录一下。
解决方案
首先按Win+R打开运行,输入regedit然后按回车打开注册表编辑器。是的,Windows所有“小技巧”都是以这个开头的。
找到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters 。然后看看右边有没有一个叫DisabledComponents的值,没有的话就新建一个DWORD值,填这个名字。
双击DisabledComponents编辑它的值,把值改成 0x20(就是十进制的32)。
改完以后应该是这个样子的:
请输入图片描述

  1. 重启电脑。

如果搞不懂也可以直接下载这个注册表文件导入电脑(注意,导入外来的注册表文件前一定要备份注册表!)

https://musetransfer.com/s/mryspjjw1
​musetransfer.com/s/mryspjjw1

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters]
"DisabledComponents"=dword:00000020
dns_perfer_ipv4.reg
测试一下
重启电脑以后,系统就变成了优先IPv4的状态。

在修改之前,我ping http://registry.npmjs.org的状态是这样的:
请输入图片描述

可见在没有指定使用IPv4还是IPv6的时候,优先使用了IPv6。

修改后:
请输入图片描述
已经变成优先使用IPv4了!

当然强行指定用IPv6仍然可以ping通,这就保证了我们IPv6的正常使用:

最后我们访问一下 test-ipv6.com 进行IPv6测试,结果如图:

提示我浏览器不太愿意用IPv6,这就对了,这刚好是我们想要的状态。

扩展一下
关于这个设置项DisabledComponents,可以控制Windows对IPv6的一些细节配置。它是一个DWORD值,有效值是0~255。每一个二进制位是一个开关,1表示策略生效(对于策略是“禁用”开头的,就是禁用了),如下表:

8禁用IP-TLS接口 7禁用CP接口 6在DNS策略中,优先使用IPv4 5禁用本地PPP接口 4禁用Teredo接口 3禁用Isatap接口 2禁用6to4接口 1禁用所有隧道接口
我们设置的优先使用IPv4,就是二进制的00100000 = 0x20 = 32。

正常情况下这个值只能设为0或32,这些接口禁用掉都会造成很大的影响,比如远程访问服务就不能用了。

编辑于 2022-05-03 16:38