≡ 典典 - 单机游戏攻略 ≡'s Archiver

admin 发表于 2006-8-23 13:58

在做NAT的机器上处理ip_conntrack满的方法

[quote]
0~(zM,S2d conntrack 表满的处理方法 q1n L&Xu
前段时间配置的iptables+squid做的proxy server ,一直工作正常。今天我上控制台上发现
9zk3URfwv&? Jun 18 12:43:36 red-hat kernel: ip_conntrack: table full, dropping packet.
D`e,jK&U1W Jun 18 12:49:51 red-hat kernel: ip_conntrack: table full, dropping packet.
:pf$GNJh] Jun 18 12:50:57 red-hat kernel: ip_conntrack: table full, dropping packet. 2`mH/~'s(` r:wTd U
Jun 18 12:57:38 red-hat kernel: ip_conntrack: table full, dropping packet. #F,xB-Y$W;P~9I.|g
+z7]#G uG2g)G x {
IP_conntrack表示连接跟踪数据库(conntrack database),代表NAT机器跟踪连接的数目,连接跟踪表能容纳多少记录是被一个变量控制的,它可由内核中的ip- sysctl函数设置。每一个跟踪连接表会占用350字节的内核存储空间,时间一长就会把默认的空间填满,那么默认空间时多少?我以redhat为例在内存为64MB的机器上时4096,内存为128MB是 8192,内存为256MB是16376,那末就能在/proc/sys/net/ipv4/ip_conntrack_max里查看、设置。
8F&`!N gP,VZ z 例如:增加到81920,可以用以下命令:
_]P-v*b/Om:\ ew_1g t echo "81920" > /proc/sys/net/ipv4/ip_conntrack_max
/o!oo$RpV\,c +U#l0b7reA
那样设置是不会保存的,要重启后保存可以在/etc/sysctl.conf中加: e {.X8T&b HG
net.ipv4.ip_conntract_max =81920
7lSstd Z 按照此方法改变后一切正常,要是在满了可以加大其值.
Gq%B4^si )t"usG]?|
说明:
|2~o4R{FU3_x 在Linux kernel 2.4.23版本前,使用:
*x\'v4|Fm*_ # cat /proc/sys/net/ipv4/ip_conntrack_max%dd@,I"q L:zg.|$qR
2o7{Oh oV
在Linux kernel 2.4.23版本后,使用:
T}m:J |,}I$f # cat /proc/sys/net/ipv4/netfilter/ip_conntrack_max;I.fj C~2o]A
(旧的 /proc/sys/net/ipv4/ip_conntrack_max是不建议使用的!)
9uGV8K+w [/quote]xc(JS?
P5|S'rU/w(w

6StX&q}E0H Q4r [color=Red]完美的解决方法如下:阿典总结 [/color]
3PK4g%FSpf8y7U\V Tb[6K7GD
[color=Navy]同时修改:无效连接保存时间和保存数目的大小。 具体如下:
.Wz!z$[-C,|:N1R ^2E 1E9g},kie&j
echo "81920" > /proc/sys/net/ipv4/netfilter/ip_conntrack_max GEM5jD1MM,cm$KJ
echo "21600" > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_establishedz m B7Oa5|6m

+P\3t qpez%V0i #修改默认的无效连接数目为:81920 条[j}$SzZk2Q/pg
#修改默认时间为:6 小时
a0} M MT B1S xB } 建议:把上面2行加入/etc/rc.d/rc.local文件,去掉后面的说明吧。
q-fD'cRY5n8v !T*\(Ny:mD1l f4r
这个参数是连接超时,默认超时时间是5天,也就是432000秒,现在把它改成21600,就是6小时,在6小时后清除掉无效的连接
:K C0sp5^vDA0U 过几天就出现iptables full是说hash表已经被占满了,里面包括许多超时的连接,这其中基本100%已经是无效的了。q!k6L0Z G UP*P
DDS?q
上面这行用来调整超时,对已经建立的连接无效,已经建立的超时连接会在5天期满以后自动清除掉。所以你最好是在空闲的时候重新启动一下机器。可以把上面这一句写在/etc/rc.d/rc.local文件里,每次启动自动执行一下。[/color]

admin 发表于 2006-9-20 16:16

:handshake

页: [1]

Powered by Discuz! Archiver 7.0.0  © 2001-2009 Comsenz Inc.