如何让 nftables 将多个接口复制到一个接口

如何让 nftables 将多个接口复制到一个接口

我的家庭路由器有 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

相关内容