![如何让 nftables 将多个接口复制到一个接口](https://linux22.com/image/167960/%E5%A6%82%E4%BD%95%E8%AE%A9%20nftables%20%E5%B0%86%E5%A4%9A%E4%B8%AA%E6%8E%A5%E5%8F%A3%E5%A4%8D%E5%88%B6%E5%88%B0%E4%B8%80%E4%B8%AA%E6%8E%A5%E5%8F%A3.png)
我的家庭路由器有 2 个位于不同子网上的内部接口,以及一个插入康卡斯特调制解调器的外部接口。我想复制每个数据包进入每个接口都连接到一个虚拟接口,我可以在该虚拟接口上直接使用 Zeek。我思考这应该可以帮助我对网络流量进行全面的自省,而不会出现重复的日志,就像我让 Zeek 分别监控每个接口时得到的那样。
虽然这可以将流量复制到“dummy0”:
nft add table netdev filter
nft add chain netdev filter ingress { \
type filter hook ingress device eth0 priority 0\; }
nft add rule netdev filter ingress dup to dummy0
我似乎无法将其扩展为也连接到其他以太网设备。我发现 nftables 文档在这类事情上非常稀疏,因此建议值得赞赏。
答案1
对于较旧的 nftables / 内核:一个 netdev 基础链仅注册到一个网络设备。如果您需要复制多个接口的流量,只需使用相同的规则再次创建一条基础链,并将其注册到另一个接口:
nft add table netdev filter
nft add chain netdev filter ingress0 '{ type filter hook ingress device eth0 priority 0; }'
nft add chain netdev filter ingress1 '{ type filter hook ingress device eth1 priority 0; }'
nft add rule netdev filter ingress0 dup to dummy0
nft add rule netdev filter ingress1 dup to dummy0
与 nftables>= 0.9.3和内核>= 5.5:同一个netdev基链可以注册到多个设备,避免重复:
nft add table netdev filter
nft add chain netdev filter ingress '{ type filter hook ingress devices = { eth0, eth1 } priority 0; }'
nft add rule netdev filter ingress dup to dummy0