无法刷新 nftable 元素的集合

mjt*_*jtn 3 set nftables

我实际上正在学习在测试环境中使用 nftables,并且实际上正在使用 nftables 集。我使用的是 0.7 版本,由于我的测试不起作用,我更新到 0.9.4 版本,但我的问题仍然相同。

我可以毫无问题地在我的桌子上创建我的集合。我的集合元素必须包含 ipv4 地址。我使用 nftables 表、链和集合没有任何问题,我的规则有效等等......

所以我想要做但找不到如何做到这一点就是删除我的所有集合元素,而不需要一一精确地指定 ipv4 地址。

假设我的表的名称是test,我的集名称是tmp,类型为 ipv4_addr,我的配置将如下所示:

table ip test {
        set tmp {
                type ipv4_addr
        }
}
Run Code Online (Sandbox Code Playgroud)

我可以使用以下命令成功地将元素添加到该集合中:

nft add element ip test tmp { 10.10.10.10 }
Run Code Online (Sandbox Code Playgroud)

现在我想做的是删除我的集合中的所有元素,我查看了 nft 的手册页,它说我可以使用flush命令刷新集合中的所有元素:

SETS
[...]
flush    Remove all elements from the specified set.
Run Code Online (Sandbox Code Playgroud)

所以我尝试使用此命令从集合中删除所有元素:

nft flush set test tmp
Run Code Online (Sandbox Code Playgroud)

但它返回给我这个错误:

Error: Could not process rule: Invalid argument
flush set test tmp
^^^^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

我以相同的方式尝试了很多命令(在设置之前添加表格,而不是精确表格),它总是返回一个错误,但并非每次都相同。

我想我一定做错了什么,但我不知道是什么。如果你有什么想法吗?我将非常感激!

也许是我整体配置不好,不能这么想套装吧?

如果无法刷新集合中的元素,是否有办法删除集合中的所有元素(除了定义标志超时之外)?

抱歉,如果我的信息不清楚,我是法国人,用其他语言来描述问题有点困难......

谢谢!

问候。

mjt*_*jtn 5

Netfilter 团队给出了这样的答案:

一组的刷新选项仅适用于 Linux 4.10 及以上版本,我的版本如下。

如果你有兴趣的话,我找到了一种在 Debian 上使用这些命令来刷新表的方法:

将集合中的元素存储在变量中:

ip_elements=$(nft list set test tmp | awk '/{ /,/}/' | cut -d '=' -f 2)
Run Code Online (Sandbox Code Playgroud)

使用delete命令删除元素

nft delete element test tmp ${ip_elements}
Run Code Online (Sandbox Code Playgroud)