97 - Заблокирован пакет с установленным флагом DF, передача которого без фрагментации невозможна
97 - Заблокирован пакет с установленным флагом DF, передача которого без фрагментации невозможна
Категория: Железо Теги: ViPNet Опубликовано: 11 декабря 2022

ViPNet Coordinator - 97 Пакет заблокирован с флагом DF

Хочу рассказать вам про событие "97 - Заблокирован пакет с установленным флагом DF, передача которого без фрагментации невозможна" на ViPNet Coordinator HW1000.

Такая ошибка говорит о том, что пакет, который пришел на него имеет размер, превышающий допустимый и при этом у него установлен флаг Don't Fragmentation, то есть запрещается фрагментировать пакет (разбивать на более мелкие пакеты).

В чем суть? Есть такой параметр MTU - максимальный размер пакета и по умолчанию он равен 1500, то есть большинство сетевых устройств может передавать пакеты размером не более 1500, но что они делают когда приходят пакеты большего размера? Отбрасывают их? Нет, они их фрагментируют, то есть разбивают на два или более пакетов.

MTU можно изменить, но какой смысл, если почти все сетевые устройства по пути все равно будут поддерживать MTU = 1500 и бить пакеты на меньшие по размеру? Это имеет смысл, если вы контроллируете все устройства от начала пути до его конца и можете на всех них указать требуемый вам размер MTU. Однако, я отвлекаюсь от темы.

Сетевому пакету можно установить флаг DF, который запрещает фрагментировать его и в нем нет смысла, если размер пакета больше размера MTU устройств на его пути.

Однажды, при попытке разобраться почему не проходят пакеты из определенного приложения обнаружил на своем випнет координаторе сообщение "97 - Заблокирован пакет с установленным флагом DF, передача которого без фрагментации невозможна".

Журнал пакетов на координаторе ViPNet HW 4

Весь прикол в том, что пакет доходил до координатора и блокировался именно на нем, проходя при этом сетевую карту компьютера и коммутатор, на которых был установлен такой же MTU, как и на самом координаторе. 

Пакет от компьютера до координатора проходил по туннелю и до прихода на координатор он подходил под требования максимального размера пакета. Посмотрите сами - размер пакетов 16500 байт, количество пакетов 11, из чего получается 1500 байт на пакет. Что же тут не так? 

Всё просто, пакет приходит на координатор открытым и после шифрования он становится больше, а из-за флага DF его не получается разбить. Именно поэтому внутренний интерфейс ETH2 пропустил его, а внешний интерфейс ETH0 заблокировал. Адреса не становятся больше, ведь випнет просто заменяет адрес отправителя на свой/себя.

Как решить эту проблему? Либо ставить на компьютер ViPNet Client, либо заставить программу не ставить флаг DF.

Уменьшить MTU на координаторе можно при помощи параметра mssdecrease из iplir.conf. По умолчанию значение 0, если поставить 40, то MTU станет 1460. Больше чем на 100 уменьшать не стоит. Да и вообще уменьшать не стоит, начинаются косяки, не на координаторе.

Увеличить его можно начиная с прошивки координатора 4.3.2 через веб-интерфейс.

Простой способ изменить MTU на ViPNet Coordinator HW 4

В новых версиях документации появилось описание такого события, хотя ранее не было. Вот что они пишут.

"""

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

Иногда требуется автоматическое согласование MTU, например в случаях, когда настройки сети не
допускают использования фрагментированных пакетов. Для этого ViPNet Coordinator HW
отправляет ICMP-пакеты определенного типа (type 3, code 4) в случае, когда размер IP-пакета
превышает значение MTU. При этом IP-пакет отбрасывается, а в журнале пакетов добавляется
запись о блокировке с кодом события 97 (Packets with the DF bit set, which transfer without
fragmentation is impossible).

При появлении в журнале пакетов записей с указанным кодом события необходимо
убедиться, что отправка ICMP-сообщений о необходимости фрагментации IP-пакета (ICMP type 3,
code 4) разрешена правилами межсетевого экрана. Если при этом записи о блокировке с
указанным кодом события продолжают появляться, то это означает, что активное оборудование в
сети не поддерживает автосогласование MTU, либо блокирует ICMP-сообщения указанного типа. В
таком случае необходимо устранить причину блокировки ICMP-сообщений, либо согласовать
величину MTU в сети вручную.

"""

В моём случае, заблокированных ICMP сообщений не было.

Алексей Черемных
2861