ot Uvigii(18-08-2004)

reiting (68)   [ dobre ]  [ zle ]

Printer Friendly Variant za otpechatvane

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



<< Instalirane na SuSE Linux 9.1 [CHast 3] | Supermount za linux-2.6.x ili kak da zabravim za mount >>