Hvem vælger WireGuard-MTU’en: wg-quick, kernen eller dig
WireGuard forhandler ingen MTU. Opsætningsværktøjet, en netværksmanager eller din konfigurationslinje bestemmer, og standardværdien er et gæt om ruten, ikke en måling.
WireGuard har ingen MTU-forhandling. Den krypterer alt, hvad interfacet giver den, og sender resultatet, og hvis den indkapslede pakke overskrider ruten, bliver den droppet eller fragmenteret et sted, du ikke kan se. Nogen skal vælge interfacets MTU, og den nogen er det værktøj, der bragte interfacet op.
Der findes tre kandidater, og de er nemme at forveksle.
Tre steder, værdien kan komme fra
Værdien kan sættes eksplicit i interface-konfigurationen, beregnes af opsætningsværktøjet ud fra ruteoplysninger eller sættes af den netværksmanager, der ejer interfacet. Et almindeligt wg-kald gør ingen af disse ting, fordi wg kun styrer nøgler og peers. MTU’en bor på netværksinterfacet, og derfor er ip link show wg0 der, hvor du læser den.
Er du i tvivl om, hvilken der gælder, så læs MTU’en først og find derefter ud af, hvem der startede interfacet.
Afgør det ud fra, hvem der kører interfacet
Hvis wg-quick starter det, vinder en eksplicit MTU-linje, og ellers beregner den en værdi. Hvis en netværksmanager starter det, afgør den managers profil. Hvis en container-runtime eller en udbyderklient starter det, så læs deres dokumentation i stedet for at antage wg-quick-adfærd.
Beslutningen handler ikke om, hvilket tal der er bedst i abstrakt forstand. Den handler om, hvilken komponent du faktisk kan konfigurere.
Hvad standardberegningen gør
wg-quick slår ruten op til peerens endpoint, tager MTU’en for det udgående interface og trækker indkapslingsomkostningen fra. Med et IPv4-ydrehoved er det omkring 60 bytes; med IPv6 er det omkring 80. Resultatet begrænses, så en rute på 1500 bytes giver 1420 i stedet for en værdi, der kun virker på én adressefamilie. Det er en rimelig standard, ikke en måling af din rute.
Den kan ikke vide noget om en senere tunnel, et mobilt link eller en filtreret ICMP-rute.
Loftet skjuler et reelt spørgsmål. Hvis din rute virkelig er 9000 bytes ende til ende, efterlader 1420 ydeevne på bordet, og hvis ruten er 1400, er 1420 allerede for stor. Standardværdien er et kompromis, og den skal behandles som sådan.
Når ruten ændrer sig under dig
En bærbar computer, der vandrer fra Ethernet til Wi-Fi til et telefon-hotspot, beholder den interface-MTU, den startede med. Den ydre rute er måske nu mindre, og intet forhandler igen. Indlejrede tunneler gør det værre, fordi hvert lag trækker sine egne omkostninger fra det samme budget. Den værdi, der virkede på kontoret, er ikke den værdi, der virker i lufthavnen.
Et nyligt handshake beviser, at nøglerne virker. Det beviser intet om, hvorvidt store pakker passer.
Test ét tal ad gangen
Behold samme applikation og destination, ændr én værdi, og mål. ping -M do -s 1372 tester en pakke på 1400 bytes med DF-bittet sat, og det er den form for test, du vil have. Hvis små anmodninger virker, og store går i stå, har du et størrelsesproblem og ikke et routingproblem.
Ændr kun MTU’en. At justere flere pakkeindstillinger på én gang fortæller dig intet om, hvilken der gjorde forskellen.
Og forvent ikke, at en MTU-ændring retter en manglende returrute, en videresendelsesregel eller en DNS-fejl. De giver også symptomer uden trafik, og de har deres egne tests. wg-quick-manualen dokumenterer det automatiske valg.