192.168.0.1/24
我有一台 OpenWrt 路由器(v18.06.5,r7897-9d401013fc),它在LAN(在eth1
)和一个公共 IP 140.82.118.4
(在eth2
)之间执行标准(开箱即用)NAT 。路由器已iptables-mod-tee
加载并运行该模块。
我的目标是监控从接口流出eth2
到 WAN 的流量。监控由运行“Wireshark”的计算机完成,该计算机位于 LAN(位于192.168.0.3
)。
例如,当我ping 8.8.8.8
从 LAN 上的另一台计算机(例如,来自192.168.0.2
)时,我希望看到一个 IP/ICMP Echo 请求,该请求在 WAN 接口上发出ip.src
==140.82.118.4
和ip.dst
== 。8.8.8.8
eth2
我使用以下命令修改 iptables 以将克隆的数据包发送到运行“Wireshark”的主机:
iptables -t mangle -A POSTROUTING -o eth2 -j TEE --gateway 192.168.0.3
ip.src
它可以工作,但“Wireshark”显示带有==192.168.0.2
和ip.dst
==的 IP/ICMP Echo 请求8.8.8.8
...这是错误的,因为ip.src
看起来像是在 SNAT(或伪装)之前!
应该ip.src
是140.82.118.4
我的公共 WAN 接口的 IP...因为如果不是,那么将8.8.8.8 host
不知道将 ICMP Echo 回复发送到哪里,但是 ping 命令正在从主机获取 ICMP Echo 回复8.8.8.8
(如它应该)。
为什么会发生这种情况以及如何纠正?
答案1
mangle 的 POSTROUTING 中的规则比 nat 的 POSTROUTING 中的规则运行得早...因此,当您在 mangle 的 POSTROUTING 中执行 TEE 操作时,不会发生源 NAT ....请参阅下面附加的 iptables 图:https://th.bing.com/th/id/R.aa2afe9a3c09b762af0b59c8670c7740?rik=SvxGxvrwso1veg&riu=http%3a%2f%2flinux-ip.net%2fnf%2fnfk-traversal.png&ehk=kT6op7%2bDt4yCPX1npGPAw9m WOpRiFTZsA5qJ0HMDQZo%3d&risl=&pid= ImgRaw&r=0