首页/系统/Linux 内核与性能调优速查/nftables flowtable 快速转发
网络栈调优98 条

nftables flowtable 快速转发

转发与 NAT 场景下, flowtable 让已建立连接绕过完整协议栈路径, 以软件方式加速转发。

flowtable 是什么

flowtable 是 nftables 提供的快速转发机制:对已建立的连接在入口侧建立流表项,后续报文直接绕过完整的协议栈转发路径,以软件方式提升转发性能。它只对经过本机转发的流量有意义,终结在本机的流量没有可加速的路径。

基本信息

适用场景网关、路由与 NAT 转发角色
依赖条件内核对 flowtable 的支持与足够的 nftables 版本
建表nft add table inet fast
建 flowtablenft '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 相关规则,恢复原有转发配置

易错点

  • 在只终结本地流量的服务器上配置,没有可加速的转发路径,白做工
  • devices 或 hook 写错,规则报错或被静默忽略而不生效
  • 把 flowtable 当成安全策略的替代品,忽略了原有过滤链仍然必要
  • 配置后不做吞吐与连接跟踪验证,无法确认是否真正生效

数据来源与参考

  • nftables 官方 wiki flowtable 章节
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌