如何在 Windows 網絡中優先選擇 IPv4 而不是 IPv6

Jacki

默認情況下,如果遠程主機同時具有 IPv4 和 IPv6 地址,Windows 計算機將嘗試連接到它使用其 IPv6 地址。如果 DNS 服務器或 mDNS 協議(在本地網絡上)返回主機已AAAAA記錄,則默認情況下,將連接到 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 地址具有更高的優先級,請運行以下命令:

推薦閱讀:如何使用CMD查找所有連接網絡的Wi-Fi密碼?

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,則可以使用組策略首選項部署此註冊表設置。