在 nftables 中查看规则,使用的是 nft 命令行工具。由于 nftables 将所有的过滤、NAT 等功能都整合在了一起,查看起来其实比 iptables 更集中。
以下是你排错和查看规则时最常用的几个命令:
1. 查看所有规则(最常用)
这个命令会列出当前系统所有的表(tables)、链(chains)和规则(rules),相当于把以前 iptables 的 filter 表、nat 表、mangle 表全部展示出来:
Bash
nft list ruleset
提示:如果输出太多,可以配合 grep 或者 less 使用,例如 nft list ruleset | less。
2. 查看带有“句柄 (handle)”的规则(用于删除规则)
在 nftables 中,删除某条特定规则必须通过它的内部编号(叫做 handle)。加上 -a 参数即可显示:
Bash
nft -a list ruleset
你会看到每条规则末尾多了一个类似于 # handle 15 的标记。如果你要删除这条规则,就可以使用句柄。
3. 查看特定协议族 (IPv4 或 IPv6) 的所有规则
如果你只想看 IPv4 的规则,排除 IPv6 的干扰:
B
nft list ruleset ip
查看 IPv6:
Bash
nft list ruleset ip6
4. 查看特定的表或链
在 iptables 中表名是固定的(如 nat, filter),但在 nftables 中,表名和链名是可以自定义的(LXC/LXD 和 Docker 都有自己的建表命名习惯)。
首先通过 nft list ruleset 找到你关心的表名,假设表名叫 nat(协议族为 ip):
Bash
nft list table ip nat
如果你只想看 nat 表下的 prerouting 链(一般端口转发都在这里):
Bash
nft list chain ip nat prerouting
💡 针对 LXC/LXD 的特别提示
如果是 LXD 自动生成的网络规则,LXD 通常会创建属于它自己的命名空间和专属表。
你在执行 nft list ruleset 时,可以着重寻找以 lxd 命名的表和链。
例如,LXD 的网络转发规则通常看起来像这样:
Bash
table ip lxd {
chain prert.lxdbr0 {
# 这里会显示类似 dnat to 10.x.x.x:80 的规则
}
}
你可以直接用 nft list table ip lxd 来专项检查容器相关的网络规则。
评论