iptables DNAT 原始目的地

网络工程 路由 纳特 linux
2021-07-31 20:42:05

我想编写一个代理软件来操作来自/到特定设备的传入和传出数据包。对于传入的数据包,这很容易:为进入设备 IP 的数据包添加 PREROUTING iptables 条目,并将它们路由到另一个 IP:Port。在那里我可以修改数据包并将它们转发到真正的目的地(我的设备)。

但是我如何处理传出的数据包?当我尝试以下

iptables -t nat -I PREROUTING -p udp -s 10.0.0.10 -j DNAT --to-destination 10.0.0.20:13000 (10.0.0.10 是我要监控的设备,10.0.0.20 是我监控的电脑)

然后我会得到客户端发送的所有数据包,但我不知道它们的真实目的地,因为 IP 标头中的目的地 IP 被重写......

2个回答

linux nat使用的翻译信息在/proc/net/ip_conntrack

或者,您可能想查看 iptables 中的队列目标以及 libipq,而不是将 nat 弄得一团糟。这将让您在用户态处理数据包而不必处理 NAT。

http://linux.die.net/man/3/libipq

状态防火墙上的 NAT 只需要一个规则来匹配初始连接,并负责返回数据包。

唯一的要求是在 dNAT 之后接收最终数据包的设备必须将返回流量路由回状态防火墙,以允许它执行反向 NAT。

如果 FW 是您的 GW,则通常没有问题,如果不是,您可以在 FW 上添加伪装以隐藏 src(在更改目标后),从而迫使您的 PC 响应 FW。