Costul suplimentar IPsec: modul, NAT-T și algoritmii îl schimbă
O singură cifră publicată a costului suplimentar descrie o singură încapsulare pe o singură cale. Adunați antetele pe care tunelul dumneavoastră le negociază de fapt, apoi măsurați calea.
Undeva într-un ghid există un număr, de obicei între șaizeci și optzeci de octeți, pe care cineva l-a scăzut din 1500 pentru a obține un MTU de interfață. Acel număr descrie o încapsulare anume pe o cale anume. Schimbați modul, familia de adrese exterioară, cifrul sau prezența NAT, iar aritmetica nu se mai aplică tunelului dumneavoastră.
Numărul a venit dintr-un alt tunel
Costul suplimentar nu este o proprietate a IPsec în abstract. Este o proprietate a pachetului care este într-adevăr construit: un mod negociat, un antet exterior, un antet de protecție, umplutură, un câmp de integritate și eventual un înveliș UDP suplimentar.
O cifră citată pentru modul transport cu IPv4 și fără NAT descrie un pachet mai mic decât modul tunel cu IPv6 sub traversare NAT. Ambele sunt corecte pentru cazul lor. Copierea uneia dintre ele într-o altă implementare este felul în care oamenii ajung cu un MTU care rupe transferurile mari. Defectul este silențios pentru că cererile mici continuă să funcționeze.
Adunați straturile care există cu adevărat
Începeți cu antetul IP exterior și mergeți spre interior. În modul tunel pachetul original este înăuntru, deci antetul exterior este o adăugare, nu o înlocuire. RFC 4303 descrie antetul ESP, umplutura și datele de integritate care îl urmează.
| Layer | What it adds | When it applies |
|---|---|---|
| Outer IP header | 20 bytes for IPv4, 40 for IPv6 | Always, and 40 rather than 20 if the outer path is v6 |
| ESP header | 8 bytes of SPI and sequence number | Always |
| Block cipher IV | 8 to 16 bytes depending on the transform | When the negotiated cipher uses one |
| Padding and trailer | Padding to the block size, plus two trailer bytes | Always, and the amount varies with payload length |
| Integrity data | 12 to 16 bytes for common authenticated ciphers | When integrity protection is negotiated |
| UDP encapsulation | 8 bytes | NAT traversal on port 4500, which is common for clients behind NAT |
Niciunul dintre acele rânduri nu este constant între implementări, iar rândul umpluturii nu este constant nici măcar într-o singură implementare. Acesta este tot motivul pentru care o singură cifră publicată a costului suplimentar dezamăgește.
Două locații pot să nu fie de acord cu privire la același tunel
Pachetul protejat trebuie totuși să traverseze calea exterioară, iar calea exterioară nu este aceeași peste tot. O legătură de acces PPPoE duce mai puțin decât un segment Ethernet curat. O rețea mobilă poate să se micșoreze și mai mult, iar un furnizor care își tunelează propriul trafic adaugă o altă încapsulare pe care nimeni nu a menționat-o. Un tunel care funcționează pe o legătură și eșuează pe alta descrie a doua legătură, nu protocolul.
Și cele două direcții pot diferi. O rută asimetrică vă poate da un upload funcțional și un download blocat, ceea ce se citește ca o problemă a aplicației până când vă uitați la dimensiunile pachetelor în loc de accesibilitate. Un ping mic care reușește dovedește foarte puțin despre un răspuns de dimensiune completă.
Măsurați în loc să scădeți
Găsiți cel mai mare datagram care supraviețuiește căii. Apoi comparați-l cu valoarea pe care o raportează interfața:
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'
Coborâți dimensiunea ping-ului până când sosesc răspunsuri și tratați cea mai mare valoare funcțională ca bugetul acelei căi. Ieșirea xfrm vă spune ce mod și ce algoritmi au fost negociați, iar aceasta este intrarea pentru orice calcul cinstit. Captura confirmă dacă pe fir este ESP sau ESP încapsulat în UDP, iar asta rezolvă întrebarea NAT fără ghicit.
Rezervați o valoare și pentru planul de control. Pachetele de strângere de mână IKE au o structură diferită de pachetele de date, așa că o dimensiune derivată dintr-o captură de strângere de mână nu este un MTU al planului de date.
Puneți numărul unde îi este locul
Pentru TCP printr-un tunel, o limitare MSS este adesea cel mai puțin invaziv control, pentru că reduce ce trimit capetele fără a schimba tunelul în sine. Pentru un tunel bazat pe rute, setați deliberat MTU-ul interfeței tunelului și documentați de ce. A face ambele deodată și apoi a măsura nu vă spune nimic despre care a ajutat.
Țineți împreună în tichet modul negociat, familia exterioară, condiția NAT și simptomul reproductibil. Un set înregistrat de patru fapte bate o constantă ținută minte și este singura versiune a acestui lucru care supraviețuiește următoarei actualizări a clientului.