【教學】這個 script 可以配合 QoS 做到每個 ip 限流

顯示結果從第 1 筆 到 4 筆,共計 4 筆
  1. #1
    會員
    註冊日期
    2006-07-09
    所在地區
    學網
    討論區文章
    2

    【教學】這個 script 可以配合 QoS 做到每個 ip 限流

    這是我拿來作宿舍網路用的,需要另外裝 qos, imq 和 l7-filter plugin, 這樣 kernel 才會支援.

    當然您也可以使用 qos plugin, 但因為我啟用 imq1, 所以你的 qos.sh 裏面的
    insmod imq numdevs=1 >/dev/null 2>&1 要改成
    insmod imq numdevs=2 >/dev/null 2>&1

    這樣就可以和原來的模組和平相處

    我不常上這個站,有問題可以 mail 給我討論
    dbtsai at phys.ncku.edu.tw

    語法:
    ###################################################
    #           Qos scripts with L7-filter Incoming   
    #						       					
    #     by 蔡東邦   2006/06/20       台大物理
    ###################################################
    
    # 定義下傳控制所使用的設備
    DEV=imq1
    GREENDEV=eth0
    REDDEV=eth1
    
    # For each ip
    IPUP=70      # 每個 ip 可以分到的上傳速度 
    IPDN=512      # 每個 ip 可以分到的下傳速度
    IPSTART=150   # 要限速的開始 ip
    IPEND=155
    
    ######################
    # 列出目前 QOS 狀態並離開
    ######################
    
    if [ "$1" = "status" ]
    then
    	echo "############### Download ###################"
            echo "[qdisc]"
            tc -s qdisc show dev $GREENDEV
    
            echo ""
            echo "[class]"
            tc -s class show dev $GREENDEV
    
            echo ""
            echo "[filter]"
            tc -s filter show dev $GREENDEV
    
            echo ""
    	 echo "############### Upload ###################"
    	
    	 echo "[qdisc]"
            tc -s qdisc show dev $DEV
    
            echo ""
            echo "[class]"
            tc -s class show dev $DEV
    
            echo ""
            echo "[filter]"
            tc -s filter show dev $DEV
    
            echo ""
    
            echo "###########Download iptables##############"
            iptables -t mangle -L QOS-IP-IN -v -x 2> /dev/null
    	
            echo "############Upload iptables###############"
            iptables -t mangle -L QOS-IP-OUT -v -x 2> /dev/null
    
            exit
    fi
    
    
    ######################
    # stop it and exit 
    ######################
     
    #清除所有舊的規則
    tc qdisc del dev $DEV root    2> /dev/null > /dev/null
    tc qdisc del dev $GREENDEV root    2> /dev/null > /dev/null
    iptables -t mangle -D POSTROUTING -o $GREENDEV -j QOS-IP-IN 2> /dev/null > /dev/null
    iptables -t mangle -D PREROUTING  -i $DEV -j QOS-IP-OUT 2> /dev/null > /dev/null
    iptables -t mangle -D QOS-IP-OUT -j IMQ --todev 1 >/dev/null 2>&1
    iptables -t mangle -F QOS-IP-IN 2> /dev/null > /dev/null
    iptables -t mangle -X QOS-IP-IN 2> /dev/null > /dev/null
    iptables -t mangle -F QOS-IP-OUT 2> /dev/null > /dev/null
    iptables -t mangle -X QOS-IP-OUT 2> /dev/null > /dev/null
    
    ip link set imq1 down 2> /dev/null > /dev/null
    
    if [ "$1" = "stop" ] 
    then 
            echo "Qos per IP Stop on $DEV."
            exit
    fi
    
    
    ######################
    # 開始執行 QOS 控制 (預設)
    ######################
    
    insmod imq numdevs=2 >/dev/null 2>&1
    insmod ipt_IMQ >/dev/null 2>&1
    
    ip link set imq1 up 
    
    #定義最頂層規則
    tc qdisc add dev $GREENDEV root handle 100: hfsc default 10 #上傳
    tc qdisc add dev $DEV root handle 200: hfsc default 10      #下載
    
    #定義總頻寬
    tc class add dev $GREENDEV parent 100: classid 100:1 hfsc sc rate 100000kbit ul rate 100000kbit
    tc class add dev $DEV parent 200: classid 200:1 hfsc sc rate 100000kbit ul rate 100000kbit
    
    #第一組類別 : 100:10 此為預設類別
    tc class add dev $GREENDEV parent 100:1 classid 100:10 hfsc sc umax 1500b dmax 50ms rate 200kbit ul rate 200kbit
    tc class add dev $DEV parent 200:1 classid 200:10 hfsc sc umax 1500b dmax 50ms rate 10kbit ul rate 50kbit
    #第二組類別 : 100:20 此為到 gateway 的類別
    tc class add dev $GREENDEV parent 100:1 classid 100:20 hfsc sc umax 1500b dmax 30ms rate 10000kbit ul rate 100000kbit
    tc class add dev $DEV parent 200:1 classid 200:20 hfsc sc umax 1500b dmax 30ms rate 10000kbit ul rate 100000kbit
    
    # 對每個 ip 設控制
    for (( i=$IPSTART; i<=$IPEND; i++ ))
    do
    nu=$(($i+1000))
    tc class add dev $GREENDEV parent 100:1 classid 100:$nu hfsc sc umax 1500b dmax 50ms rate 50kbit ul rate ${IPDN}kbit
    nu2=$(($i+2000))
    tc class add dev $DEV parent 200:1 classid 200:$nu2 hfsc sc umax 1500b dmax 50ms rate 5kbit ul rate ${IPUP}kbit
    done
    
    
    tc filter add dev $GREENDEV parent 100: prio 7 protocol ip handle 1510 fw flowid 100:10 
    tc filter add dev $GREENDEV parent 100: prio 1 protocol ip handle 1520 fw flowid 100:20
    tc filter add dev $DEV parent 200: prio 7 protocol ip handle 2510 fw flowid 200:10 
    tc filter add dev $DEV parent 200: prio 1 protocol ip handle 2520 fw flowid 200:20
    
    # 對每個 ip 設控制
    for (( i=$IPSTART; i<=$IPEND; i++ ))
    do
    nu=$(($i+1000))
    tc filter add dev $GREENDEV parent 100: prio 2 protocol ip handle $nu fw flowid 100:$nu
    nu2=$(($i+2000))
    tc filter add dev $DEV parent 200: prio 2 protocol ip handle $nu2 fw flowid 200:$nu2
    done
    
    # 增加 QOS-IN chain 到 mangle table
    # 這裡開始過濾單一 ip 限速
    iptables -t mangle -N QOS-IP-IN  
    iptables -t mangle -I POSTROUTING -o $GREENDEV -j QOS-IP-IN
    
    iptables -t mangle -N QOS-IP-OUT
    iptables -t mangle -I PREROUTING -i $GREENDEV -j QOS-IP-OUT
    iptables -t mangle -A QOS-IP-OUT -j IMQ --todev 1
    
    # 不限制到 gateway 速度 and Ping
    iptables -t mangle -A QOS-IP-OUT -d 192.168.1.1  -j MARK --set-mark 2520
    iptables -t mangle -A QOS-IP-OUT -d 192.168.1.1  -j RETURN
    iptables -t mangle -A QOS-IP-OUT -s 192.168.1.1  -j MARK --set-mark 2520
    iptables -t mangle -A QOS-IP-OUT -s 192.168.1.1  -j RETURN
    iptables -t mangle -A QOS-IP-IN -s 192.168.1.1  -j MARK --set-mark 1520
    iptables -t mangle -A QOS-IP-IN -s 192.168.1.1  -j RETURN
    iptables -t mangle -A QOS-IP-IN -d 192.168.1.1  -j MARK --set-mark 1520
    iptables -t mangle -A QOS-IP-IN -d 192.168.1.1  -j RETURN
    
    iptables -t mangle -A QOS-IP-IN -p icmp -j MARK --set-mark 1520
    iptables -t mangle -A QOS-IP-IN -p icmp -j RETURN 
    iptables -t mangle -A QOS-IP-OUT -p icmp -j MARK --set-mark 2520
    iptables -t mangle -A QOS-IP-OUT -p icmp -j RETURN 
    
    # 對每個 ip 設控制
    for (( i=$IPSTART; i<=$IPEND; i++ ))
    do
    nu=$(($i+1000))
    iptables -t mangle -A QOS-IP-IN -d 192.168.1.$i  -j MARK --set-mark $nu
    iptables -t mangle -A QOS-IP-IN -d 192.168.1.$i  -j RETURN
    nu2=$(($i+2000))
    iptables -t mangle -A QOS-IP-OUT -s 192.168.1.$i  -j MARK --set-mark $nu2
    iptables -t mangle -A QOS-IP-OUT -s 192.168.1.$i  -j RETURN
    done



  2. #2
    我是嫩咖
    註冊日期
    2001-02-26
    所在地區
    FTTH 50M/5M 固定+50M/5M浮動 + MOD + KOD
    討論區文章
    7,619

    回覆: 【教學】這個 script 可以配合 QoS 做到每個 ip 限流

    老是聽說Linux有多強、有多神、有多猛!
    不過都只有看到讚賞,沒看到實作!
    總算有先進願意分享實作心得了!
    謝謝你的分享!更期待你的下次大作和網友們的回饋!
    ∼一雙冷眼看人生;滿腔熱血酬知己∼

    P.S.你可以叫我「阿斌」或「Alan」,請不要叫我mis339,謝謝。

  3. #3
    會員
    註冊日期
    2005-04-18
    所在地區
    專線,ADSL,FTTB,FTTH
    討論區文章
    125

    回覆: 【教學】這個 script 可以配合 QoS 做到每個 ip 限流

    GOOD 不錯的技術分享. 加油!!

    不輸給酷學員及鳥哥討論區.

    提個小小問題建議.
    是否可以設計傳參數,單獨設定某一個IP的頻寬.或刪除某一個IP的設定.
    但不是重新RELOAD喔,因為已經設定過的IP不用再設定了.

    這個功能就是所謂的即時功能,也就是很多討論區找不到的答案.

    加油加油

  4. #4
    陳小明
    註冊日期
    2004-01-28
    所在地區
    ADSL
    討論區文章
    30

    回覆: 【教學】這個 script 可以配合 QoS 做到每個 ip 限流

    引用 作者:mis339
    老是聽說Linux有多強、有多神、有多猛!
    不過都只有看到讚賞,沒看到實作!
    總算有先進願意分享實作心得了!
    謝謝你的分享!更期待你的下次大作和網友們的回饋!
    339大大,這句話真是貼切又實際,Linux還真被一堆傢伙給說神了。只差一個瓶子與拉環,不然都可以當飛行器了。還是這篇文章實際多了,這兩天回老家時再試測,先謝謝版大。

類似的主題

  1. 【求助】有辦法做到 CPU%低於多少 執行Script嗎?
    作者:laker 所在討論版:-- FreeBSD & Linux 討 論 版
    回覆: 4
    最後發表: 2005-10-21, 10:24 PM
  2. 【求助】Linux可以配合的硬件...
    作者:ysb2000 所在討論版:-- FreeBSD & Linux 討 論 版
    回覆: 9
    最後發表: 2004-01-01, 12:11 AM
  3. 「快速發表一篇新主題」的欄寬縮小以配合800x600
    作者:FYI 所在討論版:-- 站 務 公 告 與 建 議 版
    回覆: 3
    最後發表: 2001-11-22, 10:35 AM
  4. 哪一家的IP分享器可以做到IP Mapping ?
    作者:luecat 所在討論版:-- 網 路 硬 體 版
    回覆: 27
    最後發表: 2001-08-05, 11:16 PM

 

tc 限速 單一ip

發表文章規則

  • 不可以發表新主題
  • 不可以回覆文章
  • 不可以上傳附加檔案
  • 不可以編輯自己的文章
  •