(这是其简化版本:Linux 可以进行“基于源 MAC 的路由”吗?)
我有一台设备需要将出站数据包路由回接收入站数据包的 MAC 接口。这被视为“基于源 MAC 的路由”或“返回发送方”,因为只有源 MAC 地址将用于确定将数据包发送到何处。第 3 层 IP 地址和第 4 层端口将无法识别正确的下一跳。
网络流程如下:
client1
| NET-A
v 1.
+---------+ 2. +---------+
| | ----> | |
| router1 | NET-B | myapp |
| | <---- | |
+---------+ 3. +---------+
| NET-C
v 4.
server1
路由器将会有多个实例(路由器 1、路由器 2、路由器 3 等),并且 myapp(它是一个透明代理,意味着它不会改变 L3/L4 组件)需要选择正确的路由器实例来返回数据包。myapp 无法执行正常的基于目的地的路由,因为 L3 目的地不会识别哪个路由器首先向其发送了流量。
我希望 nftables 能够做到这一点,但我对 nftables 的经验很少(对 iptables 的经验更多,但到目前为止似乎还不够)。这是我的 myapp 的伪逻辑,其中 eth0 连接到 NET-B
eth0 上的数据包入站
- 数据包是否是之前见过的流的一部分?
否:将此 L3/L4 流映射到源 MAC 并继续执行步骤 2
是:继续第 2 步
- 处理数据包并发送数据包
数据包在 eth0 上出站
查找表中的流量以找到目标 MAC
将数据包转发到目标MAC
这是 nftables 能做到的吗?任何关于入门的指点都值得赞赏。