Mam problem z skryptem dzielacym pasmo ktory nie reguluje prędkości kolejek.
Debian 4.0 ktory sluzy do udostepniania internetu dla 3 komputerów oraz uruchomiony jest na nim rtorrent.
Postanowilem podzielic lacze tak aby uruchomiony rtorrent nie blokowal internetu innym kompuerom oraz aby dac najwyzszy priorytet bramce voip.
Czytajac rozne opracowania skompilowalem jadro (2.6.18.5) wraz z patchem imq oraz iptables, zainstalowalm najnowsze iptables oraz iproute2.
Napisałem taki skrypt:
Kod: Zaznacz cały
#!/bin/bash
###USTAWIENIA####
modprobe sch_htb
modprobe sch_sfq
modprobe cls_u32
IP="/usr/local/sbin/iptables"
TC="/usr/sbin/tc"
###UPLOAD###
ip link set imq0 up
$TC qdisc add dev imq0 root handle 1: htb default 10
$TC class add dev imq0 parent 1: classid 1:1 htb rate 1400kbit ceil 1400kbit
$TC class add dev imq0 parent 1:1 classid 1:10 htb rate 100kbit ceil 1400kbit prio 10
$TC class add dev imq0 parent 1:1 classid 1:20 htb rate 200kbit ceil 1400kbit prio 5
$TC class add dev imq0 parent 1:1 classid 1:30 htb rate 400kbit ceil 1400kbit prio 2
$TC class add dev imq0 parent 1:1 classid 1:40 htb rate 700kbit ceil 1400kbit prio 1
$TC filter add dev imq0 parent 1: protocol ip prio 10 handle 100 fw classid 1:10
$TC filter add dev imq0 parent 1: protocol ip prio 1 handle 200 fw classid 1:20
$TC filter add dev imq0 parent 1: protocol ip prio 1 handle 300 fw classid 1:30
$TC filter add dev imq0 parent 1: protocol ip prio 1 handle 400 fw classid 1:40
$TC qdisc add dev imq0 parent 1:10 handle 10:0 sfq perturb 10
$TC qdisc add dev imq0 parent 1:20 handle 20:0 sfq perturb 10
$TC qdisc add dev imq0 parent 1:30 handle 30:0 sfq perturb 10
$TC qdisc add dev imq0 parent 1:40 handle 40:0 sfq perturb 10
$IP -t mangle -A POSTROUTING -m tcp -p tcp -m multiport --ports 1111 -j MARK --set-mark 100
$IP -t mangle -A POSTROUTING -m udp -p udp -m multiport --ports 1111 -j MARK --set-mark 100
$IP -t mangle -A POSTROUTING -m udp -p udp -m multiport --ports 5060,5061 -j MARK --set-mark 400
$IP -t mangle -A POSTROUTING -m udp -p udp -m multiport --ports 7077:7087 -j MARK --set-mark 400
$IP -t mangle -A POSTROUTING -m tcp -p tcp -m multiport --ports 80,25,110,53 -j MARK --set-mark 300
$IP -t mangle -A POSTROUTING -m udp -p udp -m multiport --ports 80,25,110,53 -j MARK --set-mark 300
$IP -t mangle -A POSTROUTING -o eth1 -j IMQ --todev 0
###DOWNLOAD###
ip link set imq1 up
$TC qdisc add dev imq1 root handle 1: htb default 10
$TC class add dev imq1 parent 1: classid 1:1 htb rate 5000kbit ceil 5000kbit
$TC class add dev imq1 parent 1:1 classid 1:10 htb rate 100kbit ceil 5000kbit prio 10
$TC class add dev imq1 parent 1:1 classid 1:20 htb rate 300kbit ceil 5000kbit prio 5
$TC class add dev imq1 parent 1:1 classid 1:30 htb rate 2150kbit ceil 5000kbit prio 2
$TC class add dev imq1 parent 1:1 classid 1:40 htb rate 2500kbit ceil 5000kbit prio 1
$TC filter add dev imq1 parent 1: protocol ip prio 10 handle 100 fw classid 1:10
$TC filter add dev imq1 parent 1: protocol ip prio 1 handle 200 fw classid 1:20
$TC filter add dev imq1 parent 1: protocol ip prio 1 handle 300 fw classid 1:30
$TC filter add dev imq1 parent 1: protocol ip prio 1 handle 400 fw classid 1:40
$TC qdisc add dev imq1 parent 1:10 handle 10:0 sfq perturb 10
$TC qdisc add dev imq1 parent 1:20 handle 20:0 sfq perturb 10
$TC qdisc add dev imq1 parent 1:30 handle 30:0 sfq perturb 10
$TC qdisc add dev imq1 parent 1:40 handle 40:0 sfq perturb 10
$IP -t mangle -A PREROUTING -m tcp -p tcp -m multiport --ports 1111 -j MARK --set-mark 100
$IP -t mangle -A PREROUTING -m udp -p udp -m multiport --ports 1111 -j MARK --set-mark 100
$IP -t mangle -A PREROUTING -m udp -p udp -m multiport --ports 5060,5061 -j MARK --set-mark 400
$IP -t mangle -A PREROUTING -m udp -p udp -m multiport --ports 7077:7087 -j MARK --set-mark 400
$IP -t mangle -A PREROUTING -m tcp -p tcp -m multiport --ports 80,25,110,53 -j MARK --set-mark 300
$IP -t mangle -A PREROUTING -m udp -p udp -m multiport --ports 80,25,110,53 -j MARK --set-mark 300
$IP -t mangle -A PREROUTING -i eth1 -j IMQ --todev 1
Polecenie tc -s qdisc wydaje mi sie ze wykazuje ze pakiety trafiaja do odpowiednich kolejek.
Kolejka 1:10 - Dla serwera na rtorrent dzialajacy na porcie 1111
Kolejka 1:30 - Dla www itp
Kolejka 1:40 - Dla voip
Kod: Zaznacz cały
qdisc pfifo_fast 0: dev eth1 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
Sent 881107112 bytes 4180178 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
qdisc htb 1: dev imq0 r2q 10 default 10 direct_packets_stat 0
Sent 54625436 bytes 266755 pkt (dropped 3452, overlimits 253249 requeues 0)
rate 0bit 0pps backlog 0b 109p requeues 0
qdisc sfq 10: dev imq0 parent 1:10 limit 128p quantum 1500b perturb 10sec
Sent 54460790 bytes 264378 pkt (dropped 3452, overlimits 0 requeues 0)
rate 0bit 0pps backlog 21169b 109p requeues 0
qdisc sfq 20: dev imq0 parent 1:20 limit 128p quantum 1500b perturb 10sec
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
qdisc sfq 30: dev imq0 parent 1:30 limit 128p quantum 1500b perturb 10sec
Sent 128292 bytes 2111 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
qdisc sfq 40: dev imq0 parent 1:40 limit 128p quantum 1500b perturb 10sec
Sent 36354 bytes 266 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
qdisc htb 1: dev imq1 r2q 10 default 10 direct_packets_stat 0
Sent 166072592 bytes 339345 pkt (dropped 1661, overlimits 25438 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
qdisc sfq 10: dev imq1 parent 1:10 limit 128p quantum 1500b perturb 10sec
Sent 161409426 bytes 335608 pkt (dropped 1661, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
qdisc sfq 20: dev imq1 parent 1:20 limit 128p quantum 1500b perturb 10sec
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
qdisc sfq 30: dev imq1 parent 1:30 limit 128p quantum 1500b perturb 10sec
Sent 4639889 bytes 3562 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
qdisc sfq 40: dev imq1 parent 1:40 limit 128p quantum 1500b perturb 10sec
Sent 23277 bytes 175 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
qdisc pfifo_fast 0: dev eth0 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
Sent 18188068 bytes 26070 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
Problem w tym ze predkosc i priorytety kolejek nie dzialaja tak jak chcialbym.
Np. Sciagam plik na komputere nr 1 (kolejka 1:30) - idzie pelna predkoscia, ponad 5MBit - OK.
Włączam na serwerze rtorrent ktory rozpedza sie do prawie 5Mbit (kolejka 1:10). Probuje sciagnac ten sam plik znów na komputerze nr 1. Wedlug moich zalozen rtorrent powinien zostac ograniczony do 100kbit a komputer powinien sciagac max bo ma wyzszy priorytet. Tymczasem komputer sciaga plik z predkoscia ok 1MBit a po rtorrencie wogole nie widac zeby zwalnial.
Ma ktos moze pomysl w czym moze lezec problem ? Siedze juz 2 dni i nie moge sobie poradzic. Probowalem dzielenia lacza po portach jak i po IP. Kompilowalem jadro z IMQ ustawionym na AB i BA. Wszedzie o samo.
Z gory dziekuje za kazda pomoc.
Pozdrawiam