ďťż
 
 
   HTB i wysyłanie przez trzy łącza DSL
 
 

Tematy

 
    
 

 

 

 

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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • minister.pev.pl

  •  

     


     

     
    Copyright 2003. MĂłj serwis