方法一
- 打开注册表编辑器(
Win
+R
输入regedit
); - 在顶部导航栏输入
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters
; - 找到
DisabledComponents
,默认情况下这个值应该为 0; - 右键并点击
修改(M)
,将这个值加 20(注意右边的基数
必须是十六进制
);
- 保存并重启电脑就好啦( ̄︶ ̄)↗
PS:DisabledComponents
取值范围为 0~255,用于配置 Windows 系统对于 IPv6 的行为;
将值加 32,也就是将二进制下右数第 6 位置 1,对应的效果就是优先 IPv4 而非 IPv6
;
以下为官方文档的链接,在对对这个值进行其它更改时,请务必确认清楚自己正在做什么,小白不要随意尝试!
检测效果
设置完成后可以打开此链接,出现的地址为 IPv4 即为成功:
方法二
Windows10/11开启 IPv6 后默认 IPv6 访问优先(以访问 IPv4/IPv6 双栈站点为例, 操作系统会优先访问 IPv6),如果期望 IPv4访问优先,可以通过 netsh 命令调整。
首先查看网络前缀访问优先级
我们先看下Windows10/11 中各个访问 IPv4/IPv6的优先级,可以看到 IPv6(::/0)比 IPv4(::ffff:0:0/96) 的优先级高,会被优先访问。
第一列优先循序越大优先级越高,会优先访问。
C:\Windows\system32>netsh interface ipv6 show prefixpolicies
查询活动状态...
优先顺序 标签 前缀
---------- ----- --------------------------------
50 0 ::1/128
40 1 ::/0
35 4 ::ffff:0:0/96
30 2 2002::/16
5 5 2001::/32
3 13 fc00::/7
1 11 fec0::/10
1 12 3ffe::/16
1 3 ::/96
调整网络前缀优先级,让 IPv4 访问优先
从前面我们知道 IPv6(::/0)比 IPv4(::ffff:0:0/96) 的优先级高,我们通过 netsh interface ipv6 命令调整优先级。
Win + R 进入运行对话框,输入 cmd,选择 以管理员身份运行,执行调整命令,可以看到 IPv4(::ffff:0:0/96) 优先级最高。
C:\Windows\system32>netsh interface ipv6 set prefixpolicy ::ffff:0:0/96 100 4
确定。
C:\Windows\system32>netsh interface ipv6 show prefixpolicies
查询活动状态...
优先顺序 标签 前缀
---------- ----- --------------------------------
100 4 ::ffff:0:0/96
50 0 ::1/128
40 1 ::/0
30 2 2002::/16
5 5 2001::/32
3 13 fc00::/7
1 11 fec0::/10
1 12 3ffe::/16
1 3 ::/96
执行 ping 、curl 命令验证,确实默认 IPv4 访问优先。
重启电脑后,发现还是 IPv6 访问优先。
Microsoft Windows [版本 10.0.19044.1766]
(c) Microsoft Corporation。保留所有权利。
C:\Windows\system32>ping ipw.cn
正在 Ping ipw.cn [2402:4e00:40:40::2:3b6] 具有 32 字节的数据:
来自 2402:4e00:40:40::2:3b6 的回复: 时间=10ms
来自 2402:4e00:40:40::2:3b6 的回复: 时间=14ms
来自 2402:4e00:40:40::2:3b6 的回复: 时间=9ms
2402:4e00:40:40::2:3b6 的 Ping 统计信息:
数据包: 已发送 = 3,已接收 = 3,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 9ms,最长 = 14ms,平均 = 11ms
查看网络前缀访问优先级,发现只剩下 IPv4 的,可能是因为这个原因导致没生效,加回 IPv6 的网络前缀,IPv4 访问优先,达到目的。
C:\Windows\system32>netsh interface ipv6 show prefixpolicies
查询活动状态...
优先顺序 标签 前缀
---------- ----- --------------------------------
100 4 ::ffff:0:0/96
C:\Windows\system32>netsh interface ipv6 add prefixpolicy ::/0 40 1
确定。
C:\Windows\system32>netsh interface ipv6 show prefixpolicies
查询活动状态...
优先顺序 标签 前缀
---------- ----- --------------------------------
100 4 ::ffff:0:0/96
40 1 ::/0
如何重新设置 IPv6访问优先
两种方式,直接重置
重置 IPv6 策略
C:\Windows\system32>netsh interface ipv6 reset
正在重置 分段转发,完成!
正在重置 分段,完成!
正在重置 控制协议,完成!
正在重置 回显顺序请求,完成!
正在重置 全局,完成!
正在重置 接口,完成!
正在重置 任意广播地址,完成!
正在重置 多播地址,完成!
正在重置 单播地址,完成!
重新启动计算机来完成此操作。