带 Linux 桥接器的 IPtables DNAT(无接口地址)

带 Linux 桥接器的 IPtables DNAT(无接口地址)

我一直在对 iptables 和网桥进行一些实验,这个场景只是在实验室中,但我遇到了一些有趣的功能,并且希望对正在发生的事情进行一些解释(因为与 iptables 相比,它没有意义)流程图)。

我在 Debian 11 服务器虚拟机上有 3 个接口。 ens3 连接到“互联网”(实验室外部),ens4 连接到实验室路由器,ens5 已寻址并连接到实验室内部的子网。 ens3 和 ens4 没有 IP 地址。

我创建了一个网桥 br0,其中包含接口 ens3 和 ens4。这工作得很好,来自“互联网”或实验室路由器的流量在 ens3 和 ens4 之间正确移动。

我已经启用了 br_netfilter 内核模块,并试图net.bridge.bridge-nf-call-iptables = 1使桥接流量被 iptables 看到。

我为自己设定的目标是抓取来自“互联网”的与某个端口(22、SSH)匹配的数据包,并将目标IP地址更改为ens5的IP。

如果我添加空白规则(只是为了查看计数器递增),iptables -t raw -A PREROUTING则 pkt 计数器开始递增。所以流量是在raw PREROUTING链上看到的。

如果我添加另一个空白规则 ,iptables -t mangle -A PREROUTING则 pkt 计数器再次开始递增。所以到目前为止,流量是按照流程图进行的。

这就是有趣的地方。如果我iptables -t nat -A PREROUTING突然添加另一个空白规则,pkt 计数器不会增加。但流程图表明流量将从mangle PREROUTING流向nat PREROUTING。但这显然没有发生。有没有关于 linux 网桥如何与 iptables 链交互的流程图?我对交通如何/去哪里消失/去向感到困惑。

我已经为 DNAT 规则编写了一条规则,但我只能将该 DNAT 规则放入nat PREROUTING,并且如果 从未看到流量nat PREROUTING,那么我无法重写目标 IP。除非有一种方法可以在 raw 或 mangle 中进行 DNAT,但我不知道这些方法。

相关内容