flowtable 是什么
flowtable 是 nftables 提供的快速转发机制:对已建立的连接在入口侧建立流表项,后续报文直接绕过完整的协议栈转发路径,以软件方式提升转发性能。它只对经过本机转发的流量有意义,终结在本机的流量没有可加速的路径。
基本信息
| 适用场景 | 网关、路由与 NAT 转发角色 |
|---|---|
| 依赖条件 | 内核对 flowtable 的支持与足够的 nftables 版本 |
| 建表 | nft add table inet fast |
| 建 flowtable | nft 'add flowtable inet fast f { hook ingress priority 0; devices = { eth0, eth1 }; }' |
| 关键点 | devices 列表必须与真实转发拓扑一致 |
典型使用场景
- 软件网关转发性能不足,用流表减少每包的处理开销
- NAT 网关在连接数很高时降低协议栈负担
- 路由器的转发热点优化,降低 CPU 占用
- 容器宿主做跨网转发时评估流表收益
- 对比启用前后的转发吞吐与 CPU 使用率变化
配置示例
配置示例
nft add table inet fast
nft 'add flowtable inet fast f { hook ingress priority 0; devices = { eth0, eth1 }; }'
nft 'add chain inet fast fwd { type filter hook forward priority 0; policy accept; }'
nft 'add rule inet fast fwd ip protocol { tcp, udp } flow add @f'
nft list ruleset | grep -A5 flowtable # 确认流表已经建立与常规转发的差别
| 对比项 | 常规转发 | 启用 flowtable |
|---|---|---|
| 处理路径 | 每个报文都走完整协议栈 | 已建立连接绕过部分处理 |
| 适用流量 | 本机流量与转发流量 | 仅转发流量受益 |
| 配置位置 | forward 链上的策略 | flowtable 的 hook 与 devices |
使用注意
- 设备名与拓扑必须匹配,写错会导致规则报错或不生效
- 流表只覆盖已识别的连接,首包仍走常规路径
- 纯服务端角色上配置没有收益,因为没有转发路径可加速
- 改动后要实测转发吞吐与连接跟踪行为是否正常
flowtable 工作在入口 hook,报文进入转发路径之前就已分流,因此它不会替代原有的 forward 链策略,两者是配合关系而不是替代关系。
虚拟化环境中若转发实际由网桥或虚拟交换层完成,宿主机上再配 flowtable 可能找不到对应路径,配置前先确认流量实际走向。
验证与回退
- 用 nft list ruleset 确认 flowtable 与转发规则都已建立
- 压测对比启用前后的转发吞吐与 CPU 使用率变化
- 确认连接跟踪与 NAT 行为没有受到影响
- 异常时删除 flowtable 相关规则,恢复原有转发配置