是否可以使用iptables复制UDP单播流?


8

我有一个专有系统,可将udp视频流从单元#1(192.168.1.1)传输到单元#2(.1.2)。我无法对此系统进行更改,并且尝试克隆此udp流,以便可以在其他程序中访问它。该程序将处理视频,然后将其作为多播流再次发送出去。

我希望使用带有三块网卡的Linux机器(现在正在运行Ubuntu Server 12.04)进行此操作。通过将单元#1和#2连接到Linux机器中的两个网卡(eth0和eth1)并使用网桥,我可以使它们通信。我的/ etc / network / interfaces看起来像:

# The loopback network interface
auto lo
iface lo inet loopback

# The external interface
auto eth3
iface eth3 inet static
address 192.168.10.2
netmask 255.255.255.0

# The bridge interface
auto br0
iface br0 inet manual
  bridge_ports eth0 eth1

这有效,并且通过使用tcpdump,我已经确认udp数据包从#1到达并在端口6000朝#2方向前进。

我希望可以使用的下一步是使用iptables克隆从192.168.1.1到2号端口6000的所有udp数据包。我对iptables不太熟悉,但是在在线阅读手册之后,我认为这可以工作:

iptables -A PREROUTING -t mangle -p udp -s 192.168.1.1/32 --dport 6000 -j TEE --gateway 192.168.10.2

该规则已成功应用,但不起作用。如果我使用tcpdump监视eth3,则那里看不到数据包。

我想获取此流,对其进行处理,然后在.10.2接口上将其作为多播发送出去。

我究竟做错了什么?有我误会的东西吗?

Answers:


4

数据包永远不会到达eth3,因为192.168.10.2是计算机本身。同样,重复的数据包仍然具有目的地ip地址192.168.1.2。您需要将它们发送到192.168.10.0/24中的一台计算机上,例如192.168.10.254,以使重复项实际上通过eth3路由。

iptables -t mangle -A PREROUTING -p udp --dport 6000 -j TEE --gateway 192.168.10.254

然后,您还需要将它们DNAT到192.168.10.254,这样您就可以读取192.168.10.254上的流并通过多播发送出去。

在192.168.10.254本身上:

iptables -t nat -A PREROUTING -p udp -d 192.168.1.2 --dport 6000 -j DNAT --to-destination 192.168.10.254:6000

或者在数据包离开eth3之前仍在192.168.10.2上:

iptables -t nat -A POSTROUTING -o eth3 -p udp -d 192.168.1.2 --dport 6000 -j DNAT --to-destination 192.168.10.254:6000

如果我理解正确,那么您所解释的将把数据包发送到另一台计算机(.10.254)。我想避免使用这台额外的计算机,而只在一台计算机上进行内部操作。如果我将网关设置为127.0.0.1,那可以工作吗?
哈康K. Olafsen

网关只是下一跳,目标仍然是192.168.1.2,并且您无法通过DNAT将机器上的重复数据包“装满”。因此127.0.0.1也不起作用。
lsmooth

因此,我无法仅使用一台机器就可以完成我想做的事情。
哈康K. Olafsen

0

我遇到了类似的问题,并用一个小程序解决了该问题,该程序使用libpcap读取UDP数据包的内容。它将这些数据包的副本发送到另一个目的地。(可能在同一台机器上。)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.