Dupliquer le trafic TCP avec un proxy

j'ai besoin d'envoyer (dupliquer) le trafic d'une machine (port) et à deux machines différentes (ports). Je dois aussi m'occuper de la session TCP.

au départ j'ai utilisé em-proxy, mais il me semble que les frais généraux sont assez importants (ils dépassent 50% du cpu). Puis j'ai installé haproxy et j'ai réussi à rediriger le trafic (pas de doublon). Les frais généraux sont raisonnables (moins de 5%).

le problème est que je ne pouvais pas dire en haproxy config le fichier suivant:

- écouter sur l'adresse spécifique: port et tout ce que vous trouvez envoyer sur les deux différents machines: ports et jeter les réponses de l'un d'eux.

Em-proxy code est assez simple, mais il me semble que EventMachine génère beaucoup de frais généraux.

avant de creuser dans le code haproxy et essayer de changer (trafic dupliqué) je voudrais savoir, c'est là quelque chose de similaire?

Merci.

23
demandé sur Tombart 2011-08-30 21:59:51

4 réponses

j'ai créé un mandataire à cette fin.

https://github.com/chrislusf/teeproxy

Utilisation

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

Tee-proxy est un proxy inversé. Pour chaque requête entrante, il clone la requête en 2 puis les transmet à 2 serveurs. Les résultats sur le serveur a est retourné comme d'habitude, mais les résultats sur le serveur b est ignoré.

tee-proxy gère les deuxGET,POST, et autres HTTP méthode.

21
répondu chrislusf 2016-06-02 08:28:08

Que pensez-vous de l'expérience d'iptables ROUTE target? Il dispose d'une option "tee" pour la mise en miroir du trafic:

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

ce qui vous permettrait de reproduire le trafic avec quelque chose comme:

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 seconde machine devra être sur le même sous-réseau et devra soit écouter sur L'adresse IP cible (et ne pas répondre à arps), soit écouter de manière promiscueuse.

9
répondu MattH 2011-08-31 14:03:57

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

j'ai essayé teeproxy mais obtenu des résultats étranges avec certaines demandes autres que GET.

2
répondu rsilva4 2015-05-08 09:17:02

j'ai aussi écrit un mandataire inverse / équilibreur de charge pour un but similaire avec noeud.js (c'est juste pour le fun, pas de prêt de production à l'heure actuelle).

https://github.com/losnir/ampel

il est très opiniâtre, et soutient actuellement:

  • GET à l'Aide de la méthode round-robin de sélection (1:1)
  • POST Utilisation du fractionnement des requêtes. Il n'y a pas de notion de "maître" et "l'ombre", le premier client qui répond est la qui servira à la demande du client, et puis toutes les autres réponses seront rejetées.

si quelqu'un le trouve utile alors je peux l'améliorer pour être plus flexible.

0
répondu losnir 2018-07-23 10:02:18