WireGuard zamŕza: limit MTU alebo chýbajúce pravidlo preposielania?
Všetko za serverom je problém preposielania alebo spätnej trasy. Malé požiadavky prechádzajú, veľké zamŕzajú — to je podpis veľkosti paketu.
Zvykom je znížiť MTU hneď, ako sa WireGuard začne správať zle, a ten zvyk skrýva inú poruchu. Brána, ktorá nepreposiela, a cesta, ktorá neunesie veľké pakety, dávajú rozlíšiteľné vzory: jedna zlyháva v oboch smeroch a pri každej veľkosti, druhá prežíva malé požiadavky a umiera na veľkých. Určte, ktorý tvar máte, skôr než zmeníte akékoľvek číslo. Test je lacný a odstraňuje polovicu možných príčin.
Dve poruchy, dva rôzne tvary
Problém preposielania sa objaví hneď za serverom. Handshake prejde, adresa tunela odpovedá, a nič za bránou nie je dostupné ani s malou požiadavkou. Paket dorazil na server a nebol preposlaný, alebo odpoveď nemala spätnú trasu.
Problém veľkosti sa objaví len nad hranicou. DNS, TCP handshake a malé volanie API fungujú, zatiaľ čo sťahovanie súboru alebo veľká odpoveď zamrznú. Pakety, ktoré sa vmestili, prešli od konca po koniec, a tie, ktoré sa nevmestili, boli niekde zahodené bez použiteľnej správy.
Tie opisy ukazujú na rôznych ľudí a rôzne konfiguračné súbory, preto sa meranie tvaru vyplatí viac než hádanie. Jediný ping na bránu ich nedokáže rozlíšiť.
Vylúčte preposielanie, skôr než čokoľvek zmenšíte
Testujte cieľ za bránou, nie bránu samotnú. Ping na adresu tunela servera dokazuje len to, že rozhranie je hore a že sa dostanete k stroju, ktorý tunel ukončuje. Prevádzka pre širšiu sieť závisí od zapnutého preposielania IP na tom stroji a od firewallu, ktorý preposielaný tok povolí. Musí platiť oboje, a ak je jedno nepravdivé, nastane rovnaké ticho.
Spätné smerovanie je rovnako dôležité. Ak cieľová sieť nevie, ako sa dostať na adresu tunela klienta, požiadavka dorazí a odpoveď zmizne, a klient hlási časový limit, ktorý vyzerá rovnako ako zahodené preposielanie.
Tam, kde návrh používa preklad adries, je pravidlo prekladu súčasťou tej spätnej cesty. Jeho odstránenie pri hľadaní problému s MTU premení funkčný návrh na pokazený, preto si pred úpravou prečítajte existujúce pravidlá.
Zmerajte, kde sa prerušenie začína
Najprv si prečítajte stav preposielania a pravidlá filtrovania. Sú to kontroly len na čítanie a odpovedajú na lacnú otázku:
sysctl net.ipv4.ip_forward
sudo iptables -S FORWARD
ip route get 10.30.0.9
Potom otestujte veľkosti s bitom don’t-fragment, z klienta, smerom k hostiteľovi za bránou:
ping -M do -s 1200 10.30.0.9
ping -M do -s 1400 10.30.0.9
Ak prvý test prejde a druhý zlyhá s chybou fragmentácie, cesta vám hovorí svoju použiteľnú veľkosť. Ak neprejde ani jeden, pozeráte sa na preposielanie alebo smerovanie, a MTU nie je premenná, ktorú treba zmeniť.
| Observation | Points toward | Where to look |
|---|---|---|
| Nothing beyond the gateway works | Forwarding or return route | Forwarding flag, filter rules, routing table |
| Small works, large stalls | Packet size on the path | Tunnel MTU and the link underneath |
| Only names fail | DNS resolution | The resolver configured for the tunnel |
| Works sometimes | Multiple paths or state expiry | Flow selection and NAT state |
Opravte vrstvu, ktorú ste dokázali
Keď je poruchou preposielanie, opravou je pravidlo preposielania alebo trasa, vyjadrená čo najužšie, ako návrh dovolí. Keď je poruchou veľkosť, opravou je MTU, ktoré zohľadňuje zapuzdrenie na tejto konkrétnej ceste, aplikované na rozhranie, ktoré ho potrebuje, a nie na každý adaptér vo flotile.
Tak či onak, potom zopakujte tú istú úlohu voči tomu istému cieľu. Ak pôvodný veľký prenos teraz dobehne, zmena riešila vrstvu, ktorá zlyhávala. Ak sa zlepšil iba malý test, liečili ste príznak a skutočný limit stále stojí.
Zapíšte, ktorý tvar ste pred zmenou pozorovali. Ten jediný riadok, zaznamenaný vedľa opravy, je to, čo zabráni ďalšiemu človeku znížiť MTU, ktoré nikdy nebolo problémom.