如何使用 nftables 进行“基于源 MAC 的路由”

如何使用 nftables 进行“基于源 MAC 的路由”

(这是其简化版本: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 上的数据包入站

  1. 数据包是否是之前见过的流的一部分?

否:将此 L3/L4 流映射到源 MAC 并继续执行步骤 2

是:继续第 2 步

  1. 处理数据包并发送数据包

数据包在 eth0 上出站

  1. 查找表中的流量以找到目标 MAC

  2. 将数据包转发到目标MAC

这是 nftables 能做到的吗?任何关于入门的指点都值得赞赏。

相关内容