歡迎您光臨本站 註冊首頁

PPTPD+TC實現VPN用戶帶寬限制

←手機掃碼閱讀     火星人 @ 2014-03-04 , reply:0

實在找不到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次圍觀

http://coctec.com/docs/service/show-post-19436.html