什么是 conntrack UDP 超时
开启连接跟踪(netfilter conntrack)后,内核为每条流量维护一份状态条目。UDP 无连接语义,条目靠超时老化:net.netfilter.nf_conntrack_udp_timeout 控制普通 UDP 会话的存活时间,nf_conntrack_udp_timeout_stream 控制被判定为“有双向流量”的长会话(音视频、QUIC 等)。超时过长会堆积大量死条目,过短则会在会话仍在通信时回收条目,导致 NAT 映射失效、回包被丢弃。
基本信息
| 参数路径 | net.netfilter.nf_conntrack_udp_timeout / ..._udp_timeout_stream |
|---|---|
| 单位 | 秒 |
| 普通值参考 | 常见 30 秒 |
| 长会话参考 | 常见 120 秒或更长 |
| 观测 | conntrack -S、/proc/sys/net/netfilter/nf_conntrack_count |
| 前提 | 需要装载 nf_conntrack 相关模块 |
典型使用场景
- NAT 网关后的语音视频卡顿:确认长 UDP 会话条目是否被提前回收
- 连接跟踪表打满:核对表中条目构成与各协议的存活时间
- 高并发 UDP 服务调优:在内存占用与映射稳定性之间取平衡
- 故障复盘:确认回包丢失是否由 NAT 映射消失引起
- 与 TCP 超时参数一起核对,形成完整的老化策略
查看与调整
查看与调整
sysctl net.netfilter.nf_conntrack_udp_timeout
sysctl net.netfilter.nf_conntrack_udp_timeout_stream
sysctl net.netfilter.nf_conntrack_count net.netfilter.nf_conntrack_max
conntrack -S | head -10 # 各协议的统计
conntrack -L -p udp 2>/dev/null | head -5 # 查看 UDP 条目(需 conntrack-tools)
# 调整示例(先记录原值):sysctl -w net.netfilter.nf_conntrack_udp_timeout=60两个参数的分工
| 参数 | 覆盖对象 | 调整影响 |
|---|---|---|
| udp_timeout | 普通单向或短 UDP 流 | 缩短可释放表容量,过长则堆积死条目 |
| udp_timeout_stream | 双向持续通信的长会话 | 过短会中断音视频与 QUIC 类流量 |
| nf_conntrack_max | 表容量上限 | 仅调超时不解决容量不足 |
| tcp 相关超时项 | TCP 各状态存活时间 | 需与 UDP 策略整体评估 |
先确认丢包是否真由 conntrack 引起:抓包看回包是否到达网卡却在防火墙处被丢弃,或观察条目计数是否出现快速增删,再动超时参数。
缩短超时会让长 UDP 会话在通信过程中被回收,NAT 映射随之失效,表现为通话中断或周期性丢包,这类故障排查成本很高。
动参数前先确认网关是否真的依赖连接跟踪:只有无状态转发而没有状态化规则的场景,这些超时项可能根本不起作用,改了也看不到效果。