本质是内核连接跟踪表溢出导致新连接被丢弃,需分两步处理:应急止血(清空invalid/unreplied条目、临时扩容至131072并同步调整buckets)、长期调优(notrack精简跟踪、缩短udp/icmp超时、持久化配置并监控告警)。

遇到 nf_conntrack: table full, dropping packet 导致突发丢包,本质是内核连接跟踪表溢出,新连接被直接丢弃。这不是DNS或应用层问题,而是底层网络状态跟踪机制的容量瓶颈,需分“应急止血”和“配置调优”两步处理。
立即缓解:清空无效连接 + 临时扩容
避免业务中断,优先清理无用条目并快速提升上限:
- 只删除无效或未应答连接(安全):
conntrack -D --state INVALID,UNREPLIED - 查看当前最大容量:
sysctl net.netfilter.nf_conntrack_max - 临时扩大至131072(适合中高并发):
sysctl -w net.netfilter.nf_conntrack_max=131072 - 同步调整哈希桶数量(建议为 max 的 1/4):
sysctl -w net.netfilter.nf_conntrack_buckets=32768
定位异常源:识别高频新建连接IP或端口
表满往往由扫描、重连风暴或短连接滥用引发,需主动排查:
- 统计连接数最多的源IP:
conntrack -L | awk '{print $7}' | cut -d= -f2 | sort | uniq -c | sort -nr | head -10 - 检查特定服务端口(如HTTP)连接量:
conntrack -L | grep "dport=80\|dport=443" | wc -l - 确认是否为攻击或客户端异常后,用 iptables 限流:
iptables -A INPUT -s 192.168.1.100 -m connlimit --connlimit-above 50 -j DROP
长期优化:精简跟踪范围 + 调整超时参数
避免反复扩容,从源头减少条目生成和驻留时间:
- 对明确无需状态跟踪的流量(如内部健康检查、静态资源)添加 NOTRACK:
iptables -t raw -A PREROUTING -p tcp --dport 8080 -j NOTRACK - 缩短 UDP 和 ICMP 连接超时(默认 30 秒太长):
sysctl -w net.netfilter.nf_conntrack_udp_timeout=30sysctl -w net.netfilter.nf_conntrack_icmp_timeout=6 - 若服务器仅做 DNAT/SNAT 且不依赖连接状态,可卸载非必要模块:
modprobe -r nf_conntrack_ftp nf_conntrack_sip
持久化配置与监控闭环
临时命令重启即失效,必须固化;同时建立监控防止复发:
- 将关键参数写入
/etc/sysctl.conf:net.netfilter.nf_conntrack_max = 131072net.netfilter.nf_conntrack_buckets = 32768
执行sysctl -p生效 - 在 Prometheus + Grafana 中监控:
node_nf_conntrack_entries(当前条目数)node_nf_conntrack_entries_limit(上限)
设置告警阈值为 80% - 定期检查
/proc/net/nf_conntrack条目分布,关注 ESTABLISHED 占比是否异常偏低(提示连接生命周期过短)











