Изменяем приоритет протокола IPv4 над IPv6 в Windows

Изменяем приоритет протокола 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

Resolve-DnsName возвращает доступные A и AAAA записи для имени

Здесь видно, что доступно две записи AAAA и A, соответственно с IPv6 и IPv4 адресами. Теперь проверим, какой протокол используется для подключения к удаленному компьютеру по умолчанию. Выполните простой
ping
по имени компьютера. Команда ping должна вернуть IPv6 адрес компьютера вместо IPv4.

Команда ping возвращает IPv6 адрес вместо IPv4

Не рекомендуется полностью отключать протокол IPv6 в Windows, т.к. может вызвать проблемы с некоторыми сетевыми службами и/или приложениями.

Выведите текущие настройки политики префиксов IPv6 (определяет приоритет использования различных типов адресов) с помощью команды:

netsh interface ipv6 show prefixpolicies

или

Get-NetPrefixPolicy

Если для удаленного хоста доступны и IPv4 и IPv6 адрес, Windows использует эту таблицу для определения какой адрес будет использоваться для подключения (чем выше значение Precedence, тем больше приоритет политики).

netsh interface ipv6 show prefixpolicies - таблица приоритетов префиксов

Рассмотрим основные записи префиксов:

  • ::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 адрес.

ping теперь возвращает ipv4 адрес

Проверьте в таблице политики префиксов, что теперь IPv4 протокол имеет более высокий приоритет чем IPv6.

Повысить приоритет IPv4 над IPv6 в Windows

Чтобы сбросить настройки политики префиксов на значения по умолчанию, сбросьте настройки сети для протокола IPv6:

netsh interface ipv6 reset

Также можно выставить более высокий приоритет IPv4 над IPv6 через реестр. Для этого нужно создать в ветке реестра HKLMSYSTEMCurrentControlSetServicesTcpip6Parameters параметр типа REG_DWORD с именем DisabledComponents и значением 0x20. Для применения изменений нужно перезагрузить компьютер.

Можно создать параметр реестра вручную или из командной строки:

reg add HKLMsystemcurrentcontrolsetservicestcpip6parameters /v DisabledComponents /t REG_DWORD /d 0x20

Параметр реестра DisabledComponents для ipv6 в windows

Чтобы вернуться к исходному состоянию, когда IPv6 имеет приоритет выше, чем IPv4:

reg add hklmsystemcurrentcontrolsetservicestcpip6parameters /v DisabledComponents /t REG_DWORD /d 0x0

Если вам нужно чтобы на всех компьютерах в домене протокол IPv4 имел приоритет над IPv6, можно распространить этот параметр реестра на компьютеры через Group Policy Preferences.

групповая политика: увеличить приоритет ipv4 над ipv6

Windows 11
Изменяем приоритет протокола IPv4 над IPv6 в Windows