经典案例
  • 巢倍滋
  • 中国化玻试剂网
  • 武汉利楚商务服务有限公司
  • 斯华帝
  • 大黄风
  • 名表汇
  • 湖北宜红茶业有限公司
  • 东莞至美广告装饰设计有限公司
  • 山东樱旺食品有限公司
WONMAY 常见问题

CentOS ip_conntrack: table full, dropping packet 的解决方法

发布于:2014-10-28 20:25:00 作者:admin 点击:

服务器dmesg发现很多服务器错误ip_conntrack: table full, dropping packet,错误现象 如下:
dmesg | more
ip_conntrack: table full, dropping packet.
printk: 2414 messages suppressed.
ip_conntrack: table full, dropping packet.
printk: 2234 messages suppressed.
ip_conntrack: table full, dropping packet.
printk: 2181 messages suppressed.
ip_conntrack: table full, dropping packet.
ip_conntrack: table full, dropping packet.
ip_conntrack: table full, dropping packet.
ip_conntrack: table full, dropping packet.
eth0: port 55(tap-vifvm270.0) entering disabled state
eth0: port 55(tap-vifvm270.0) entering disabled state
device tap-vifvm270.0 left promiscuous mode
eth0: port 55(tap-vifvm270.0) entering disabled state
eth0: port 56(vifvm270.0) entering disabled state
device vifvm270.0 left promiscuous mode
eth0: port 56(vifvm270.0) entering disabled state
device vifvm270.0 entered promiscuous mode
device tap-vifvm270.0 entered promiscuous mode
eth0: port 56(tap-vifvm270.0) entering forwarding state
eth0: port 56(tap-vifvm270.0) entering disabled state
eth0: port 56(tap-vifvm270.0) entering forwarding state
ip_conntrack: table full, dropping packet.
ip_conntrack: table full, dropping packet.
ip_conntrack: table full, dropping packet.
ip_conntrack: table full, dropping packet.
ip_conntrack: table full, dropping packet.
IP_conntrack原理:
IP_conntrack表示连接跟踪数据库(conntrack database),代表NAT机器跟踪连接的数目,连接跟踪表能容纳多少记录是被一个变量控制的,它可由内核中的ip- sysctl函数设置。每一个跟踪连接表会占用350字节的内核存储空间,时间一长就会把默认的空间填满.
查看当前连接数:
[root@www.ctohome.com]# cat /proc/sys/net/ipv4/netfilter/ip_conntrack_count 
120406
wc -l /proc/net/ip_conntrack  (不推荐,但数量很大的时候,会占用大量cpu资源,增加服务器负载)
9344 /proc/net/ip_conntrack
服务器错误ip_conntrack: table full, dropping packet解决办法
echo 180 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established
echo 65536> /proc/sys/net/ipv4/netfilter/ip_conntrack_max
echo 120   > /proc/sys/net/ipv4/neigh/default/gc_stale_time
echo 1024 > /proc/sys/net/ipv4/neigh/default/gc_thresh1
echo 4096 > /proc/sys/net/ipv4/neigh/default/gc_thresh2
echo 8192 > /proc/sys/net/ipv4/neigh/default/gc_thresh3
特别注意,不要盲目增加ip_conntrack_max,一般默认的65536个链接就已经足够,盲目增加会导致内存开支过大,而且可能很快也会爆满。(65536个链接大约需要1GB内存)重要的是,需要找到导致这么多链接的原因!另外ip_conntrack_tcp_timeout_established默认是保持连接5天时间,改成180的意思是3小时。

或vi /etc/sysctl.conf
net.ipv4.ip_conntrack_max = 322560
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 180

再sysctl -p

查找导致这么多ip_conntrack链接的原因:
[root@www.ctohome.com]#  cat /proc/sys/net/ipv4/netfilter/ip_conntrack_count
65536
[root@www.ctohome.com]#  cat  /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established 
180
cat /proc/net/ip_conntrack  目测可疑IP和端口,然后用iptables封掉
有时候看不出真实源头,可先记录日志,参考:
iptables -D FORWARD -p udp --dport 53 -m state --state NEW -j LOG --log-prefix "cto_domain_dns "
iptables -I FORWARD -d 79.138.140.122 -p tcp -m state --state NEW -j LOG --log-prefix "cto_find_issue "
然后查看日志tail -f /var/log/messages,分析出真实源头,再把真实源头屏蔽掉
如: iptables -I FORWARD -s 50.2.6.12 -p udp --sport 53 -j DROP
 

tag标签:centosip_conntrack
------分隔线----------------------------
------分隔线----------------------------
[相关文章]