Обход проблемы фрагментации для gre или ipip туннеля для linux-роутера
Допустим, у нас есть linux-роутер, на которые терминируются туннели.
Обычно mtu внутри туннеля mtu = 1500 - 20 = 1480 байт. В linux есть несколько способов обхода данного ограничения на размер пакета.
1. Субтуннелирование
В этом случае туннель создаётся поверх другого туннеля. Примерно так:
ip link add dev ge-node1 up mtu 960 type gre local 90.189.77.100 remote 199.7.255.41 ttl 255 key 255
ip addr add 0.254.1.1/32 peer 0.254.1.255 dev ge-node1
ip link add dev ge-p1-node1 up mtu 16384 type gre[tap] local 0.254.1.1 remote 0.254.1.255 ttl 1 key 255 nopmtudisc ignore-df
Это работать будет даже через поверх интернета. Задержка составит примерно 0.5ms.
2. Туннелирование с применением специальными параметрами
Ну, в этом случае туннель необходимо создать с параметрами nopmtudisc ignore-df. Примерно так:
ip link add dev ge-uplink0 up type gre local 10.77.85.10 remote 10.76.225.1 key 255 nopmtudisc ignore-df ttl 255
Но, фрагментированные пакеты могут блокироваться фаерволом, поэтому такой способ может не работать например поверх интернета.