2011-08-30 26 views
23

Necesito enviar (duplicar) el tráfico de una máquina (puerto) y a dos máquinas diferentes (puertos). Necesito ocuparme de la sesión TCP también.Duplicar el tráfico TCP con un proxy

En el 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). La sobrecarga es razonable (menos del 5%).

El problema es que no podía decir en el archivo de configuración haproxy lo siguiente:
- escuchar en dirección específica: el puerto y todo lo que encuentre enviar en los dos máquinas diferentes: los puertos y descartar las respuestas de uno de ellos.

El código de em-proxy para esto es bastante simple, pero me parece que EventMachine genera una gran sobrecarga.

Antes de excavar en el código haproxy y tratar de cambiar (duplicar el tráfico) me gustaría saber ¿hay algo similar por ahí?

Gracias.

+0

¿Cómo lo hizo eventualmente? – Marenz

+0

+1, ¿cómo resolviste esto? –

+0

podría intentar esto https://lyft.github.io/envoy/ –

Respuesta

8

¿Qué tal el iptables experimental ROUTE target? Tiene una opción de "T" para el tráfico de reflejo:

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

Qué le dejaría Espejo del 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 tendría que estar en la misma subred y me o bien debe escuchar en la dirección IP de destino (y no responder a los agudos) o escuchar de manera promiscua.

20

He creado un proxy solo 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 la 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 GET, POST, y otros métodos HTTP.

+0

Este repositorio ya no existe. –

+5

Repo ha cambiado de nombre: https://github.com/chrislusf/teeproxy –

+0

Solo una nota para aquellos que clonan el repositorio, si usan Ubuntu 'apt-get install gccgo-go' y luego' go build teeproxy.go' – rsilva4

Cuestiones relacionadas