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.
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.
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.
https://github.com/agnoster/duplicator.
j'ai essayé teeproxy mais obtenu des résultats étranges avec certaines demandes autres que GET.
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.