今天有台下载服务器出问题,丢包很严重,重启后看系统日志,很多“kernel: ip_conntrack: table full, dropping packet.”
网上搜索了一下,用hping解决
http://www.hping.org/download.html
./configure
make
make install
安装后写一个script.
代码:
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 $1 ] ; then
exit
fi
grep -E "^tcp .{10,25}ESTABLISHED src=$1 " /proc/net/ip_conntrack | while read line ; do
S_IP=`echo $line | awk '{print substr($5,5)}'`
S_SOCK=`echo $line | awk '{print substr($7,7)}'`
D_IP=`echo $line | awk '{print substr($6,5)}'`
D_SOCK=`echo $line | awk '{print substr($8,7)}'`
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
保存为clr_conns.sh
用:
sh clr_conns.sh x.x.x.x
就可以清除显示的连接.
摘自:中国Linux论坛
查看ip_conntrack前几位IP
cat /proc/net/ip_conntrack | cut -d ' ' -f 10 | cut -d '=' -f 2 | sort | uniq -c | sort -nr | head -n 5
http://blog.csdn.net/zhy97031/archive/2007/07/12/1686598.aspx
摘自Iptables 指南 1.1.19
当一个连接在两个方向上都有传输时,conntrack记录就删除[UNREPLIED]标志,然后重置。在末尾有 [ASSURED]的记录说明两个方向已没有流量。这样的记录是确定的,在连接跟踪表满时,是不会被删除的,没有[ASSURED]的记录就要被删除。连接跟踪表能容纳多少记录是被一个变量控制的,它可由内核中的ip- sysctl函数设置。默认值取决于你的内存大小,128MB可以包含8192条目录,256MB是16376条。你也可以在 /proc/sys/net/ipv4/ip_conntrack_max里查看、设置。
像:
[root@mailserver root]# sysctl -a|grep conntrack_max
net.ipv4.ip_conntrack_max = [color=red]65528[/color]
[root@mailserver root]# free
[color=red] total[/color] used free shared buffers cached
Mem: [color=red]1027724 [/color] 1016160 11564 208 151676 767880
-/+ buffers/cache: 96604 931120
Swap: 1024056 0 1024056
-------------------------------------------------------------------------------------------------