
Хочу рассказать вам про событие "97 - Заблокирован пакет с установленным флагом DF, передача которого без фрагментации невозможна" на ViPNet Coordinator HW1000.
Такая ошибка говорит о том, что пакет, который пришел на него имеет размер, превышающий допустимый и при этом у него установлен флаг Don't Fragmentation, то есть запрещается фрагментировать пакет (разбивать на более мелкие пакеты).
В чем суть? Есть такой параметр MTU - максимальный размер пакета и по умолчанию он равен 1500, то есть большинство сетевых устройств может передавать пакеты размером не более 1500, но что они делают когда приходят пакеты большего размера? Отбрасывают их? Нет, они их фрагментируют, то есть разбивают на два или более пакетов.
MTU можно изменить, но какой смысл, если почти все сетевые устройства по пути все равно будут поддерживать MTU = 1500 и бить пакеты на меньшие по размеру? Это имеет смысл, если вы контроллируете все устройства от начала пути до его конца и можете на всех них указать требуемый вам размер MTU. Однако, я отвлекаюсь от темы.
Сетевому пакету можно установить флаг DF, который запрещает фрагментировать его и в нем нет смысла, если размер пакета больше размера MTU устройств на его пути.
Однажды, при попытке разобраться почему не проходят пакеты из определенного приложения обнаружил на своем випнет координаторе сообщение "97 - Заблокирован пакет с установленным флагом DF, передача которого без фрагментации невозможна".
Весь прикол в том, что пакет доходил до координатора и блокировался именно на нем, проходя при этом сетевую карту компьютера и коммутатор, на которых был установлен такой же MTU, как и на самом координаторе.
Пакет от компьютера до координатора проходил по туннелю и до прихода на координатор он подходил под требования максимального размера пакета. Посмотрите сами - размер пакетов 16500 байт, количество пакетов 11, из чего получается 1500 байт на пакет. Что же тут не так?
Всё просто, пакет приходит на координатор открытым и после шифрования он становится больше, а из-за флага DF его не получается разбить. Именно поэтому внутренний интерфейс ETH2 пропустил его, а внешний интерфейс ETH0 заблокировал. Адреса не становятся больше, ведь випнет просто заменяет адрес отправителя на свой/себя.
Как решить эту проблему? Либо ставить на компьютер ViPNet Client, либо заставить программу не ставить флаг DF.
Уменьшить MTU на координаторе можно при помощи параметра mssdecrease из iplir.conf. По умолчанию значение 0, если поставить 40, то MTU станет 1460. Больше чем на 100 уменьшать не стоит. Да и вообще уменьшать не стоит, начинаются косяки, не на координаторе.
Увеличить его можно начиная с прошивки координатора 4.3.2 через веб-интерфейс.
В документации это толком не описано, но нужно остановить интерфейс и только после этого изменить значение MTU для конкретного интерфейса. Однако, я бы не советовал вам это делать, если не является очень опытным сетевым администратором.