我需要将传入的 UDP 流量重定向到本地主机上监听不同 UDP 端口的两个服务。我尝试过:
iptables -t nat -I PREROUTING -p udp -d 10.11.12.13 --dport 22 -j DNAT --to-destination 127.0.0.1:1234 --to-destination 127.0.0.1:4321
但错误是:
iptables v1.6.0:DNAT:不支持多个 --to-destination
与选项相同--to-ports
:
iptables v1.6.0:REDIRECT:选项“--to-ports”只能使用一次
然后我尝试了 iptablesTEE
。但在--gateway
选项中它只暗示 IP 地址,所以我甚至不能这样做:
iptables -t mangle -I PREROUTING -p udp -d 10.11.12.13 --dport 22 -j TEE --gw 127.0.0.1:1234
有没有办法在 Linux 中使用 iptables 或其他方便的方式“复制” UDP 流量?
PS 问题是关于单向 UDP 流量(例如传入系统日志流量)。显然,在这种骗局中,它与 TCP 无关,因为 TCP 有连接,不可能从一个端口到另外两个端口建立连接。但似乎可以用 UDP 来完成(因为不需要建立连接)。
答案1
我能想到的唯一其他事情是使用一些数据包嗅探器捕获流量,然后将其重新发送到另一个目的地。
检查以下链接:
https://linux.die.net/man/1/tcpreplay-edit
https://linux.die.net/man/1/tcpreplay
http://tcpreplay.synfin.net/wiki/tcprewrite
据我理解,它可能看起来类似于以下内容:
tcpdump -i eth1 -w - 'udp and port 80' | tcprewrite --portmap=80:8080 | tcpreplay -i eth1 -
或者基于“tcpreplay-edit”文章的类似内容:
tcpdump -i eth1 -w - 'udp and port 80' | tcpreplay --portmap=80:8080 -i eth1 -