使用代理复制TCP流量

27
我需要从一台机器(端口)发送(重复)流量,并将其发送到两台不同的机器(端口)。 我还需要处理TCP会话。
起初,我使用em-proxy,但我觉得开销相当大(占用了50%以上的CPU)。 然后我安装了haproxy并成功重定向了流量(而非复制)。 开销合理(低于5%)。
问题是我无法在haproxy配置文件中指定以下内容:
- 监听特定地址:端口,并将任何找到的内容发送到两个不同的机器:端口,并且丢弃其中一个机器的答复。
这方面的Em-proxy代码相当简单,但我觉得EventMachine产生了很多开销。
在深入研究haproxy代码并尝试更改(重复流量)之前,我想知道是否有类似的东西?
谢谢。

你最终是怎么做到的? - Marenz
+1,你是如何解决这个问题的? - Brian Wigginton
可以尝试使用 https://lyft.github.io/envoy/。 - np-hard
5个回答

28

我已经专门为此创建了一个代理。

https://github.com/chrislusf/teeproxy

使用方法

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

tee-proxy是一个反向代理。对于每个传入的请求,它会将该请求克隆成两个并将它们转发到两个服务器。来自服务器a的结果像往常一样返回,但来自服务器b的结果被忽略。

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


该存储库不再存在。 - Ankur Chauhan
1
对于那些克隆仓库的人,只需注意一下,在Ubuntu上使用apt-get install gccgo-go,然后运行go build teeproxy.go - rsilva4
teeproxy支持WebSockets吗? - Vetterjack

10
iptables实验性的ROUTE目标怎么样?它有一个“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地址(不回复arp),要么以混杂模式监听。

3

0

我还用 Node.js 写了一个反向代理/负载均衡器,目的类似(目前只是为了好玩,并未准备投入生产)。

https://github.com/losnir/ampel

它非常主观,并且目前支持:

  • GET 使用轮询选择(1:1)
  • POST 使用请求分割。没有“主”和“影子”的概念——响应的第一个后端将为客户端请求提供服务,然后所有其他响应都将被丢弃。

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


0

我需要一个能够tee TCP流量的工具,但又不会侵入性地影响网络,因此不能像反向代理那样添加一个东西在中间。

所以我做的基本上是使用tcpdump/wireshark的逻辑(数据包嗅探),将其封装在Go进程中,并可以配置一些事情。

对于那些需要的人,代码可以在这里找到:https://github.com/RobinUS2/teecp


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接