Equilibrio de carga de un solo brazo HAproxy

Equilibrio de carga de un solo brazo HAproxy

Estoy intentando configurar un laboratorio de equilibrio de carga para HAproxy en modo de brazo único (cuando la IP frontal real y los servidores backend residen en la misma subred, mientras que los clientes reales siempre son remotos). Otra solicitud es hacer que las IP de origen del cliente sean visibles para los nodos backend. A medida que equilibramos la carga de la aplicación basada en TCP personalizada, parece que la opción 'source 0.0.0.0 usesrc clientip' es la opción correcta aquí. Además, he configurado servidores para que tengan puertas de enlace predeterminadas que apunten a la dirección IP de HAproxy.

Aunque suceden cosas extrañas una vez que habilito esta opción de backend: veo que la conexión al frontend VIP se realizó correctamente y se formó un protocolo de enlace de tres vías. Pero cuando el servidor HAproxy intenta crear una segunda sesión para comunicarse con los servidores backend con la IP falsificada de un cliente, veo que sucede exactamente esto:

  1. El proxy envía SYN con la dirección IP del Cliente falsificada a uno de los servidores;
  2. El backend normalmente responde con el paquete SYN-ACK;
  3. El proxy NO envía el último ACK, simplemente envía ciegamente paquetes SYN después del tiempo de espera con el mismo resultado;
  4. En un proxy veo que esta conexión está marcada como SYN_SENT en la salida de netstat, por lo que parece que el servidor proxy no acepta el paquete SYN-ACK por algún motivo.

Cualquier elogio sería apreciado.

información relacionada