欢迎来到Rice博客...
Rice

nftables转发

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 来专项检查容器相关的网络规则。

评论