我不太明白netsh int ipv6 set interface
Windows 命令上下文下使用的與 IPv6 有狀態和無狀態自動配置相關的 4 個參數之間的聯繫:
advertise
routerdescovery
managedaddress
otherstateful
從迄今為止我所能找到的情況來看,我了解到:
advertise
用於指示 RA 應由包含配置為該特定介面的 和 標誌的作業系統發出/回應M
;這與伺服器有關。O
managedaddress
otherstateful
routerdescovery
用於指示作業系統應在該介面上請求/處理 RA,並使用它根據 RA 具有的標誌來配置自身; ifrouterdescovery
已啟用,managedaddress
並且otherstateful
被 RA 的標誌覆蓋;這與客戶相關
我的問題是當advertise
和routerdescovery
被禁用時會發生什麼?
您可能會認為在這種情況下,managedaddress
並otherstateful
確定該介面上是否啟用 DHCPv6 用戶端。然而,事實似乎並非如此。如果停用所有 4 個參數(advertise
、routerdescovery
和) managedaddress
,otherstateful
Windows 用戶端仍會嘗試聯絡 DHCPv6 伺服器。
答案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