nftables 通过原生表达式组合、状态跟踪与映射机制在内核实现逻辑分支与动态决策,支持 vmap 多条件路由、conntrack 会话级分流、应用层协议感知及带 timeout 的临时白名单。

nftables 的可编程性不靠脚本语言,而是通过其原生表达式组合、状态跟踪与映射机制,在内核层面直接实现逻辑分支、条件跳转和动态决策。它不是“写代码”,而是“搭逻辑电路”——用规则链、map、meter、ct 和 verdict 跳转构建确定性分流路径。
用 vmap 实现多条件路由分流
vmap(值映射)是 nftables 最接近“switch-case”的能力,能根据数据包字段查表并跳转到不同链或执行不同动作,避免长链匹配开销。
- 先建一张 map,把目标子网段映射到对应处理链名:
nft add map ip filter route_map { type ipv4_addr : verdict; } - 将不同目的网段关联到不同链:
nft add element ip filter route_map { 10.10.0.0/16 : jump to_chain_a }<br>nft add element ip filter route_map { 192.168.50.0/24 : jump to_chain_b }<br>nft add element ip filter route_map { 172.16.0.0/12 : drop } - 在 input 或 forward 链中触发映射:
nft add rule ip filter input ip daddr vmap @route_map
注意:vmap 查的是完整键值(如 10.10.0.0),若需前缀匹配(如 /16),必须提前对 ip daddr 做掩码运算,或改用 dynamic set + elem 配合 ip daddr & 255.255.0.0 手动哈希。
基于连接状态与标记的会话级分流
真正稳定的分流必须保证同一连接所有包走同一路径,这依赖 conntrack 状态 + mark 标记 + 策略路由协同。
- 在 prerouting 链为新连接打标记(例如按源 IP 哈希):
nft add rule ip nat prerouting ct state new ip saddr @hash_pool meter hash_meter counter meta mark set ct mark xor 0x00000001
其中@hash_pool是预定义的 IP 集,hash_meter控制哈希桶分布密度 - 用 mark 触发策略路由:
ip rule add fwmark 0x1 lookup table_100<br>ip rule add fwmark 0x2 lookup table_101
- 后续包因 ct state != new 不再重标记,复用原有 mark,天然保序
结合 ct helper 与 payload 解析做应用层感知分流
nftables 支持深度解析部分协议载荷(如 SIP、FTP、DNS),配合 ct helper 可识别会话关系,实现“一个 DNS 查询 + 后续多个 UDP 响应”整体归入同一路径。
- 启用 DNS 辅助跟踪:
nft add rule ip filter input udp dport 53 ct helper set "dns" - 根据 DNS 查询域名分流:
nft add rule ip filter input udp dport 53 @dns_domains & @dns_domains counter jump dns_route
其中@dns_domains是含域名哈希值的 set(需预计算或由用户态工具动态注入) - 对已建立的 DNS 相关连接,用
ct status dnat或ct direction original区分请求/响应方向,避免反向路径错配
用匿名 map + timeout 实现临时白名单分流
某些场景需要“认证后放行到高速链路”,且白名单需自动过期——nftables 的 timeout 功能可替代外部脚本轮询。
- 创建带超时的 map:
nft add map ip filter temp_whitelist { type ipv4_addr : verdict; flags timeout; } - 插入带 TTL 的条目(如 5 分钟):
nft add element ip filter temp_whitelist { 192.168.2.100 : accept @timeout 300s } - 在 input 链优先匹配:
nft add rule ip filter input ip saddr vmap @temp_whitelist - 过期条目自动清理,无需手动删除或 reload 规则集
这种模式适合 API 认证网关、临时运维通道、设备首次上线激活等场景,兼具安全性与自动化。











