實在找不到VPN應該發現哪一個版塊.於是就先發到這裡吧..
本文原理是:PPTPD的VPN用戶.在VPN撥號完成後.伺服器使用TC自動將撥號用戶與VPN伺服器之間的連接進行分組限速.當然.在VPN用戶斷開連接后.限速取消...
先是安裝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
現在我們要實現分組給VPN用戶限制...本例是分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] >>/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] >>/tmp/tc.log
$RUN >>/tmp/tc_run.log
exit 0
完成...
本文只是將我的一些文檔.代碼共享出來..可能照著安裝會有不少問題...
不懂的話...再與我本人聯繫吧..
我的QQ是67052
MSN和EMAIL都是67052@qq.com
一年前的文章..當時只在內部交流..現在公開給大家.
解釋一下...那腳本中的代碼變數$NUM是很重要的...我想了很久才想到用這個方法來對每一個連接的TC限制代碼規則起來...
我使用了組別+IP尾數來區別...
這樣的話..也就要求每一個內網IP都只能對應一個用戶...而每一個用戶只能登陸一次...
否則...本限制系統會混亂的...
[火星人 ] PPTPD+TC實現VPN用戶帶寬限制已經有470次圍觀