遇到 nf_conntrack: table full, dropping packet 报错,说明连接跟踪表已满,新连接被内核主动丢弃——这不是网络拥塞或硬件问题,而是 conntrack 资源耗尽的明确信号。处理需兼顾“快速止血”和“长期稳定”,不能只调大上限就完事。立即缓解:先清空、再扩容生产环境出现持续丢包时,优先恢复业务: 用 sudo conntrack -f 清空当前所有连接记录(注意:会中断所有依赖 conntrack 的 nat 和 stateful 规则的连接,如 snat/dnat、带 --state established 的 iptables 规则) 更稳妥的做法是清理异常状态条目:例如 sudo conntrack -d --state invalid 或按协议清理 sudo conntrack -d -p tcp --dport 8080 临时扩大上限防二次满:执行 sudo sysctl -w net.netfilter.nf_conntrack_max=1048576(数值按内存估算,1gb内存约支撑200万条) 确认生效:conntrack -c 查当前用量,cat /proc/sys/net/netfilter/nf_conntrack_max 查上限值精准定位:查清谁占满了表盲目扩容治标不治本,必须知道哪些连接在堆积: 看总量和占比:cat /proc/sys/net/net

遇到 nf_conntrack: table full, dropping packet 报错,说明连接跟踪表已满,新连接被内核主动丢弃——这不是网络拥塞或硬件问题,而是 conntrack 资源耗尽的明确信号。处理需兼顾“快速止血”和“长期稳定”,不能只调大上限就完事。
立即缓解:先清空、再扩容
生产环境出现持续丢包时,优先恢复业务:
- 用
sudo conntrack -F清空当前所有连接记录(注意:会中断所有依赖 conntrack 的 NAT 和 stateful 规则的连接,如 SNAT/DNAT、带 --state ESTABLISHED 的 iptables 规则) - 更稳妥的做法是清理异常状态条目:例如
sudo conntrack -D --state INVALID或按协议清理sudo conntrack -D -p tcp --dport 8080 - 临时扩大上限防二次满:执行
sudo sysctl -w net.netfilter.nf_conntrack_max=1048576(数值按内存估算,1GB内存约支撑200万条) - 确认生效:
conntrack -C查当前用量,cat /proc/sys/net/netfilter/nf_conntrack_max查上限值
精准定位:查清谁占满了表
盲目扩容治标不治本,必须知道哪些连接在堆积:
- 看总量和占比:
cat /proc/sys/net/netfilter/nf_conntrack_count和cat /proc/sys/net/netfilter/nf_conntrack_max - 统计协议分布:
conntrack -L | awk '{print $3}' | sort | uniq -c | sort -nr(重点关注 tcp、udp、icmp 占比) - 查高频目的端口:
conntrack -L | grep "dport=" | awk '{print $10}' | sort | uniq -c | sort -nr | head -10 - 观察是否大量 TIME_WAIT 或 UNREPLIED 状态堆积(常见于客户端不发 FIN 或后端响应慢)
长效调优:缩超时 + 减跟踪 + 控入口
真正降低 conntrack 压力,靠三类协同动作:
-
缩短关键超时:把默认 5 天的 established 超时(432000 秒)大幅下调,例如设为
net.netfilter.nf_conntrack_tcp_timeout_established = 3600(1 小时),time_wait 缩至60秒 -
禁用非必要 ALG:若不用 SIP、FTP、TFTP 等协议,卸载对应模块:
sudo modprobe -r nf_conntrack_sip nf_conntrack_ftp,并在/etc/modprobe.d/blacklist.conf中加入blacklist nf_conntrack_sip -
对确定流量绕过跟踪:例如纯转发且无 NAT/firewalld 规则的流量,加 raw 表规则:
iptables -t raw -A PREROUTING -p tcp --dport 80 -j NOTRACK
架构级规避:从源头减少依赖
某些场景下,conntrack 本身就是瓶颈,应考虑替代路径:
- Docker/Kubernetes 环境中启用 Cilium 或 eBPF 网络插件,可完全绕过 iptables + conntrack 链路
- 负载均衡器后端节点若仅做 L4 转发、不依赖连接状态做策略,可评估关闭
nf_conntrack模块(需确认防火墙策略是否改用无状态方式) - 应用层开启 HTTP Keep-Alive、复用 TCP 连接,从源头减少短连接数量
- 高并发 API 网关类服务,考虑用硬件负载均衡或支持连接池的代理(如 Envoy)分担连接管理压力











