读书人

linux:透过tc对ppp连接自动进行流量控

发布时间: 2012-07-03 13:37:43 作者: rapoo

linux:通过tc对ppp连接自动进行流量控制

tc是基于linux内核的,英文原形应该是Traffic Control,linux都是自带的,无需安装

?

一般服务器在接到客户端ppp连接的请求时,就需要去调用ppp进程来建立ppp连接,而ppp每次连接的时候,都会运行/etc/ppp/目录下的ip-up脚本(Centos、Ubuntu都是一样的),当连接断开的时候,也会调用该目录下的ip-down脚本。所以你就可以在这两个脚本中加入tc流控规则。

?

当然,tc规则都是基于ppp连接的,而不是基于服务器网卡的,所以就需要知道每个ppp连接的网卡名称(device name)。那ppp在调用ip-up和ip-down的时候,肯定都知道这些参数的

?

Centos的ip-up脚本里引用了$1、$6这两个参数

?

然后进行vpn拨号一下,就会发现/var/log/ip-up.log有如下内容:

echo "$current_time The ppp connect $1 UP!"
echo "--------------> Gateway of $1 : $4"
echo "--------------> IP address of $1 : $5"
echo "--------------> Source ip of $1 : $6"
/bin/sh /etc/ppp/tcppp $1 (调用tc流控脚本,有$1作为参数)
else
echo "$current_time ERROR:The traffic control script $file_path was NOT FOUND!"
fi
} >> $log_path? (所有的echo输出都会重定向到这)
?

?

二、添加tc流控脚本

?

为了方便,就把流控脚本也放到了/etc/ppp目录下,脚本内容如下

(保险起见,再次删除之前的tc规则)
tc qdisc add dev "$eth" root handle 2: htb default 10??
(以ppp0为根,新建tc规则)
tc class add dev "$eth" parent 2: classid 2:1 htb rate 100mbit ceil 100mbit??
(意思一下总带宽,没太大作用)
tc class add dev "$eth" parent 2:1 classid 2:10 htb rate "$band"mbit burst "$band"mbit ceil "$band"mbit cburst "$band"mbit prio 1
?? (限制速度,rate:总链路忙碌时占用带宽? ceil:总链路空闲时占用带宽,限制带宽大小为变量band的值,这个脚本即2mbit)
echo "--------------> OK!"
exit 0
}


if [ -z "$eth" ];then
usage;
else
tc_rule;
fi

?

其实,关键tc命令就那么几条,起流控作用的就那三条,当然,也可以浓缩为两条

tc class add dev "$eth" parent 1: classid 1:1 htb rate "$band"mbit burst "$band"mbit ceil "$band"mbit cburst "$band"mbit prio 1

?

没有tc filter过滤规则,通过default x来设置默认作用的规则。当然,可以使用u32过滤器进行扩展,进行更加精确的匹配流控

?

对于burst、cburst设置并发参数的,这个最好是设置大一些,如果你的流量在10M以上,而burst参数用默认的话,就会出现并发带宽不够而无谓的丢包,从而使速率下降。这个值我是设置的跟rate一样大,也可以准确的流控

?

?

三、修改ip-down脚本

?

这个就完全是扫尾工作了,当ppp连接断开的时候,清除掉tc规则

在ip-down脚本添加如下内容即可


} >> "$log_path"

?

ok,差不多就这些了

?

?

一些常用的查看tc状态的命令

?

tc -s qdisc ls dev eth0 查看eth0流控统计情况

?

tc -s -d qidsc show dev ppp0 查看ppp0 qdisc的统计情况

?

tc -s -d class show dev ppp0 查看ppp0 class的统计情况

?

tc -s -d filter show dev ppp0 查看ppp0 filter的统计情况

读书人网 >UNIXLINUX

热点推荐