Linux 服务器出现大量 “nf_conntrack: table full, dropping packet” 如何快速临时缓解

13次阅读

立即增大conntrack表容量并清理无效连接可快速止血:临时调.net.netFilter.nf_conntrack_max(如131072),再执行conntrack -D –state INVALID,UNREPLIED释放空间,同时定位高频源IP限速封禁。

Linux 服务器出现大量 “nf_conntrack: table full, dropping packet” 如何快速临时缓解字节),128K 条目约需 40–50MB 内存。

快速清理陈旧/无效连接记录

清空部分“僵死”连接能立即释放空间,尤其适用于短连接突发或存在大量 TIME_WaiT/UNREPLIED 状态的情况:

  • 清空整个表(谨慎,会中断所有 NAT 连接)sudo conntrack -F
  • 更安全的做法:只删除超时的、未建立的连接sudo conntrack -D --state INVALID,UNREPLIED
  • 若使用 firewalld,也可执行 sudo firewall-cmd --direct --remove-rules ipv4 filter OUTPUT 后重载(仅在规则干扰时考虑)

检查并限制高频小包连接源

表满常是攻击或异常客户端导致,需快速定位源头:

  • 查当前连接最多 IPsudo conntrack -L | awk '{print $7}' | cut -d= -f2 | sort | uniq -c | sort -nr | head -20
  • 配合 iptables 限速封禁(临时应急)sudo iptables -I input -s x.x.x.x -m limit --limit 5/sec --limit-burst 10 -j ACCEPT && sudo iptables -A INPUT -s x.x.x.x -j DROP
  • 关注是否大量来自 docker 容器、kubernetes nodePort 或健康检查探针(如 http 204 响应后不关闭连接)

验证与观察

操作后必须确认是否缓解:

  • 持续监控:watch -n 1 'conntrack -S | grep -E "(entries|searched|invalid)"'
  • 检查日志是否停止刷屏:sudo dmesg -t | grep "table full" | tail -5
  • 观察网络是否恢复通顺,特别是 SNAT/NAT 场景下的出向连接

临时缓解只是第一步,后续需分析 conntrack 超限根因——比如长连接未及时回收、nf_conntrack_tcp_be_liberal 未开启、或业务存在连接复用缺失等问题。

text=ZqhQzanResources