Маркиране на българския и международен трафик, за по лесно шейпване.
от Илия Няголов на май.29, 2009, категории Мрежата
Нещо доста елементарно, но пък ценно!
Интернет трафика го получавам през два vlan-а , през единия българския трафик, а през другия международния трафик и го посрещам посредством два рутера. За по-лесно шейпване го маркирам на двата рутера и го подавам към терминалите, посредством ToS битовете.
Малко информация за ToS - Type of Service (Тип на услугата). Използва се, за да могат да се използват различни пътища за пакети с различни ToS полета.
На рутера за българския трафик, правя следното.
#mark bg traffic
$IPTABLES -t mangle -A FORWARD -o eth2 -j TOS –set-tos 0×08
На рутера за международен трафик, правя следното.
#mark int traffic
$IPTABLES -t mangle -A FORWARD -o eth2 -j TOS –set-tos 0×10
На терминалите правя следното.
############
if (($main::speed_in1) or ($main::speed_in2)){
# in = receive out = transmit
push @FW_ACTIONS, “$TC qdisc del dev $INTERFACE root”;
#push @FW_ACTIONS, “echo ‘$TC qdisc del dev $INTERFACE root’ >> $tc_log”;push @FW_ACTIONS, “$TC qdisc add dev $INTERFACE root handle 1: htb default 20″;
#push @FW_ACTIONS, “echo ‘$TC qdisc add dev $INTERFACE root handle 1: htb default 20′ >> $tc_log”;push @FW_ACTIONS, “$TC class add dev $INTERFACE parent 1: classid 1:1 htb rate “. $main::speed_in_sum .”kbit”;
#push @FW_ACTIONS, “echo ‘$TC class add dev $INTERFACE parent 1: classid 1:1 htb rate “. $main::speed_in_sum .”kbit’ >> $tc_log”;
}
########################
if ($main::speed_in1) {
push @FW_ACTIONS, “$TC class add dev $INTERFACE parent 1:1 classid 1:10 htb rate “. $main::speed_in1 .”kbit”;
#push @FW_ACTIONS, “echo ‘$TC class add dev $INTERFACE parent 1:1 classid 1:10 htb rate “. $main::speed_in1 .”kbit’ >> $tc_log”;push @FW_ACTIONS, “$TC filter add dev $INTERFACE protocol ip parent 1: prio 10 u32 match ip tos 0×10 0xff flowid 1:10″;
#push @FW_ACTIONS, “echo ‘$TC filter add dev $INTERFACE protocol ip parent 1: prio 10 u32 match ip tos 0×10 0xff flowid 1:10′ >> $tc_log”;}
if ($main::speed_in2) {
push @FW_ACTIONS, “$TC class add dev $INTERFACE parent 1:1 classid 1:20 htb rate “. $main::speed_in2 .”kbit”;
#push @FW_ACTIONS, “echo ‘$TC class add dev $INTERFACE parent 1:1 classid 1:20 htb rate “. $main::speed_in2 .”kbit’ >> $tc_log”;push @FW_ACTIONS, “$TC filter add dev $INTERFACE protocol ip parent 1: prio 20 u32 match ip tos 0×08 0xff flowid 1:20″;
#push @FW_ACTIONS, “echo ‘$TC filter add dev $INTERFACE protocol ip parent 1: prio 20 u32 match ip tos 0×08 0xff flowid 1:20′ >> $tc_log”;
}
Забележка: показал съм само част от скрипта за идеята, но не целия! Всеки който поне малко разбира ще разбере за какво иде реч
.
Ето и ефекта от цялата работа.
В едната конзола изпълнявате следната команда:
# ping gbg.bg
PING gbg.bg (212.73.129.164) 56(84) bytes of data.
64 bytes from gbg.bg (212.73.129.164): icmp_seq=1 ttl=5 time=28.2 ms
64 bytes from gbg.bg (212.73.129.164): icmp_seq=2 ttl=5 time=6.26 ms
64 bytes from gbg.bg (212.73.129.164): icmp_seq=3 ttl=5 time=30.2 ms
— gbg.bg ping statistics —
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 6.260/21.590/30.235/10.871 ms
а в другата следното и наблюдаваме.
# tcpdump -i ppp0 -p icmp -v
tcpdump: listening on ppp0, link-type LINUX_SLL (Linux cooked), capture size 96 bytes
15:50:14.709786 IP (tos 0×0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84) 212.10.21.251 > gbg.bg: ICMP echo request, id 21520, seq 1, length 64
15:50:14.738039 IP (tos 0×8, ttl 5, id 43343, offset 0, flags [none], proto ICMP (1), length 84) gbg.bg > 212.10.21.251: ICMP echo reply, id 21520, seq 1, length 64
15:50:15.711463 IP (tos 0×0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84) 212.10.21.251 > gbg.bg: ICMP echo request, id 21520, seq 2, length 64
15:50:15.717703 IP (tos 0×8, ttl 5, id 43344, offset 0, flags [none], proto ICMP (1), length 84) gbg.bg > 212.10.21.251: ICMP echo reply, id 21520, seq 2, length 64
15:50:16.712681 IP (tos 0×0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84) 212.10.21.251 > gbg.bg: ICMP echo request, id 21520, seq 3, length 64
15:50:16.742896 IP (tos 0×8, ttl 5, id 43345, offset 0, flags [none], proto ICMP (1), length 84) gbg.bg > 212.10.21.251: ICMP echo reply, id 21520, seq 3, length 64
юни 30th, 2009 on 11:51 pm
Маркирането на трафика е доста полезно, обаче аз се сблъсквам със следния проблем. Маркирал съм межуднародни трафик и посредством snmp си чертая графики за вътрешните vlan-и за трафик, обаче така чертая за целия трафик. Някаква идея как да извличам само трафика по tos? Предпочиам да не си играя с iptables за тази цел.