nftables 不实现链路聚合,但可通过 oifname、fwmark、ip/端口等维度识别并监控多路径出口流量,配合策略路由实现基于业务意图的精准分流与统计。

nftables 本身不直接实现链路聚合(如 LACP 或 bonding),它也不感知物理链路状态或带宽负载。但它可以配合多路径出口场景,对经由不同接口(如 eth0、eth1、ppp0)转发的流量进行分类标记、统计、限速与路由分流控制,从而支撑上层的监控与调度策略。
关键在于:nftables 是策略执行层,不是链路聚合控制器;它的作用是“看见并干预”已由内核路由/策略路由决定走向不同出口的流量。
nftables 如何识别多路径出口流量
多路径链路聚合通常依赖以下机制之一:
- 内核
bonding驱动(如 mode=balance-xor、802.3ad) - 策略路由(multiple routing tables + fwmark + ip rule)
- 应用层负载均衡(如 DNS 轮询、客户端选路)
nftables 可通过以下维度区分流量归属路径:
-
出接口(oifname):最直接方式,适用于 bond 子接口或独立物理口
nft add rule inet filter output oifname "eth0" counter name eth0_out nft add rule inet filter output oifname "eth1" counter name eth1_out
-
fwmark 标记:配合策略路由使用,标记来自某路由表的流量
nft add rule inet filter output meta mark 0x100 counter name path_a nft add rule inet filter output meta mark 0x200 counter name path_b
-
源/目的 IP 或端口组合:用于按业务或租户分流后的监控
nft add rule inet filter forward ip saddr 10.10.1.0/24 oifname "ppp0" counter
⚠️ 注意:若使用 bonding 模式(如 balance-tlb),同一连接可能固定走某物理口,但连接间会分散——此时
oifname仍有效;而bond0接口本身无法区分子路径,需在 slave 接口上抓包或计数。
多路径流量监控的实用配置要点
-
启用 per-rule 计数器并命名,便于后续读取统计
nft add rule inet filter forward iifname "br0" oifname "eth0" counter name to_eth0 nft add rule inet filter forward iifname "br0" oifname "eth1" counter name to_eth1
查看:
nft list chain inet filter forward -a→ 输出含counter pkts ... bytes ...和 handle 编号。 -
结合集合(set)动态管理监控目标
例如定义“关键业务IP池”,统一打标计数:nft add set inet filter critical_ips { type ipv4_addr\; } nft add element inet filter critical_ips { 192.168.5.10, 192.168.5.11 } nft add rule inet filter forward ip saddr @critical_ips oifname "ppp0" counter name critical_ppp0 -
避免重复计数:确保规则顺序合理,用
jump或goto分流到专用监控链,而非堆叠条件chain monitor_paths { meta mark 0x100 counter name path_a_traffic meta mark 0x200 counter name path_b_traffic meta mark 0x300 counter name path_c_traffic return } 导出指标供 Prometheus 抓取(需配套脚本)
利用nft --json list ruleset解析 counter 值,或用nft monitor trace实时跟踪特定标记流量(调试用)。
与策略路由协同构建可监控的多出口系统
真正实现“按路径监控”,推荐组合:
- 用
ip rule+ip route将不同业务流量导向不同路由表(如 table 100、200) - 在对应路由表中设置默认网关指向不同物理出口
- 用
ip rule fwmark 0x100 lookup 100绑定标记与路由表 - 在应用或代理层(如 Envoy、iptables/nftables)对连接打 fwmark
- nftables 仅需监听
meta mark和oifname,即可精准归因流量路径并计数
这样,监控不再依赖接口吞吐,而是基于业务意图(标记)和路由决策结果,稳定性更高、可审计性强。
不复杂但容易忽略:nftables 的计数器是原子累加、无锁设计,高并发下也准确;但需定期采集快照做差值,才能得到速率(bps/pps)。直接读 counter 得到的是累计值。











