Как отключить ipv6 с помощью групповых политик в Windows Server
Встала задача выключить на всех windows машинках, вроде бы не сложно, но зайдя в групповую политику не обнаружил нужной политики. Немного погуглив нашел на забугорском сайте, дополнительный административный шаблон для решения этой задачи. Так же мне хочется в целом затронуть данный холивар, в котором сломано много копий, и самому вывести ответ на вопрос, точно ли нужно отключать IPv6 в Windows Server или же нет.
Нужно ли отключать IPv6 в Windows Server
В 21-ом веке вопрос безопасности стал краеугольным камнем, теперь всегда приходится искать баланс между удобством работы и безопасностью, жертвуя первым. Я всегда придерживаюсь принципа, что работать должно только, то что вы используете или управляете этим. Это безопасно и зачастую уменьшает периметр за которым нужно присматривать. Давайте я попробую привести сводную таблицу плюсов и минусов, если вы вдруг решите отключать, как и я IPv6.
Сразу оговорюсь, что везде я это делать не буду, так как есть реально сервисы, где это важно, но я буду это минимизировать.
IPv6 будет лишь дополнительным каналом для проникновения в вашу сеть и скрытого кражи ваших данных.
Настройка GPO для отключения IPv6
Скачиваем его. При разархивировании получаем два файла admx и adml, их нужно скопировать в наше центральное хранилище.
IPv6Configuration.admx – Копируем в %SYSTEMROOT%\ntds\PolicyDefinitions (на контроллере домена)
IPv6Configuration.adml - Copy this file to %SYSTEMROOT%\ntds\PolicyDefinitions\en-US (ваша языковая папка на контроллере домена )
После того как вы скопировали наши шаблоны, идем в редактор групповых политик. Выбираем уровень домена и создаем правым кликом новую политику. Задаем имя политики
Теперь давайте отредактируем нашу политику, правым кликом "Изменить"
Идем "Конфигурация компьютера-Политики-Административные шаблоны-Сеть-IPV6"
Выбираем параметры нашей политики и видим возможные варианты, ставим выключить все.
На выбор есть так же:
- Disable 6to4
- Disable ISATAP
- Disable Teredo
- Disable Terero and 6to4
- Disable all tunnel interfaces
- Disable all LAN and PPP interfaces
- Disable all LAN, PPP and tunnel interfaces
- Prefer IPv4 over IPv6
Включаем в свойствах сетевого адаптера ipv6
Проверяем и видим, что получен ipv6 адрес.
Теперь, для того чтобы понять как действует политика, перейдем в реестре по данному адресу. «Win+R» вводим regedit.exe. Переходим в ветку:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\TCPIP6\Parameters
И видим, текущие записи
Открываем cmd и делаем gpupdate /force, обновление политик

И видим, что появился ключ DisabledComponents и параметром 0, он то и запрещает ipv6, если у вас нету домена, то можете просто создать данный ключ вручную.
в контекстном меню выбираем «Создать» -> «Параметр DWORD (32-бита)». Задаем имя этому параметру – DisabledComponents. Теперь делаем двойной клик левой кнопкой на вновь созданном параметре, и устанавливаем значение FF.
После перезагрузки IPv6 будет отключен на всех интерфейсах. Для настройки протокола IPv6 введите одно из следующих значений, затем нажмите кнопку ОК:
- Введите 0, чтобы включить все компоненты IPv6. Внимание! Это настройка по умолчанию.
- Введите 0xffffffff, чтобы отключить все компоненты IPv6, кроме интерфейса обратной связи. При этом значении Windows Vista для обработки префиксов также будет использовать протокол интернета версии 4 (IPv4) вместо IPv6.
- Введите 0x20 для использования IPv4 вместо IPv6 при обработке префиксов.
- Введите 0x10 для отключения собственных интерфейсов IPv6.
- Введите 0x01 для отключения туннельных интерфейсов IPv6.
- Введите 0x11 для отключения всех интерфейсов IPv6, кроме интерфейса обратной связи.
Перезапустите компьютер.
К сожалению, данный параметр применится только после перезагрузки, Но перед перезагрузкой выполним команду ipconfig /all , чтобы посмотреть все настройки по ip
Видим, что ipv6 есть. Перезагружаемся. Сразу скажу на русской windows я нашел глюк, галка в свойствах сетевого подключения с ipv6 не пропала, но у компьютера при выводе команды ipconfig /all адреса с ipv6 нет.
Вот так вот просто отключить ipv6 с помощью групповых политик.
Читайте так же Скачать MSI пакеты для отключения ipv6 в Windows
Хочу отметить, что после отключения данной политики, созданный ключ реестра остается на сервере. Поэтому вам нужно го удалить, если вы хотите вернуть поддержку IPv6. Для этого можно запустить командную строку в режиме администратора и введите:
reg delete “HKLM\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters” /v DisabledComponents /f
Как понизить приоритет IPv6 перед IPv4
Если по каким-то причинам вы не хотите расставаться с поддержкой протокола IPv6, то можно сделать IPv4 более приоритетным (Это как играться метриками в статических маршрутах). Запустите PowerShell и введите команду:
New-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\ ` -Name DisabledComponents -Type DWord -Value 32
В реестре будет значение 0x20.
Полезные команды для проверки
Проверка всех сетевых интерфейсов на поддержку IPv6 через PowerShell.
Get-NetAdapterBinding -ComponentID ms_tcpip6
В cmd так же можно посмотреть.
netsh interface ipv6 show addresses
Массовая проверка Ipv6 на списке серверов
Поделюсь с вами PowerShell скриптом, который берет список серверов и для каждого из них получает, какие IPv6 адреса на нем есть. После чего выводит подробную таблицу.
# Получаем список серверов из файла, далее кладем в переменную
$servers = Get-Content -Path "C:\Temp\RDS\servers-test.txt"$results = @()
foreach ($server in $servers) {
try {
# Проверяем доступность сервера
$connectionTest = Test-Connection -ComputerName $server -Count 1 -Quiet -ErrorAction SilentlyContinueif (-not $connectionTest) {
$result = [PSCustomObject]@{
'ServerName' = $server
'InterfaceName' = 'Сервер недоступен'
'IPv6Address' = 'N/A'
}
$results += $result
continue
}# На каждом сервере найти все IPv6 адреса
$networkAdapters = Get-NetAdapter -CimSession $server -ErrorAction Stop | Where-Object { $_.Status -eq 'Up' }$hasIPv6 = $false
foreach ($adapter in $networkAdapters) {
$ipv6Addresses = Get-NetIPAddress -CimSession $server -InterfaceIndex $adapter.InterfaceIndex -AddressFamily IPv6 -ErrorAction SilentlyContinueif ($ipv6Addresses) {
$hasIPv6 = $true
foreach ($ipv6 in $ipv6Addresses) {
# 3. Формируем объект с данными для вывода
$result = [PSCustomObject]@{
'ServerName' = $server
'InterfaceName' = $adapter.Name
'IPv6Address' = $ipv6.IPAddress
}
$results += $result
}
}
}# Если на сервере не найдено IPv6 адресов
if (-not $hasIPv6) {
$result = [PSCustomObject]@{
'ServerName' = $server
'InterfaceName' = 'Все интерфейсы'
'IPv6Address' = 'Не найдено'
}
$results += $result
}
}
catch {
$result = [PSCustomObject]@{
'ServerName' = $server
'InterfaceName' = 'Ошибка подключения'
'IPv6Address' = "Ошибка: $_"
}
$results += $result
}
}# Выводим результаты в табличном виде
$results | Format-Table -AutoSize
Надеюсь, что данный опыт вам поможет определиться с тем, нужен вам IPv6 или нет. С вами был Иван Сёмин, автор и создатель IT портала Pyailistnik.org.
0xfffffff неправильно. Правильным значением должно быть значение 0xff.
«Важно! Протокол Интернета версии 6 (IPv6) является обязательной частью Windows Vista и более поздних версий. Не рекомендуется отключить IPv6 или его компоненты, так как некоторые компоненты Windows впоследствии могут не работать. Кроме того при запуске системы будет задержано на 5 секунд при отключении IPv6, задав параметр реестра DisabledComponents значения 0xfffffffнеправильно. Правильным значением должно быть значение 0xff. Дополнительные сведения см. на вопрос «Что такое рекомендации корпорации Майкрософт об отключении IPv6» IPv6 для Microsoft Windows: вопросы и ответы
.»
https://support.microsoft.com/ru-ru/kb/929852/ru#fixit4me
У меня работало и так, но если MS так советует я проверю их предложение и отпишусь. Спасибо что поделились информацией. Кстати порадовало что у них появились MSI пакеты для отключения IPV6, которые можно использовать в GP через распространение ПО
MS не рекомендует отключать ipv6 (с помощью значения ff). рекомендует ставить приоритет ipv4, т.е. ставить значение 32 (десятичное)