Razpredeliane
na trafik ot dva (ili poveche) internet
dostavchika.
Otdeliane
na lokalen, bulgarski i mezhdunaroden
trafik. Ogranichavane na skorost.
Zab.:Avtorut
e napulno naiasno, che (mozhe da) sushtestvuvat
netochnosti i greshki. Pokazanoto tuk e
samo s uchebna tsel! Predi da napravite
kakvoto i da e arhiviraite vazhnite si
danni (a zashto ne vsichko?) ! Prevoda na
angliiskite termini mozhe da ne e suvsem
tochen. Za kontakti: uvigii@mail.bg , nai aktualnata
versiia
na:http://uvigii.jeckyll.net/pub/doc/lb/LB.html
Spetsialni
blagodarnosti na Kennedy
za neotsenimata
pomosht, kakto i za izgotvianeto na grafikite
kum dokumenta!
1.Na kogo
mozhe
da e polezen tozi dokument? Zabelezhki.
2.Razpredeliane
na trafik ot dva internet dostavchika.
2.1 Podgotovka
na iadroto
2.2 Prouchvane
2.3 Ruting
tablitsi
3.Markirane na
paketi pristigashti ot lokalni, bulgarski
i mezhdunarodni iztochntsi.
3.1 Predvaritelno
markirani ot ISP paketi
3.2 Markirane
na paketi
4.Ogranichavane
na skorost.
5.Zaklyuchenie.
Vruzki kum drugi dokumenti.
1. Na kogo mozhe
da e polezen tozi dokument? Zabelezhki.
Imame si domashen
kompyutur koito izpulniava roliata na
ruter, svurzani sme na dogovorena skorost
kum globalnata mrezha posredstvom
dostavchik na internet uslugi (ISP).
Variant A:
Po edna ili druga prichina nashiia ISP ne
mozhe da ni predlozhi po-visoka skorost
na vruzkata, a nie mnogo se nuzhdaem ot
tova. Iskame da izpolzvame uslugite na
vtori ISP, bez pri tova da se otkazhem ot
purviia.
Variant B:
Vsiako propadane na svurzanostta ni s
internet ni se struva nepriemlivo. Za
preodoliavaneto na tozi problem sme
reshili da izpolzvame vruzki ednovremenno
kum dva ISP. Dori ednata vruzka s internet
da otpadne poradi tehnicheski problem,
tseliiat trafik bi se prenasochval prez
drugata. Ako vruzkite i kum dvata ISP
funktsionirat iskame te da se natovarvat
proportsionalno na tehnite kapatsiteti.
Variant V:
Konkurenten dostavchik predlaga uslugi
koito perfektno dopulvat uslugite koito
polzvame v momenta. Nie imame dobur
mezhdunaroden trafik, no bulgarskiia i
“lokalniia” – kutsat. Naprotiv alternativniia
dostavchik na “keshirani uslugi” ima
dobra baza ot audio-vizualni failcheta
koito e gotov da spodeli na prilichna
skorost. Nie ne iskame da se lishim ot
kachestven dostup do “mrezhata” , no
sushtevremenno ni blazni ideiata da gledame
niakoi i drug film.
Variant G:
Drugi ili kombinatsiia ot gornite.
Zabelezhki: S
metoda opisan po natatuk e nevuzmozhno!
da se postigne perfektno balansirane
na natovarvaneto pri “multipath route” tui
kato to se izvurshva za vruzka (ne za
paket), no pri dostatuchno goliam broi
paralelni vruzki se postiga dobra
prakticheska tochnost.
2. Razpredeliane
na trafik ot dva internet dostavchika.
2.1 Podgotovka
na iadroto
Neobhodimo e da
izteglim krupka
za iadroto koeto shte izpolzvame, sled
koeto da ia prilozhim.
root@uvigii:/usr/src/linux# patch -p1 < routes-2.6.7-10.diff
triabva da izberem :
[*] TCP/IP
networking
[*] IP: advanced
router
[*] IP: equal cost
multipath
v konfiguratsiiata
na iadroto, da kompilirame i instalirame.
2.2 Prouchvane
Triabva da znaem
kakvo tochno predlaga vseki edin ot
dostavchitsite, da izgotvim spisuk s
mrezhovite adresite na interfeisite
svurzani kum tiah. Adresite (IP) na lokalnite
survuri, adresite na mrezhite i mrezhovite
maski na lokalni i bulgarski ISP. Triabva
sushto da iziasnim dali lokalnite za ISP
adresi sa dostupni ot vunshni za nego
mrezhi.
Primer(fig.1):
eth0 inet
addr:192.168.168.17 Bcast:192.168.168.31
Mask:255.255.255.240
eth2 inet
addr:212.104.120.230 Bcast:212.104.230.255
Mask:255.255.255.0
wlan0 inet
addr:212.116.159.54 Bcast:212.116.159.63
Mask:255.255.255.224
eth0 e svurzan kum
LAN
eth2 e svurzan kum
ISP1 80 kbps + 512 kbps - lokalen
wlan0 e svurzan
kum ISP0 512 kbps – lokalen , ot koito 256 kbps BG
i 32 kbps drug,
w.a.r.e – adresut
na lokaniia survur na ISP1
m.i.r.r – adresut
na lokaniia survur na ISP0
Taz stupka ne e
zadulzhitelna no e dosta ulesnitelna.
Suzdavame direktoriia /etc/lb/ (ili kakto
na vas vi haresva) sled koeto suzdavame
niakolko konfiguratsionni faila sudurzhashti
adresite na mrezhite i hostovete koito
sme poluchili pri prouchvaneto. Vizh tochka
5.
lo_net0.conf
– lokalnite za ISP0 mrezhi
lo_net1.conf
– lokalnite za ISP1 mrezhi
bg_net1.conf
– bulgarskite za ISP1 mrezhi (koito i spored
ISP0 bi triabvalo da sa sushtite)
all_net.conf
– vsichki ostanali mrezhi
2.3 Ruting
tablitsi
SHTe ni bude
neobhodimo da pretsenim vsichki vuzmozhni
situatsii koito shte vuzniknat po vreme
na rabota i da gi obmislim vnimatelno!
V Linuks mogat
da sushtestvuvat niakolko ruting tablitsi
(man ip). TSelta ni e taka da gi podredim i
prioritezirame, che da poluchim zhelaniia
ot nas rezultat (A,B ili V). Izhozhdame ot
situatsiia v koiato sa konfigurirani
interfeisite, a shlyuza po podrazbirane
(default gateway) e konfiguriran kum ediniia
dostavchik. Za ulesnenie izpolzvame
sledniia shel skript (v kursiv):
#!/bin/bash
#/etc/lb/rc.lb
# This script
is done
by : Robert Kurjata Sep, 2003.
# feel free to
use it
in any usefull way
# Modifyed
Milan Enev
Jul, 2004.
##################
IP=/sbin/ip
PING=/bin/ping
EXTIF0=wlan0
EXTIP0=212.116.159.54
EXTM0=27
EXTGW0=212.116.159.33
EXTIF1=eth2
EXTIP1=212.104.120.230
EXTM1=24
EXTGW1=212.104.120.1
Nai
napred e neobhodimo da premahnem “default
gateway” v main (50) tablitsata, kakto i starite
pravila.
echo
"removing old
rules"
$IP rule del
prio 50
table main
$IP rule del
prio 201
from $EXTIP0/$EXTM0 table 201
$IP rule del
prio 202
from $EXTIP1/$EXTM1 table 202
$IP rule del
prio 211
table 211
$IP rule del
prio 212
table 212
$IP rule del
prio 220
table 220
$IP rule del
prio 221
table 221
da
izchistim tablitsite:
echo
"flushing
tables"
$IP route flush
table
201
$IP route flush
table
202
$IP route flush
table
211
$IP route flush
table
212
$IP route flush
table
220
$IP route flush
table
221
sled
koeto da gi premahnem
echo
"removing
tables"
$IP route del
table 201
$IP route del
table 202
$IP route del
table 211
$IP route del
table 212
$IP route del
table 220
$IP route del
table 221
pri
koeto main tablitsata triabva da izglezhda
po podoben nachin:
root@uvigii:~#
ip route show table main
192.168.168.16/28
dev eth0 proto kernel scope link src
192.168.168.17
212.116.159.32/27
dev wlan0 proto kernel scope link src
212.116.159.54
212.104.120.0/24
dev eth2 proto kernel scope link src
212.104.120.230
127.0.0.0/8
dev lo scope link
t.e.
da sudurzha samo putishta kum mrezhite
dostupni direktno prez lokalnite
interfeisi.
Suzdavame
dve(ili poveche) tablitsi, po edna za vseki
interfeis svurzan kum ISP. Tova se pravi
tui kato iskame na vruzki initsializirani
prez edin interfeis da bude otgovariano
prez sushtiia interfeis.
$IP rule add
prio 201
from $EXTIP0/$EXTM0 table 201
$IP rule add
prio 202
from $EXTIP1/$EXTM1 table 202
$IP route add
default
via $EXTGW0 dev $EXTIF0 src $EXTIP0 proto static table
201
$IP route
append
prohibit default table 201 metric 1 proto
static
$IP route add
default
via $EXTGW1 dev $EXTIF1 src $EXTIP1 proto static table
202
$IP route
append
prohibit default table 202 metric 1 proto
static
Sled
koeto suzdavame po edna tablitsa za
lokalniia trafik na vseki edin ot ISP.
(Mozhe da razkomentirame reda s eho i da
proverim kakvo tochno se generira pri
izpulnenieto na tazi chast ot skripta)
$IP rule add
prio 211
table 211
for i in
$(cat
/etc/lb/lo_net0.conf); do
#echo "$IP
route
add $i via $EXTGW0 dev $EXTIF0 src $EXTIP0 proto static able
211"
ip route add $i
via
$EXTGW0 dev $EXTIF0 src $EXTIP0 proto static table 211
done
$IP rule add
prio 212
table 212
for i in $(cat
/etc/lb/lo_net1.conf); do
#echo "$IP
route
add $i via $EXTGW1 dev $EXTIF1 src $EXTIP1 proto static able
212"
$IP route add
$i via
$EXTGW1 dev $EXTIF1 src $EXTIP1 proto static table
212
done
Suzdavame
edna tablitsa koiato sudurzha putishtata
kum bulgarskite mrezhi (opisani v faila
/eth/lb/bg_net1.conf). Tova e purvata tablitsa s
“multipath” route! Za vsiaka mrezha shte suzdadem
vuzmozhnost da bude dostupna prez vseki
edin ot interfeisite. Parameturut weight
ukazva kolko puti da se “polzva tozi
interfeis” predi da se izpolzva
drugiia(ite). Malko po podrobno: Ako se
opitame da dostignem mrezha ot opisanite
po dolu (bulgarski) ruting sistemata shte
nasochi paketa prez ediniia interfeis (
v sluchaia EXTIF0), pri opit za suzdavane na
vtora vruzka kum host ot tazi mrezha
paketut shte bude izpraten prez drugiia
interfeis (EXTIF1). Sledvashtite 5 vruzki shte
budat sushto prez vtoriia dostavchik.
Suotnoshenieto na parametrite weight za
purviia i vtoriia “route” bi triabvalo da e
sushtoto kakto suotnoshenieto na “bandwidth”
na tezi mrezhi za dvata ISP. Tozi podhod bi
mogul da ima po-razlichen rezultat ot
ochakvaniia! Po tozi nachin shte se opitame
da balansirame za vsiaka mrezha pootdelno.
Mozhe bi e po dobre da se generira po edno
pravilo (rule) za vsiaka mrezha, a “route” da
e samo 1. Pri koeto shte se balansira za BG
mrezhite kato tsialo. Pretsenkata ostaviam
na Vas.
echo "BG
Traffic"
$IP rule add
prio 220
table 220
for i in $(cat
/etc/lb/bg_net1.conf); do
$IP route add
$i table
220 proto static \
nexthop via
$EXTGW0 dev
$EXTIF0 weight 1\
nexthop via
$EXTGW1 dev
$EXTIF1 weight 6
# echo "
$IP route
add $i table 220 proto static \
# nexthop via
$EXTGW0
dev $EXTIF0 weight 1\
# nexthop via
$EXTGW1
dev $EXTIF1 weight 3"
done
Koeto
ne e lokalno ili bulgarsko nai veroiatno
e mezhdunarodno:
echo "Int.
Traffic"
$IP rule add
prio 221
table 221
$IP route add
default
table 221 proto static \
nexthop via
$EXTGW0 dev
$EXTIF0 weight 3\
nexthop via
$EXTGW1 dev
$EXTIF1 weight 1
$IP route flush
cache
#######################################
/etc/lb/rc.lb end ################################
Za
da “proveriavame” ot vreme na vreme
"gateway" (i vruzkata kum) na vseki ISP
mozhem da polzvame slednoto ne chak tolkova
elegantno no vse pak efektivno reshenie:
#while
: ; do
#
$PING -c 1 $EXTGW0 > /dev/null
2>&1
#
$PING -c 1 $EXTGW1 > /dev/null
2>&1
#
sleep 60
#done
Tova
shte "garantira" aktualnostta na
ruting tablitsite t.e. ako niakoi ot
interfeisite "padne" vsichki paketi
(kum internet) shte budat nasochvani prez
drugiia interfeis. Ako vruzkata se vdigne:
interfeisut shte se polzva otnovo.
3.Markirane na
paketi pristigashti ot lokalni, bulgarski
i mezhdunarodni iztochnitsi
Neobhodimo (ako
zhelaem da postavim niakakuv limit na
skorostta, koito da se doblizhava do
realnostta) e da znaem koi paket po koi
interfeis e pristignal, sushto taka e
neobhodimo da predpolozhim spored ISP
tozi paket dali pristiga ot “bulgarska”
mrezha ili ne (dosta ot dostavchitsite
izpolzvat prozrachni proksi survuri,
pri koeto paketa koito nie poluchavame
e generiran na mashinata na dostavchika).
3.1 Predvaritelno
markirani ot ISP paketi
V tazi situatsiia
triabva samo da opredelim kakvo i s kakva
stoinost markira ISP v hedura na IP paketite.
I da go izpolzvame za nashite tseli.
3.2 Markirane
na paketi
Edin ot vuzmozhnite
podhodi (drug e "man tc filter") e da
izpolzvame modula ”mark” na “iptables” (man
iptables). Sledvashtite redove sa izvadka ot
rc.firewall
koito polzvam v momenta. (siguren sum,
che kolegite programisti biha mogli da
izmisliat po elegantno reshenie)
#!/bin/sh
#/etc/rc.d/rc.firewall
#Milan Enev ,
Sep, 2002
function
mark_src {
for i in $(cat
$1); do
#echo "
$IPTABLES
-t mangle -A $2 -s $i -j MARK --set-mark
$3"
$IPTABLES -t
mangle -A
$2 -s $i -j MARK --set-mark $3
done
$IPTABLES -t
mangle -A
$2 -m mark --mark $3 -j RETURN
}
function
mark_dst {
$IPTABLES -t
mangle -N
$1_$2
$IPTABLES -t
mangle -A
$1 -m mark --mark $2 -j $1_$2
for i in `seq
$4 $5`;
do
$IPTABLES -t
mangle -A
$1_$2 -d $3$i/32 -j MARK --set-mark $(($2 |
$i))
done
}
#INTERFACE
SETTINGS
IPTABLES=/usr/sbin/iptables
EXTIF0="wlan0"
EXTIF1="eth2"
INTIF0="eth0"
INTIF1="eth1"
#IP
LONET0_M_F_T="18
30"
LONET0_M="192.168.168."
ALL="0/0"
##Files
#
LO_NET_EXTIF0="/etc/lb/lo_net0.conf"
LO_NET_EXTIF1="/etc/lb/lo_net1.conf"
BG_NET_EXTIF1="/etc/lb/bg_net1.conf"
ALL_NET="/etc/lb/all_net.conf"
##MARK
LO_MARK_EXTIF0="0x1000"
INT_MARK_EXTIF0="0x1200"
LO_MARK_EXTIF1="0x2000"
BG_MARK_EXTIF1="0x2100"
INT_MARK_EXTIF1="0x2200"
S
bitove ot 0-7 se markirat lokalnite (-d)
mashini (dostatuchno za klas “C” mrezha);
s bit 8 i 9 se markira dali paketa e s
lokalen - 00, bulgarski - 01 ili s mezhdunaroden
- 10 proizhod; s bitove 12 i 13 se markira
interfeisa po koito pristiga paketa
(-i). Naprimer paket pristigasht ot ISP1
(0x2000) ot bulgrski iztochnik (0x0100) bi
triabvalo da se markira s (0x2000 OR 0x0100) t.e.
s 0x2100.
$IPTABLES -t
mangle -N
MARK_0_S
$IPTABLES -t
mangle -N
MARK_0_D
$IPTABLES -t
mangle -N
MARK_1_S
$IPTABLES -t
mangle -N
MARK_1_D
Po
edna veriga za vhodiashtite paketi na vseki
interfeis svurzan kum ISP, po edna veriga
za izhodiashtite paketi na vseki interfeis
svurzan kum lokalnata mrezha.
$IPTABLES -t
mangle -A
PREROUTING -i $EXTIF0 -j MARK_0_S
$IPTABLES -t
mangle -A
PREROUTING -i $EXTIF1 -j MARK_1_S
V
zavisimost po koi interfeis e pristignal
paketa: toi se nasochva kum suotvetnata
veriga.
$IPTABLES -t
mangle -A
POSTROUTING -o $INTIF0 -j MARK_0_D
Ako
paketa e prednaznachen za lokalnata
mrezha svurzana chrez INTIF0 toi shte bude
nasochen kum MARK_0_D verigata.
#
Net;Chain;Mark
Funktsiiata
mark_src se izvikva sus slednite parametri:
fail s opisanie na lokalnite mrezhite
(i/ili hostove); verigata v koiato da se
generirat pravilata; stoinost na maskata
s koiato shte se markirat paketite popadnali
v tazi veriga. Tia suzdava pravila za
markirane na pristigashtite (ot ISP) paketi.
mark_src
$LO_NET_EXTIF0
MARK_0_S $LO_MARK_EXTIF0
S
tozi red se generirat pravila za markirane
na “lokalni” za ISP0 paketi.
mark_src
$ALL_NET
MARK_0_S $INT_MARK_EXTIF0
S
tozi red se generirat pravila za markirane
na vsichki (ne “lokalni”) za ISP0 paketi.
mark_src
$LO_NET_EXTIF1
MARK_1_S $LO_MARK_EXTIF1
S
tozi red se generirat pravila za markirane
na “lokalni” za ISP1 paketi.
mark_src
$BG_NET_EXTIF1
MARK_1_S $BG_MARK_EXTIF1
S
tozi red se generirat pravila za markirane
na za ISP1 paketi pristigashti ot bulgarski
mrezhi.
mark_src
$ALL_NET
MARK_1_S $INT_MARK_EXTIF1
S
tozi red se generirat pravila za markirane
na vsichki (ne “lokalni” i ne “bg”) za
ISP0 paketi.
#
Chain;Mark;Network_mark;FromIP;ToIP;
Funktsiiata
mark_dst se izvikva sus slednite parametri:
verigata v koiato da se generirat
pravilata; stoinost na maskata s koiato
shte se markirat paketite popadnali v
tazi veriga; adres na lokalnata mrezha;
dve chisla ukazvashti intervala za generirane
na pravila(primer ot 1 do 10). Tia suzdava
pravila za markirane na izlizashtite kum
lokalnata mrezha paketi. Tova stava kato
se prilozhi logicheskata operatsiia ILI
(OR) kum veche markiranite spored iztochnik
paketi i se dobavi adresa na poluchatelia
kato vtori bait kum stoinostta s koiato
se markira. Naprimer paket pristigasht
ot ISP1 (0x2000) ot bulgrski iztochnik (0x0100),
otivasht kum host s IP 192.168.168.18 (0x0012)
bi triabvalo da se markira s (0x2000 OR 0x0100
OR 0x0012) t.e. s 0x2112. 0x0012(hex) = 18
(dec)
mark_dst
MARK_0_D
$LO_MARK_EXTIF0 $LONET0_M $LONET0_M_F_T
S
tozi red se generirat pravila za markirane
na “lokalni” za ISP0 paketi, kakto i
tehniia poluchatel
mark_dst
MARK_0_D
$INT_MARK_EXTIF0 $LONET0_M $LONET0_M_F_T
S
tozi red se generirat pravila za markirane
na vsichki (ne “lokalni”) za ISP0 paketi,
kakto i tehniia poluchatel
mark_dst
MARK_0_D
$LO_MARK_EXTIF1 $LONET0_M $LONET0_M_F_T
S
tozi red se generirat pravila za markirane
na “lokalni” za ISP1 paketi, kakto i
tehniia poluchatel
mark_dst
MARK_0_D
$BG_MARK_EXTIF1 $LONET0_M $LONET0_M_F_T
S
tozi red se generirat pravila za markirane
na za ISP1 paketi pristigashti ot bulgarski
mrezhi, kakto i tehniia poluchatel
mark_dst
MARK_0_D
$INT_MARK_EXTIF1 $LONET0_M $LONET0_M_F_T
S
tozi red se generirat pravila za markirane
na vsichki (ne “lokalni” i ne “bg”) za
ISP0 paketi, kakto i tehniia poluchatel
echo
"-Enabbling
SNAT..."
#$IPTABLES -t
nat -A
POSTROUTING -o $EXTIF0 -j SNAT –to source
a.b.c.d
#$IPTABLES -t
nat -A
POSTROUTING -o $EXTIF1 -j SNAT –to source
a.b.e.f
$IPTABLES -t
nat -A
POSTROUTING -o $EXTIF0 -j MASQUERADE
$IPTABLES -t
nat -A
POSTROUTING -o $EXTIF1 -j MASQUERADE
NAT (bez
komentar)
4. Ogranichavane
na skorost
Mozhe da
izpolzvame kakvoto pretsenim za polezno
v sluchaia. Edno dobro reshenie e HTB.
HTB e podhodiasht v sluchaite kogato ot ISP
poluchavame dostup do internet s fiksirana
skorost. S negova pomosht mozhem da opredelim
“garantirana” (rate - parametur) za vseki
potrebitel “bandwidth” pri koeto neizpolzvaniia
ot ot drugite klienti trafik se razpredelia
proportsionalno (maksimalnata mu stoinost
se dava s parametura - ceil) mezhdu aktivnite
potrebiteli. – fig.2. Razbira se, vuzmozhno
e da grupirame klasovete v zavisimost
ot uslugite (survisite: http, ftp ...) koito
se polzvat, ot adresite na iztochnitsite
ili poluchatelite na informatsiiata.
Tui kato nie
mozhem da ogranichavame “skorostta”
samo na izhodiashtiia trafik, no ne i na
vhodiashtiia logichno e da zakachim HTB na
izhoda na interfeisa svurzan s lokalnata
mrezha.
1:1 e "root" klas -
klasut koito sudurzha vsichki
"podklasove"
1:2 e klasut v koito
shte ogranichava skorostta na izprashtane
(ot rutera kum LAN) na pristignalite ot
ISP0 paketi.
1:3 e klasut v koito shte
ogranichava skorostta na izprashtane na
pristignalite ot ISP1 paketi
1:21 e klasut
v koito shte ogranichava skorostta na
izprashtane na paketi na pristignalite
ot lokalnite za ISP0 mrezhi.
1:22 e klasut
v koito shte ogranichava skorostta na
izprashtane na paketi na pristignalite
ot bulgarski i mezhdunarodni za ISP0
mrezhi.
1:31 e klasut v koito shte ogranichava
skorostta na izprashtane na paketi na
pristignalite ot lokalnite za ISP1
mrezhi.
1:32 e klasut v koito shte ogranichava
skorostta na izprashtane na paketi na
pristignalite ot "bulgarskite" za
ISP1 mrezhi.
1:33 e klasut v koito shte
ogranichava skorostta na izprashtane na
paketi na pristignalite ot "mezhdunarodni"
za ISP1 mrezhi.
Za klas 1:21 sa zakacheni
"leaf"(kraini, za koito niama zakacheni
drugi) klasovete ot 1:4114 do 1:4126 po edin
za vseki klient. Te sa kraini i v tiah se
izvurshva fakticheskoto ogranichavane
(shape) na skorostta. Za vseki potrebitel
(IP) ima po 4KB "garantiran" "lokalen"
"bandwidth" s vuzmozhnost da se pokachva
do 64KB ako drugite klienti ne polzvat
svoia dial v momenta.
Za klas
1:22 sa zakacheni "leaf" klasovete ot
1:4626 do 1:4638 po edin za vseki klient. Za
vseki potrebitel (IP) ima po 1KB "garantiran"
"bg + mezhdunaroden" "bandwidth" s
vuzmozhnost da se pokachva do 10KB ako
drugite klienti ne polzvat svoia dial v
momenta.
Vazhno e da se otbelezhi, che
klasovete 1:21 i 1:22 v sluchaia! sa ogranicheni!
t.e te ne mogat da "zaemat" ot
shodnite/podobni (siblings - koito imat obsht
"parent" klas) t.e. 1:21 ot 1:22 i obratno.
Tova e napraveno s tsel da se otrazi
maksimalno tochno predlaganite ot ISP0
usloviia (sravni s fig.1).
Za vseki kraen
(leaf) klas e zakachena SFQ
opashka (queue). Tia osiguriava ravnopravie
na vsiaka otdelna vruzka v tozi klas (ne
dopuska niakoia otdelna vruzka da dominira
nad drugite kato izrazhodva tseliia
"bandwidth" na klasa).
Za klas 1:31 sa
zakacheni "leaf" klasovete ot 1:8210 do
1:8222 po edin za vseki klient. Za vseki
potrebitel (IP) ima po 4KB "garantiran"
"lokalen" "bandwidth" s vuzmozhnost
da se pokachva do 64KB ako drugite klienti
ne polzvat svoia dial v momenta.
Za klas
1:32 sa zakacheni "leaf" klasovete ot
1:8466 do 1:8478 po edin za vseki klient. Za
vseki potrebitel (IP) ima po 4KB "garantiran"
"bg" "bandwidth" s vuzmozhnost da
se pokachva do 32KB ako drugite klienti
ne polzvat svoia dial v momenta.
Za klas
1:33 sa zakacheni "leaf" klasovete ot
1:8722 do 1:8734 po edin za vseki klient. Za
vseki potrebitel (IP) ima po 4KB "garantiran"
"mezhdunaroden" "bandwidth" s
vuzmozhnost da se pokachva do 4KB ako
drugite klienti ne polzvat svoia dial v
momenta.
Vazhno e da se
otbelezhi, che klas 1:31 mozhe! da zaema!
"bandwidth" ot klasove 1:32 i 1:33 t.e. ako
v momenta niama "bg" ili "mezhdunaroden"
ili toi e s po-malka ot maksimalnata
(ceil) stoinost (fig.1).
Sus
sledniia
rc.tc
skript
mozhe da generirame pravila otgovariashti
na postanovkata pokazana na fig.2. Imenata
na klasovete otgovariat na imenata na
verigite suzdadeni v POSTROUTING verigata
na mangle tablitsata, kakto i na stoinostta
s koiato se markirat popadashtite v tiah
paketi. Verigite v iptables, mogat da se
polzvat za oprostena statistika(iptables
-t mangle -L -nv) na preminalite paketi, tiahniia
iztochnik i poluchatel t.e. za vseki
potrebitel (IP) mozhe da vidim poluchenite
ot nego "bulgarski, lokaleni i
mezhdunarodeni" paketi (i baitove) po
vseki interfeis (ot vseki ISP po otdelno).
#!/bin/sh
#/etc/rc.d/rc.tc
#Milan Enev
2003
# HTB
HTBVER="0.0.1"
INTIF0="eth0"
EXTIF0="wlan0"
EXTIF1="eth2"
TC="/sbin/tc"
LOIP0="192.168.168.17"
CLI0="192.168.168.18"
LONET0_M_F_T="18
30"
LO_MARK_EXTIF0="0x1000"
INT_MARK_EXTIF0="0x1200"
LO_MARK_EXTIF1="0x2000"
BG_MARK_EXTIF1="0x2100"
INT_MARK_EXTIF1="0x2200"
function start
{
#
#-=-=-=-=-=-=-=-=-
Outgoing Wlan0 -=-=-=-=-=--=-=
$TC qdisc add
dev
$EXTIF0 root handle 1: htb default 1 r2q 1
$TC class add
dev
$EXTIF0 parent 1:0 classid 1:1 htb rate 8kbps ceil 2mbps
$TC qdisc add
dev
$EXTIF0 parent 1:1 sfq perturb 10
#-=-=-=-=-=-=-=-=- End
Outgoing Wlan0 -=-=-=-=-=-=
$TC qdisc add
dev
$INTIF0 root handle 1: htb default 11
# Class ID's
$TC class add
dev
$INTIF0 parent 1:0 classid 1:1 htb rate 10mbps ceil 10mbps
$TC class add
dev
$INTIF0 parent 1:1 classid 1:2 htb rate 64kbps ceil 64kbps
$TC class add
dev
$INTIF0 parent 1:1 classid 1:3 htb rate 64kbps ceil 64kbps
$TC class add
dev
$INTIF0 parent 1:1 classid 1:4 htb rate 64kbps ceil 64kbps
#
$TC class add
dev
$INTIF0 parent 1:1 classid 1:11 htb rate 1mbps ceil
6mbps
$TC qdisc add
dev eth0
parent 1:11 handle 11: sfq perturb 10
###
interface;parent
class;classid;rate;ceil;Priority;FromIP;ToIP All in
KiloBytes !!!
$TC class add
dev
$INTIF0 parent 1:2 classid 1:21 htb rate 32kbps ceil 64kbps
shf $INTIF0
1:21
$LO_MARK_EXTIF0 4 64 40 $LONET0_M_F_T
$TC class add
dev
$INTIF0 parent 1:2 classid 1:22 htb rate 10kbps ceil 10kbps
shf $INTIF0
1:22
$INT_MARK_EXTIF0 1 10 10 $LONET0_M_F_T
$TC class add
dev
$INTIF0 parent 1:3 classid 1:31 htb rate 32kbps ceil 32kbps
shf $INTIF0
1:31
$LO_MARK_EXTIF1 4 64 40 $LONET0_M_F_T
$TC class add
dev
$INTIF0 parent 1:3 classid 1:32 htb rate 32kbps ceil 32kbps
shf $INTIF0
1:32
$BG_MARK_EXTIF1 4 32 20 $LONET0_M_F_T
$TC class add
dev
$INTIF0 parent 1:3 classid 1:33 htb rate 4kbps ceil 4kbps
shf $INTIF0
1:33
$INT_MARK_EXTIF1 1 4 10 $LONET0_M_F_T
}
function stop
{
$TC qdisc del
dev
$INTIF0 root
$TC qdisc del
dev
$EXTIF0 root
$TC qdisc del
dev
$EXTIF1 root
}
function shf
{
#Shaper,Handle,Filter,
#device;parent;rate;ceil;FromIP;ToIP
#
#
for i in `seq
$7 $8`;
do
#echo "$TC
class
add dev $1 parent $2 classid 1:$(($3 | $i)) htb rate $4kbps
ceil
$5kbps
#$TC qdisc add
dev $1
parent 1:$(($3 | $i)) handle $(($3 | $i)) sfq perturb 10
#$TC filter add
dev $1
protocol ip parent 1:0 prio $6 handle $(($3 | $i)) fw flowid
1:$(($3
| $i))" >> /etc/lb/log.txt
$TC class add
dev $1
parent $2 classid 1:$(($3 | $i)) htb rate $4kbps ceil $5kbps
$TC qdisc add
dev $1
parent 1:$(($3 | $i)) handle $(($3 | $i)) sfq perturb 10
$TC filter add
dev $1
protocol ip parent 1:0 prio $6 handle $(($3 | $i)) fw flowid
1:$(($3
| $i))
done
}
##
interface;parent
class;classid;rate;ceil;Priority;FromIP;ToIP All in
KiloBytes !!!
stop
start
5.Zaklyuchenie. Vruzki kum
drugi
dokumenti.
Izviniavam se za
vsichki netochnosti, nedurazumeniia i
greshki. Vsiakakvi korektsii i predlozheniia
sa dobre doshli.
http://www.ssi.bg/~ja/#routes
Static, Alternative Routes, Dead Gateway Detection,
NAT
http://www.ssi.bg/~ja/nano.txt
HowTo za gornoto (izklyuchitelno podrobno
i polezno!!!)
http://www.lartc.org/howto
zadulzhitelno!
http://ip.ludost.net/
Mnogo polezen sait! Ot nego mozhem da si
nabavim spisuk s "bg. mrezhite".
20040812114000