1С:Предприятие 8.3 и приоритизация протокола IPv4 над IPv6 в Windows Server 2012 R2

1C-Enterprise-8-3-and-prioritization-of-IPv4-over-IPv6Анализируя содержимое технологического журнала сервера 1С:Предприятие 8.3 можно обнаружить события проверки соединения с рабочим сервером кластера 1С. В случае, когда сервер проверяет сам себя мы можем заметить, что используется IPv6, несмотря на то, что, возможно, ранее мы отключали использование этого протокола в свойствах сетевого подключения в Windows.

События такого рода в журнале имеют примерно следующий вид:

13:39.016001-0,CONN,0,process=rphost,OSThread=6916,Txt='Ping direction statistics: address=[::1]:1541,pingTimeout=5000,pingPeriod=1000,period=10157,packetsSent=10,avgResponseTime=0,maxResponseTime=0,packetsTimedOut=0,packetsLost=1,packetsLostAndFound=1'

Теоретически это не должно являться проблемой для 1С, так как петлевой интерфейс с адресом ::1 доступен по протоколу IPv6. Это легко проверить с помощью утилиты ping

Windows-Server-2012-R2-ping-localhost-ipv6

При этом UDP и TCP-прослушиватели в системе создаются серверным процессом 1С не только для IPv4, но и для IPV6:

Windows-Server-2012-R2-netstat-1C

Некоторые специалисты в области поддержки 1С, в качестве дополнительной меры в комплексе мероприятий по достижению стабильности работы серверов 1С, дают рекомендацию по полному отключению протокола IPv6 там, где этот протокол полноценно не используется. В качестве более "мягкого" варианта предлагается изменение приоритезации для протокола IPv6. То есть речь идёт не о полном отключении поддержки IPv6, а именно о понижении приоритета IPv6 над IPv4.

На данный момент времени я объективно не могу сказать, что изменение приоритезации IPv6 конкретно решило для нас ту или иную проблему в работе серверов 1С, так как практически пока не встречался с явными фактами отрицательного влияния системных настроек приоритезации IPv6 на работу 1С. Тем не менее, мы рассмотрим пример того, как выполнить понижение приоритета IPv6.

Понижение приоритета IPv6

В операционных системах Windows начиная с Windows Vista в конфигурации по умолчанию у протокола IPv6 имеется приоритет над протоколом IPv4. В некоторых ситуациях наличие этого приоритета может проявляться даже несмотря на то, что в привычном всем графическом интерфейсе настроек сетевого подключения протокол IPv6 выключен

Windows-Server-2012-R2-disable-ipv6-via-nic-properties

Например, если мы, находясь на хосте, с помощью утилиты ping попробуем проверить доступность хоста по его же имени или с использованием имени localhost, то увидим, что по умолчанию используется проверка доступности по IPv6 адресу

Windows-Server-2012-R2-ping-hostname-via-ipv6

Понизить приоритет протокола IPv6 можно путём установки параметра реестра DisabledComponents, описанного в статье KB929852 - Guidance for configuring IPv6 in Windows for advanced users

По умолчанию в Windows Server 2012 R2 данный параметр реестра отсутствует. Для полного выключения IPv6 через этот параметр реестра его значение нужно задать как 0xFF. Если же нужно оставить возможность работы протокола IPv6, понизив при этом его приоритет относительно IPv4, то значение этого параметра должно быть установлено как 0x20.

Готовый reg-файл для импорта параметра в реестр может выглядеть так:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP6\Parameters]

"DisabledComponents"=dword:00000020

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

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters" /v DisabledComponents /t REG_DWORD /d 0x20 /f

setup-prioritization-of-IPv4-over-IPv6-in-Windows-Server-2012-R2-via-registry

Посмотрим, каким образом, по умолчанию настроены политики префикса IPv6 на примере Windows Server 2012 R2 (до применения указанного параметра реестра)

netsh interface ipv6 show prefixpolicies

Windows-Server-2012-R2-ipv6-prefix-policies

Столбец Precedence определяет приоритет префикса. Чем больше число, тем выше приоритет

Префикс ::ffff:0:0/96 относится ко всем IPv4 адресам. В списке политик этот префикс представлен с меткой Label 4 и имеет более низкий приоритет по отношению ко всем IPv6 адресам (::/0)

После внесения изменений в реестр и перезагрузки сервера ситуация с приоритетами изменится так, что префикс, относящийся ко всем IPv4 адресам, поднимется на самый верхний уровень.

Windows-Server-2012-R2-ipv6-prefix-policies

Недостатком описанного способа изменения приоритезации является необходимость перезагрузки системы для вступления изменений в силу. Если мы не хотим действовать через реестр и перезагружать систему, то есть альтернативный вариант повышения приоритета IPv4 над IPv6, который начинает работать сразу в оперативном режиме. Для этого нужно воспользоваться утилитой netsh

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

netsh interface ipv6 set prefix ::ffff:0:0/96 55 4

Windows-Server-2012-R2-ipv6-set-prefix-policies-for-ipv4

Сделанные изменения начнут действовать в системе сразу. Например, если мы, находясь на хосте, попробуем его пропинговать по его же имени, то увидим, что теперь по умолчанию используется проверка доступности по IPv4 адресу

Windows-Server-2012-R2-ping-hostname-via-ipv4


Восстановление системных настроек по умолчанию

Если приоритет IPv4 повышался через правку параметра реестра, то простое удаление ранее добавленного в реестр параметра DisabledComponents с последующей перезагрузкой сервера приведёт к автоматическому восстановлению стандартных настроек приоритезации. То есть настройки prefixpolicies автоматически вернутся в исходное состояние и в системе опять будет выставлен приоритет IPv6 над IPv4.

Если же для изменения приоритезации мы использовали не правку реестра с перезагрузкой, а вышеописанный метод с использованием прямой правки политик утилитой netsh, то следует учесть один нюанс. В случае такой правки после следующей перезагрузки системы из таблицы приоритезации исчезнут все используемые там по умолчанию префиксы и останется только заданный нами ране префикс:

Windows-Server-2012-R2-ipv6-prefix-policies-with-netsh

В некоторых ситуациях это может стать проблемой при работе в смешанных средах IPv4 и IPv6: TechNet Forums - Windows 7 Networking - How to change default TCP/IP to v4?

Поэтому, если в такой ситуации нам потребуется вернуть исходную конфигурацию, используемую по умолчанию в Windows Server 2012 R2, то можем выполнить удаление созданным нами ранее политик. При их удалении будут автоматически восстановлены настройки по умолчанию. Например, в нашем случае достаточно будет выполнить команду удаления одной ранее добавленной политики:

netsh interface ipv6 delete prefixpolicy ::ffff:0:0/96

Windows-Server-2012-R2-ipv6-delete-prefix-policies

Дополнительные источники информации:

Всего комментариев: 6 Комментировать

  1. sbrick /

    Спасибо. А как это отражается на производительности 1С?

    1. Алексей Максимов / Автор записи

      Не могу сказать, так как не изучал этот вопрос. Вопрос скорей не в производительности, а в применении метода в случае возникновения проблем с 1С, например, описанных в статье Вячеслава Гилёва по последней ссылке.

  2. NotFound /

    Спасибо! Старая фича, пользовались еще на 7-ке и 2008... потом благополучно забыли.

  3. zSPD /

    Спасибо! 8.3.19.1665 убила ЗУП-ы, из за этого проклятого ipv6. Понизил приоритет ipv6 и всё завелось.

  4. Вадим /

    Добавлю от себя такой момент. На доменном компьютере, после того, как отключил IPv6 через реестр, профиль сети переехал с доменной сети на частную. Будьте бдительны, чтобы брандмауэр не заблокировал подключение к удаленному хосту

    1. Алексей Максимов / Автор записи

      Практика показывает, что механизм определения текущего профиля сети в Windows Firewall живёт в своей, порой ничем логичным не объяснимой, реальности. И по аналогичным граблям ходили уже не раз. Поэтому мы предпочитаем использовать правила, настроенные сразу для всех трёх типов профилей.

Добавить комментарий