最近收到Iptables服务器报警"nf_conntrack: table full, dropping packet."。经过对日志分析,最终将问题解决了。给大家分享一下。


问题分析:

ip_conntrack是linux NAT的一个跟踪连接条目的模块,与Iptables相关,ip _conntrack模块会使用一个哈希表记录 tcp 通讯协议的 established connection记录,当这个哈希表满了的时候,便会导致nf_conntrack: table full, dropping packet错误,由于该物理机运行多虚拟机,哈希表满的几率很大。 


处理办法:

处理方法有两种。

  1. 修改/etc/modprobe.d/nf_conntrack.conf配置并关闭iptables服务:

more    /etc/modprobe.d/nf_conntrack.conf

wKiom1OunH_ifpMcAAAxzWICCsA919.jpg

开启options  nf_conntrack hashsize=131072 调整nf_conntrack表大小。

service  iptables  stop

chkconfig iptables  off


2.修改/etc/sysctl.conf中ip_conntrack的值

net.netfilter.nf_conntrack_max = 655350  #设置最大跟踪连接数655350,该设置会增大内存开销。

net.netfilter.nf_conntrack_tcp_timeout_established = 300 #设置跟踪连接保存5小时。

sysctl  -p


3.总结

   防火墙有条件交给上层硬件设备完成会更好,使用系统防火墙一定要做调优;如果不需要防火墙的跟踪功能,规则简单的可以开启NOTRACK选购,条件允许的情况下就删除它。