实在找不到×××应该发现哪一个版块.于是就先发到这里吧..

本文原理是:PPTPD的×××用户.在×××拨号完成后.服务器使用TC自动将拨号用户与×××服务器之间的连接进行分组限速.当然.在×××用户断开连接后.限速取消...

先是安装PPTPD+MYSQL+RADIUS..这个请大家参考CU高人的文章..说得十分详细..
http://bbs.chinaunix.net/viewthread.php?tid=698651&extra=page%3D2%26amp%3Bfilter%3Ddigest
http://bbs.chinaunix.net/viewthread.php?tid=698650&extra=page%3D2%26amp%3Bfilter%3Ddigest
http://bbs.chinaunix.net/viewthread.php?tid=698648&extra=page%3D2%26amp%3Bfilter%3Ddigest

现在我们要实现分组给×××用户限制...本例是分5组...
分别是:
100K/S     最高下载速度在12K左右
500K/S     最高下载速度在60K左右
2M/S         最高下载速度在220K左右
5M/S         最高下载速度在600K左右
无限制

当然以上的速度是可以在下文中相应位置调整..

在安装好PPTPD+MYSQL+RADIUS后...
我们的设计是这样的...
使用不同的内网IP段来实现分组区别..
比如第一组我们用
192.168.11.X
第二组用.
192.168.12.X
.
.
这样.是用于我们限速脚本来识别区分...
我们先是要用TC为服务器做一些初始化...就是设置分组限制的具体速度...
本例的脚本是:


tc qdisc add dev eth0 root handle 2:0 htb default 1
tc class add dev eth0 parent 2:0 classid 2:1 htb rate 100Mbit burst 15k
tc class add dev eth0 parent 2:1 classid 2:10 htb rate 5Mbit burst 15k
tc class add dev eth0 parent 2:1 classid 2:20 htb rate 2000kbit ceil 2Mbit burst 15k
tc class add dev eth0 parent 2:1 classid 2:30 htb rate 500kbit ceil 500kbit burst 15k
tc class add dev eth0 parent 2:1 classid 2:40 htb rate 100kbit ceil 100kbit burst 15k
tc qdisc add dev eth0 parent 2:10 handle 10: sfq perturb 10
tc qdisc add dev eth0 parent 2:20 handle 20: sfq perturb 10
tc qdisc add dev eth0 parent 2:30 handle 30: sfq perturb 10
tc qdisc add dev eth0 parent 2:40 handle 40: sfq perturb 10

..
然后我们就需要在PPTPD的拨号脚本上添加智能识别,并添加TC操作的脚本..
file: /etc/ppp/ip-up 
在exit 0;前面添加


IP_groupa=192.168.11
IP_groupb=192.168.12
IP_groupc=192.168.13
IP_groupd=192.168.14
IP=`expr match "$5" '\(..........\)'`
NUM=`expr match "$5" '.*\.\(.*\)'`

case "$IP" in
                "$IP_groupa" )
                NUM=100$NUM
                RUN="tc filter add dev eth0 protocol ip parent 2:0 prio $NUM u32 match ip dst $6/32 flowid 2:10"
                ;;

                "$IP_groupb" )
                NUM=200$NUM
                RUN="tc filter add dev eth0 protocol ip parent 2:0 prio $NUM u32 match ip dst $6/32 flowid 2:20"
                ;;

                "$IP_groupc" )
                NUM=300$NUM
                RUN="tc filter add dev eth0 protocol ip parent 2:0 prio $NUM u32 match ip dst $6/32 flowid 2:30"
                ;;

                "$IP_groupd" )
                NUM=400$NUM
                RUN="tc filter add dev eth0 protocol ip parent 2:0 prio $NUM u32 match ip dst $6/32 flowid 2:40"
    ;;
esac

echo [$RUN][$5][$6][pptpd-up] >>/tmp/tc.log
$RUN >>/tmp/tc_run.log

exit 0

而在ip-down也同样添加以下代码


IP_groupa=192.168.11
IP_groupb=192.168.12
IP_groupc=192.168.13
IP_groupd=192.168.14
IP=`expr match "$5" '\(..........\)'`
NUM=`expr match "$5" '.*\.\(.*\)'`

case "$IP" in
                "$IP_groupa" )
                NUM=100$NUM
                run="tc filter del dev eth0 protocol ip parent 2:0 prio $NUM u32 match ip dst $6/32 flowid 2:10"
                ;;

                "$IP_groupb" )
                NUM=200$NUM
                run="tc filter del dev eth0 protocol ip parent 2:0 prio $NUM u32 match ip dst $6/32 flowid 2:20"
                ;;

                "$IP_groupc" )
                NUM=300$NUM
                run="tc filter del dev eth0 protocol ip parent 2:0 prio $NUM u32 match ip dst $6/32 flowid 2:30"
                ;;

                "$IP_groupd" )
                NUM=400$NUM
                run="tc filter del dev eth0 protocol ip parent 2:0 prio $NUM u32 match ip dst $6/32 flowid 2:40"
    ;;
esac
echo [$run][$5][$6][pptpd-down] >>/tmp/tc.log
$RUN >>/tmp/tc_run.log

exit 0

完成...
[67052 at qq.com]
本文只是将我的一些文档.代码共享出来..可能照着安装会有不少问题...
不懂的话...再与我本人联系吧..