Tengo un equilibrador de carga ipvs L4 con configuración de equilibradores enviados L7. Digamos que uno de mis balanceadores L4 falla y gracias al hash constante, el tráfico que ahora maneja (gracias a BGP) por otro balanceador L4 se envía al mismo nodo L7.
Esto debería funcionar sin problemas y creo que es una configuración común.
El problema está en las conexiones de larga duración. Cuando el nuevo nodo L4 recibe el tráfico (solo datos: paquetes ACK/PUSH) y el nodo no ha recibido ningún paquete SYN, el nodo simplemente envía el paquete RST al cliente, que finaliza la conexión. La siguiente imagen ilustra esto.
Esto no debería estar sucediendo y mi pregunta es: ¿hay alguna manera (una configuración sysctl o algo así) que sea la razón de esto? Sé que quizás pueda descartar paquetes RST usando iptables, pero eso no suena bien.
Respuesta1
En realidad, existe una variable sysctl net.ipv4.vs.sloppy_tcp
para este problema específico (https://lore.kernel.org/patchwork/patch/386081/?fbclid=IwAR17t0jEvRSlvZFch1Lz_CDMjYOzUluuNGQmiyKequZK1Vq4kI75vezWEGs) que resuelve esto.
Muchas gracias a Patric Shuff, que me ayudó a resolver esto (excelente presentación sobre este tema).https://www.usenix.org/conference/lisa16/conference-program/presentation/shuff).