1.现象

在/var/log/message中出现以下信息

Dec  8 11:22:29 product08 kernel: nf_conntrack: table full, dropping packet.
Dec 8 11:22:29 product08 kernel: nf_conntrack: table full, dropping packet.

2.nf_conntrack是什么?

nf_conntrack(在老版本的 Linux 内核中叫 ip_conntrack)是一个内核模块,用于跟踪一个连接的状态的。连接状态跟踪可以供其他模块使用,最常见的两个使用场景是 iptables 的 nat 的 state 模块。
iptables 的 nat 通过规则来修改目的/源地址,但光修改地址不行,我们还需要能让回来的包能路由到最初的来源主机。这就需要借助 nf_conntrack 来找到原来那个连接的记录才行。
而 state 模块则是直接使用 nf_conntrack 里记录的连接的状态来匹配用户定义的相关规则。例如下面这条 INPUT 规则用于放行 80 端口上的状态为 NEW 的连接上的包。

iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT

3.解决方案

(1)先关掉iptables

/etc/init.d/iptables stop

(2)查看当前的连接数:

# grep nf_conntrack /proc/slabinfo

(3)查出目前 nf_conntrack 的排名:

$ cat /proc/net/nf_conntrack | cut -d ' ' -f 10 | cut -d '=' -f 2 | sort | uniq -c | sort -nr | head -n 10

(4)优化参数

状态跟踪表的最大行数的设定,理论最大值 CONNTRACK_MAX = RAMSIZE (in bytes) / 16384 / (ARCH / 32)
以64G的64位操作系统为例,CONNTRACK_MAX = 64*1024*1024*1024/16384/2 = 2097152

即时生效请执行:
sysctl –w net.netfilter.nf_conntrack_max = 524288 (16G)

其哈希表大小通常为总表的1/8,最大为1/2。CONNTRACK_BUCKETS = CONNTRACK_MAX / 8
同样64G的64位操作系统,哈希最佳范围是 262144 ~ 1048576 。

运行状态中通过 sysctl net.netfilter.nf_conntrack_buckets 进行查看,通过文件 /sys/module/nf_conntrack/parameters/hashsize 进行设置
或者新建 /etc/modprobe.d/iptables.conf ,重新加载模块才生效:
options nf_conntrack hashsize = 262144

还有些相关的系统参数`sysctl -a | grep nf_conntrack`可以调优(/etc/sysctl.conf ):
net.netfilter.nf_conntrack_max = 1048576
net.netfilter.ip_conntrack_tcp_timeout_established = 3600
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120

(5)iptables放行

iptables -t raw -A PREROUTING -p tcp -m multiport --dports 80,15000 -j NOTRACK
iptables -t raw -A PREROUTING -p tcp -m multiport --sports 80,15000 -j NOTRACK
iptables -t raw -A OUTPUT -p tcp -m multiport --dports 80,15000 -j NOTRACK
iptables -t raw -A OUTPUT -p tcp -m multiport --sports 80,15000 -j NOTRACK

最新文章

  1. css重置reset.css
  2. Visual Studio Code编写HTML
  3. java利用jxl操作Excel
  4. poj1458 dp入门
  5. LoRaWAN_stack移植笔记(一)--RF硬件相关
  6. Spring+SpringMVC+MyBatis深入学习及搭建(十六)——SpringMVC注解开发(高级篇)
  7. JDBCTemplate
  8. A Simple Math Problem(矩阵快速幂)(寒假闭关第一题,有点曲折啊)
  9. 【转】Entity Framework 5.0系列之约定配置
  10. scala学习笔记4(apply方法)
  11. 生成git,ssh的key
  12. PostgreSQL 自动输入密码(转)
  13. Maven编译错误记录:Some Enforcer rules have failed
  14. centos 7 jenkins 部署
  15. Django FBV/CBV、中间件、GIT使用
  16. 第六章并发编程,异步执行框架executor
  17. eBay:美国各州最受欢迎的产品品类
  18. 修改tomcat的Response Hearder 头中的Server信息
  19. Spoken English Practice(1、This is between you and me, Don't let it out. 2、Don't let your dreams be dreams, no matter how hard it gets, say to yourself, I'm going to make it.)
  20. Excel导出失败的提示

热门文章

  1. javascript simple MVC
  2. Web Services 概要
  3. 目标跟踪之klt---光流跟踪法
  4. 大量数据导入导致mysql自动重启
  5. ios -WKWebView 高度 准确,留有空白的解决方案
  6. <转载> Jquery的性能优化-实用!
  7. poj3177Redundant Paths tarjan缩点
  8. Python简单分布式爬虫
  9. Cocos2d-x Lua Node与Node层级架构
  10. “线程安全的” Dictionary(TKey,TValue)