HTB, ipp2p i ograniczanie P2P - problem
: 2009-08-26, 14:03
Witam.
Pracuje nad ograniczeniem downloadu P2P (ograniczeniem prędkości a nie zablokowaniem).
Każdemu adresowi IP przydzielam 1000kbit downloadu z internetu i 500 kbit do połączeń z serwerem lokalnym
(lokalna strona www, pliki). Jak widać w konfiguracji najpierw wyłapuję pakiety pochodzące
z sieci lokalnej 10.0.0.0/20 (papametr preference 1) a w drugiej kolejności pakiety nie pochodzące
z sieci lokalnej (preference 2) są kolejkowane jako downlad z internetu.
Wszystko wielokrotnie testowanie i działa bez zastrzeżeń.
Obecnie mam taki podział pasma:
Ponieważ łącze zaczyna zapychać P2P wiec obecną konfigurację postanowiłem rozbudować o
osobne pasmo przeznaczone na ruch P2P (na razie moduł ipp2p, a potem rozszerzę o 7layer)
Klasa 1:3 ma 300kbit na P2P dla całej sieci.
Każdy użytkownik może pociągnąć max 200kbit p2p. Mam problem z wyfiltrowaniem tego
ruchu i skierowaniem go do odpowiedniej kolejki.
Testowałem skrypt jak poniżej, ale nie udaje mi wyfiltrować pakietów
p2p oznaczonych jako 1.
linia:
powinna wyłapać pakiety p2p (polecenie handle 1) skiedowane do IP 10.0.1.1,
ale zwraca mi błąd i nie wiem jak to obejść:
Dodam IMQ jest skompilowane z opcją BB (postrouting i preroiting before NAT)
Może powinno być AB
Jak uruchomić powyższy podział pasma???
Myślę także o ustawieniu ruchu p2p z niższym priorytetem, aby nie ustawiać p2p na sztywno
(tak jak teraz 300kbit) ale aby pasmo p2p było przydzielane dynamicznie z pasma aktualnie niewykorzystanego.
Będę wdzięczny za wszelkie porady, a zwłaszcza działające przykłady, które mógłbym przerobić.
aksnet
Pracuje nad ograniczeniem downloadu P2P (ograniczeniem prędkości a nie zablokowaniem).
Każdemu adresowi IP przydzielam 1000kbit downloadu z internetu i 500 kbit do połączeń z serwerem lokalnym
(lokalna strona www, pliki). Jak widać w konfiguracji najpierw wyłapuję pakiety pochodzące
z sieci lokalnej 10.0.0.0/20 (papametr preference 1) a w drugiej kolejności pakiety nie pochodzące
z sieci lokalnej (preference 2) są kolejkowane jako downlad z internetu.
Wszystko wielokrotnie testowanie i działa bez zastrzeżeń.
Obecnie mam taki podział pasma:
Kod: Zaznacz cały
# -----------------DOWNLOAD --------------------
# kasujemy poprzednie kolejkowanie
tc qdisc del root dev imq0 2> /dev/null
# tworzymy nowa kolejke glowna
tc qdisc add dev imq0 root handle 1:0 htb
# calkowity download
tc class add dev imq0 parent 1:0 classid 1:1 htb rate 2648kbit ceil 2648kbit
# download z serwera lan
tc class add dev imq0 parent 1:1 classid 1:2 htb rate 600kbit ceil 600kbit
# download z internetu
tc class add dev imq0 parent 1:1 classid 1:3 htb rate 2048kbit ceil 2048kbit
# pasmo dla poszczegolnych uzytkownikow
#z serwera LAN:
tc class add dev imq0 parent 1:2 classid 1:1001 htb rate 50kbit ceil 500kbit quantum 5120
tc filter add dev imq0 protocol ip preference 1 parent 1:0 u32 match ip src 10.0.0.0/20 match ip dst 10.0.1.1 flowid 1:1001
tc qdisc add dev imq0 parent 1:1001 handle 1001:0 sfq perturb 10
#z internetu:
tc class add dev imq0 parent 1:3 classid 1:2001 htb rate 200kbit ceil 1000kbit quantum 20480
tc filter add dev imq0 protocol ip preference 2 parent 1:0 u32 match ip dst 10.0.1.1 flowid 1:2001
tc qdisc add dev imq0 parent 1:2001 handle 2001:0 sfq perturb 10
#analogicznie dla następnych adresów IP ...
osobne pasmo przeznaczone na ruch P2P (na razie moduł ipp2p, a potem rozszerzę o 7layer)
Klasa 1:3 ma 300kbit na P2P dla całej sieci.
Każdy użytkownik może pociągnąć max 200kbit p2p. Mam problem z wyfiltrowaniem tego
ruchu i skierowaniem go do odpowiedniej kolejki.
Testowałem skrypt jak poniżej, ale nie udaje mi wyfiltrować pakietów
p2p oznaczonych jako 1.
Kod: Zaznacz cały
# kasujemy znaczenie pakietow
iptables -t mangle -F PREROUTING
# znaczymy pakiety P2P
iptables -t mangle -A PREROUTING -m ipp2p --ipp2p -j MARK --set-mark 1
# -----------------DOWNLOAD --------------------
# kasujemy poprzednie kolejkowanie
tc qdisc del root dev imq0 2> /dev/null
# tworzymy nowa kolejke glowna
tc qdisc add dev imq0 root handle 1:0 htb
# calkowity download
tc class add dev imq0 parent 1:0 classid 1:1 htb rate 2648kbit ceil 2648kbit
# download z serwera lan
tc class add dev imq0 parent 1:1 classid 1:2 htb rate 600kbit ceil 600kbit
# download P2P z internetu
tc class add dev imq0 parent 1:1 classid 1:3 htb rate 300kbit ceil 300kbit
# download z internetu (bez P2P)
tc class add dev imq0 parent 1:1 classid 1:4 htb rate 1748kbit ceil 1748kbit
# pasmo dla poszczegolnych uzytkownikow
#z serwera LAN:
tc class add dev imq0 parent 1:2 classid 1:1001 htb rate 50kbit ceil 500kbit quantum 5120
tc filter add dev imq0 protocol ip preference 1 parent 1:0 u32 match ip src 10.0.0.0/20 match ip dst 10.0.1.1 flowid 1:1001
tc qdisc add dev imq0 parent 1:1001 handle 1001:0 sfq perturb 10
#z internetu (tylko P2P):
tc class add dev imq0 parent 1:3 classid 1:2001 htb rate 10kbit ceil 200kbit quantum 1700
tc filter add dev imq0 protocol ip preference 2 parent 1:0 u32 handle 1 match ip dst 10.0.1.1 flowid 1:2001
tc qdisc add dev imq0 parent 1:2001 handle 2001:0 sfq perturb 10
#z internetu:
tc class add dev imq0 parent 1:4 classid 1:3001 htb rate 200kbit ceil 1200kbit quantum 20480
tc filter add dev imq0 protocol ip preference 3 parent 1:0 u32 match ip dst 10.0.1.1 flowid 1:3001
tc qdisc add dev imq0 parent 1:3001 handle 3001:0 sfq perturb 10
#analogicznie dla następnych adresów IP ...
Kod: Zaznacz cały
tc filter add dev imq0 protocol ip preference 2 parent 1:0 u32 handle 1 match ip dst 10.0.1.1 flowid 1:2001
ale zwraca mi błąd i nie wiem jak to obejść:
Dodam IMQ jest skompilowane z opcją BB (postrouting i preroiting before NAT)
Może powinno być AB
Jak uruchomić powyższy podział pasma???
Myślę także o ustawieniu ruchu p2p z niższym priorytetem, aby nie ustawiać p2p na sztywno
(tak jak teraz 300kbit) ale aby pasmo p2p było przydzielane dynamicznie z pasma aktualnie niewykorzystanego.
Będę wdzięczny za wszelkie porady, a zwłaszcza działające przykłady, które mógłbym przerobić.
aksnet