Traffic Shaping na NSLU2 z Debianem

Konfiguracja serwerów, usług, itp.
szafran
Posty: 5
Rejestracja: 22 lipca 2006, 23:54

Traffic Shaping na NSLU2 z Debianem

Post autor: szafran »

Witam,

Posiadam Linksysa NSLU2 na którym mam zainstalowanego Debiana. Chciałem się dowiedzieć co muszę zainstalować i jak to skonfigurować, aby ograniczyć predkość uploadu na jednym porcie tcp do 5kb/s ? (pakiety które mogę instalowac to ARM).

p.s.
Jestem dość zielony w temacie linuksowym, więc prosiłbym o dość szczegółowy opis w miare możliwości.

A ja prosiłbym wszystkich o używanie polskich znaczków w tym wątku [dop. moderator].
Witek Baryluk
Beginner
Posty: 207
Rejestracja: 26 czerwca 2006, 01:49
Lokalizacja: Kraków za firewallem

Re: Traffic Shaping na NSLU2 z Debianem

Post autor: Witek Baryluk »

szafran pisze:Witam
Posiadam Linksysa NSLU2 na którym mam zainstalowanego Debiana. Chciałem sie dowiedzieć co muszę zainstalować i jak to skonfigurować, aby ograniczyć predkość uploadu na jednym porcie tcp do 5kb/s ? (pakiety które mogę instalować to ARM).
Zapewne będzie potrzebne jądro z obsługą traffic shaperingu (najlepiej w postaci obsługi htb).
Oraz pakiet iproute.

p.s.
Jestem dość zielony w temacie linuksowym więc prosiłbym o dość szczegółowy opis w miarę możliwości
No to będzie ciężko. Nawet ludzie którzy są anty-zieloni, mogą mieć z tym problem :D

Kod: Zaznacz cały

tc class add dev eth0 parent 1: classid 1:1 htb rate 100kbps ceil 100kbps default 11
tc class add dev eth0 parent 1:1 classid 1:11 htb rate 95kbps ceil 100kbps
tc class add dev eth0 parent 1:1 classid 1:12 htb rate 5kbps ceil 5kbps

tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 \
   match ip dport 22 0xffff flowid 1:12
Mam nadzieje że zadziała. ;)
szafran
Posty: 5
Rejestracja: 22 lipca 2006, 23:54

Post autor: szafran »

Dzięki za odpowiedź.
iproute zainstałowalem, tc dziala:
NSLU2:/# tc
Usage: tc [ OPTIONS ] OBJECT { COMMAND | help }
tc [-force] -batch file
where OBJECT := { qdisc | class | filter | action }
OPTIONS := { -s[tatistics] | -d[etails] | -r[aw] | -b[atch] [file] }
TC HTB version 3.3
Tylko teraz gdzie mam tego skrypta wrzucić ?

p.s.
Przy logowaniu pokazuje mi coś takiego:
Linux NSLU2 2.6.15-1-nslu2 #2 Tue Mar 7 17:36:32 UTC 2006 armv5tel
Jak sprawdzić czy to obsługuje ts czy też nie ?
Witek Baryluk
Beginner
Posty: 207
Rejestracja: 26 czerwca 2006, 01:49
Lokalizacja: Kraków za firewallem

Post autor: Witek Baryluk »

Zrób sobie wlasny skrypt, np. w /etc/init.d/shaper, a następnie dopisz go do sekwencji startowej odpalając

Kod: Zaznacz cały

# update-rc.d shaper defaults
jak sprawdzic czy to obsluguje ts czy tez nie ??
Ekspreymentalnie, tzn. odpalając ten skrypt i sprawdzając czy działa i nie daje żadnych błędów.
Albo poprostu spróbuj załadować moduł od htb.

Kod: Zaznacz cały

# modprobe sch_htb
Raczej bedzie, bo to pewnie jadro specjalnie dla tego routerka (albo przynajmniej w zamysle ze bedzie uzyte w jakims routerze), a ludzie ktorzy je przygotowali zapewne o tym pomysleli. Standardowe jadro w debianie nie ma takich rzeczy.

pozdro
szafran
Posty: 5
Rejestracja: 22 lipca 2006, 23:54

Post autor: szafran »

No wlasnie to nie router tylko NAS.
Router mam wrt54gl i tam wystarczy wrzucić do firewall script (co zreszta mam zrobione), tylko potrzebuje dorzucić na nslu2 tylko tą jedną regułkę i bedzie wszystko tak jak chciałem.

A uruchomienie skryptu daje mi cos takiego:
NSLU2:/etc/init.d# /etc/rc2.d/S20shaper
What is "default"?
Usage: ... qdisc add ... htb [default N] [r2q N]
default minor id of class to which unclassified packets are sent {0}
r2q DRR quantums are computed as rate in Bps/r2q {10}
debug string of 16 numbers each 0-3 {0}

... class add ... htb rate R1 [burst B1] [mpu B] [overhead O]
[prio P] [slot S] [pslot PS]
[ceil R2] [cburst B2] [mtu MTU] [quantum Q]
rate rate allocated to this class (class can still borrow)
burst max bytes burst which can be accumulated during idle period {computed}
mpu minimum packet size used in rate computations
overhead per-packet size overhead used in rate computations
ceil definite upper class rate (no borrows) {rate}
cburst burst but for ceil {computed}
mtu max packet size we create rate map for {1600}
prio priority of leaf; lower are served first {0}
quantum how much bytes to serve from leaf at once {use r2q}

TC HTB version 3.3
RTNETLINK answers: No such file or directory
RTNETLINK answers: No such file or directory
RTNETLINK answers: Invalid argument
We have an error talking to the kernel
Witek Baryluk
Beginner
Posty: 207
Rejestracja: 26 czerwca 2006, 01:49
Lokalizacja: Kraków za firewallem

Post autor: Witek Baryluk »

Może w innej kolejności należy wpisać parametry (pisałem z pamięci):

Kod: Zaznacz cały

tc class add dev eth0 parent 1: classid 1:1 htb default 11 rate 100kbps ceil 100kbps
tc class add dev eth0 parent 1:1 classid 1:11 htb rate 95kbps ceil 100kbps 
tc class add dev eth0 parent 1:1 classid 1:12 htb rate 5kbps ceil 5kbps 

tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 \ 
   match ip dport 22 0xffff flowid 1:12
Albo zamiast "default 11" należy dać "default 1:11", oczywiście poza tym prędkości które tu podałem trzeba pozmieniać adekwatnie do połączenia jakie tam jest i to samo dotyczy portu oczywiście który chcemy ograniczyć.
szafran
Posty: 5
Rejestracja: 22 lipca 2006, 23:54

Post autor: szafran »

Skrypt wygląda dokladnie tak:
#! /bin/sh
tc class add dev eth0 parent 1: classid 1:1 htb rate 100Mbps ceil 100Mbps default 11
tc class add dev eth0 parent 1:1 classid 1:11 htb rate 99Mbps ceil 100Mbps
tc class add dev eth0 parent 1:1 classid 1:12 htb rate 5kbps ceil 5kbps

tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 63000 0xffff flowid 1:12
I to się wysadza - z default 1:11 ten sam błąd.

Ten skrypt, co mam na routerze wyglada tak:
iptables -I FORWARD -p tcp --syn -s 192.168.0.4 -m
connlimit --connlimit-above 300 -j DROP

tc qdisc del root dev eth0
iptables -t mangle -F
iptables -t mangle -X

tc qdisc add dev eth0 root handle 1: htb default 10

tc class add dev eth0 parent 1: classid 1:1 htb rate 640kbit burst 6k prio 0

#------------------------------------------ users download classes
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 300kbit ceil 640kbit burst 6k prio 1
tc class add dev eth0 parent 1:1 classid 1:11 htb rate 48kbit ceil 160kbit burst 6k prio 3
tc class add dev eth0 parent 1:1 classid 1:12 htb rate 48kbit ceil 160kbit burst 6k prio 4
tc class add dev eth0 parent 1:1 classid 1:13 htb rate 240kbit ceil 640kbit burst 6k prio 2

#------------------------------------------ users upload classes
tc class add dev eth0 parent 1:1 classid 1:20 htb rate 48kbit ceil 96kbit burst 6k prio 1
tc class add dev eth0 parent 1:1 classid 1:21 htb rate 16kbit ceil 48kbit burst 6k prio 3
tc class add dev eth0 parent 1:1 classid 1:22 htb rate 16kbit ceil 48kbit burst 6k prio 4
tc class add dev eth0 parent 1:1 classid 1:23 htb rate 16kbit ceil 24kbit burst 8k prio 6

#download classes
tc qdisc add dev eth0 parent 1:10 handle 10: sfq perturb 10
tc qdisc add dev eth0 parent 1:11 handle 11: sfq perturb 10
tc qdisc add dev eth0 parent 1:12 handle 12: sfq perturb 10
tc qdisc add dev eth0 parent 1:13 handle 13: sfq perturb 10
#upload classes
tc qdisc add dev eth0 parent 1:21 handle 20: sfq perturb 10
tc qdisc add dev eth0 parent 1:21 handle 21: sfq perturb 10
tc qdisc add dev eth0 parent 1:22 handle 22: sfq perturb 10
tc qdisc add dev eth0 parent 1:23 handle 23: sfq perturb 10

#download classes
tc filter add dev eth0 parent 1:0 prio 1 protocol ip handle 10 fw flowid 1:10
tc filter add dev eth0 parent 1:0 prio 3 protocol ip handle 11 fw flowid 1:11
tc filter add dev eth0 parent 1:0 prio 4 protocol ip handle 12 fw flowid 1:12
tc filter add dev eth0 parent 1:0 prio 2 protocol ip handle 13 fw flowid 1:13
#upload classes
tc filter add dev eth0 parent 1:0 prio 1 protocol ip handle 20 fw flowid 1:20
tc filter add dev eth0 parent 1:0 prio 3 protocol ip handle 21 fw flowid 1:21
tc filter add dev eth0 parent 1:0 prio 4 protocol ip handle 22 fw flowid 1:22
tc filter add dev eth0 parent 1:0 prio 2 protocol ip handle 23 fw flowid 1:23

#marking DOWNLOAD packets
iptables -t mangle -A POSTROUTING -d 192.168.1.2 -j MARK --set-mark 10
iptables -t mangle -A POSTROUTING -d 192.168.1.3 -j MARK --set-mark 11
iptables -t mangle -A POSTROUTING -d 192.168.1.4 -j MARK --set-mark 12
iptables -t mangle -A POSTROUTING -d 192.168.1.77 -j MARK --set-mark 13
#marking UPLOAD packets
iptables -t mangle -A FORWARD -s 192.168.1.2 -j MARK --set-mark 20
iptables -t mangle -A FORWARD -s 192.168.1.3 -j MARK --set-mark 21
iptables -t mangle -A FORWARD -s 192.168.1.4 -j MARK --set-mark 22
iptables -t mangle -A FORWARD -s 192.168.1.77 -j MARK --set-mark 23
Przydało by się, żeby to działało :-/
Witek Baryluk
Beginner
Posty: 207
Rejestracja: 26 czerwca 2006, 01:49
Lokalizacja: Kraków za firewallem

Post autor: Witek Baryluk »

szafran pisze:skrypt wyglada dokladnie tak:
#! /bin/sh
tc class add dev eth0 parent 1: classid 1:1 htb rate 100Mbps ceil 100Mbps default 11
tc class add dev eth0 parent 1:1 classid 1:11 htb rate 99Mbps ceil 100Mbps
tc class add dev eth0 parent 1:1 classid 1:12 htb rate 5kbps ceil 5kbps

tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 63000 0xffff flowid 1:12
i to sie wysadza - z default 1:11 ten sam blad
Ok, juz chyba wiem co zle napisalem: powinno byc troche inaczej (ten default powinien byc przy dodawaniu qdisc - ktorego zreszta zapomnialem :D ).

Kod: Zaznacz cały

#! /bin/sh
tc qdisc add dev eth0 root handle 1: htb default 11

tc class add dev eth0 parent 1: classid 1:1 htb rate 100Mbps ceil 100Mbps
tc class add dev eth0 parent 1:1 classid 1:11 htb rate 99Mbps ceil 100Mbps
tc class add dev eth0 parent 1:1 classid 1:12 htb rate 5kbps ceil 5kbps

tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 63000 0xffff flowid 1:12

Ale skoro masz juz jakis inny gotowy skrypt to sie mu przejrzyjmy.
ten skrypt co mam na routerze wyglada tak:
ciach
przydalo by sie zeby to dzialalo :-/
Wyglada rozsadnie, ktoras komenda zwraca blad?
szafran
Posty: 5
Rejestracja: 22 lipca 2006, 23:54

Post autor: szafran »

No błędu już nie zwraca żadnego, ale wygląda na to, że amule dalej sobie wysyła 10kb/s zamiast 5kb/s :/.
ODPOWIEDZ