|
HTB i wysyłanie przez trzy łącza DSL
smirnof - 17-02-2009 15:49
Witam.
Z Debianem zaczynam swoją przygodę i na razie jeszcze bardzo cienki jestem. Mam problem z poprawnym skonfigurowaniu kolejek HTB dla trzech łącz DSL Szukam, googluję i skleciłem coś takiego i nie wiem czy zmierzam w dobrą stronę. Chciałem to zrobić bez IMQ. Routing ustawiony jest dobrze, jedynie to kolejkowanie.
Część kodu:
#!/bin/bash
INTERNET=eth1 INTERNET2=eth2 INTERNET3=eth3 SIEC=eth0
# Tutaj ustalamy dynamiczny gwarantowany oraz max DOWNLOAD i UPLOAD w kbit dla każdego ip wymienionego powyżej # GD=96 # gwarantowany download MD=512 # maksymalny downloadu GU=30 # gwarantowany upload MU=36 # maksymalny upload
# Tutaj ustalamy przepustowość karty sieciowej(K) oraz max download(M) w kbit od strony karty do sieci wew # K=99000 M=99000
# Podaj przepustowość łącza (D)-Download (U)-Upload w kbit # D=8000 U=480
### Ponizej podaj network sieci bez ostatniej cyferki np: ### LAN=192.168.0 ### Ponizej podaj IP karty wewnetrznej dla sieci np: ### HOST1=192.168.0.1 ### Teraz adresy IP ktore HTB ma wlaczyc do podzialu ### HOST2=${LAN}.2 HOST3=${LAN}.3 HOST4=${LAN}.4
if [ "$1" == "stop" ] then echo "HTB zostalo zatrzymane" tc qdisc del root dev $SIEC 2>/dev/null tc qdisc del root dev $INTERNET 2>/dev/null tc qdisc del root dev $INTERNET2 2>/dev/null tc qdisc del root dev $INTERNET3 2>/dev/null iptables -t mangle -D POSTROUTING -o $INTERNET -j HTB-OUT 2>/dev/null iptables -t mangle -F HTB-OUT 2>/dev/null iptables -t mangle -X HTB-OUT 2>/dev/null iptables -t mangle -D POSTROUTING -o $INTERNET2 -j HTB-OUT2 2>/dev/null iptables -t mangle -F HTB-OUT2 2>/dev/null iptables -t mangle -X HTB-OUT2 2>/dev/null iptables -t mangle -D POSTROUTING -o $INTERNET3 -j HTB-OUT3 2>/dev/null iptables -t mangle -F HTB-OUT3 2>/dev/null iptables -t mangle -X HTB-OUT3 2>/dev/null
exit fi if [ "$1" == "start" ] then echo "HTB zostalo wlaczone" tc qdisc del root dev $SIEC 2>/dev/null tc qdisc del root dev $INTERNET 2>/dev/null tc qdisc del root dev $INTERNET2 2>/dev/null tc qdisc del root dev $INTERNET3 2>/dev/null iptables -t mangle -D POSTROUTING -o $INTERNET -j HTB-OUT 2>/dev/null iptables -t mangle -F HTB-OUT 2>/dev/null iptables -t mangle -X HTB-OUT 2>/dev/null iptables -t mangle -D POSTROUTING -o $INTERNET2 -j HTB-OUT2 2>/dev/null iptables -t mangle -F HTB-OUT2 2>/dev/null iptables -t mangle -X HTB-OUT2 2>/dev/null iptables -t mangle -D POSTROUTING -o $INTERNET3 -j HTB-OUT3 2>/dev/null iptables -t mangle -F HTB-OUT3 2>/dev/null iptables -t mangle -X HTB-OUT3 2>/dev/null
Pobieranie pominę. tc qdisc add dev $INTERNET root handle 1:0 htb tc class add dev $INTERNET parent 1:0 classid 1:1 htb rate ${U}kbit ceil ${U}kbit quantum 576
tc class add dev $INTERNET parent 1:1 classid 1:102 htb rate 800kbit ceil 1000kbit quantum 576 tc class add dev $INTERNET parent 1:1 classid 1:103 htb rate 80kbit ceil 100kbit quantum 576 tc class add dev $INTERNET parent 1:1 classid 1:104 htb rate 30kbit ceil 100kbit quantum 576 tc class add dev $INTERNET parent 1:1 classid 1:105 htb rate 20kbit ceil 30kbit quantum 576
. .
tc qdisc add dev $INTERNET parent 1:102 handle 302:0 sfq perturb 10 tc qdisc add dev $INTERNET parent 1:103 handle 303:0 sfq perturb 10 tc qdisc add dev $INTERNET parent 1:104 handle 304:0 sfq perturb 10 tc qdisc add dev $INTERNET parent 1:105 handle 305:0 sfq perturb 10
. .
tc filter add dev $INTERNET protocol ip preference 1 parent 1:0 handle 2 fw flowid 1:102 tc filter add dev $INTERNET protocol ip preference 1 parent 1:0 handle 3 fw flowid 1:103 tc filter add dev $INTERNET protocol ip preference 1 parent 1:0 handle 4 fw flowid 1:104 tc filter add dev $INTERNET protocol ip preference 1 parent 1:0 handle 5 fw flowid 1:105
. .
iptables -t mangle -N HTB-OUT iptables -t mangle -I POSTROUTING -o $INTERNET -j HTB-OUT iptables -t mangle -A HTB-OUT -s $HOST2 -j MARK --set-mark 2 iptables -t mangle -A HTB-OUT -s $HOST3 -j MARK --set-mark 3 iptables -t mangle -A HTB-OUT -s $HOST4 -j MARK --set-mark 4 iptables -t mangle -A HTB-OUT -s $HOST5 -j MARK --set-mark 5
. . .
Tak samo dla pozostałych dwóch interfejsów. tc qdisc add dev $INTERNET2 root handle 2:0 htb tc class add dev $INTERNET2 parent 2:0 classid 2:1 htb rate ${U}kbit ceil ${U}kbit quantum 576
tc class add dev $INTERNET2 parent 2:1 classid 2:102 htb rate 800kbit ceil 1000kbit quantum 576 tc class add dev $INTERNET2 parent 2:1 classid 2:103 htb rate 80kbit ceil 100kbit quantum 576 tc class add dev $INTERNET2 parent 2:1 classid 2:104 htb rate 30kbit ceil 100kbit quantum 576 tc class add dev $INTERNET2 parent 2:1 classid 2:105 htb rate 20kbit ceil 30kbit quantum 576 . . c qdisc add dev $INTERNET2 parent 2:102 handle 2302:0 sfq perturb 10 tc qdisc add dev $INTERNET2 parent 2:103 handle 2303:0 sfq perturb 10 tc qdisc add dev $INTERNET2 parent 2:104 handle 2304:0 sfq perturb 10 tc qdisc add dev $INTERNET2 parent 2:105 handle 2305:0 sfq perturb 10
. .
tc filter add dev $INTERNET2 protocol ip preference 1 parent 2:0 handle 2 fw flowid 2:102 tc filter add dev $INTERNET2 protocol ip preference 1 parent 2:0 handle 3 fw flowid 2:103 tc filter add dev $INTERNET2 protocol ip preference 1 parent 2:0 handle 4 fw flowid 2:104 tc filter add dev $INTERNET2 protocol ip preference 1 parent 2:0 handle 5 fw flowid 2:105
. . .
iptables -t mangle -N HTB-OUT2 iptables -t mangle -I POSTROUTING -o $INTERNET2 -j HTB-OUT2 iptables -t mangle -A HTB-OUT2 -s $HOST2 -j MARK --set-mark 1002 iptables -t mangle -A HTB-OUT2 -s $HOST3 -j MARK --set-mark 1003 iptables -t mangle -A HTB-OUT2 -s $HOST4 -j MARK --set-mark 1004 iptables -t mangle -A HTB-OUT2 -s $HOST5 -j MARK --set-mark 1005
I tak samo dla trzeciego łącza.
I tu problem z tym markowaniem ,,set-mark 1002'' (jak markuję każdego użytkownika na każdym łączu tak samo to nie działa prawidłowo --set-mark 2 dla Eth1 Eth2 i Eth3). (wydawało mi sie jak przy każdym łączu zamarkuje --set-mark 2 to będzie działać a tu niestety tylko na 1 łączu poprawnie będzie chodzić wysyłanie (upload).
Teraz tak, czy idę dobrą drogą i czy dobrze rozumuje bo chcę dla każdego użytkownika zroibić kolejki na każdym łączu potem sobie ich dowolnie przerzucać między poszczególnymi łączami?
Pogubiłem sie z tym markowaniem --set-mark 2 działa prawidłowo. Gdzie i jak dodać abym mógł sobie markować dla 2 łącza --set-mark 1002 i dla trzeciego --set-mark 2002. Nie umiem znaleźć gdzie jeszcze ustawić to markowanie. Nie wiem czy w ogóle się tak da?
Bardzo proszę o pomoc i ewentualną podpowiedź czy takie rozwiązanie ma sens?
Pozdrawiam.
siarka - 17-02-2009 21:22
zainteresuj się łatami Juliana Anastasova, a dla uproszczenia zastosuj imq
smirnof - 18-02-2009 14:55
Dziękuję za poradę ale chcę to kolejkowanie dobrze zrozumieć.
Już wiem gdzie zrobiłem byka ale jeszcze nie działa do końca jak chciałem:
tc filter add dev $INTERNET2 protocol ip preference 1 parent 2:0 handle 1002 fw flowid 2:102 tc filter add dev $INTERNET2 protocol ip preference 1 parent 2:0 handle 1003 fw flowid 2:103 tc filter add dev $INTERNET2 protocol ip preference 1 parent 2:0 handle 1004 fw flowid 2:104 tc filter add dev $INTERNET2 protocol ip preference 1 parent 2:0 handle 1005 fw flowid 2:105
. . .
iptables -t mangle -N HTB-OUT2 iptables -t mangle -I POSTROUTING -o $INTERNET2 -j HTB-OUT2 iptables -t mangle -A HTB-OUT2 -s $HOST2 -j MARK --set-mark 1002 iptables -t mangle -A HTB-OUT2 -s $HOST3 -j MARK --set-mark 1003 iptables -t mangle -A HTB-OUT2 -s $HOST4 -j MARK --set-mark 1004 iptables -t mangle -A HTB-OUT2 -s $HOST5 -j MARK --set-mark 1005
Jeszcze mam jeden problem na Debianie 4.0r4a bodajże chodzi mi prawidłowo, a na Debianie 3.1r1 wywala mi przy linijce:
iptables -t mangle -N HTB-OUT
wywala błąd:
iptables: Chain already exists
i htb blokuje mi prawidłowe działanie na interfejsach eth2 i eth3.
Pozdrawiam.
mariaczi - 19-02-2009 10:25
Cześć.
Myślę, że możesz spokojnie pominąć markowanie każdego użytkownika na interfejsie. Wyłap to sobie filtrem tc filter add dev eth1 parent 1:0 protocol ip prio 10 u32 match ip dst 10.0.0.10/0 flowid 1:10
Możesz zamiast dst użyć src dla ruchu wychodzącego (uploadu).
Pozdrawiam.
smirnof - 19-02-2009 23:36
Nie za bardzo rozumiem o co chodzi z tym ip 10.0.0.10/0. Chodzi o to aby jednym poleceniem całą podsieć załatwić od razu?
Poza tym jeżeli coś jest źle zamarkowane bądź ustawione to routing i wszystko inne powinno działać jedynie nie będzie trzymać żadnych limitów.
U mnie po włączeniu HTB blokuje ruch przez 2 i 3 łącze (przy pierwszym chodzi normalnie), a w skrypcie dla łącz 2 i 3 jest wszystko tak samo jak dla jednego, który działa.
mariaczi - 20-02-2009 10:22
Teraz markujesz pakiety dla danego hosta na kazdym interfejsie. Korzystajac z filtra wylapiesz pakiety per IP. Zapodaj na filtr: zamiast /0 daj /32 czyli pojedynczy host i trafi to w dana kolejke.
smirnof - 20-02-2009 11:35
Rozumiem.
Czyli jeżeli mam zdefiniowane:
Host5=192.168.0.5
Mogę też zrobić tak:
tc filter add dev eth1 parent 1:0 protocol ip prio 10 u32 match ip dst Host5 flowid 1:10
Zaraz sprawdzę czy pomogło?
zanotowane.pldoc.pisz.plpdf.pisz.plminister.pev.pl
|