使用代理复制TCP流量

时间:2011-08-30 17:59:51

标签: tcp proxy duplicates traffic haproxy

我需要从一台机器(端口)和两台不同的机器(端口)发送(复制)流量。我也需要处理TCP会话。

在beginnig中我使用em-proxy,但在我看来,开销非常大(它超过了cpu的50%)。 然后我安装了haproxy,我设法重定向流量(不重复)。开销合理(低于5%)。

问题是我无法在haproxy配置文件中说出以下内容:
- 听特定地址:端口和你发现的两个不同的地址   机器:端口并丢弃其中一个的答案。

Em-proxy代码非常简单,但在我看来,EventMachine会生成 很多开销。

在我挖掘haproxy代码并尝试更改(重复流量)之前,我想 要知道那里有类似的东西吗?

感谢。

5 个答案:

答案 0 :(得分:22)

我为此目的创建了一个代理。

https://github.com/chrislusf/teeproxy

<强>用法

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

tee-proxy是一个反向代理。对于每个传入请求,它将请求克隆为2,然后将它们转发到2个服务器。服务器a的结果将照常返回,但服务器b的结果将被忽略。

tee-proxy处理GETPOST和其他HTTP方法。

答案 1 :(得分:9)

iptables实验ROUTE target怎么样?它有一个用于镜像流量的“tee”选项:

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

这可以让您通过以下方式镜像流量:

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

第二台机器需要在同一个子网上,并且需要监听目标IP地址(而不是回复arps)或者是混杂地监听。

答案 2 :(得分:3)

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

我尝试了teeproxy但是除了GET以外的一些请求得到了奇怪的结果。

答案 3 :(得分:0)

出于类似的目的,我还为Node.js编写了一个反向代理/负载平衡器(这只是出于娱乐目的,目前还不能用于生产)。

https://github.com/losnir/ampel

这很自以为是,目前支持:

  • GET使用循环选择(1:1)
  • POST使用请求拆分。没有“主”和“影子”的概念-响应的第一个后端是将服务于客户端请求的后端,然后所有其他响应都将被丢弃。

如果有人发现它有用,那么我可以改进它以使其更加灵活。

答案 4 :(得分:0)

我需要一种可以同时填充TCP流量但又不具侵入性的东西,例如,不能在中间放置一些东西作为反向代理。

我所做的基本上是使用tcpdump / wireshark逻辑(数据包嗅探)将其包装在Go进程中的,您可以将其配置为执行某些操作。

对谁可能有用的代码可以在这里找到:https://github.com/RobinUS2/teecp