現象:ip_conntrack: table full, dropping packet.
解決方法:
IP_conntrack表示連接跟蹤數據庫(conntrack database),代表NAT機器跟蹤連接的數目,連接跟蹤表能容納多少記錄是被一個變量控制的,它可由內核中的ip- sysctl函數設置。每一個跟蹤連接表會占用350字節的內核存儲空間,時間一長就會把默認的空間填滿,那么默認空間時多少?我以redhat為例在內存為64MB的機器上時4096,內存為128MB是 8192,內存為256MB是16376,那末就能在/proc/sys/net/ipv4/ip_conntrack_max里查看、設置。
例如:增加到81920,可以用以下命令:
echo "81920" > /proc/sys/net/ipv4/ip_conntrack_max
那樣設置是不會保存的,要重啟后保存可以在/etc/sysctl.conf中加:
net.ipv4.ip_conntract_max =81920
按照此方法改變后一切正常,要是在滿了可以加大其值.
修改/proc/sys/net/ipv4/下的一些參數...不讓連接存活的時間過長,因為很多都只是http,短連接接到響應就關閉連接了,但是ip_conntrack仍然需要保存
下載hping:
http://www.hping.org/download.html
./configure
make
make install
安裝后寫一個script:
代碼:
[code:1:204710b32b]
#!/bin/bash
echo
echo "############################"
echo "# Edit by Youngh 2003.06.24 v1.1 "
echo "# Usage : clr_conns IpAddress"
echo "# This will clear all connections from this IP_Address"
echo "# Example:/root/clr_conns 10.0.3.3 "
echo "############################"
echo
if [ -z ] ; then
exit
fi
grep -E "^tcp .ESTABLISHED src= " /proc/net/ip_conntrack | while read line ; do
S_IP=`echo $line | awk ''`
S_SOCK=`echo $line | awk ''`
D_IP=`echo $line | awk ''`
D_SOCK=`echo $line | awk ''`
echo "$S_IP:$S_SOCK $D_IP:$D_SOCK"
hping2 $D_IP -R -s $S_SOCK -p $D_SOCK -a $S_IP -k -c 1 >/dev/null 2>/dev/null &
done
[/code:1:204710b32b]
保存為clr_conns.sh
用:
sh clr_conns.sh x.x.x.x
就可以清除顯示的連接.