FortiGateGuías técnicas

Oracle over IPsec: fragmentación de tramas y optimización del transporte

En aquellas arquitecturas de servicio en las que se requieren accesos remotos a bases de datos Oracle a través de conexiones seguras mediante túneles IPsec, existen escenarios en los que en ocasiones los usuarios reportan incidencias como fallos de conexión o lentitud de acceso a la información. Esto puede ser debido a que la conexión con la base de datos emplea tamaños de trama superiores a la IP MTU que soportan los túneles, de forma que hay segmentos TCP que se fragmentan; particularmente, en el caso de FortiGate, esto puede tener impacto en el comportamiento y rendimiento de las NPUs. La razón estriba en una cuestión de diseño del FortiOS, ya que tratamos de evitar fragmentar el tráfico ESP cifrado en sí, pero en su lugar fragmentamos la carga útil (es decir, el paquete IP dentro de la trama ESP). De este modo, una NPU puede descifrar el tráfico, y enviar los contenidos descifrados para que los gestione la CPU del FortiGate.

La solución a estos escenarios se puede abordar con diferentes enfoques:

*** Cuando la aceleración de las NPU está habilitada, algunas tramas se procesan antes que otras, dado que las fragmentadas deben ser re-ensambladas en el kernel (CPU); en muchos casos (dependiendo del caudal, y la capacidad de la CPU) esto tiene un impacto negativo en el rendimiento TCP. Un posible workaround sería deshabilitar la aceleración por hardware (npu-offload) para este tráfico, de manera que todos los paquetes ESP fueran procesados por el kernel:
config vpn ipsec phase1-interface
edit Tunel-Oracle
set npu-offload disable ——-> este comando evita el “camino rápido” de los paquetes ESP en la NPU, realizando la CPU todo el procesamiento.
end

La IP MTU de la interfaz de túnel IPsec suele ser diferente de la interfaz física IP MTU a la que está vinculada, por las razones obvias de los encapsulamientos agregados. Cuando se deshabilita la aceleración, todo el trabajo lo realiza la CPU, por lo tanto ya no hay tramas fuera de orden; la fragmentación todavía ocurrirá, pero planteará menos problemas.

*** Otra alternativa, manteniendo la aceleración de NPU habilitada, sería habilitar en la fase 2 del túnel por el que se transporta el tráfico IPsec el anti-replay, y configurar la aceleración NPU de manera global de este modo:
config global
config system npu
set dec-offload-antireplay enable
set enc-offload-antireplay enable
set offload-ipsec-host enable
end

Esto permitiría acelerar el tráfico IPsec en ambas direcciones, al tiempo que se eliminan retransmisiones TCP.

*** Una mejor aproximación a la solución, sin embargo, podría ser tan sencilla como simplemente evitar que el tráfico se fragmente sobre el túnel, lo que hará un uso completo de la descarga de las NPUs. Además, el tráfico de Oracle está basado en TCP, por lo que es mucho más fácil controlar el tamaño de la carga útil. Podemos hacer que FortiGate cambie el tamaño máximo de segmento en el protocolo de enlace TCP y reduzca ligeramente el tamaño de la carga útil que se transporta por debajo del límite del túnel; dado que ésta es una configuración basada en políticas, podemos aplicar este cambio únicamente al tráfico que pasa por el túnel IPsec.

Tomando una configuración a modo de ejemplo:

edit 10
set uuid xxx
set srcintf “Oracle_IPsec”
set dstintf “internal1”
set srcaddr aaaa
set dstaddr bbbb
set action accept
set schedule “always”
set service “ALL”
set tcp-mss-sender 1290 <—————————
set tcp-mss-receiver 1290 <————————-
next

edit 11
set uuid xxx
set srcintf “internal1”
set dstintf “Oracle_IPsec”
set srcaddr bbbb
set dstaddr aaaa
set action accept
set schedule “always”
set service “ALL”
set tcp-mss-sender 1290 <—————————–
set tcp-mss-receiver 1290 <—————————–
next

En este ejemplo, lo que se hará es modificar el valor de MSS durante el protocolo de enlace TCP al valor que especifique, reduciendo ligeramente el tamaño de la carga útil transportada por el tráfico TCP (excluye los tamaños de encabezados IP / TCP, que deben tenerse en cuenta). Dependiendo del tamaño del segmento a transportar (por ejemplo, 1394 bytes), se puede tomar una referencia inicial de ~1290 bytes, y hacer pruebas con algunos valores incluso superiores para ver el desempeño del caso concreto.

Se puede probar esta aproximación también con la aceleración deshabilitada en el NPU, si así se desea, y una vez que se confirme que ya no hay fragmentación en el túnel volver a habilitarla.

Tags

Contenidos relacionados

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *