Kontrola ruchu/przepustowości za pomocą tcng
Mieszko Kaczmarczyk
linux_mdk w wp.pl
Pią, 28 Maj 2010, 23:36:32 CEST
Dnia piątek 28 maj 2010 o 13:30:05 Piotr Kakietek napisał(a):
> Chcę aby pasmo było dynamicznie, na przykład:
> - mam połączenie 5 Mbit/s duplex z intenetem (eth0)
> - sieć eth2 ma współczynnik rate ustawiony na 4 Mbit/s a ceil
> 5Mbit/s, - sieć eth3 ma współczynnik rate ustawiony na 1 Mbit/s a
> ceil 5Mbit/s,
>
> Teraz, przykładowo w pewnej chwili eth2 wysysa 5Mbit/s i wchodzi
> połączenie na eth3 (które ma przepustowość 1Mbit/s).
>
> Jak to zaimplementować w tcng lub tc aby te dwa interfejsy
> wsþółdzieliły połączenie czyli nasza rurę 5Mbit/s?
Poszukaj opisów HTB/shapera/IMQ itd.
Ja uzywam rcthb
tu fragmenty mojego skryptu:
# INTERFEJS eth1 (ruch przychodzacy)
/sbin/rchtb_tc qdisc add dev eth1 root handle 1:0 htb default 1 r2q 1
# G��wna klasa dla eth1
/sbin/rchtb_tc class add dev eth1 parent 1:0 classid 1:1 htb rate 1Mbit
ceil 1Mbit
# Podzial na pasmo dla lacza internetowego i reszte
/sbin/rchtb_tc class add dev eth1 parent 1:0 classid 1:2 htb rate
$max_total ceil $max_total
# /sbin/rchtb_tc class add dev eth1 parent 1:1 classid 1:3 htb rate
98367kbit ceil 98367kbit prio 9
/sbin/rchtb_tc qdisc add dev eth1 parent 1:2 handle 20:0 sfq perturb 10
/sbin/rchtb_tc qdisc add dev eth1 parent 1:3 handle 30:0 sfq perturb 10
/sbin/rchtb_tc class add dev eth1 parent 1:2 classid 1:53 htb rate $min
ceil $min prio 1 quantum 1500
/sbin/rchtb_tc filter add dev eth1 protocol ip prio 2 parent 1:0 u32
match ip sport 53 0xffff flowid 1:2 # dns
# pasmo priorytetowe dla ICMP, TOS 0x10 (min. delay) oraz wybranego
portu 22
/sbin/rchtb_tc class add dev eth1 parent 1:2 classid 1:20 htb rate $min
ceil $min prio 1 quantum 1500
/sbin/rchtb_tc filter add dev eth1 protocol ip prio 2 parent 1:0 u32
match ip sport 22 0xffff flowid 1:20 # ssh
/sbin/rchtb_tc filter add dev eth1 protocol ip prio 2 parent 1:0 u32
match ip sport 6000 0xffff flowid 1:20 # x-ssh
/sbin/rchtb_tc filter add dev eth1 protocol ip prio 2 parent 1:0 u32
match ip sport 1429 0xffff flowid 1:20 # Tibia.pl
/sbin/rchtb_tc filter add dev eth1 protocol ip prio 2 parent 1:0 u32
match ip sport 7171 0xffff flowid 1:20 # Tibia.pl
/sbin/rchtb_tc filter add dev eth1 protocol ip prio 2 parent 1:0 u32
match ip sport 8074 0xffff flowid 1:20 # GG
# /sbin/rchtb_tc filter add dev eth1 protocol ip prio 1 parent 1:0 u32
match ip tos 0x10 0xff flowid 1:20
# /sbin/rchtb_tc filter add dev eth1 protocol ip prio 1 parent 1:0 u32
match ip protocol 1 0xff flowid 1:20
/sbin/rchtb_tc qdisc add dev eth1 parent 1:20 sfq perturb 10
I dalej przycinasz pasma po adresach IP - nawet mozesz d razu po rzucać
na różne klasy:
# pasmo priorytetowe dla http-s wybranego portu 443 i radio, mms
/sbin/rchtb_tc class add dev eth1 parent 1:2 classid 1:81$x htb rate
$min ceil $max prio 3 quantum 1500
/sbin/rchtb_tc filter add dev eth1 protocol ip prio 3 parent 1:0 u32
match ip dst 192.168.1.$x match ip sport 443 0xffff flowid 1:81$x # www
/sbin/rchtb_tc filter add dev eth1 protocol ip prio 3 parent 1:0 u32
match ip dst 192.168.1.$x match ip sport 1755 0xffff flowid 1:81$x # www
/sbin/rchtb_tc filter add dev eth1 protocol ip prio 3 parent 1:0 u32
match ip dst 192.168.1.$x match ip sport 8000 0xffff flowid 1:81$x #
Radio
/sbin/rchtb_tc filter add dev eth1 protocol ip prio 3 parent 1:0 u32
match ip dst 192.168.1.$x match ip sport 8002 0xffff flowid 1:81$x #
Radio
/sbin/rchtb_tc filter add dev eth1 protocol ip prio 3 parent 1:0 u32
match ip dst 192.168.1.$x match ip sport 9000 0xffff flowid 1:81$x #
Radio
/sbin/rchtb_tc qdisc add dev eth1 parent 1:81$x handle 81$x:0 sfq
perturb 10
dla ruchu wychodzącego - oznaczasz źródło pakietów po adresach IP:
# INTERFEJS ETH0 (ruch wychodzacy)
/sbin/rchtb_tc qdisc add dev eth0 root handle 2:0 htb default 11 r2q 1
max_total_wy=256kbit
max_wy=180kbit
max_wy2=80kbit
min_wy=8kbit
# glowna klasa
/sbin/rchtb_tc class add dev eth0 parent 2:0 classid 2:1 htb rate
$max_total_wy ceil $max_total_wy
# klasa priorytetowa ACK
/sbin/rchtb_tc class add dev eth0 parent 2:1 classid 2:10 htb rate
$min_wy ceil $max_wy prio 1 quantum 1500
/sbin/rchtb_tc qdisc add dev eth0 parent 2:10 sfq perturb 10
/sbin/rchtb_tc filter add dev eth0 parent 2:0 protocol ip prio 2 u32
match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0
at 1 match u8
0x10 0xff at 33 flowid 2:10 # ACK
# klasa priorytetowa TOS 0x10 oraz ICMP
# /sbin/rchtb_tc class add dev eth0 parent 2:1 classid 2:9 htb rate
24kbit ceil $wyjscie prio 2 quantum 1500
# /sbin/rchtb_tc qdisc add dev eth0 parent 2:9 sfq perturb 10
# /sbin/rchtb_tc filter add dev eth0 parent 2:0 protocol ip prio 1 u32
match ip tos 0x10 0xff flowid 2:10 # TOS 0x10
/sbin/rchtb_tc filter add dev eth0 parent 2:0 protocol ip prio 1 u32
match ip dport 22 0xffff flowid 2:10 # port 22
/sbin/rchtb_tc filter add dev eth0 parent 2:0 protocol ip prio 1 u32
match ip dport 443 0xffff flowid 2:10 # port GG? http_S_
/sbin/rchtb_tc filter add dev eth0 parent 2:0 protocol ip prio 1 u32
match ip dport 8074 0xffff flowid 2:10 # port GG
/sbin/rchtb_tc filter add dev eth0 parent 2:0 protocol ip prio 1 u32
match ip dport 53 0xffff flowid 2:10 # port DNS
/sbin/rchtb_tc filter add dev eth0 parent 2:0 protocol ip prio 1 u32
match ip dport 1429 0xffff flowid 2:10 # Tibia.pl
/sbin/rchtb_tc filter add dev eth0 parent 2:0 protocol ip prio 1 u32
match ip dport 7171 0xffff flowid 2:10 # Tibia.pl
# Klasa priorytetowa Mail, NFS
/sbin/rchtb_tc class add dev eth0 parent 2:1 classid 2:25 htb rate
$min_wy ceil $max_wy prio 2 quantum 1500
/sbin/rchtb_tc qdisc add dev eth0 parent 2:25 sfq perturb 10
/sbin/rchtb_tc filter add dev eth0 parent 2:0 protocol ip prio 2 u32
match ip dport 21 0xffff flowid 2:25 # port mail
/sbin/rchtb_tc filter add dev eth0 parent 2:0 protocol ip prio 2 u32
match ip dport 25 0xffff flowid 2:25 # port mail
/sbin/rchtb_tc filter add dev eth0 parent 2:0 protocol ip prio 2 u32
match ip dport 465 0xffff flowid 2:25 # smtp-gmail
/sbin/rchtb_tc filter add dev eth0 parent 2:0 protocol ip prio 2 u32
match ip dport 587 0xffff flowid 2:25 # smtp-gmail
a dalej po źródłach z adresów IP
IPT=/sbin/iptables
stop()
{
$IPT -F -t mangle
$IPT -X -t mangle
}
start()
{
$IPT -t mangle -A OUTPUT -j MARK --set-mark 1
$IPT -t mangle -A PREROUTING -s 192.168.1.2 -j MARK --set-mark 102
$IPT -t mangle -A PREROUTING -s 192.168.1.6 -j MARK --set-mark 106
}
/sbin/rchtb_tc class add dev eth0 parent 2:1 classid 2:102 htb rate
$min_wy ceil $max_wy2 prio 5 quantum 1500
/sbin/rchtb_tc qdisc add dev eth0 parent 2:102 sfq perturb 10
/sbin/rchtb_tc filter add dev eth0 parent 2:0 protocol ip prio 5 handle
102 fw flowid 2:102
$IPT -t mangle -A PREROUTING -s 192.168.1.6 -j MARK --set-mark 106
/sbin/rchtb_tc class add dev eth0 parent 2:1 classid 2:106 htb rate
$min_wy ceil $max_wy2 prio 5 quantum 1500
/sbin/rchtb_tc qdisc add dev eth0 parent 2:106 sfq perturb 10
/sbin/rchtb_tc filter add dev eth0 parent 2:0 protocol ip prio 5 handle
106 fw flowid 2:106
na końcu jeszcze dopisuję:
/sbin/rchtb_tc filter add dev eth0 parent 2:0 protocol ip prio 9 u32
match ip dst 0/0 flowid 2:11
# ruch serwerowy (pasmo dla gosci z zewnatrz)
/sbin/rchtb_tc class add dev eth0 parent 2:1 classid 2:11 htb rate
$min_wy ceil $max_wy2 prio 9 quantum 1500
/sbin/rchtb_tc qdisc add dev eth0 parent 2:11 sfq perturb 10
/sbin/rchtb_tc filter add dev eth0 parent 2:0 protocol ip prio 5 handle
1 fw flowid 2:11
Powodzenia
Mieszko Kaczmarczyk
--
Duże wydatki? Znajdź najtańszy kredyt:
http://info.totalmoney.pl/k2/kredyt_gotowkowy_m1.php
.
Więcej informacji o liście dyskusyjnej pld-users-pl