這是我拿來作宿舍網路用的,需要另外裝 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
書籤