Transportarea unui pachet interior fix de 1,500 octeți prin VPN
Un pachet interior fix de 1,500 octeți nu încape într-o cale exterioară de 1,500 octeți. Măsurați suprasarcina, apoi alegeți un MTU de underlay mai mare sau o fragmentare acceptată.
Aveți o cerință care nu se îndoaie: partea îndepărtată trebuie să primească exact același pachet IP de 1,500 octeți pe care îl emite expeditorul, inclusiv antetele. Un tunel nu poate împacheta acel pachet împreună cu propriul cadru într-un al doilea pachet IP de 1,500 octeți, așa că ceva din proiect trebuie să cedeze. Ordinea de mai jos este cea pe care o folosesc într-o fereastră de modificare: scrieți bugetul în octeți, demonstrați ce poate transporta cu adevărat underlay-ul, apoi alegeți exact un mecanism de transport și confirmați pachetul interior în partea cealaltă.
Scrieți bugetul în octeți înainte de a edita un profil
Încapsularea adaugă octeți la mai multe niveluri, iar totalul este o proprietate a profilului dumneavoastră, nu o constantă care se poate căuta. Familia de adrese, alegerea cifrului, protocolul de transport și orice opțiune de compresie sau de cadre mută numărul, de aceea o scădere copiată din altă instalare este lipsită de valoare ca buget. Porniți de la cerința interioară, adăugați suprasarcina măsurată pe pachet a configurării dumneavoastră și scrieți dimensiunea exterioară rezultată pe tichetul de modificare înainte ca cineva să editeze un fișier.
Două numere decid proiectul: cel mai mare pachet exterior pe care calea îl transportă fără fragmentare și octeții suplimentari de care are nevoie încapsularea. Când primul este mai mic decât al doilea plus 1,500, unul dintre ele trebuie schimbat. Alegerea devine atunci îngustă și nu creativă, de aceea notez ambele numere înainte de a discuta opțiunile. Nimic la nivelul tunelului nu comprimă acei octeți, iar nici un întreg MTU nu elimină cerința care vi s-a dat.
Sondați underlay-ul cu ping do-not-fragment
Măsurați calea în loc să aveți încredere în MTU-ul interfeței, pentru că veriga cea mai mică din calea exterioară este cea care contează. Pe Linux, -M do setează bitul do-not-fragment și -s ia payload-ul ICMP, așa că un cadru de 1,500 octeți răspunde cu 1,472 octeți de payload după ce se scad antetul IP de 20 octeți și antetul ICMP de 8 octeți. Creșteți payload-ul până când sonda eșuează, apoi săriți la o dimensiune jumbo ca să vedeți dacă calea îl transportă deloc.
ping -M do -s 1472 -c 2 198.51.100.10 ping -M do -s 8972 -c 2 198.51.100.10 tracepath -n 198.51.100.10
O cale care trece 1,472 și eșuează la 8,972 nu poate transporta un pachet interior de 1,500 octeți plus suprasarcină într-un singur pachet exterior. Acesta este răspunsul de care aveați nevoie înainte de a deschide configurația VPN. Decide și care dintre următoarele două secțiuni vi se aplică, așa că țineți ambele rezultate ale sondelor lângă tichet. Ghicitul aici costă o fereastră de mentenanță, pentru că un tunel care se raportează ca fiind up nu vă spune nimic despre cel mai mare pachet pe care calea îl va accepta.
Ridicați MTU-ul căii doar acolo unde fiecare hop este de acord
Cadrele jumbo sunt o proprietate end-to-end, nu o setare pe care o activați pe cele două puncte terminale pe care le controlați din întâmplare. Fiecare switch, router și predare de la furnizor de pe calea exterioară trebuie să fie de acord cu dimensiunea mai mare, iar un singur hop de 1,500 octeți va arunca în silențiu pachetul pe care tocmai l-ați mărit. Ridicarea doar a interfeței locale este clasica jumătate de modificare care face tunelul să pară stricat în timp ce underlay-ul scapă în silențiu.
ip link set dev eth1 mtu 9000 ip link show dev eth1 ping -M do -s 8972 -c 2 198.51.100.10
Schimbați interfața, apoi sondați din nou aceeași cale înainte de a schimba orice altceva. Dacă sonda eșuează în continuare, reveniți cu ip link set dev eth1 mtu 1500 și treceți la fragmentare în loc să vă certați cu un furnizor despre o legătură care nu vă aparține.
Folosiți fragmentarea tunelului când underlay-ul nu poate crește
Un mecanism de fragmentare acceptat sub pachetul interior permite mai multor pachete exterioare să transporte un pachet interior, iar punctul terminal al tunelului din partea opusă le reasamblează înainte de a preda originalul stivei. Opțiunea de fragmentare UDP din Community OpenVPN este o implementare a acelei idei și nu este același lucru cu fragmentarea IP obișnuită a pachetului exterior. Ambele capete trebuie să ruleze o versiune care acceptă formatul, iar calea de date trebuie să fie cea la care vă gândiți: clienții OpenVPN 3 și canalele de date accelerate de kernel au limite diferite, așa că un profil care funcționează pe un client poate eșua pe altul.
openvpn --config client.ovpn --tun-mtu 1500 --fragment 1400 --verb 4
Fragmentarea exterioară obișnuită este cealaltă opțiune și este cea mai slabă. Routerele IPv6 nu fragmentează deloc un pachet redirecționat, așa că un pachet exterior prea mare pur și simplu moare, iar expeditorul află doar dacă mesajul ICMPv6 relevant supraviețuiește pe cale. Fragmentele invită și la filtrare și la amplificarea pierderilor, de aceea tratez acest lucru ca pe o soluție de rezervă și nu ca pe un plan.
Un purtător exterior bazat pe flux ocolește problema dimensiunii segmentându-și propriul flux de octeți, iar pachetul interior reconstruit poate rămâne de 1,500 octeți. Este o decizie de transport cu propriul cost, inclusiv comportamentul binecunoscut al TCP în TCP, așa că luați-o deliberat și nu ca efect secundar al unei dispute despre MTU.
Confirmați că pachetul interior ajunge neschimbat
Verificarea nu este un handshake reușit. Capturați pe interfața tunelului la ambele capete și comparați dimensiunea și conținutul pachetului pe care aplicația l-a trimis efectiv cu cel primit de partea îndepărtată.
ip link show dev tun0 ping -M do -s 1472 -c 2 10.8.0.1 tcpdump -ni tun0 -c 5 'icmp and greater 1000'
Dacă captura arată pachetul interior de dimensiune completă la celălalt capăt, alegerea transportului funcționează și restul rămâne de consemnat. Dacă nu arată nimic în timp ce tunelul se raportează ca fiind up, pachetul exterior este aruncat undeva între punctele terminale, ceea ce vă trimite înapoi la sondă și nu la setările cifrului.
Consemnați trei lucruri în tichetul de modificare înainte de a-l închide: bugetul exterior măsurat, mecanismul ales și comanda care a dovedit că pachetul interior a supraviețuit. Următoarea persoană care atinge acest tunel va avea nevoie de toate trei, iar niciunul nu poate fi reconstruit doar din fișierul de configurare.