Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1326062
  • 博文数量: 436
  • 博客积分: 7854
  • 博客等级: 少将
  • 技术积分: 3225
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-18 16:30
文章分类

全部博文(436)

文章存档

2013年(2)

2012年(56)

2011年(70)

2010年(308)

分类: LINUX

2010-03-11 20:03:33

這是我拿來作宿舍網路用的,需要另外裝 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
阅读(1175) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~