我实际上正在学习在测试环境中使用 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)
我以相同的方式尝试了很多命令(在设置之前添加表格,而不是精确表格),它总是返回一个错误,但并非每次都相同。
我想我一定做错了什么,但我不知道是什么。如果你有什么想法吗?我将非常感激!
也许是我整体配置不好,不能这么想套装吧?
如果无法刷新集合中的元素,是否有办法删除集合中的所有元素(除了定义标志超时之外)?
抱歉,如果我的信息不清楚,我是法国人,用其他语言来描述问题有点困难......
谢谢!
问候。
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)
| 归档时间: |
|
| 查看次数: |
2782 次 |
| 最近记录: |