Někde v nějakém návodu je číslo, obvykle mezi šedesáti a osmdesáti bajty, které někdo odečetl od 1500, aby dostal MTU rozhraní. To číslo popisuje jedno konkrétní zapouzdření na jedné konkrétní trase. Změňte režim, vnější rodinu adres, šifru nebo přítomnost NAT a aritmetika už pro váš tunel neplatí.

Číslo přišlo z jiného tunelu

Režie není vlastnost IPsec v abstraktu. Je to vlastnost paketu, který se skutečně sestaví: vyjednaný režim, vnější hlavička, ochranná hlavička, výplň, pole integrity a možná ještě obal UDP.

Číslo uváděné pro transportní režim s IPv4 a bez NAT popisuje menší paket než tunelový režim s IPv6 pod průchodem NAT. Obě jsou správné pro svůj případ. Kopírování kterékoli z nich do jiného nasazení je způsob, jak lidé skončí s MTU, které láme velké přenosy. Selhání je tiché, protože malé požadavky dál fungují.

Sečtěte vrstvy, které tam skutečně jsou

Začněte u vnější hlavičky IP a jděte dovnitř. V tunelovém režimu je původní paket uvnitř, takže vnější hlavička je přidání, ne náhrada. RFC 4303 popisuje hlavičku ESP, výplň a data integrity, která za ní následují.

LayerWhat it addsWhen it applies
Outer IP header20 bytes for IPv4, 40 for IPv6Always, and 40 rather than 20 if the outer path is v6
ESP header8 bytes of SPI and sequence numberAlways
Block cipher IV8 to 16 bytes depending on the transformWhen the negotiated cipher uses one
Padding and trailerPadding to the block size, plus two trailer bytesAlways, and the amount varies with payload length
Integrity data12 to 16 bytes for common authenticated ciphersWhen integrity protection is negotiated
UDP encapsulation8 bytesNAT traversal on port 4500, which is common for clients behind NAT

Žádný z těch řádků není napříč nasazeními konstantní a řádek s výplní není konstantní ani v rámci jednoho nasazení. To je celý důvod, proč jedno publikované číslo režie zklame.

Dvě lokality se mohou o stejném tunelu neshodnout

Chráněný paket pořád musí projít vnější trasou a vnější trasa není všude stejná. Přístupová linka PPPoE unese méně než čistý segment Ethernet. Mobilní síť se může dál zmenšit a poskytovatel, který tuneluje vlastní provoz, přidá další zapouzdření, o kterém nikdo nemluvil. Tunel, který na jedné lince funguje a na jiné selhává, popisuje druhou linku, ne protokol.

Oba směry se také mohou lišit. Asymetrická trasa vám může dát funkční upload a zaseknutý download, což vypadá jako problém aplikace, dokud se nepodíváte na velikosti paketů místo na dostupnost. Úspěšný malý ping dokazuje o odpovědi plné velikosti velmi málo.

Měřte místo odečítání

Najděte největší datagram, který trasou projde. Pak ho porovnejte s hodnotou, kterou hlásí rozhraní:

ip link show eth0 | grep -o 'mtu [0-9]*'
ip xfrm state list
ping -M do -s 1400 198.51.100.7
ping -M do -s 1372 198.51.100.7
tcpdump -ni any -c 20 'esp or udp port 4500'

Snižujte velikost pingu, dokud nepřijdou odpovědi, a největší fungující hodnotu berte jako rozpočet pro danou trasu. Výstup xfrm vám řekne, který režim a které algoritmy byly vyjednány, což je vstup pro každý poctivý výpočet. Zachycení potvrdí, zda je na lince ESP, nebo ESP obalené v UDP, a to vyřeší otázku NAT bez hádání.

Vyhraďte jednu hodnotu i pro řídicí rovinu. Pakety IKE handshake mají jinou strukturu než datové pakety, takže velikost odvozená ze zachycení handshake není MTU datové roviny.

Dejte číslo tam, kam patří

Pro TCP tunelem je omezení MSS často nejméně invazivní kontrola, protože snižuje to, co koncové body posílají, aniž by měnilo samotný tunel. U tunelu založeného na trasách nastavte MTU tunelového rozhraní záměrně a zdokumentujte proč. Udělat obojí najednou a pak měřit vám nedá žádnou informaci o tom, co pomohlo.

Držte v tiketu pohromadě vyjednaný režim, vnější rodinu, stav NAT a reprodukovatelný symptom. Zaznamenaná sada čtyř faktů porazí zapamatovanou konstantu a je to jediná verze tohohle, která přežije příští upgrade klienta.

Související články