Назад | Перейти на главную страницу

Транспортный режим IPsec и MTU

[Похожий на Правильный способ установки MTU клиента IPsec (Linux / Racoon), но отличается тем, что на стороне респондента нет маршрутизатора]

У меня есть установка, в которой машинам в локальной сети необходимо разговаривать с сервером Linux в центре обработки данных. Маршрутизатор для локальной сети имеет статический внешний IP-адрес, поэтому я настроил политику как на маршрутизаторе, так и на сервере, чтобы использовать IPsec в транспортном режиме для связи друг с другом.

Это отлично работает для небольших пакетов, однако сервер не может точно определить MTU для исходящих пакетов, что приводит к зависанию соединения.

Как лучше всего избежать этих проблем?

Идеи на данный момент:

  1. ограничить MTU в таблице маршрутизации. Это требует статического маршрута на сервере и в основном работает, но ломается для мобильных клиентов («Roadwarrior»), когда я представляю их через две недели.

  2. используйте iptables, чтобы изменить настройку TCPMSS для входящих пакетов. Похоже, это не имеет никакого реального эффекта и не будет работать для UDP.

Это ошибка в IPsec ядра Linux. Он не учитывает размер инкапсуляции ESP в транспортном режиме при принятии решения о фрагментации исходящего пакета; затем он сбрасывается на выходе, поскольку превышает MTU интерфейса. Я не знаю, исправлено ли это в новых ядрах.

1) Для пакетов нет MTU. MTU предназначен для интерфейса. Размер пакетов сравнивается с MTU интерфейса. 2) Маршрутизатор всегда знает MTU своего интерфейса. Это знание может быть ошибочным, но оно все еще существует. 3) TCP MSS может быть изменен для входящих пакетов. И это действительно влияет на передачу.

Что касается вашей настройки - максимальный размер, который ваш канал IPSec может инкапсулировать без фрагментации, определяется размером заголовков IPSec, таким образом, это зависит от набора преобразования и шифров. Не зная его, вычислить невозможно.

Тем не менее, если сумма полезной нагрузки + заголовков больше, чем MTU исходящего интерфейса, это не означает, что пакет будет отброшен - может произойти фрагментация. Даже если в инкапсулирующем пакете установлен бит DF - он может копироваться или не копироваться во внешний заголовок (если мы говорим о туннелях), и это зависит от конфигурации вашей конечной точки безопасности.

Я не совсем понимаю, какова ваша установка. Я предполагаю, что вы используете транспортный режим IPsec с некоторой промежуточной инкапсуляцией, например gre или ipip.