使用 iptables 将本地主机上的所有流量从一个端口镜像到另一个端口

使用 iptables 将本地主机上的所有流量从一个端口镜像到另一个端口

我需要将端口 162 中的所有数据包镜像到本地主机上的另一个端口(例如 1162)。

我知道 TEE 可以镜像数据包,但只能镜像到某个 IP 地址。

也许在一条规则中也可以改变目标端口,但我找不到可行的解决方案。

类似这样的:

iptables -t mangle -A PREROUTING -d 0.0.0.0:162 -j TEE --to-destination 0.0.0.0:1162

但根据手册:将克隆的数据包发送到给定 IP 地址可访问的主机。使用0.0.0.0(对于 IPv4 数据包)或 ::(IPv6)无效。

谢谢任何提示。

操作系统:RedHat 6.9

答案1

似乎存在一些误解:

我需要镜像来自端口 162 的所有数据包

你的规则应该包括--sport 162,或者--dport 162如果你的意思是“所有到达端口 162 的数据包”

–到目的地 0.0.0.0:1162

实际上与0.0.0.0localhost 不匹配。您应该使用127.0.0.1

最后你可以尝试 TCP 流量:

iptables -t mangle -A PREROUTING -p TCP --dport 162 -j TEE --gateway 127.0.0.2
iptables -t nat -A PREROUTING -d 127.0.0.2 -p TCP --dport 162 -j DNAT  --to 127.0.0.1:1162

第一条规则将流量复制到 localhost 127.0.0.2:162。第二条规则将流量从 127.0.0.2:162 转发到 127.0.0.1:1162。

请注意,与适用于 POSTROUTING 链的传统端口转发一样,第二条规则适用于 PREROUTING。这是因为我们处理本地主机地址,以便数据包不会越过 nat 表的 POSTROUTING 链。

对于 UDP 流量:

iptables -t mangle -A PREROUTING -p UDP --dport 162 -j TEE --gateway 127.0.0.2
iptables -t nat -A PREROUTING -d 127.0.0.2 -p UDP --dport 162 -j DNAT  --to 127.0.0.1:1162

相关内容