J'ai besoin d'envoyer (dupliquer) le trafic d'une machine (port) et à deux machines différentes (ports). Je dois aussi m'occuper de TCP session.
Au début, j’utilisais em-proxy , mais il me semble que les frais généraux sont assez importants (plus de 50% du cpu). Puis j’ai installé haproxy et j’ai réussi rediriger le trafic (ne pas dupliquer). Les frais généraux sont raisonnables (moins de 5%).
Le problème est que je ne pourrais pas dire dans le fichier de configuration haproxy:
- écoutez une adresse spécifique: port et tout ce que vous trouvez, envoyez-le sur les deux [] machines: ports et supprimez les réponses de l'une d'entre elles.
Le code Em-proxy pour cela est assez simple, mais il me semble que EventMachine génère Beaucoup d’overhead.
Avant de creuser dans le code haproxy et d’essayer de modifier (trafic en double), je voudrais que Sache qu’il existe quelque chose de similaire.
Merci.
J'ai créé un proxy juste à cette fin.
https://github.com/chrislusf/teeproxy
Utilisation
./teeProxy -l :8888 -a localhost:9000 -b localhost:9001
tee-proxy est un proxy inverse. Pour chaque demande entrante, il clone la demande en 2 puis les transmet à 2 serveurs. Les résultats du serveur a
sont renvoyés comme d'habitude, mais les résultats du serveur b
sont ignorés.
tee-proxy gère les méthodes GET
, POST
et les autres méthodes HTTP.
Qu'en est-il du ROUTE target
expérimental iptables? Il a une option "tee" pour refléter le trafic:
http://www.netfilter.org/projects/patch-o-matic/pom-external.html#pom-external-ROUTE
Ce qui vous permettrait de refléter 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 mannequin -p mangle -p tcp --sport 80 -j ROUTE - gw 1.2.3.4 --tee
Le deuxième ordinateur devrait être sur le même sous-réseau et devrait soit écouter sur l'adresse IP cible (et ne pas répondre aux arps), soit écouter à la lueur.
Essayez https://github.com/agnoster/duplicator .
J'ai essayé teeproxy mais j'ai obtenu des résultats étranges avec certaines demandes autres que GET.
J'ai également écrit un équilibreur proxy/charge inverse dans un but similaire avec Node.js (c'est juste pour le plaisir, pas pour la production en ce moment).
https://github.com/losnir/ampel
Il est très avisé et supporte actuellement:
GET
Utilisation de la sélection à tour de rôle (1: 1)POST
Utilisation du fractionnement de demande. Il n'y a pas de concept de "maître" ni d '"ombre" - le premier système qui répond est celui qui servira la demande du client, puis toutes les autres réponses seront ignorées.Si quelqu'un le trouve utile, je peux l'améliorer pour qu'il soit plus flexible.
J'avais besoin de quelque chose qui puisse aussi toucher le trafic TCP, mais sans être intrusif et ne pas pouvoir mettre quelque chose entre les deux comme un proxy inverse par exemple.
Ce que j’ai fait, c’est essentiellement d’utiliser la logique tcpdump/Wirehark (renifleur de paquets) dans un processus Go que vous pouvez configurer pour effectuer certaines tâches.
Pour qui cela peut être utile, le code peut être trouvé ici: https://github.com/RobinUS2/teecp