我不太明白netsh int ipv6 set interface
Windows 中命令上下文中使用的与 IPv6 有状态和无状态自动配置相关的 4 个参数之间的联系:
advertise
routerdescovery
managedaddress
otherstateful
根据我目前所能找到的信息,我了解到:
advertise
用于指示 RA 应由包含为该特定接口配置的和标志的操作系统发出/响应;M
这O
与服务器相关。managedaddress
otherstateful
routerdescovery
用于指示操作系统应在该接口上请求/处理 RA,并根据 RA 所具有的标志使用它来配置自身;如果routerdescovery
已启用,managedaddress
则由otherstateful
RA 的标志覆盖;这与客户端相关
我的问题是当advertise
和routerdescovery
被禁用时会发生什么?
您可能会认为,在这种情况下,managedaddress
和决定了该接口上otherstateful
是否启用了 DHCPv6 客户端。然而,事实似乎并非如此。如果所有 4 个参数都被禁用(advertise
、routerdescovery
和),Windows 客户端仍将尝试联系 DHCPv6 服务器。managedaddress
otherstateful
答案1
经过多次实验和大量模棱两可的文档和文章后,我推断managedaddress
和otherstateful
仅与结合使用相关advertise
(即当您在 Windows 服务器上启用 RA 时),它们有助于设置RA 数据包中的M
和标志。O
如果routerdescovery
启用和advertise
禁用,您将无法再通过 netsh 配置managedaddress
和otherstateful
参数,但只要 RA 到达接口,这两个参数就会自动配置,以便它们反映到达的 RA 数据包的M
和标志。O
无论使用哪种配置,DHCPv6 请求消息始终在启用 IPv6 的接口上发送,即使收到M
未设置标志的 RA 数据包也是如此。我找不到在 Windows 上禁用 DHCPv6 的方法(我假设是 Vista 及更高版本;我在 8.1 上进行了测试)。如果网络上有 DHCPv6 服务器,您将从中获取 IPv6 地址。
幸运的是,大多数网络使用无状态自动配置(每个节点根据 RA 中公布的前缀自行配置),而不是有状态自动配置(其中 IPv6 地址与 DHCPv6 服务器协商)。由于大多数网络都是无状态的,许多人认为禁用它routerdiscovery
会阻止他们获取额外的 IPv6 地址。但如果网络上有 DHCPv6 服务器,则这种情况不成立。
答案2
我知道这是一个老问题,但我想补充一下,以防万一有用。我用于禁用系统所有网络接口上的 DHCPv6 和 IPv6 路由器发现的命令如下:
Set-NetIPInterface `
-AddressFamily IPv6 `
-InterfaceIndex $(Get-NetIpInterface -AddressFamily IPv6 | Select-Object -ExpandProperty InterfaceIndex) `
-RouterDiscovery disabled `
-Dhcp Disabled
除此之外,我还将系统设置为优先使用 IPv4 而不是 IPv6。需要重新启动才能使此更改生效。
New-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters" -Name "DisabledComponents" -Value 0x20 -PropertyType "DWORD"
#If DisabledComponents exists, use the set cmdlet
Set-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\" -Name "DisabledComponents" -Value 0x20
#You need to reboot the computer in order for the changes to take effect
Restart-Computer