默认情况下,如果远程主机同时具有IPv4和IPv6地址,则Windows计算机将尝试连接到它使用其IPv6地址。如果DNS服务器或MDNS协议(在本地网络上)返回主机具有AAAA
和A
记录,默认情况下,将连接与AAAA记录中包含的IPv6地址进行连接。对于某些不支持IPv6的网络服务或传统应用程序(或在该网络接口上不收听)可能是一个问题。在这种情况下,您可以将IPv4协议的优先级高于Windows中的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
Windows使用此表来确定当IPv4和IPv6地址可用于远程主机时使用哪个地址用于连接(远程主机越高优先价值,策略的优先级越高)。
让我们看一下基本的优先条目:
::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。转到Reg键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,则可以使用组策略首选项部署此注册表设置。