tcp proxy duplicates traffic haproxy

Tráfico TCP duplicado con un proxy



duplicates traffic (4)

Necesito enviar (duplicar) el tráfico de una máquina (puerto) y a dos máquinas diferentes (puertos). También tengo que ocuparme de la sesión TCP.

Al principio usé em-proxy , pero me parece que la sobrecarga es bastante grande (supera el 50% de la CPU). Luego instalé haproxy y logré redirigir el tráfico (no duplicar). Los gastos generales son razonables (menos del 5%).

El problema es que no pude decir en el archivo de configuración de haproxy lo siguiente:
- escuche en una dirección específica: puerto y lo que encuentre enviar en las dos máquinas diferentes: puertos y descarte las respuestas de una de ellas.

El código Em-proxy para esto es bastante simple, pero me parece que EventMachine genera muchos gastos generales.

Antes de ingresar el código haproxy e intentar cambiar (duplicar el tráfico), me gustaría saber si hay algo similar por ahí.

Gracias.


¿Qué tal el ROUTE target la ruta experimental de iptables? Tiene una opción "tee" para reflejar el tráfico:

http://www.netfilter.org/projects/patch-o-matic/pom-external.html#pom-external-ROUTE

Lo que te permitiría reflejar el tráfico con algo como:

iptables -A PREROUTING -t mangle -p tcp --dport 80 -j ROUTE --gw 1.2.3.4 --tee iptables -A POSTROUTING -t mangle -p tcp --sport 80 -j ROUTE --gw 1.2.3.4 --tee

La segunda máquina debería estar en la misma subred y debería escuchar en la dirección IP de destino (y no responder a arps) o escuchar de forma promiscua.


He creado un proxy sólo para este propósito.

https://github.com/chrislusf/teeproxy

Uso

./teeProxy -l :8888 -a localhost:9000 -b localhost:9001

tee-proxy es un proxy inverso. Para cada solicitud entrante, clona la solicitud en 2 y luego las reenvía a 2 servidores. Los resultados del servidor a se devuelven como de costumbre, pero los resultados del servidor b se ignoran.

tee-proxy maneja los métodos GET , POST y otros métodos HTTP.



También he escrito un proxy inverso / equilibrador de carga para un propósito similar con Node.js (es solo por diversión, no listo para producción en este momento).

https://github.com/losnir/ampel

Es muy criticado, y actualmente apoya:

  • GET uso de la selección de round-robin (1: 1)
  • POST Usando la división de solicitudes. No hay un concepto de "maestro" y "sombra": el primer backend que responde es el que atenderá la solicitud del cliente, y luego se descartarán todas las demás respuestas.

Si alguien lo encuentra útil, puedo mejorarlo para que sea más flexible.