Linux 桥接 SNAT 与 ebtables

gip*_*gip 5 firewall bridge

我正在阅读以下代码(dot1x 桥旁路):https : //github.com/mubix/8021xbridge/blob/master/scripts/trans_bridge.prepop

快速描述,我们有 2 个接口,第一个连接到交换机($SWINT),另一个连接到我们的目标主机。目标是与网络的其余部分进行交互,同时使流量看起来像是由目标主机生成的。

从引用的代码中,我想弄清楚为什么需要以下两个命令:

# use ebtables to source NAT the $COMPMAC for traffic leaving the device from the bridge mac address
(A)ebtables -t nat -A POSTROUTING -s $SWMAC -o $SWINT -j snat --to-src $COMPMAC
(B)ebtables -t nat -A POSTROUTING -s $SWMAC -o $BRINT -j snat --to-src $COMPMAC
Run Code Online (Sandbox Code Playgroud)

我不明白为什么需要对 $BRINT 的 POSTROUTING 流量进行 SNAT。由于我们的目标是避免向源 MAC 与目标主机不同的交换机侧接口传输任何帧,因此第一个 ebtables 规则是否就足够了?

或者换句话说,$SWINT(交换机端接口)不是任何帧到达交换机的唯一途径吗?根据下图,规则 (B) 看起来是多余的,因为我们只关心前往 eth0 (SWINT) 的帧,并且我们已经将 SNAT 应用于 eth0。

我在桥梁上找到的一些很好的资源(但仍然没有回答我的问题)是:

了解 Linux 网络内部结构

Linux Bridge 剖析

带有 Linux Bridge 的 ebtables

https://doc.lagout.org/operating%20system%20/linux/Understanding%20Linux%20Network%20Internals.pdf 页:359 https://doc.lagout.org/operating%20system%20/linux/Understanding%20Linux%20Network%20Internals.pdf第 359 页