IPv6无法通过代理只能忍痛关闭?关于如何让Windows优先使用IPv4解析域名

关于问题

前几天有群友说自己的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)。

改完以后应该是这个样子的:

4. 重启电脑。

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

​musetransfer.com/s/mryspjjw1

测试一下

重启电脑以后,系统就变成了优先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表示策略生效(对于策略是“禁用”开头的,就是禁用了),如下表:

87654321禁用IP-TLS接口禁用CP接口在DNS策略中,优先使用IPv4禁用本地PPP接口禁用Teredo接口禁用Isatap接口禁用6to4接口禁用所有隧道接口

我们设置的优先使用IPv4,就是二进制的 = 0x20 = 32。

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