IPsec-oorhoofs: modus, NAT-T en algoritmes verander dit alles
Een gepubliseerde syfer vir oorhoofs beskryf een kapseling op een pad. Tel die opskrifte bymekaar wat jou tonnel werklik onderhandel, en meet dan die pad.
Iewers in 'n gids is daar 'n getal, gewoonlik tussen sestig en tagtig grepe, wat iemand van 1500 afgetrek het om 'n koppelvlak-MTU te kry. Daardie getal beskryf een spesifieke kapseling op een spesifieke pad. Verander die modus, die buitenste adresfamilie, die kriptoalgoritme of die teenwoordigheid van NAT, en die rekenkunde pas nie meer op jou tonnel nie.
Die getal kom van 'n ander tonnel
Oorhoofs is nie 'n eienskap van IPsec in die abstrakte nie. Dit is 'n eienskap van die pakkie wat werklik gebou word: 'n onderhandelde modus, 'n buitenste opskrif, 'n beskermingsopskrif, opvulling, 'n integriteitsveld en moontlik 'n ekstra UDP-omhulsel.
'n Syfer wat vir transportmodus met IPv4 en sonder NAT aangehaal word, beskryf 'n kleiner pakkie as tonnelmodus met IPv6 onder NAT-traversering. Albei is korrek vir hul eie geval. Om een van hulle in 'n ander ontplooiing te kopieer, is hoe mense uiteindelik 'n MTU kry wat groot oordragte breek. Die fout is stil, want klein versoeke bly werk.
Tel die lae bymekaar wat werklik daar is
Begin by die buitenste IP-opskrif en werk na binne. In tonnelmodus is die oorspronklike pakkie binne, so die buitenste opskrif is 'n toevoeging eerder as 'n vervanging. RFC 4303 beskryf die ESP-opskrif, die opvulling en die integriteitsdata wat daarop volg.
| 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 |
Nie een van daardie rye is konstant oor ontplooiings nie, en die opvullingsry is nie eers konstant binne een ontplooiing nie. Dit is die hele rede waarom 'n enkele gepubliseerde syfer vir oorhoofs teleurstel.
Twee terreine kan oor dieselfde tonnel verskil
Die beskermde pakkie moet steeds die buitenste pad oorsteek, en die buitenste pad is nie oral dieselfde nie. 'n PPPoE-toegangslyn dra minder as 'n skoon Ethernet-segment. 'n Mobiele netwerk kan verder krimp, en 'n verskaffer wat sy eie verkeer tonnel, voeg nog 'n kapseling by wat niemand genoem het nie. 'n Tonnel wat op een skakel werk en op 'n ander faal, beskryf die tweede skakel, nie die protokol nie.
Albei rigtings kan ook verskil. 'n Asimmetriese roete kan vir jou 'n werkende oplaai en 'n gestopte aflaai gee, wat soos 'n toepassingsprobleem lyk totdat jy na pakkiegroottes kyk eerder as na bereikbaarheid. 'n Klein ping wat slaag, bewys baie min oor 'n antwoord van volle grootte.
Meet eerder as om af te trek
Vind die grootste datagram wat die pad oorleef. Vergelyk dit dan met die waarde wat die koppelvlak rapporteer:
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'
Stap die ping-grootte af totdat antwoorde aankom, en behandel die grootste werkende waarde as die begroting vir daardie pad. Die xfrm-uitset vertel jou watter modus en watter algoritmes onderhandel is, wat die insette vir enige eerlike berekening is. Die opname bevestig of ESP of UDP-omhulde ESP op die draad is, wat die NAT-vraag besleg sonder om te raai.
Reserveer ook een waarde vir die beheervlak. IKE-handdrukpakkies het 'n ander struktuur as datapakkies, so 'n grootte afgelei van 'n handdrukopname is nie 'n data-vlak-MTU nie.
Sit die getal waar dit hoort
Vir TCP deur 'n tonnel is 'n MSS-inklemming dikwels die mins indringende beheer, want dit verminder wat die eindpunte stuur sonder om die tonnel self te verander. Vir 'n roetegebaseerde tonnel stel jy die tonnelkoppelvlak se MTU doelbewus en dokumenteer hoekom. Om albei gelyk te doen en dan te meet, gee jou geen inligting oor watter een gehelp het nie.
Hou die onderhandelde modus, buitenste familie, NAT-toestand en die herhaalbare simptoom saam in die kaartjie. 'n Opgetekende stel van vier feite klop 'n onthoude konstante, en dit is die enigste weergawe hiervan wat die volgende kliënt-opgradering oorleef.