iptables nat 很慢 很卡

kevin.Zhu 发布于:2013-1-16 1:09 分类:Iptables  有 17 人浏览,获得评论 0 条  

http://www.kankanews.com/ICkengine/archives/97617.shtml


解决问题:

方案一:

不要使用iptables,就不会有这种问题,当然那不太安全

方案二:

通过修改hashsize从而修改nf_conntrack_max(内核2.6.19及以前的ip_conntrack_max)

但要注意这个数值并非随意设定,要根据实际内存的情况,原则如下:

HASHSIZE = CONNTRACK_MAX / 8 = RAMSIZE (in bytes) / 131072 = RAMSIZE (in MegaBytes) * 8

内存大小比如2048M,hashsize = 2048*8 =16384,通常我在这个数值进行相对保守的设定,会在这个基础上再乘以0.75,也就是hashsize = 2048*8*0.75 = 12288

centos 6.1 (内核 2.6.19)及以前

echo "options ip_conntrack hashsize=12288" >> /etc/modprobe.conf

centos 6.1 (内核 2.6.19)以后

echo "options nf_conntrack hashsize=12288" >> /etc/modprobe.d/local.conf

然后重启服务器


声明:OSCHINA 博客文章版权属于作者,受法律保护。未经作者同意不得转载。



http://c20031776.blog.163.com/blog/static/68471625201352431052163/



一、概念

====================

-允许的最大跟踪连接条目:CONNTRACK_MAX(默认值是 2^16=65536 )
-存储跟踪连接条目列表的哈西表的大小:HASHSIZE
-每个哈西表的条目(叫一个bucket),包含了一个链接起来的跟踪连接条目
-哈希表大小HASHSIZE,表现为 条目bucket的多少,在iptables启动时在日志中会显示。

图表形象解释:

例如,系统默认配置下,启动 iptables 时的信息如下:

ip_conntrack version 2.4 (8192 buckets, 65536 max) - 304 bytes per conntrack

二、实战:调大 conntrack_max 参数(2.6内核)

========================================

1)增大 ip_conntrack_max(设置为 2^20,默认值是 2^16=65536)

# vi /etc/sysctl.conf

net.ipv4.ip_conntrack_max = 1048576

2)增大 hashsize (在i386架构上,HASHSIZE = CONNTRACK_MAX / 8

# vi /etc/modprobe.conf

options ip_conntrack hashsize=131072

然后重启 iptables 服务,在 messages中可以看到参数已生效:

# service iptables restart

# tail /var/log/messages
Feb 27 04:02:02 dispatcher syslogd 1.4.1: restart.
Feb 27 17:45:01 dispatcher auditd[3924]: Audit daemon rotating log files
Mar  1 11:47:13 dispatcher kernel: Removing netfilter NETLINK layer.
Mar  1 11:47:13 dispatcher kernel: ip_tables: (C) 2000-2006 Netfilter Core Team
Mar  1 11:47:13 dispatcher kernel: Netfilter messages via NETLINK v0.30.
Mar  1 11:47:13 dispatcher kernel: ip_conntrack version 2.4 (131072 buckets, 1048576 max) - 228 bytes per conntrack

注:只修改 net.ipv4.ip_conntrack_max = 1048576 ,重启iptables服务,messages信息中 (8192 buckets, 65536 max) 不变。

PS:动态调整

=============

Since 2.6.14, 不但可以动态调整ip_conntrack_max值,还可以动态调整hashsize值(after boot and module load),但不会永久保存,重启iptables服务就又变回8192去了.

Between 2.6.14 and 2.6.19 (included), use:

# echo $HASHSIZE > /sys/module/ip_conntrack/parameters/hashsize
# echo $CONNTRACK_MAX > /proc/sys/net/ipv4/ip_conntrack_max

Since 2.6.20, use:

# echo $HASHSIZE > /sys/module/nf_conntrack/parameters/hashsize
# echo $CONNTRACK_MAX > /proc/sys/net/ipv4/ip_conntrack_max