中止 nftables 端口转发 NAT 流

中止 nftables 端口转发 NAT 流

我正在根据源地址到目标端口元组进行动态、短期的 UDP 端口转发。使用具有映射、查找和适当规则的 nftables 可以很好地工作(在预路由/nat dest 链中使用 nat,在后路由/nat src 链中使用 masq)。

但是:在 nftables 中使用 NAT 时,不会对流中的后续(已建立?)数据包进行规则查找(请参阅文档)。这意味着我无法通过从地图中删除元素和/或在地图上添加过滤规则来终止现有流程。

我认为处理这个问题最简单的方法是进行无状态 NAT。然而,具有原始优先级的预路由过滤器链中的简单规则(不使用映射而是使用变量来简化示例)似乎不起作用。我看到了跟踪,但没有数据包到达 $target。

ip saddr $client ip protocol udp notrack ip daddr set $target nftrace set 1 return

是否有一些关于如何为 nftables 构建无状态 NAT 的详细文档,我缺少这些文档?我是否还需要为从 $target 回到 $client 的流程添加规则?

或者有没有一种方法可以过滤我不知道的现有 NAT 流,例如通过添加积极的连接跟踪超时(不太确定 CT 是否也通过 nftables 适用于 NAT)?

答案1

好吧,事实证明该文档有点误导。虽然它说“流中的后续数据包不会发生规则查找”,但这意味着后续处理规则不适用。

以原始优先级添加过滤链仍然会丢弃来自活动 NAT 流的数据包。前向挂钩中的过滤也是如此(更改目标端口、地址等)。

虽然我仍然对了解如何对这种无状态进行建模非常感兴趣,但在具有优先级原始工作的预路由过滤器链中添加过滤器规则。

相关内容