似乎 linux 已经有一个用于 nftables nf_xfrm 的模块,其中包含一些关于 reqid 的代码,但是在手册页中没有关于它的描述。
那么,如何将以下命令翻译成 nftables 呢?
iptables -D FORWARD -s 10.0.0.1/32 -i eth0 -m policy --dir in --pol ipsec --reqid 1 --proto esp -j ACCEPT
似乎 linux 已经有一个用于 nftables nf_xfrm 的模块,其中包含一些关于 reqid 的代码,但是在手册页中没有关于它的描述。
那么,如何将以下命令翻译成 nftables 呢?
iptables -D FORWARD -s 10.0.0.1/32 -i eth0 -m policy --dir in --pol ipsec --reqid 1 --proto esp -j ACCEPT
nftables版本 0.9.0 于2018-06-08发布,一年多前,此版本不提供此功能。只有已解封装的测试可用。
更新:nftables 0.9.1 已于2019 年 6 月 24 日发布,因此人们可以希望它很快会被打包到自己喜欢的发行版中。
在 4.20 1版本中添加了对nftables中 ipsec 额外处理的内核支持。在用户态方面,在 2018 年 9 月 21 日左右的 git master 分支中为 libnftnl 2、3和 nftables 4、5、6添加了对其他 ipsec 功能的相应支持。
最后一个补丁提供reqid:
(好吧,没有请求 id 的示例,也没有匹配可能未实现的底层协议,请参见下文)
因此,为了能够使用此功能,目前至少需要:
如果 OP 的iptables规则是追加而不是删除(目前只能通过使用handle关键字在 nftables 中完成)它应该转换成这个(包括样板文件):
meta ipsec exists
我之前没有添加ipsec in reqid 1
:测试reqid应该需要,因此测试已经受到 ipsec 解封装。文档中似乎未提供且未提及的内容相当于
--proto esp
,所以我不能说。如果真的需要匹配 esp 协议,可以想象在外层信封包上使用标记应该可以做到,知道标记在解封装后被保留:
免责声明:持保留态度,仅测试语法(使用来自 git commit 01e5c6f0ed0315046537612f5a80e506d37a7f8e 的nftables)。这实际上并未在 IPSec 上得到验证。对于 UDP 封装的 ESP,可能还需要为 4500/UDP 添加规则。
1 netfilter:nf_tables:添加 xfrm 表达式
2 expr:rt:ipsec 匹配支持
3 expr:添加 xfrm 支持
4 src:rt:添加支持以检查路由是否将执行 ipsec 转换
5 src:将元 secpath 重命名为元 ipsec
6 src:添加ipsec (xfrm) 表达式