问题现象
监控报警,发现ping有持续丢包,ifconfig看到网卡dripped:xx 一直在增加,messages日志有以下内容
出现原因是ip_conntrack表满导致的,iptables开启后会加载ip_conntrack模块,来跟踪包。默认情况下ip_conntrack_max大小为65536,nf_conntrack
在CentOS 5 / kernel
解决方法
关闭防火墙或者清除防火墙规则,简单粗暴,直接有效
增加ip_conntrack表大小优化系统参数
查看ip_conntrack最大大小:
查看当前ip_conntrack大小:
状态跟踪表的最大行数的设定,理论最大值 CONNTRACK_MAX = RAMSIZE (in bytes) / 16384 / (ARCH / 32)
以64G的64位操作系统为例,CONNTRACK_MAX = 64*1024*1024*1024/16384/2 = 2097152
相关系统参数调优
sysctl -p 使其生效
这种解决方案,需要在每次iptables重启后,都要执行一遍sysctl -p, 也可以将sysctl -p写入到iptables启动脚本中。 不过ip_conntrack满的隐患还是存在的。
不加载ip_conntrack模块
防火墙不加载任何额外模块 编辑/etc/sysconfig/iptables-config
配置文件
删除nf_conntrack和相关的依赖模块
禁用追踪模块,把它加入黑名单/etc/modprobe.d/blacklist.conf
/etc/sysconfig/iptables 不要配置状态的规则
优化conntrack模块,请参考下面文章
http://wiki.khnet.info/index.php/Conntrack_tuning
http://blog.yorkgu.me/wp-content/uploads/2012/02/netfilter_conntrack_perf-0.8.txt