Изменяем приоритет протокола IPv4 над IPv6 в Windows
Если для удаленного хоста доступен и IPv4 и IPv6 адрес, по умолчанию Windows компьютер будет пытаться подключиться к нему по его IPv6 адресу. Т.е. если сервер DNS или протокол mDNS (в локальной сети) вернул, что для хоста есть записи
AAAA
и
A
, то по умолчанию подключение выполняется по IPv6 адресу в AAAA записи. Это может вызвать проблему с некоторыми сетевыми сервисами или старыми приложениями, которые не поддерживают IPv6 (например, не слушают этот сетевой интерфейс). В этом случае можно увеличить приоритет IPv4 протокола над IPv6 в Windows.
Рассмотрим простой пример с локальной сетью без сервера DNS, в которой для разрешения имен используется широковещательные запросы с помощью встроенного протокола Multicast DNS (
mDNS
). Проверим, какие записи и адреса возвращаются mDNS для другого компьютера в этой же LAN:
Resolve-DnsName DESKTOP-U97VIM5
Здесь видно, что доступно две записи AAAA и A, соответственно с IPv6 и IPv4 адресами. Теперь проверим, какой протокол используется для подключения к удаленному компьютеру по умолчанию. Выполните простой
ping
по имени компьютера. Команда ping должна вернуть IPv6 адрес компьютера вместо IPv4.
Не рекомендуется полностью отключать протокол IPv6 в Windows, т.к. может вызвать проблемы с некоторыми сетевыми службами и/или приложениями.
Выведите текущие настройки политики префиксов IPv6 (определяет приоритет использования различных типов адресов) с помощью команды:
netsh interface ipv6 show prefixpolicies
или
Get-NetPrefixPolicy
Если для удаленного хоста доступны и IPv4 и IPv6 адрес, Windows использует эту таблицу для определения какой адрес будет использоваться для подключения (чем выше значение Precedence, тем больше приоритет политики).
Рассмотрим основные записи префиксов:
-
::1/128
– IPv6 loopback интерфейс (имеет самый высокий приоритет) -
:/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
Это повысит приоритет IPv4 протокола над IPv6 без отключения последнего (перезагрузка не требуется). Попробуйте еще раз выполнить пинг компьютера в LAN. Теперь при резолвинге имени возвращается IPv4 адрес.
Проверьте в таблице политики префиксов, что теперь IPv4 протокол имеет более высокий приоритет чем IPv6.
netsh interface ipv6 reset
Также можно выставить более высокий приоритет IPv4 над IPv6 через реестр. Для этого нужно создать в ветке реестра HKLMSYSTEMCurrentControlSetServicesTcpip6Parameters параметр типа REG_DWORD с именем DisabledComponents и значением 0x20. Для применения изменений нужно перезагрузить компьютер.
Можно создать параметр реестра вручную или из командной строки:
reg add HKLMsystemcurrentcontrolsetservicestcpip6parameters /v DisabledComponents /t REG_DWORD /d 0x20
reg add hklmsystemcurrentcontrolsetservicestcpip6parameters /v DisabledComponents /t REG_DWORD /d 0x0
Если вам нужно чтобы на всех компьютерах в домене протокол IPv4 имел приоритет над IPv6, можно распространить этот параметр реестра на компьютеры через Group Policy Preferences.
Windows 11
Изменяем приоритет протокола IPv4 над IPv6 в Windows