IPsecin ylikuorma: tila, NAT-T ja algoritmit muuttavat sitä kaikkea
Yksi julkaistu ylikuorman luku kuvaa yhtä kapselointia yhdellä polulla. Laske yhteen otsikot, joista tunnelisi todella sopii, ja mittaa sitten polku.
Jossain oppaassa on luku, yleensä kuudenkymmenen ja kahdeksankymmenen tavun väliltä, jonka joku vähensi 1500:sta saadakseen liitännän MTU:n. Se luku kuvaa yhtä tiettyä kapselointia yhdellä tietyllä polulla. Vaihda tila, ulompi osoiteperhe, salaus tai NATin läsnäolo, niin laskutoimitus ei enää päde tunneliisi.
Luku tuli toisesta tunnelista
Ylikuorma ei ole IPsecin ominaisuus abstraktisti. Se on sen paketin ominaisuus, joka todella rakennetaan: sovittu tila, ulompi otsikko, suojausotsikko, täyte, eheyskenttä ja mahdollisesti ylimääräinen UDP-kääre.
Luku, joka mainitaan siirtotilalle IPv4:n kanssa ja ilman NATia, kuvaa pienempää pakettia kuin tunnelitila IPv6:n kanssa NATin kulun alla. Molemmat ovat oikein omassa tapauksessaan. Toisen niistä kopioiminen toiseen käyttöönottoon on se tapa, jolla ihmisille päätyy MTU, joka rikkoo suuret siirrot. Vika on hiljainen, koska pienet pyynnöt toimivat edelleen.
Laske yhteen kerrokset, jotka todella ovat siellä
Aloita ulommasta IP-otsikosta ja etene sisäänpäin. Tunnelitilassa alkuperäinen paketti on sisällä, joten ulompi otsikko on lisäys eikä korvaava. RFC 4303 kuvaa ESP-otsikon, täytteen ja sitä seuraavat eheystiedot.
| 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 |
Mikään noista riveistä ei ole vakio käyttöönottojen välillä, eikä täyte rivi ole vakio edes yhden käyttöönoton sisällä. Juuri siksi yksi julkaistu ylikuorman luku tuottaa pettymyksen.
Kaksi toimipaikkaa voivat olla eri mieltä samasta tunnelista
Suojatun paketin on silti ylitettävä ulompi polku, eikä ulompi polku ole sama kaikkialla. PPPoE-liityntälinkki kantaa vähemmän kuin puhdas Ethernet-segmentti. Matkapuhelinverkko voi kutistua lisää, ja omaa liikennettään tunnelissa kuljettava operaattori lisää vielä yhden kapseloinnin, jota kukaan ei maininnut. Tunneli, joka toimii yhdellä linkillä ja epäonnistuu toisella, kuvaa toista linkkiä, ei protokollaa.
Myös molemmat suunnat voivat erota. Epäsymmetrinen reitti voi antaa toimivan latauksen ylös ja jumittuneen latauksen alas, mikä näyttää sovellusongelmalta, kunnes katsoo pakettikokoja yhteyssaatavuuden sijaan. Pienen pingin onnistuminen todistaa hyvin vähän täysikokoisesta vastauksesta.
Mittaa vähentämisen sijaan
Etsi suurin datagrammi, joka selviää polusta. Vertaa sitä sitten arvoon, jonka liitäntä ilmoittaa:
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'
Pienennä pingin kokoa, kunnes vastauksia alkaa tulla, ja pidä suurinta toimivaa arvoa tuon polun budjettina. xfrm-tuloste kertoo, mikä tila ja mitkä algoritmit sovittiin, ja se on lähtökohta jokaiselle rehelliselle laskelmalle. Kaappaus vahvistaa, onko johdossa ESP vai UDP:hen kapseloitu ESP, ja se ratkaisee NAT-kysymyksen arvaamatta.
Varaa yksi arvo myös ohjaustasolle. IKE-kättelypaketeilla on eri rakenne kuin datapaketeilla, joten kättelykaappauksesta johdettu koko ei ole datatason MTU.
Sijoita luku sinne, minne se kuuluu
Tunnelin läpi kulkevalle TCP:lle MSS:n rajoitus on usein vähiten tunkeileva hallinta, koska se pienentää sitä, mitä päätepisteet lähettävät, muuttamatta tunnelia itseään. Reittipohjaiselle tunnelille aseta tunneliliitännän MTU tarkoituksella ja dokumentoi miksi. Molempien tekeminen kerralla ja sitten mittaaminen ei kerro sinulle mitään siitä, kumpi auttoi.
Pidä sovittu tila, ulompi perhe, NATin tila ja toistettava oire yhdessä tiketissä. Kirjattu neljän tosiasian joukko voittaa muistetun vakion, ja se on ainoa versio tästä, joka selviää seuraavasta asiakaspäivityksestä.