Как сменить приоритет протокола ipv4/ipv6

Проблемы при наличии двух сетевых карт на сервере или

Опубликовано 31.01.2016 автором admin

В некоторых случаях могут происходит странные ошибки, связанные со стабильностью работы платформы 1С:Предприятие 8.

Одной из рекомендаций является понизить приоритет протокола ipv6 или выключить его совсем.

В ряде случаев эти ошибки обусловлены тем, что клиент запрашивает у сервера его адрес, а сервер вместо адреса в формате IPv4 вида 192.168.1.2 возвращает адрес в формате IPv6 в формате вида ::1 или fe80::e168:38a1:5a4d:d271%40 (адреса взяты для примера, ключевое там — много групп цифр, разделённых вместо точек двоеточиями).

Увидеть это можно, выполнив в командной строке команду

ping servername

где вместо servername надо подставить имя своего сервера. Если ответ будет в формате IPv6 — ваш сервер тоже может быть подвержен такой проблеме.

Ранее в нашем блоге давалось решение вида «отключить протокол IPv6 полностью»: http://www.gilev.ru/disableipv6/, на Инфостарте проблема тоже обсуждалась: http://infostart.ru/public/160388/, решений приводилось два — полное отключение протокола IPv6 полностью, и занесение IP-адреса сервера в файл hosts.

Первое решение может быть неудобно тем, что как минимум требует перезагрузить сервер, второе может быть неудобно или даже неработоспособно в случае нахождения сервера в нескольких подсетях одновременно (например, несколько сетевых карт).

А вот теперь сообщаем более технологичное решение: просто повысить приоритет протокола IPv4 над протоколом IPv6, тем не менее сохранив работоспособность IPv6. Решение не требует перезагрузки, вступает в действие моментально. Нужно открыть командную строку в режиме администратора, и выполнить там две команды:

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

Всё, работает! Проверим на примере «чистой» Windows 2012 Server (жирным выделены команды, дальше в сокращённом виде приводится ответ операционной системы):

ping gilev_test
Обмен пакетами с gilev_test [fe80::21c0:ff89:967f:955a%19] с 32 байтами данных:
Ответ от fe80::21c0:ff89:967f:955a%19: время<1мс

Итак, возвращается адрес в формате IPv6 (fe80::21c0:ff89:967f:955a%19).Применим наше лекарство:

netsh interface ipv6 set prefix ::/96 60 3
ОК.
netsh interface ipv6 set prefix ::ffff:0:0/96 55 4
ОК.

Снова проверим ping:

ping gilev_test
Обмен пакетами с gilev_test [192.168.1.5] с 32 байтами данных:
Ответ от 192.168.1.5: число байт=32 время<1мс TTL=128

Как видим — результат резко изменился в нужную нам сторону, стал возвращаться адрес 192.168.1.5. Теперь проверим, что по адресу в формате IPv6 сервер по-прежнему пингуется, и мы ничего не сломали

ping fe80::21c0:ff89:967f:955a%19
Обмен пакетами с fe80::21c0:ff89:967f:955a%19 по с 32 байтами данных:
Ответ от fe80::21c0:ff89:967f:955a%19: время<1мс

P.S. в некоторых случаях если команды не помогли, то выполните дополнительную команду:

netsh interface ipv6 set prefix ::/96 1 3

Всё работает, как и должно быть. Пользуйтесь на здоровье!