我将 ip 表与网络过滤器队列结合使用,以便以编程方式更改数据包。
我在 ubuntu 实验室上使用 iptables 规则,有 2 个网卡 eth0 连接到互联网,eth1 连接到 LAN 我使用了众所周知的 iptables 规则进行 NAT,并在 eth0 上进行伪装 Sudo iptables --table nat --append POSTROUTING -o eth0 -j MASQUERADE sudo iptables -append FORWARD -i eth1 -j 接受。 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 ip 地址作为源地址退出 eth0 到互联网(使用 MASQUERADE NAT 规则的效果)。对于所有数据包都是如此,除了:icmp ping 回复或 tcp ack 数据包。他们使用 LAN 设备的私有 IP - 192.168.xx 退出互联网,并使用此私有源 IP 地址到达另一端。有任何想法吗。谢谢。
答案1
我在 ubuntu 实验室上使用 iptables 规则,有 2 个网卡 eth0 连接到互联网,eth1 连接到 LAN 我使用了众所周知的 iptables 规则进行 NAT,并在 eth0 上进行伪装 Sudo iptables --table nat --append POSTROUTING -o eth0 -j MASQUERADE sudo iptables -append FORWARD -i eth1 -j 接受。 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 ip 地址作为源地址退出 eth0 到互联网(使用 MASQUERADE NAT 规则的效果)。对于所有数据包都是如此,除了:icmp ping 回复或 tcp ack 数据包。他们使用 LAN 设备的私有 IP - 192.168.xx 退出互联网,并使用此私有源 IP 地址到达另一端。有任何想法吗。谢谢。