cisco — Решение проблем, связанных с фрагментацией IP, а также с MTU, MSS и PMTUD, при помощи протоколов GRE и IPSEC

GRE и IPsec вместе При использовании IPsec для шифрования GRE-туннелей процессы фрагментации и PMTUD усложняются. Такое совместное использование IPsec и GRE необходимо, потому что IPsec не поддерживает многоадресные IP-пакеты (т.е. в сети VPN, использующей IPsec, невозможно использовать протокол динамической маршрутизации). В то же время, GRE-туннели поддерживают многоадресную рассылку, и поэтому GRE-туннель можно использовать для инкапсуляции многоадресного пакета, принадлежащего протоколу динамической маршрутизации, в одноадресный IP-пакет протокола GRE, который затем можно зашифровать при помощи IPsec.

При этом протокол IPsec часто развертывается в режиме транспорта поверх GRE, поскольку одноранговые узлы IPsec и конечные точки туннеля GRE (маршрутизаторы) являются одинаковыми, и режим транспорта обеспечит снижение размера служебной информации IPsec на 20 байт. Одним из интересных случаев является случай, в котором IP-пакет разбивается на два фрагмента и инкапсулируется в GRE. В этом случае IPsec будет видеть два независимых пакета GRE + IP. Очень часто при использовании настроек по умолчанию один из этих пакетов будет иметь довольно большой размер и после шифрования его понадобиться фрагментировать. Перед дешифровкой одноранговый узел IPsec должен будет собрать этот пакет.

Такая двойная фрагментация (один раз перед GRE и один раз после IPsec), выполняемая отправляющим маршрутизатором, ведет к увеличению времени запаздывания и к уменьшению пропускной способности. Кроме того, сборка осуществляется в режиме процессной коммутации, поэтому всякий раз когда это происходит, нагрузка на процессор принимающего маршрутизатора резко увеличивается. Однако этого можно избежать установив на интерфейсе туннеля GRE значение ip mtu, которое будет достаточно низким, чтобы учесть служебные данные как GRE, так и IPsec (по умолчанию значение ip mtu для интерфейса туннеля GRE устанавливается равным значению MTU физического исходящего интерфейса, за вычетом служебных данных GRE).

Ниже в таблице указаны рекомендуемые значения MTU для каждой комбинации туннель/режим работы при условии, что значение MTU исходящего физического интерфейса равно 1500 байт. Примечание: 1400-байтное значение MTU рекомендуется использовать потому, что оно подходит для большинства распространенных комбинаций режимов GRE + IPsec. Кроме того, добавление дополнительных 20 или 40 байт на служебную информацию не приведет к возникновению каких-либо ощутимых проблем. Значительно проще запомнить какое-нибудь одно значение, которое подходит для большинства сценариев. Сценарий 9 IPsec устанавливается поверх GRE.

MTU исходящего физического интерфейса = 1500 байт, IPsec PMTU = 1500 и GRE IP MTU = 1476 (1500 - 24 = 1476). По этой причине пакеты TCP/IP будут фрагментироваться дважды, один раз перед инкапсуляцией в GRE, другой раз после шифрования IPsec. Пакет будет фрагментирован перед GRE-инкапсуляцией, а один из GRE-пакетов снова будет фрагментирован после шифрования IPsec. Установка значения ip mtu 1440 (транспортный режим IPsec) или ip mtu 1420 (туннельный режим IPsec) для туннеля GRE позволит избежать двойной фрагментации в данном сценарии.

Комбинация туннелей Требуемое значение MTU Рекомендуемое значение MTU GRE + IPsec (транспортный режим) 1440 байт 1400 байт GRE + IPsec (туннельный режим) 1420 байт 1400 байт