Nftables 更新 1.1.4
nftables 1.1.4 – Commodore Bullmoose #5
nftables 1.1.4(“Commodore Bullmoose #5”)于 2025 年 8 月 06 日发布。这个版本继续延续了1.1 的版本名字,加了 #5
, 与之前预测一样,按照 #1
, #2
, #3
, #4
发布了多个小版本(marc.info)。
从git commit记录(Netfilter Git)来看,这个版本增强了稳定性、增加少量实用功能为主的版本,重点在于 trace/conntrack 输出、fib 路由判断、时间段匹配恢复、错误报告改进,以及 JSON / netlink 解析的健壮性改进。
下面根据官方的 Announce 梳理下具体更新的新功能.
nftables 1.1.4 改动详解
1. 增加 conntrack 信息在 monitor trace
输出中
在 tracing/monitor 模式下,新增输出连接追踪(conntrack)相关信息。原本 trace 路径只显示 packet 路径、规则匹配、verdict 等,不包含 conntrack 细节;1.1.4 增加了类似下面这样的行:
trace id 32 t PRE_MANGLE conntrack: ct direction original ct state new ct id 2641368242
...
trace id 32 t INPUT conntrack: ct direction original ct state new ct status dnat-done ct id 2641368242
也就是说,trace 输出中新增 conntrack:
这一行,指示包在这个 hook 时刻对应的连接追踪方向(direction)、状态(state)、ID、以及状态标志(如 dnat-done
)等。 LWN.net+2netfilter.org+2
这个增强对于调试 nf_tables 与 conntrack 交互、理解包的连接状态流转非常有帮助。
2. 支持在 map / set / 表达式中检查路由存在性(fib check)
增加 fib … check exists / missing
的语法,用来判断某地址是否在路由表中(是否可达),然后可以在 maps / set / 表达式 / 设置语句里使用这个结果。
-
... fib daddr . iif check exists
或check missing
-
可以把这个 check 用作 map 键或条件,比如:
map m1 { type fib daddr check : verdict; elements = { exists : accept, missing : drop } }
-
甚至可以在 set / mark 赋值语句中使用:
meta mark set fib daddr check . ct mark map { exists . 0x0 : 0xA, missing . 0x1 : 0xB }
这样做的意义在于,可以在规则中依据 “目的地址是否有路由” 这个条件来判断是否接受或丢弃包,而不必事先写一个额外的路由前置测试。LWN 公告也特别提到这个点。 (LWN.net)
在变更日志里也有提到:fib: allow to check if route exists in maps
、fib: allow to use it in set statements too
。([netfilter.org][3])
3. 恢复跨日(跨午夜)时间段匹配的 meta hour 语义
在 1.1.3 中,meta hour "21:00"-"02:00"
(即从晚上 21 点到次日凌晨 2 点) 这一类跨日范围匹配在某些情形下有问题。1.1.4 重新恢复对这种跨日范围的正确匹配。(LWN.net)
示例:
rule ip filter myrule {
meta hour "21:00"-"02:00" drop
}
这条规则在 1.1.4 下将能正确在晚上 21:00 到次日凌晨 2:00 这段时间生效。(之前版本可能失败或不匹配)
4. 在 nft list
/ 列出集合时显示元素数量
1.1.4 在 list
输出时会在集合(set / map)旁边显示其当前的元素个数,这有助于用户更直观地了解集合的规模。(LWN.net)
例如:
table ip t {
set s {
type ipv4_addr
elements = { 10.0.0.1, 10.0.0.2 }
}
}
在 nft list table ip t
时,可能会看到类似 s (2 elements)
这样的注释。
5. 更好的错误报告:当对同名 set / map 做不同类型重声明时,错误信息更明确
之前如果你写了两个同名的集合,但类型(data 类型、标志等)不一致,错误报告可能较晦涩。1.1.4 在这类冲突时提供更清晰的错误信息,以帮助定位配置错误。(LWN.net)
变更日志中写道 “Better error reporting with re-declarations set/map with different types”。([netfilter.org][3])
此外,还对内存/占用做了一些优化(如日志中提到从 ~74 M 减少到 ~62 M)以减小开销。(LWN.net)
nftables 1.1.4 编译安装指引
1. 依赖项
-
libnftnl ≥ 1.2.9:https://netfilter.org/projects/libnftnl/index.html
-
libmnl ≥ 1.0.4:https://netfilter.org/projects/libmnl/index.html
-
需要内核支持
nf_tables
(≥ Linux 3.14)。
2. 下载
-
官方下载页面:https://www.netfilter.org/projects/nftables/downloads.html
-
直接获取 1.1.4 源码包:
-
https://www.netfilter.org/pub/nftables/nftables-1.1.4.tar.xz
3. 编译与安装
# 解压源码包
tar xf nftables-1.1.4.tar.xz
cd nftables-1.1.4
# 配置,指定安装前缀(可选)
./configure --prefix=/usr \
--sysconfdir=/etc \
--localstatedir=/var
# 编译并测试
make
make check
# 安装
sudo make install
提示:如需卸载,可在源码目录内运行
sudo make uninstall
。
4. 更新 manpage 和重建库缓存
sudo mandb
ldconfig