Делене на трафика по ToS(DSCP)
31 декември, 2009 – 2:02 pmЕдна полезна и хубава статия за делене на трафик от Добромир Галинов Добрев

Да предположим, че получавате вашия трафик от 2 vlan-a, 1 за българския и 1 за международния трафик.
Правите следното нещо за да маркирате пакетите:
/sbin/iptables -A PREROUTING -t mangle -i ${int_interface -j DSCP –set-dscp 0x2e
С тази команда току що сложихте ToS(0×0) за българския и ToS(0xb8) за международния.
Вие пускате на вашият клиент български и международен по 1 vlan, но не знаете как да разграничите скоростите? Ето един лесен вариант:
/sbin/tc class add dev ${client_vlan) parent 1: classid 1:1 htb rate 100Mbit(общ капацитет)
/sbin/tc class add dev ${client_vlan) parent 1:1 classid 1:30 htb rate \
70Mbit ceil 70Mbit prio 0
/sbin/tc qdisc add dev ${client_vlan) parent 1:30 sfq perturb 10
/sbin/tc filter add dev ${client_vlan) protocol ip parent 1:0 prio 1 u32 \
match ip tos 0×0(български трафик) 0xff flowid 1:30
/sbin/tc class add dev ${client_vlan) parent 1:1 classid 1:31 htb rate \
30Mbit ceil 30Mbit prio 0
/sbin/tc qdisc add dev ${client_vlan) parent 1:31 sfq perturb 10
/sbin/tc filter add dev ${client_vlan) protocol ip parent 1:0 prio 1 u32 \
match ip tos 0xb8(международен трафик) 0xff flowid 1:31
Това е само за даунлинк трафика, можете да шейпнете ъплинк трафика на клиента по същия начин, но използвайки ingress( аз не маркирам международен и ползвам общ ъплинк шейп)
/sbin/tc filter add dev ${client_vlan) parent ffff: protocol ip prio 7 u32 match ip dst 0.0.0.0/0 police rate 50Mbit burst 128k drop flowid :1
Така вашият клиент вече не може да се възползва от по-ниския ви межународен трафик
Ето вариант да следите колко български и международен прави рисувайки проста графика:
Добавяме следните таблици:
/sbin/iptables -t mangle -N CLIENT_OUT
/sbin/iptables -t mangle -A PREROUTING -j CLIENT_IN
/sbin/iptables -t mangle -A POSTROUTING -j CLIENT_OUT
/sbin/iptables -t mangle -A CLIENT_IN -m dscp –dscp 0×0 -j RETURN -o ${client_vlan)
/sbin/iptables -t mangle -A CLIENT_OUT -m dscp –dscp 0×0 -j RETURN -i ${client_vlan)
/sbin/iptables -t mangle -A CLIENT_IN -m dscp –dscp 0x2e -j RETURN -o ${client_vlan)
/sbin/iptables -t mangle -A CLIENT_OUT -m dscp –dscp 0x2e -j RETURN -i ${client_vlan)
По този начин виждате колко бг и международен трафик прави вашият клиент и със помощта на туулове като rrdtool/mrtg можете да го следите.
Надявам се да съм бил полезен.
Послепис: По този начин можете да маркирате не само български/международен, но и всякакъв трафик:
/usr/sbin/iptables -A POSTROUTING -t mangle -s 192.168.0.0/16 -j DSCP –set-dscp 0x0d
/usr/sbin/iptables -A POSTROUTING -t mangle -s 10.0.0.0/8 -j DSCP –set-dscp 0x0d
/usr/sbin/iptables -A POSTROUTING -t mangle -s 169.254.0.0/16 -j DSCP –set-dscp 0x0d
/usr/sbin/iptables -A POSTROUTING -t mangle -s 172.16.0.0/12 -j DSCP –set-dscp 0x0d
—-
Маркиране на локалния трафик и просто добавяте следния ред в шейп скрипта:
100Mbit ceil 100Mbit(като разбутвате главния клас да е 200Mbps) prio 0
/sbin/tc qdisc add dev ${client_vlan} parent 1:32 sfq perturb 10
/sbin/tc filter add dev ${client_vlan} protocol ip parent 1:0 prio 1 u32 \
match ip tos 0×34(dscp 0x0d) 0xff flowid 1:32
Линкове:
Sorry, comments for this entry are closed at this time.