A sobrecarga de IPsec: o modo, o NAT-T e os algoritmos cámbiana
Unha soa cifra publicada de sobrecarga describe un encapsulamento nun camiño. Sume as cabeceiras que o seu túnel negocia de verdade e despois mida o camiño.
Nalgún lugar dunha guía hai un número, normalmente entre sesenta e oitenta bytes, que alguén restou de 1500 para obter unha MTU de interface. Ese número describe un encapsulamento concreto nun camiño concreto. Cambie o modo, a familia de enderezos exterior, o cifrado ou a presenza de NAT, e a aritmética xa non se aplica ao seu túnel.
O número veu doutro túnel
A sobrecarga non é unha propiedade de IPsec en abstracto. É unha propiedade do paquete que realmente se constrúe: un modo negociado, unha cabeceira exterior, unha cabeceira de protección, recheo, un campo de integridade e quizais unha envoltura UDP adicional.
Unha cifra citada para o modo transporte con IPv4 e sen NAT describe un paquete máis pequeno que o modo túnel con IPv6 baixo travesía de NAT. Ambas son correctas para o seu propio caso. Copiar calquera delas a un despregamento distinto é como a xente acaba cunha MTU que rompe as transferencias grandes. O fallo é silencioso porque as peticións pequenas seguen funcionando.
Sume as capas que realmente están aí
Comece pola cabeceira IP exterior e avance cara a dentro. En modo túnel o paquete orixinal está dentro, así que a cabeceira exterior é un engadido e non un substituto. RFC 4303 describe a cabeceira ESP, o recheo e os datos de integridade que a seguen.
| 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 |
Ningunha desas filas é constante entre despregamentos, e a fila do recheo non é constante nin sequera dentro dun mesmo despregamento. Esa é toda a razón pola que unha soa cifra publicada de sobrecarga decepciona.
Dous sitios poden discrepar sobre o mesmo túnel
O paquete protexido segue tendo que cruzar o camiño exterior, e o camiño exterior non é o mesmo en todas partes. Unha ligazón de acceso PPPoE leva menos que un segmento Ethernet limpo. Unha rede móbil pode encollerse máis, e un provedor que tuneliza o seu propio tráfico engade outro encapsulamento que ninguén mencionou. Un túnel que funciona nunha ligazón e falla noutra está describindo a segunda ligazón, non o protocolo.
As dúas direccións tamén poden diferir. Unha ruta asimétrica pode darlle unha subida que funciona e unha baixada atascada, o que se le como un problema de aplicación ata que mira os tamaños de paquete en lugar da alcanzabilidade. Un ping pequeno que funciona demostra moi pouco sobre unha resposta de tamaño completo.
Mida en lugar de restar
Atope o datagrama máis grande que sobrevive ao camiño. Despois compáreo co valor que informa a interface:
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'
Baixe o tamaño do ping ata que cheguen respostas, e tome o maior valor que funcione como orzamento para ese camiño. A saída de xfrm dille que modo e que algoritmos se negociaron, que é a entrada de calquera cálculo honesto. A captura confirma se no cable hai ESP ou ESP encapsulado en UDP, o que resolve a cuestión do NAT sen adiviñar.
Reserve tamén un valor para o plano de control. Os paquetes de aperta de mans IKE teñen unha estrutura distinta da dos paquetes de datos, así que un tamaño derivado dunha captura de aperta de mans non é unha MTU do plano de datos.
Pon o número onde corresponde
Para TCP a través dun túnel, un axuste de MSS adoita ser o control menos invasivo, porque reduce o que envían os extremos sen cambiar o túnel mesmo. Para un túnel baseado en rutas, fixe a MTU da interface do túnel a propósito e documente por que. Facer as dúas cousas á vez e despois medir non lle dá ningunha información sobre cal axudou.
Manteña xuntos no ticket o modo negociado, a familia exterior, a condición de NAT e o síntoma reproducible. Un conxunto rexistrado de catro feitos supera unha constante recordada, e é a única versión disto que sobrevive á próxima actualización do cliente.