![iptables 数据包 src ip 在 icmp 回复和 tcp ack 的情况下未经过 NAT](https://linux22.com/image/97450/iptables%20%E6%95%B0%E6%8D%AE%E5%8C%85%20src%20ip%20%E5%9C%A8%20icmp%20%E5%9B%9E%E5%A4%8D%E5%92%8C%20tcp%20ack%20%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%E6%9C%AA%E7%BB%8F%E8%BF%87%20NAT.png)
iptables
我与队列结合使用,net-filter
以便以编程方式更改数据包。
我iptables
在 ubuntu 实验室上使用规则,其中 2 个 NIC eth0 连接到互联网,eth1 连接到 LAN 我使用了众所周知的 iptables 规则进行 NAT,并在 eth0 上进行伪装。
sudo iptables --table nat --append POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -append FORWARD -i eth1 -j ACCEPT.
sudo iptables -t mangle -A PREROUTING -j NFQUEUE --queue-num 0
sudo iptables -t mangle -A OUTPUT -j NFQUEUE
这 4 条规则用于帮助我捕获程序内的数据包并修改数据包或删除我想要使用的内容nfq_set_verdict
。
事实上一切都按照我的预期进行,那就是三种协议类型icmp
,tcp
数据udp
包被修改并重新注入。然后在队列中将 eth0 退出到互联网,以 eth0 ip 地址作为源地址(使用 MASQUERADE NAT 规则的效果)。
对于所有数据包都是如此,除了:ICMP ping回复或 TCP确认数据包。
他们使用 eth1 上的 LAN 设备的私有 IP - 192.168.xx 退出到互联网,并使用此私有源 IP 地址到达另一端。
有任何想法吗。谢谢。