MTU of MSS? Wat een VPN-wijziging echt oplost
MTU beperkt wat een link draagt; MSS beperkt de TCP-lading erin. Stel de juiste in en weet welke protocollen geen van beide dekt.
Pings slagen, grote overdrachten blijven hangen en de tunnel meldt zichzelf gezond. Iemand verlaagt de MTU van de interface, een ander begrenst de MSS, en soms verdwijnt het probleem om redenen die niemand vastlegt. De twee getallen beschrijven verschillende objecten, dus het verkeerde aanpassen levert een oplossing op die op geluk lijkt. Dit is de werkwijze: bepaal de laag, pas de bijbehorende aanpassing toe en test daarna op een nieuwe verbinding.
Twee getallen, twee objecten
De MTU hoort bij een link of een interface: het is het grootste pakket dat kan worden doorgegeven zonder te worden opgesplitst. De MSS hoort bij TCP: het is de grootste hoeveelheid TCP-lading die een segment kan dragen, en het sluit zowel de TCP- als de IP-header uit. Op een gewone Ethernet-link met IPv4 levert een MTU van 1500 bytes de bekende MSS van 1460 bytes op. Die getallen beschrijven verschillende lagen en worden via verschillende mechanismen uitgewisseld. Ze verwarren is makkelijk omdat beide in bytes worden gemeten en beide rond 1500 liggen.
De ene komt als een interface-instelling. De andere komt als een optie in een SYN-segment, onderhandeld tussen eindpunten die je interface nooit zien.
Waar de buitenste overhead landt
Een VPN stopt het binnenste pakket in een ander, en het buitenste pakket moet in het fysieke pad passen. Inpakheaders, de buitenste IP-header, de transportheader en elke authenticatietag verbruiken bytes die het binnenste pakket niet kan gebruiken. Laat de tunnelinterface op 1500 en het buitenste pakket overschrijdt geregeld wat het pad kan dragen. Met de 'niet fragmenteren'-bit gezet, laat de router het vallen en hoort een ICMP-fout terug te sturen; als die fout wordt gefilterd, komt de afzender het nooit te weten.
Daarom lijkt de storing selectief. Kleine verzoeken worden voltooid en alles wat een segment vult, stokt, omdat alleen de grote pakketten worden weggegooid. Een tunnel die een ping doorlaat, is geen tunnel die data draagt.
MSS begrenzen, en waar dat geldt
MSS-begrenzing herschrijft de waarde in het SYN-segment terwijl het een gekozen punt passeert, waardoor beide eindpunten een kleinere lading kiezen zonder dat een van beide weet waarom. Op Linux is het een doel in de mangle-tabel dat door een expliciete regel wordt toegepast, en het moet SYN-pakketten in de richting die je wilt raken. Beperk het tot de tunnelinterface en het adresbereik, want een brede regel verandert het gedrag van verkeer dat nooit de tunnel in gaat.
Het effect geldt alleen voor TCP. Een UDP-toepassing, een QUIC-sessie en elk protocol dat zijn eigen datagrammen bouwt, blijven onaangetast.
Diagnosticeer met een vast pad
Houd één variabele tegelijk vast. Test met een pakket waarvan je zelf de grootte kiest, en zet de vlag 'niet fragmenteren' zodat de kernel het resultaat meldt in plaats van het te verbergen.
Noteer waar de storing begint: in de tunnel, bij de tunnelinterface of op het fysieke pad na de inkapseling. Wijzig dan één getal en herhaal dezelfde test in plaats van een andere. Bestaande verbindingen behouden de onderhandelde MSS, dus een beleidswijziging is alleen zichtbaar op een nieuwe verbinding, en daarom bewijst een gecachte pagina in geen enkele richting iets. Als één grote upload begint te werken, heb je iets geleerd over dat pad en niet over elk protocol erop.
Wat elke wijziging niet oplost
Het verlagen van de interface-MTU verandert de MSS van een al opgezette sessie niet. MSS-begrenzing helpt een UDP-stroom niet en repareert geen pad waarop ICMP-fouten maar in één richting worden gefilterd. Elke wijziging lost één klasse problemen op en laat de rest precies zoals die was.
Noteer welke aanpassing je waar hebt toegepast en welke test het verschil liet zien, want anders past de volgende engineer beide toe en verliest het vermogen om te zeggen welke ertoe deed. Als de beperking echt en permanent is, kies dan een tunnel-MTU die haar weerspiegelt boven een begrenzing die haar verbergt. Als je moet begrenzen, laat de regel dan nauw en van commentaar voorzien, want een onverklaarde mangle-regel wordt standaard permanent.