Håk*_*sen 8 iptables udp video-streaming
我有一个专有系统,它将 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
Run Code Online (Sandbox Code Playgroud)
这是有效的,并且通过使用 tcpdump 我已经确认 udp 数据包是从 #1 到达并在端口 6000 处朝向 #2。
我希望的下一步是使用 iptables 来克隆所有来自 192.168.1.1 的 udp 数据包,这些数据包将到达 #2 的端口 6000。我对 iptables 不是很熟悉,但在阅读在线和手册后,我认为这会起作用:
iptables -A PREROUTING -t mangle -p udp -s 192.168.1.1/32 --dport 6000 -j TEE --gateway 192.168.10.2
Run Code Online (Sandbox Code Playgroud)
规则应用成功,但不起作用。如果我使用 tcpdump 来监控 eth3,我在那里看不到数据包。
我想获取这个流,处理它并在 .10.2 接口上将它作为多播发送出去。
我究竟做错了什么?有什么我误解了吗?
数据包永远不会到达 eth3,因为 192.168.10.2 是机器本身。此外,复制的数据包的目标 IP 地址仍然是 192.168.1.2。您需要将它们 TEE 到 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
Run Code Online (Sandbox Code Playgroud)
然后你还需要将它们 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
Run Code Online (Sandbox Code Playgroud)
或者在数据包离开 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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6537 次 |
最近记录: |