如何在 Windows 网络中优先选择 IPv4 而不是 IPv6
默认情况下,如果远程主机同时具有 IPv4 和 IPv6 地址,Windows 计算机将尝试连接到它使用其 IPv6 地址。如果 DNS 服务器或 mDNS 协议(在本地网络上)返回主机已AAAA和A记录,则默认情况下,将连接到 AAAA 记录中包含的 IPv6 地址。对于某些不支持 IPv6(或不侦听该网络接口)的网络服务或旧版应用程序来说,这可能会出现问题。在这种情况下,您可以在 Windows 中提高 IPv4 协议相对于 IPv6 的优先级。
让我们看一个基于工作组的本地网络(没有 DNS 服务器)的简单示例,该网络使用广播查询使用内置的多播 DNS 进行名称解析(mDNS) 协议。检查 mDNS 协议为同一本地网络上的另一台计算机返回哪些记录和地址。
Resolve-DnsName DESKTOP-ABCD1234

在这里,您可以看到远程计算机有两条记录(AAAA 和 A),分别具有 IPv6 和 IPv4 地址。现在,检查默认使用哪种协议连接到远程计算机。执行一个简单的ping带有远程计算机名称。 ping 命令应返回计算机的 IPv6 地址而不是 IPv4。


不建议在 Windows 中完全禁用 IPv6,因为这可能会导致某些网络服务和应用程序出现问题。
使用以下命令获取当前的 IPv6 前缀策略设置(决定不同类型地址的使用优先级):
netsh interface ipv6 show prefixpolicies
或者
Get-NetPrefixPolicy
当 IPv4 和 IPv6 地址都可用于远程主机时(较高的地址),Windows 使用此表来决定用于连接的地址。优先级值越大,策略的优先级越高)。


让我们看一下基本的优先级条目:
::1/128– IPv6环回接口(最高优先级):/0:— 全球 IPv6 地址::ffff:0:0/96用于将 IPv4 映射到 IPv6::/96– IPv4地址对应的前缀
要更改前缀策略中的优先顺序以使 IPv4 地址具有更高的优先级,请运行以下命令:
推荐阅读:
netsh interface ipv6 set prefix ::/96 60 3
netsh interface ipv6 set prefix ::ffff:0:0/96 55 4
这会将 Windows 配置为优先使用 IPv4 协议而不是 IPv6,而无需完全禁用 IPv6(无需重新启动)。再次尝试对 LAN 中的远程主机执行 ping 操作。现在,主机名解析将返回 IPv4 地址。


确认前缀策略表中 IPv4 协议相对于 IPv6 协议的优先级。


重置 IPv6 协议的网络设置以将前缀策略设置恢复为其默认值:
netsh interface ipv6 reset
您还可以使用注册表来确定 IPv4 的优先级高于 IPv6。转到注册表键HKLMSYSTEMCurrentControlSetServicesTcpip6Parameters,创建一个带有名称的 REG_DWORD 条目禁用组件和价值0x20。重新启动计算机以使更改生效。
您可以手动或通过 cmd 设置此注册表项:
reg add HKLMsystemcurrentcontrolsetservicestcpip6parameters /v DisabledComponents /t REG_DWORD /d 0x20


要恢复 IPv6 优先级高于 IPv4 的原始配置,请运行以下命令:
reg add hklmsystemcurrentcontrolsetservicestcpip6parameters /v DisabledComponents /t REG_DWORD /d 0x0
如果您希望域中的所有计算机优先考虑 IPv4 而不是 IPv6,则可以使用组策略首选项部署此注册表设置。


