networking - 如何在 TEE 之后处理镜像(重复)iptables 流量?

标签 networking iptables mirroring tee duplication

我有一个关于使用 TEE 选项 iptables 流量镜像的问题。主要目标是将服务器 A(端口 1935)上服务的所有流量复制到服务器 B 上同一端口(端口 1935)上运行的同一服务。 例如: 如果我开始将视频流式传输到 192.168.0.200:1935 - 视频应该在两个服务器上(在 192.168.0.201:1935 和 192.168.0.200:1935 上)。 Google 指出 iptables -TEE 选项。我尝试在 Ubuntu 上使用它: 服务 A -192.168.0.200 服务 B -192.168.0.201

在 SERV A (192.168.0.200) 上,我为端口 1935 上的传入流量添加镜像:

root@ubuntu_200:~# iptables -t mangle -A PREROUTING -p tcp --dport 1935 -d 192.168.0.200 -j TEE --gateway 192.168.0.201

现在我在 SERV B (192.168.0.201) 接口(interface)上获得了所有包。

root@ubuntu_201:~# tcpdump 'tcp port 1935'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
18:14:47.503241 IP 192.168.0.10.49984 > 192.168.0.200.1935: Flags [S], seq 3961116317, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
18:14:47.503258 IP 192.168.0.10.49985 > 192.168.0.200.1935: Flags [S], seq 1849647427, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
18:14:47.752702 IP 192.168.0.10.49986 > 192.168.0.200.1935: Flags [S], seq 3102326921, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
18:14:47.999309 IP 192.168.0.10.49984 > 192.168.0.200.1935: Flags [S], seq 3961116317, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
18:14:48.008983 IP 192.168.0.10.49985 > 192.168.0.200.1935: Flags [S], seq 1849647427, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
18:14:48.253066 IP 192.168.0.10.49986 > 192.168.0.200.1935: Flags [S], seq 3102326921, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
18:14:48.499660 IP 192.168.0.10.49984 > 192.168.0.200.1935: Flags [S], seq 3961116317, win 8192, options [mss 1460,nop,nop,sackOK], length 0
18:14:48.508964 IP 192.168.0.10.49985 > 192.168.0.200.1935: Flags [S], seq 1849647427, win 8192, options [mss 1460,nop,nop,sackOK], length 0
18:14:48.751863 IP 192.168.0.10.49986 > 192.168.0.200.1935: Flags [S], seq 3102326921, win 8192, options [mss 1460,nop,nop,sackOK], length 0

如您所见,我在第二个服务器接口(interface)上获得了所有流量,但目标 IP 为 SERVA (192.168.0.200)。现在我需要将此流量路由到端口 1935 上的服务。我尝试在 SERV B 上添加规则:

iptables -t nat -A PREROUTING -p tcp --dport 1935 -d 192.168.0.200 -j DNAT --to-destination 192.168.0.201:1935  

还尝试重定向和转发 - 但没有使其正常工作...... SERV B 端口 1935 上没有视频。

有人能给我指明正确的方向吗?? 正如我之前提到的:我需要从端口 1935 查看两台服务器上的视频流。发布仅在 SERV A 上,但视频应该在两者上。 任何建议都会很高兴。 谢谢。

最佳答案

我认为这样做是不可能的。

看来您正在为 TCP 流量使用 TEE。

TCP 是一种有状态协议(protocol)(与 UDP 不同),它要求用户端计算机参与连接的每一步,并且它不适用于两个试图与一个服务器通信的独立客户端。

一些备选方案:

  1. 改为使用 UDP 流(当然,您必须同时更改服务器、客户端和 iptable 规则)。
  2. 使用某种 TCP 代理,它从一侧接受 TCP 视频流(或透明地拦截它)并从另一侧针对多个客户端打开 2 个(或更多)不同的 TCP session 。 也许这可以在这里提供帮助: https://github.com/agnoster/duplicator

关于networking - 如何在 TEE 之后处理镜像(重复)iptables 流量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21633114/

相关文章:

python - 如何使用python连接同一网络上的两台计算机

Windows 上的 Python 多处理和网络

svn - 如何在SVN中镜像文件?

node.js - ImageMagick,Linux 终端

Swift:协议(protocol)变量的反射

networking - 分布式应用程序 - 负载均衡器是单点故障吗?

networking - 任何用于测量网络延迟的最小源代码(客户端服务器程序)

Linux Fedora 19 - iptables 启动失败

iptables - 如何从 tcpdump 输出中获取 from..to 偏移量以与 iptables 字符串匹配模块一起使用

iptables - 使用条件语句使用 iptables 的防火墙规则