031-老男孩教育每日一题-如何解决 kernel: nf_conntrack: table full, dropping packet.

运维每日一题

问题:dmesg或/var/log/messages 出现 kernel: nf_conntrack: table full, dropping packet.

什么问题?如何解决?

解答:nf_conntrack: table full, dropping packet.意思为网络过滤器连接跟踪器netfilter connect tracker的跟踪表满了table full 无法跟踪连接,kernel内核就只能丢弃无法计入跟踪表的包

上述状况会让业务访问很慢!各种网络服务耗时大幅上升,各种 timed out,各种丢包,完全无法正常提供服务。排除收到攻击 的情况。大并发业务场景下,开防火墙很容易出现这种问题。

解决方法1:关闭防火墙服务,卸载模块

解决方法2:修改内核参数/etc/sysctl.conf,完成后需要sysctl -p 更新参数 但是流量特别大还是会满的。

解决方法3(非常用方法):使用raw表,跳过跟踪记录。

首先先认识下什么是raw表?做什么用的?

iptables有5个链:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING,4个表:filter,nat,mangle,raw 。

4个表的优先级由高到低的顺序为:raw–>mangle–>nat–>filter

举例来说:如果PRROUTING链上,即有mangle表,也有nat表,那么先由mangle处理,然后由nat表处理 。

RAW表只使用在PREROUTING链和OUTPUT链上,因为优先级最高,从而可以对收到的数据包在连接跟踪前进行处理。一但用户使用了RAW表,在某个链上,RAW表处理完后,将跳过NAT表和 ip_conntrack处理,即不再做地址转换和数据包的链接跟踪处理了。
RAW表可以应用在那些不需要做nat的情况下,以提高性能。如大量访问的web服务器,可以让80端口不再让iptables做数据包的链接跟踪处理,以提高用户的访问速度 。

使用方法:
(1)改/etc/sysconfig/iptables 文件中的-A INPUT -m state –state RELATED,ESTABLISHED, UNTRACKED -j ACCEPT 行。增加”UNTRACKED”,保存并restart iptables
注意: 必须更改此步,增加”UNTRACKED“,否则执行后面的语句会造成相应的端口不能访问。我使用该方法时就因为没有执行第一步的操作,造成web访问不能使用。
(2)增加以下语句

今天是老男孩教育每日一题陪伴大家的第31天。

对于题目和答案的任何疑问,请在博客评论区留言。

往期题目索引

https://www.drscrewdriver.com/100.html

 

继续阅读