it-swarm.com.de

Duplikat TCP Verkehr mit einem Proxy

Ich muss Datenverkehr von einem Computer (Port) und von zwei verschiedenen Computern (Ports) senden (duplizieren). Ich muss mich auch um die TCP Sitzung kümmern.

Am Anfang habe ich em-proxy verwendet, aber es scheint mir, dass der Overhead ziemlich groß ist (er geht über 50% der CPU). Dann habe ich haproxy installiert und es geschafft, den Datenverkehr umzuleiten (nicht zu duplizieren). Der Aufwand ist angemessen (weniger als 5%).

Das Problem ist, dass ich in der Haproxy-Konfigurationsdatei folgendes nicht sagen konnte:
- Hören Sie sich eine bestimmte Adresse an: Port und was auch immer Sie finden, senden Sie auf den zwei verschiedenen Computern: Ports und verwerfen Sie die Antworten von einem von ihnen.

Em-Proxy-Code dafür ist recht einfach, aber es scheint mir, dass EventMachine eine Menge Overhead generiert.

Bevor ich in Haproxy-Code eintauche und versuche, den Datenverkehr zu ändern (doppelter Datenverkehr), möchte ich wissen, ob es etwas Ähnliches gibt?

Vielen Dank.

25
ufffffff

Ich habe nur zu diesem Zweck einen Proxy erstellt.

https://github.com/chrislusf/teeproxy

Verwendung

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

tee-proxy ist ein Reverse-Proxy. Für jede eingehende Anforderung wird die Anforderung in 2 geklont und dann an 2 Server weitergeleitet. Die Ergebnisse von Server a werden wie gewohnt zurückgegeben, die Ergebnisse von Server b werden jedoch ignoriert.

tee-proxy verarbeitet sowohl GET, POST als auch andere HTTP-Methoden.

22
chrislusf

Wie wäre es mit dem iptables experimentellen ROUTE target? Es gibt eine "Abschlag" -Option zum Spiegeln des Verkehrs:

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

Was würde Sie den Verkehr mit etwas wie spiegeln lassen:

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

Die zweite Maschine müsste sich in demselben Subnetz befinden und entweder die Ziel-IP-Adresse abhören (und nicht auf Arps antworten) oder absichtlich zuhören.

9
MattH

Versuchen Sie https://github.com/agnoster/duplicator .

Ich habe versucht, teeproxy zu bekommen, habe aber mit einigen anderen Anfragen als GETs seltsame Ergebnisse erhalten.

3
rsilva4

Ich habe auch einen Reverse-Proxy/Load-Balancer für einen ähnlichen Zweck mit Node.js geschrieben (es ist nur zum Spaß und zur Zeit nicht produktionsbereit).

https://github.com/losnir/ampel

Es ist sehr meinungsstark und unterstützt derzeit:

  • GET Verwenden der Round-Robin-Auswahl (1: 1)
  • POST Anforderungsaufteilung verwenden. Es gibt kein Konzept von "Master" und "Schatten" - das erste Backend, das antwortet, ist das, das die Clientanforderung bedient, und dann werden alle anderen Antworten verworfen.

Wenn jemand es für nützlich hält, kann ich es verbessern, um flexibler zu sein.

0
losnir

Ich brauchte etwas, das auch den TCP-Verkehr abhacken könnte, aber nicht aufdringlich ist und daher nicht in der Lage ist, etwas als Reverse-Proxy zwischenzustellen.

Was ich getan habe, ist im Grunde genommen die Verwendung der TCP/Dump/Wireshark-Logik (Packet Sniffing), die in einen Go-Prozess eingeschlossen wird, den Sie konfigurieren können, um einige Dinge zu tun.

Für wen kann es hilfreich sein, den Code hier zu finden: https://github.com/RobinUS2/teecp

0
RobinUS2