2011-08-30 21 views
23

Devo inviare (duplicare) il traffico da una macchina (porta) e due macchine diverse (porte). Devo occuparmi anche della sessione TCP.Traffico TCP duplicato con un proxy

All'inizio ho usato em-proxy, ma mi sembra che l'overhead sia piuttosto grande (supera il 50% della CPU). Quindi ho installato haproxy e sono riuscito a reindirizzare il traffico (non a duplicare). Il sovraccarico è ragionevole (meno del 5%).

Il problema è che non ho potuto dire nel file di configurazione haproxy il seguente:
- ascolto su indirizzo specifico: porta e tutto ciò che troverete inviare sulle due differenti macchine: porte e scartare le risposte da uno di loro.

Il codice di em-proxy per questo è abbastanza semplice, ma mi sembra che EventMachine generi un sovraccarico di .

Prima di scavare in codice haproxy e provare a cambiare (traffico duplicato) Vorrei sapere che c'è qualcosa di simile là fuori?

Grazie.

+0

Come hai fatto alla fine? – Marenz

+0

+1, come hai fatto a risolvere questo? –

+0

potrebbe provare questo https://lyft.github.io/envoy/ –

risposta

8

Che ne dici di iptables sperimentale ROUTE target? Ha un'opzione "tee" per il traffico di mirroring:

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

che avrebbe permesso di eseguire il mirroring di traffico con qualcosa di simile:

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 seconda macchina avrebbe bisogno di essere sulla stessa sottorete e sarebbe o è necessario ascoltare l'indirizzo IP di destinazione (e non rispondere agli archi) o ascoltare in modo promiscuo.

20

Ho creato un proxy solo per questo scopo.

https://github.com/chrislusf/teeproxy

Uso

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

tee-proxy è un proxy inverso. Per ogni richiesta in entrata, clona la richiesta in 2 e poi li inoltra a 2 server. I risultati del server a vengono restituiti normalmente, ma i risultati del server b vengono ignorati.

tee-proxy gestisce sia GET, POST e altri metodi HTTP.

+0

Questo repository non esiste più. –

+5

Repo è stato rinominato: https://github.com/chrislusf/teeproxy –

+0

Solo una nota per coloro che clonano il repository, se si utilizza Ubuntu 'apt-get install gccgo-go' e quindi' go build teeproxy.go' – rsilva4

Problemi correlati