Estoy usando LVS (ipvsadm) en modo NAT para equilibrar la carga del tráfico UDP para varios "servidores reales". Estoy usando programación de un paquete para que el tráfico que se origina desde un único puerto de origen en el cliente se distribuya a diferentes servidores reales.
Lo que veo, sin embargo, es que los datagramas UDP, que se originan en los servidores reales y se envían de vuelta al cliente, tienen su IP/puerto de origen configurado en el del servidor real, lo que confunde al cliente, porque espera recibir respuestas con IP de origen/puerto que coincide con los que envió el datagrama original.
Esto es muy extraño, porque se supone que LVS "oculta" los servidores reales detrás de la IP/puerto virtual.
Parece que si desactivo la programación de un paquete, la IP/puerto de origen de los datagramas salientessonreescrito correctamente por LVS.
¿Alguien ha encontrado esto? Si es así, ¿cuál es la solución?
Respuesta1
Si todavía estás interesado:
Creo que la programación de un paquete no espera una respuesta del paquete que acaba de programar y, por lo tanto, no almacena información de conexión. Luego, cuando llega la respuesta, LVS no puede encontrar la conexión y, por lo tanto, no sabe qué IP/puerto de origen usar.
Esto parece ser por diseño. Busque aquí "OPS se implementa para configuraciones donde no hay respuesta para el paquete original" y verá una explicación.
http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.UDP.html
La solución es establecer un tiempo de espera de persistencia para las conexiones UDP (puede configurarlo bajo si espera respuestas rápidas), estableciendo así explícitamente un tiempo de conexión. Como puede hacer esto, no tiene sentido que OPS recuerde las conexiones.