analiza koriŠtenja redundantnih poveznica sa …free-zg.t-com.hr/room10/downloads/diplomski.pdf ·...

56
SVEUČILIŠTE U ZAGREBU FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA DIPLOMSKI RAD br. 3032 ANALIZA KORIŠTENJA REDUNDANTNIH POVEZNICA SA SVRHOM POVEĆANJA UKUPNOG KAPACITETA Ivan Sokol Zagreb, rujan 2008.

Upload: others

Post on 21-Oct-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

  • SVEUČILIŠTE U ZAGREBU FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA

    DIPLOMSKI RAD br. 3032

    ANALIZA KORIŠTENJA REDUNDANTNIH POVEZNICA SA SVRHOM POVEĆANJA

    UKUPNOG KAPACITETA

    Ivan Sokol

    Zagreb, rujan 2008.

  • Mentor rada: Prof. dr. sc. Alen Bažant Voditelj rada: Vedran Mikac, dipl. ing.

  • Sadržaj Uvod ........................................................................................................................................... 1

    1. Opis korištenih alata........................................................................................................... 2

    1.1. Osnove aplikacije iptables.......................................................................................... 2

    1.1.1. Popis korištenih naredbi u aplikaciji Iptables .................................................... 5

    1.2. Automat stanja............................................................................................................ 6

    1.3. Protokol TCP.............................................................................................................. 8

    1.4. Strategija usmjeravanja .............................................................................................. 9

    2. Opis korištenja redundantne poveznice............................................................................ 11

    2.1. Prethodni radovi ....................................................................................................... 11

    2.2. Metoda rada.............................................................................................................. 12

    2.2.1. Paketski način rada........................................................................................... 13

    2.2.2. Konekcijski način rada ..................................................................................... 14

    2.3. Opis korištenih naredbi ............................................................................................ 16

    2.3.1. Pripremne skripte ............................................................................................. 17

    2.3.2. Glavne skripte .................................................................................................. 19

    2.3.3. Pomoćne skripte ............................................................................................... 28

    3. Testiranje i rezultati.......................................................................................................... 33

    3.1. Postupak testiranja.................................................................................................... 36

    Zaključak.................................................................................................................................. 48

    Literatura .................................................................................................................................. 49

    Skraćenice ................................................................................................................................ 50

    Popis stranih izraza................................................................................................................... 51

    Dodatak .................................................................................................................................... 52

  • 1

    Uvod

    U ovom radu obrađuje se mogućnost korištenja redundantnih poveznica u svrhu

    povećanja ukupnog raspoloživog kapaciteta. U prošlosti su samo važniji serveri i vrlo važne

    poveznice kod poslovnih korisnika koristili redundantnost. Kućni korisnici koji su se spajali

    modemskim vezama nisu imali tu mogućnost. U slučaju prekida veze nije bilo moguće u vrlo

    kratkom vremenu ponovno spajanje na Internet. Pojavom širokopojasnog pristupa Internetu i

    uvođenjem xDSL (engl. Digital Subscriber Line) i kabelskih tehnologija otvorila se

    mogućnost korištenja redundantnosti. Primjenom bežične tehnologije u LAN-u i naglim

    širenjem usluga besplatnog pristupa Internetu prosječnom je korisniku omogućen pristup

    Internetu preko više pristupnih mreža.

    Cilj rada je postići iskoristivost dodatnog prijenosnog pojasa (engl. bandwidth) redundantne

    poveznice. Potrebno je ispuniti uvjet da preusmjeravanje preko redundantne poveznice ne

    utječe na više slojeve mrežnog složaja. Zbog toga se sva preusmjeravanja vrše na mrežnom

    sloju OSI (engl. Open System Interconnection Reference Model) referentnog modela.

    Preusmjeravanje se vrši samo nad protokolom TCP (engl. Transmission Control Protocol).

    Ostali protokoli se ne usmjeravaju preko dvije poveznice.

    Kontrola opterećenja (engl load balancing) radi na način da usmjerava konekcije prema

    određenoj poveznici, ovisno o korisničkoj postavci. Kontrola opterećenja je statička, što znači

    da se postavlja samo jednom. Ako ipak dođe do promjene u propusnosti pristupne mreže, što

    je čest slučaj kod bežičnih mreža, tada korisnik može posebnom skriptom promijeniti

    parametre kontrole opterećenja. Redundantnost poveznica je ostvarena dodatnom skriptom

    koja omogućuje detekciju prekida bilo koje poveznice i preusmjeravanje prometa na dostupnu

    poveznicu.

    Analiza rada programa testirana je u laboratoriju na dvjema pristupnim mrežama. Jednu

    pristupnu mrežu je činila LAN mreža kojoj se pristupalo preko Ethernet mrežne kartice dok je

    druga pristupna mreža bežična mreža kojoj se pristupalo preko WLAN USB kartice.

    Testiranje je obavljeno u 4 različita scenarija ovisno o tome pristupa li se pristupnoj mreži

    preko NAT-a ili direktno. Za potrebe testiranja koristio se protokol torrent i klijentski

    program µTorrent.

  • 2

    1. Opis korištenih alata

    U svrhu izrade diplomskog rada korišten je operativni sustav Linux distribucija Ubuntu

    8.04. Linux je korišten upravo zbog aplikacije iptables koja u sprezi sa strategijom

    usmjeravanja (engl. Policy routing) omogućuje vrlo složene operacije nad paketima mrežnog

    sloja. U svrhu razumijevanja načina rada tih alata u ovom poglavlju se nalazi osnovni opis

    korištenih alata.

    1.1. Osnove aplikacije iptables

    Iptables je aplikacija u operativnom sustavu Linux koja koristi definirani skup pravila

    te filtrira i podešava pakete koji dolaze na računalo i odlaze s njega. Podržana je od verzije

    kernela 2.4. U osnovi aplikacija radi tako da filtrira i podešava pakete prilikom njihova

    prolaska kroz mrežni složaj (engl. Network stack). Sastoji se od lanaca i tablica u kojima se

    nalaze pravila. Postoji 5 lanaca (PREROUTING, INPUT, FORWARD, OUTPUT i

    POSTROUTING) i 4 tablice (raw, mangle, nat i filter). Sve ove informacije mogu se naći u

    iptables vodiču [1].

    Aplikacija iptables koja se koristi u ovom radu mora biti verzije 1.3.8 ili novije. U vrijeme

    početka pisanja ovog rada aktualna verzija Ubuntu Linux distribucije bila je 7.10 i nije imala

    ugrađenu aplikaciju iptables verzije 1.3.8. Tada je bilo potrebno prevesti (engl. compile)

    jezgru (engl. kernel) s ugrađenom novom verzijom aplikacije iptables jer se samo na taj način

    aplikacija može nadograditi. Na svu sreću, Ubuntu Linux verzija 8.04 ima podržanu verziju

    1.3.8. Ta verzija je važna jer ima podržan uvjet statistic koji omogućuje raspoređivanje paketa

    na dva sučelja uz navedenu vjerojatnost. Konkretno, radi se o sljedećem uvjetu:

    -m statistic --mode random --probability $X

    Uvjet određuje broj paketa koji će zadovoljiti pravilo u kojem se taj kod nalazi. Znači, ako

    neki broj paketa zadovolji ostale uvjete u pravilu, tada će samo onaj postotak koji je naveden

    u varijabli $X potvrdno proći. Ostali paketi se odbacuju kao da uopće nisu zadovoljili pravilo

    i dalje prosljeđuju kroz lanac.

  • 3

    Kada mrežni uređaj primi paket, prosljeđuje ga pokretačkom programu (engl. driver) u jezgri.

    Paket tada prolazi kroz mrežni složaj te se prosljeđuje odgovarajućoj aplikaciji ili se dalje

    prosljeđuje na drugo mrežno sučelje, ako takvo sučelje postoji.

    Prikaz organizacije tablica i lanaca aplikacije prikazan je slikom (Sl. 1.1)

    Sl. 1.1 Prikaz organizacije lanaca i tablica

  • 4

    Lanci nam govore gdje se primjenjuje određeno pravilo. U PREROUTING lancu

    primjenjuju se pravila nad paketima koji dolaze iz mreže na računalo prije donošenja odluke o

    usmjeravanju. Nakon donošenja odluke o usmjeravanju paket se može proslijediti u dva

    smjera: prema INPUT lancu i lokalnoj aplikaciji ili prema FORWARD lancu i dalje prema

    mrežnom sučelju. Lokalno generirani paket prolazi kroz OUTPUT lanac nakon kojeg se

    donosi odluka o usmjeravanju. U idućem koraku paket prolazi kroz POSTROUTING lanac i

    dalje u mrežu. Osim predefiniranih lanaca korisnici mogu dodati i svoje vlastite lance u

    kojima će se nalaziti određeni set pravila. Naravno da svi lanci moraju biti smješteni u tablicu

    koja podržava određena pravila. Ako želimo kreirati lanac USER i u njemu filtrirati pakete, to

    ćemo napraviti naredbom

    ~# iptables –t filter –N USER

    Oznaka ~# označava da naredbu moramo upisati kao glavni korisnik (engl. root user). Ako

    želimo kreirati lanac USER u kojem ćemo mijenjati zaglavlja paketa, tada to činimo

    naredbom

    # iptables –t mangle –N USER

    Tablice definiraju kakva pravila se primjenjuju u određenom lancu. Za pojedinu tablicu

    vrijede samo određena pravila. Mangle tablica služi za promjenu informacija u zaglavlju

    paketa kao što su TOS (engl. Type Of Service) i TTL (engl. Time To Live) ili MARK oznaka u

    jezgri. Nat tablica služi u svrhu formiranja DNAT (engl. Destination NAT) i SNAT (engl.

    Source NAT) pravila. Filter tablica služi za odbacivanje ili propuštanje paketa. Raw tablica

    služi za označavanje paketa oznakom NOTRACK. Ova tablica je nova i dostupna samo u

    posljednjim revizijama jezgre 2.6. Ako u nekoj naredbi nije naveden naziv tablice, tada se radi

    o filter tablici.

    Kada paket dođe do računala, jezgra prolazi kroz postavljena pravila i traži je li pravilo

    primjenjivo na taj paket. Pravila imaju sljedeću sintaksu:

    ~# iptables [-t tablica] naredba [uvjet] [izraz]

    Ako je pravilo primjenjivo na paket tada jezgra postupa s njim na način definiran u pravilu.

    Može se postaviti osnovno pravilo koje će se primijeniti na sve pakete koji su prošli kroz sva

    pravila bez ispunjenog uvjeta. Na primjer, filter tablica može se podesiti da odbacuje sve

    pakete koji su prošli kroz sva pravila u tom lancu, što se često koristi kod implementacije

    vatrozida (engl. firewall).

  • 5

    1.1.1. Popis korištenih naredbi u aplikaciji Iptables

    U skriptama se koristi nekoliko naredbi aplikacije iptalbes. Najvažnije naredbe su:

    1. Naredba za ispis lanca (engl. list)

    Služi za ispis svih pravila nekog lanca. Ako ime lanca nije navedeno, naredba ispisuje sve

    lance neke tablice. Ako naziv tablice nije naveden, koristi se filter tablica. Može se koristiti s

    nekoliko opcija, od kojih su neke:

    • –n (engl. numeric) koja ispisuje brojevne vrijednosti kao što je IP adresa umjesto

    znakovne vrijednosti;

    • -v (engl. verbose) opcija koja ispisuje dodatne informacije kao što je adresa sučelja i

    opcije u pravilima.

    Primjer naredbe ispisa pravila iz INPUT lanca filter tablice:

    ~# iptables -L INPUT

    2. Naredba za brisanje pravila iz lanca (engl. delete)

    Ta naredba briše pravilo iz lanca. To može obaviti na dva načina. Jedan način je

    upisivanjem uvjeta koji se primjenjuju u pravilu. Primjer brisanja pravila koje filtrira pakete

    na osnovu odredišnih vrata iz INPUT tablice je:

    ~# iptables –D INPUT --dport 80 -j DROP

    Drugi način je upisivanjem rednog broja pravila. Iduća naredba briše prvo pravilo iz tablice

    OUTPUT:

    ~# iptables –D OUTPUT 1

    3. Naredba za poništavanje brojača (engl. zero)

    Kada neki paket zadovolji određeno pravilo, tada se brojač tog pravila uveća za 1.

    Naredba služi za poništavanje brojača u lancu na vrijednost 0. U radu je to potrebno da se vidi

    omjer paketa koji odlaze na pojedino sučelje. Sljedeća naredba poništava brojače INPUT

    lanca u mangle tablici:

    ~# iptables –t mangle –Z INPUT

    4. Naredba za dodavanje novog lanca (engl. new)

    U aplikaciji postoji 5 osnovnih lanaca. Ako korisnik želi dodati svoj vlastiti lanac, to radi

    naredbom:

  • 6

    ~# iptables –t nat –N USER_CHAIN

    Naredbom se u tablicu nat dodaje novi lanac USER_CHAIN. Ime lanca ne mora nužno biti

    napisano velikim slovima, ali je zbog čitljivosti bolje koristiti velika slova.

    5. Naredba za umetanje pravila (engl. insert)

    Ovom naredbom umećemo novo pravilo na određeno mjesto u lancu.

    ~# iptables –I INPUT 1 --dport 80 –j ACCEPT

    Gornjom naredbom umetnuto je novo pravilo na prvo mjesto INPUT lanca.

    6. Naredba za dodavanje pravila u lanac (engl. append)

    Ovom naredbom dodaje se pravilo na prvo slobodno mjesto u lancu. Ako u lancu nema

    nikakvih pravila, tada se novo pravilo dodaje na vrh.

    ~# iptables –A INPUT --sport 443 –j ACCEPT

    Gornja naredba dodaje pravilo u INPUT lanac na prvo slobodno mjesto.

    7. Naredba za zamjenu pravila (engl. replace)

    Naredba zamjenjuje pravilo na navedenom mjestu novim pravilom. Pravilo koje je već

    postojalo na tom mjestu se briše. Primjer naredbe je:

    ~# iptables –R INPUT 1 --dport 8080 –j ACCEPT

    1.2. Automat stanja

    Automat za praćenje stanja konekcije je sastavni dio aplikacije iptables. Unutar

    aplikacije paketi se mogu pridružiti određenoj konekciji. Na taj način izvodi se usmjeravanje i

    filtriranje svih paketa koji pripadaju istoj konekciji, a ne svakog paketa pojedinačno. Paketi se

    mogu nalaziti u 4 moguća stanja: NEW, ESTABLISHED, RELATED i INVALID. Svako

    praćenje konekcije vrši se unutar posebnog okvira u jezgri koji se naziva conntrack.

    Conntrack može biti sastavni dio jezgre ili može biti implementiran kao modul. Konekcija se

    prati pomoću specifičnih informacija vezanih uz protokol koji se koristi. Te informacije se

    koriste da bi conntrack znao u kojem stanju se trenutno nalazi tok podataka. Na primjer, kod

    praćenja UDP toka podataka koriste se specifične informacije tog toka, kao što su izvorišna i

    odredišna IP adresa te izvorišna i odredišna vrata (engl. port). Upotreba conntrack modula za

    praćenje paketa unosi dodatno kašnjenje u obradi paketa. Praćenje paketa odvija se u

    PREROUTING lancu za dolazne i OUTPUT lancu za lokalno generirane pakete. Sve

  • 7

    promjene stanja odvijaju se u PREROUTING lancu. Ako pošaljemo prvi paket toka,

    konekcija će u OUTPUT lancu dobiti stanje NEW, a prilikom primanja odgovora na taj paket,

    dolazni paket u PREROUTING lancu mijenja stanje konekcije u ESTABLISHED. Ako je

    prvi paket poslan od strane drugog računala, tada će konekcija dobiti stanje NEW u

    PREROUTING lancu.

    Stanje conntrack modula se može provjeriti ispisom datoteke /proc/net/ip_conntrack

    naredbom cat. Primjer ispisa jedne konekcije je sljedeći:

    tcp 6 117 SYN_SENT src=192.168.1.6 dst=192.168.1.9 sport=32775 \

    dport=22 [UNREPLIED] src=192.168.1.9 dst=192.168.1.6 sport=22 \

    dport=32775 use=2 − Prva i druga vrijednost govore o kojem protokolu se radi (druga vrijednost je

    numerička oznaka protokola). − Vrijednost 117 je kontrola vremena koja nam govori koliko sekundi će conntrack

    modul pratiti konekciju ako se ne primijeti nijedan paket. − SYN_SENT unos govori u kojem stanju je trenutno konekcija. − Zatim su zapisane izvorišna i odredišna IP adresa kao i izvorišni i odredišni broj

    vrata. − Ključna riječ UNREPLIED govori da se očekuje odgovor od druge strane u

    komunikaciji i ispisuje parametre koje bi taj paket trebao imati.

    Conntrack modul može pratiti samo određen broj konekcija ovisno o raspoloživoj memoriji.

    Na računalu sa 128MB RAM-a moguće je pratiti 8192 konekcije, a na računalu sa 256MB

    RAM-a moguće je pratiti 16376 konekcija. Ovu vrijednost moguće je promijeniti u

    „/proc/sys/net/ipv4/ip_conntrack_max“ datoteci.

    Paketi se unutar jezgre mogu nalaziti u različitim stanjima, ovisno o protokolu koji se koristi.

    Međutim, izvan jezgre paketi se nalaze samo u 4 moguća stanja: NEW, ESTABLISHED,

    RELATED i INVALID.

    • Stanje NEW

    Ovo stanje govori da je to prvi paket toka. To može biti SYN paket u procesu uspostave TCP

    konekcije.

    • Stanje ESTABLISHED

    Da bi konekcija dospjela u ovo stanje potrebno je da računalo pošalje paket drugom računalu i

    dobije odgovor na poslani paket. Praćena konekcija tada prelazi iz stanja NEW u stanje

    ESTABLISHED.

    • Stanje RELATED

  • 8

    Konekcija će dospjeti u ovo stanje kada neka druga uspostavljena konekcija stvara novu

    konekciju. Primjer toga je kontrolna FTP konekcija koja otvara podatkovnu FTP konekciju za

    prijenos podataka. U tom slučaju će kontrolna konekcija biti u stanju ESTABLISHED, a

    podatkovna u stanju RELATED.

    • Stanje INVALID

    Ovo stanje nam govori da paket ne može biti identificiran ili da nema svoje pridruženo stanje.

    Jedan od razloga za ovo može biti nedostatak memorije.

    1.3. Protokol TCP

    Aplikacija iptables prati konekcije pomoću automata stanja. Protokol TCP je konekcijski

    orijentiran protokol koji prati stanje veza i omogućava pouzdan prijenos podataka. Uspostava

    konekcije se vrši razmjenom SYN i ACK paketa. Prvi paket koji se šalje je SYN paket na koji

    druga strana odgovara sa SYN/ACK paketom, kao što je prikazano na idućoj slici (Sl. 1.2).

    Sl. 1.2 Uspostavljanje TCP konekcije

    Ako ne dođe do isteka vremenske kontrole za vrijeme prijenosa podataka stanje konekcije će

    uvijek biti ESTABLISHED. Kod raskida konekcije događa se sljedeća situacija:

  • 9

    Sl. 1.3 Raskid TCP konekcije

    Ovako se na uobičajen način zatvara konekcija, kada se čeka na posljednji ACK paket.

    Konekciju je moguće zatvoriti i RST (engl. reset) paketom kada se ne čeka na ACK paket

    nego se konekcija trenutno prekida. Do prekida konekcije može doći i prilikom isteka

    vremenske kontrole (ako dođe do zagušenja u mreži). U tablici (Tablica 1.1) prikazane su

    vrijednosti vremenske kontrole za pojedina stanja konekcije u jezgri.

    Stanje NONE ESTABLISHED SYN_SENT SYN_RECV FIN_WAIT

    Vrijednost vremenske kontrole

    30 minuta 5 dana 2 minute 60 sekundi 2 minute

    Stanje TIME_WAIT CLOSE CLOSE_WAIT LAST_ACK LISTEN

    Vrijednost vremenske kontrole

    2 minute 10 sekundi 12 sati 30 sekundi 2 minute

    Tablica 1.1 Vrijednosti vremenske kontrole

    Ove vrijednosti nisu fiksno postavljene, već se mogu mijenjati u različitim revizijama Linux

    jezgre, ali ih, iako nije preporučljivo, korisnici sami mogu mijenjati.

    1.4. Strategija usmjeravanja

    Linux operativni sustav ima mogućnost korištenja više tablica usmjeravanja [2]. Osim dvije

    osnovne (lokalne i glavne), može se kreirati i koristiti još 252 vlastite tablice usmjeravanja.

  • 10

    Tablice usmjeravanja koriste se u sprezi sa strategijom usmjeravanja. Strategija usmjeravanja

    (engl. Policy routing) nam omogućuje primjenu različitih tablica usmjeravanja za različite

    korisnike ovisno o postavljenom uvjetu [3]. Time je omogućeno da u sprezi sa connmark

    modulom i fwmark uvjetom različite pakete šaljemo na različite tablice usmjeravanja.

    Da bi se koristila strategija usmjeravanja, trebaju se najprije dodati vlastite tablice

    usmjeravanja. Njih dodajemo upisivanjem prioriteta i rednog broja tablice naredbom:

    # echo [redni broj] [ime tablice] >> /etc/iproute2/rt_tables

    Redni broj tablice mora biti u rasponu od 1 do 252. Ostale vrijednosti su rezervirane za:

    lokalnu tablicu (engl. local table) - redni broj 255;

    glavnu tablicu (engl. main table) - redni broj 254;

    osnovnu tablicu (engl. default table) - redni broj 253);

    nedefinirana (engl. undefined table) - redni broj 0.

    Ispis pojedine tablice usmjeravanja postiže se upisivanjem naredbe:

    # ip route show table [ime tablice]

    Prilikom odabira rute usmjeravanja jezgra provjerava strategiju usmjeravanja, počevši od

    najvišeg prioriteta (prioritet 0) do najnižeg prioriteta (prioritet 32767). Korištenjem naredbe

    # ip rule show

    na ekranu se ispisuju sva pravila

    0: from all lookup local

    32766: from all lookup main

    32767: from all lookup default

    Prvo se provjerava lokalna tablica usmjeravanja, nakon nje glavna i tek na kraju

    osnovna tablica usmjeravanja. Postoji i cache tablica usmjeravanja u kojoj se nalaze već

    uspostavljene rute i koja se provjerava prije lokalne tablice usmjeravanja. Ako dodamo

    pravilo za vlastitu tablicu, tada će se i to pravilo sa svojim prioritetom pojaviti u ispisu. U

    slučaju da prioritet pravila nije definiran, dodjeljuje mu se prvi slobodni najviši prioritet.

    Vlastita pravila dodaju se u tablicu naredbom

    # ip rule add prio [prioritet] [uvjet] table [naziv tablice]

    Jezgra će prilikom odabira rute usmjeravanja prolaziti kroz pravila usmjeravanja sve dok ne

    naiđe na uvjet koji je primjenjiv na paket koji treba usmjeriti. Tada se paket usmjerava prema

    tablici na koju pravilo pokazuje.

  • 11

    2. Opis korištenja redundantne poveznice

    2.1. Prethodni radovi

    Postoje radovi koji koriste redundantne poveznice u svrhu povećanja kapaciteta linkova.

    Jedan takav rad opisan je na web stranici „Linux Advanced Routing and Traffic Control“ [4].

    Za razliku od ovog rada, taj rad pretpostavlja postojanje lokalne mreže i jednog računala koje

    se ponaša kao poveznik (engl gateway) i omogućuje pristup Internetu preko dva pružatelja

    usluga kako je prikazano na slici (Sl. 2.1).

    Sl. 2.1 Pristup Internet mreži preko dva pružatelja usluga

    Druga razlika je što se taj rad oslanja samo na iproute2 aplikaciju za podešavanje parametara

    kontrole opterećenja. To se postiže sljedećom naredbom:

    ~# ip route add default scope global nexthop via $P1 dev $IF1 weight 1 nexthop via

    $P2 dev $IF2 weight 1

    Ta naredba će preusmjeravati konekcije preko obje poveznice. Nedostatak ovog

    načina kontrole opterećenja je taj što se rute koje su spremljene u cache tablici usmjeravanja

    ne brišu, pa će često korištene konekcije uvijek ići preko iste poveznice. Ovaj rad

    pretpostavlja da sve konekcije lokalne mreže prolaze kroz NAT proces na sučelju koje je

    priključeno na lokalnu mrežu, pa ne opisuje proces postavljanja izvorišnih IP adresa za slučaj

    da to nije tako. Zbog korištenja jedino iproute2 aplikacije nije moguće detaljnije provjeravati

    što se događa sa paketima u pojedinim koracima procesa. Na ovaj način nije moguće

    usmjeravati veze po statusu u automatu stanja.

  • 12

    Prednost ovakvog načina rada je u tome što je malo brži od metode primijenjene u ovom radu

    zato što konekcije ne prolaze kroz lance aplikacije iptables pa nad njima nije potrebno vršiti

    dodatno procesiranje.

    2.2. Metoda rada

    Svrha diplomskog rada je da se prosječnom korisniku omogući proširenje prijenosnog

    pojasa korištenjem redundantnih poveznica prema Internetu. U daljnjem tekstu koristit će se

    pojam osnovna i redundantna poveznica. Korisnik sam odabire glavnu poveznicu. U prošlosti

    je pojam redundantnih poveznica bio usko vezan uz potrebe poslovnih korisnika. Primjer

    jedne takve situacije je mala tvrtka koja ima urede na dvije udaljene lokacije. Glavna lokacija

    posjeduje dvije poveznice prema Internetu koje joj nude dva različita pružatelja usluga.

    Recimo da se u nekom vremenskom periodu na jednoj od lokacija obavlja proces izrađivanja

    sigurnosne kopije (engl. backup) svih podataka. Jedna poveznica se u tom slučaju koristi kao

    glavna kojom se prenose podatci, a druga se koristi za ostale potrebe (Internet, VoIP).

    Danas, pojavom bežičnih mreža i besplatnog pristupa Internetu preko bežične

    infrastrukture, redundantne poveznice dostupne su i prosječnim korisnicima. Zamislimo da

    korisnik kod kuće ima neku vrstu širokopojasnog pristupa Internetu (DSL, kabelski pristup).

    Ujedno je pomoću bežične kartice dostupna besplatna bežična mreža u čijem je dometu (Sl.

    2.2).

    Sl. 2.2 Prikaz referentnog modela mreže

    Korištenjem napisane skripte može se iskoristiti dodatni ponuđeni prijenosni pojas. U

    idealnom slučaju to bi značilo da je ukupna širina prijenosnog pojasa zbroj pojedinačnih širina

    prijenosnih pojaseva. U praksi to i nije baš tako. Korisnik može utjecati samo na to kamo šalje

    odlazne pakete. Ruta (engl. route) prvog dolaznog paketa ne ovisi o korisniku ako druga

  • 13

    strana inicira vezu. Situaciju dodatno kompliciraju i prijenosni protokoli. Dva najčešće

    korištena prijenosna protokola su TCP i UDP. Protokol TCP se koristi za ostvarivanje

    pouzdanog prijenosa podataka i ima ugrađene mehanizme koji omogućuju pouzdanost.

    Protokol UDP se koristi najčešće kada je potrebno brzo dostaviti pakete, pa nije važno ako se

    neki od paketa izgube u prijenosu. Upravo je zbog svojstava transportnih protokola odlučeno

    da se radi samo sa protokolom TCP. UDP datagrame u većini slučaja šalju video serveri, a ne

    korisnik, pa kontrola opterećenja nema utjecaja na takvu vrstu paketa.

    Postoje dva osnovna načela na temelju kojih možemo iskoristiti redundantnu poveznicu.

    Jedno načelo je paketski orijentirano, a drugo konekcijski.

    2.2.1. Paketski način rada

    Za početak, pretpostavimo da su nam prijenosne brzine na obje poveznice jednake.

    Kod paketskog načina rada kontrola opterećenja će raditi na način da 50% paketa šalje na

    jedno izlazno sučelje, a 50% paketa na drugo. Teoretski bi se na taj način mogao potpuno

    iskoristiti prijenosni pojas. Neka na računalu postoji lokalni proces koji ima otvorene 3

    konekcije prema Internetu. Svaka konekcija šalje slučajnim procesom svoje pakete. Kod

    paketskog načina rada će neparni paketi koji dođu do kontrole opterećenja biti usmjereni na

    glavnu poveznicu, a parni paketi će biti usmjereni na redundantnu poveznicu (Sl. 2.3). Pri

    tome nije važno kojoj konekciji paketi pripadaju.

    Sl. 2.3 Paketski način rada

    Prvi problem na koji se nailazi je asimetričnost poveznica. Ako su poveznicama

    prijenosne brzine nejednake i promjenjive u vremenu (što je čest slučaj kod bežičnih mreža),

    može se dogoditi da se neki paketi izgube ili ih pristupna točka odbaci zbog zagušenja. Na taj

    način izgubljeni paketi utječu na kontrolu toka protokola TCP koji dojavi lokalnom procesu

    da uspori slanje paketa jer su neki izgubljeni. Gubitak paketa na lošijoj poveznici uzrokovat

    će usporavanje slanja paketa na boljoj poveznici.

  • 14

    Drugi problem je nezavisnost mreža. Ako se spajamo na Internet preko dva različita

    pružatelja usluga, tada i pristupne mreže na koje se spajamo imaju različite IP postavke

    mreže. Lokalni proces prilikom slanja paketa provjerava tablice usmjeravanja i paketu

    dodjeljuje izvorišnu IP adresu na temelju IP adrese glavne poveznice. Pošto se 50% paketa

    usmjerava na redundantnu poveznicu, ti paketi će kao izvorišnu adresu imati adresu glavne

    poveznice. Tako nastaju dvije vrste problema. Kada paketi dođu u „redundantnu“ mrežu,

    pristupna točka ih može poslati na osnovnu rutu prema Internetu. Međutim, postoje i situacije

    kada se takvi paketi odbacuju jer im izvorišna adresa ne pripada mreži iz koje se šalju, na

    primjer zbog korištenja NAT-a u pristupnoj mreži. Druga vrsta problema je primanje

    odgovora na takve pakete. Pošto je sve temeljeno na protokolu IP koji je bezkonekcijski (engl.

    connectionless), svi odgovori će pristizati prema glavnoj poveznici. Time se redundantna

    mreža koristi samo u odlaznom smjeru, ali ne i dolaznom.

    2.2.2. Konekcijski način rada

    Kod konekcijskog načina rada se svi paketi koji pripadaju jednoj konekciji šalju samo

    po jednoj poveznici. Kontrola opterećenja radi na način da 50% konekcija usmjerava prema

    osnovnoj poveznici a 50% konekcija prema redundantnoj poveznici. Teoretski na taj način

    možemo ostvariti punu brzinu prijenosa, ali je u praksi situacija drugačija. Maksimalna brzina

    koju postiže neka konekcija ovisi o obje strane koje komuniciraju i kontroli toka protokola

    TCP. Može se dogoditi da 50% konekcija koje su usmjerene preko jedne poveznice koriste

    približno 100% širine raspoloživog prijenosnog pojasa poveznice, a 50% konekcija koje su

    usmjerene preko druge poveznice koriste jako malu širinu prijenosnog pojasa.

    Sl. 2.4 Konekcijski način rada

    Najveća prednost konekcijskog načina rada je ta da se svi paketi koji pripadaju jednoj

    konekciji usmjeravaju preko iste poveznice (Sl. 2.4). Time je kontroli toka omogućeno lakše

    upravljanje prijenosnom brzinom. Konekcije na jednoj poveznici ne utječu na konekcije druge

  • 15

    poveznice. Druga prednost je ta što se sada može koristiti NAT (engl. Network Address

    Translation) na redundantnoj poveznici. NAT prati konekcije, pa se svi paketi koji dolaze na

    redundantnu poveznicu adaptiraju u pripadnost „redundantne“ mreže. Time se ne gube paketi

    i koristi se dolazni smjer redundantne poveznice.

    Važno je opisati dva procesa koji se koriste. Proces SNAT (engl. Source NAT) radi tako da

    prepisuje izvorišnu IP adresu odlaznog paketa s IP adresom sučelja na koji se paket šalje.

    Proces DNAT (engl. Destination NAT) radi obrnut proces, gdje dolaznim paketima prepisuje

    odredišnu IP adresu [1]. Originalna IP adresa paketa je adresa sučelja na koji je paket

    pristigao. SNAT proces koristi se kada više računala u LAN mreži pristupa preko glavnog

    računala na Internet. DNAT proces se koristi kada je na jednu vanjsku IP adresu priključeno

    više računala (na primjer web poslužitelji). Tada se tim procesom vrši kontrola opterećenja

    pojedinog servera [1].

    U radu je korišten konekcijski način rada. Zbog korištenja takvog načina rada

    prosječni korisnik prilikom korištenja osnovnih Internet alata (Internet preglednika, klijenta

    elektroničke pošte) neće primijetiti značajno ubrzanje rada. Razlog tome je način rada tih

    programa koji otvaraju istovremeno jednu ili vrlo mali broj konekcija. Čak i korištenje FTP

    klijenta neće ubrzati preuzimanje datoteke zato što se koristi samo jedna konekcija za prijenos

    podataka. Značajno ubrzanje i korištenje prijenosnog pojasa redundantne poveznice će biti

    vidljivo samo pri korištenju programa koji ostvaruju velik broj konekcija, kao što su torrent

    klijenti. Zato je i prilikom testiranja skripte korištena µTorrent aplikacija.

    Skripta radi tako da konekcije u stanju NEW i RELATED statistički sa određenom

    vjerojatnošću raspoređuje na odlazne poveznice. Vjerojatnost raspoređivanja ovisi o

    korisnikovu unosu. Najprije se testiraju obje poveznice i korisnik prema rezultatima testiranja

    unosi „težinu“ (engl. weight) pojedine poveznice. Ako su obje poveznice jednakih brzina, tada

    će njihove težine biti jednake i vjerojatnost raspoređivanja će biti 50%. Ako je prva poveznica

    dvostruko brža od druge, tada će težina prve poveznice biti 2 a druge 1. Vjerojatnost

    raspoređivanja će biti 66% u korist prve poveznice. Vrijednost težine se unosi na početku i

    ona je statička. Moguće je u daljnjem radu promijeniti tu vjerojatnost pokretanjem posebne

    skripte. Redundantnost poveznica ostvarena je korištenjem dodatne skripte koja detektira

    prekid poveznice. Ako prekinuta poveznica ponovno postane dostupna, skripta će se pobrinuti

    da se ponovno uspostavi kontrola opterećenja i usmjere nove konekcije prema dostupnoj

    poveznici.

    Način usmjeravanja konekcije prema mrežnom sučelju odvija se u 4 koraka:

  • 16

    • U prvom koraku aplikacija iptables označava jednom oznakom konekcije koje šalje na

    jedno mrežno sučelje, a drugom oznakom konekcije koje šalje na drugo sučelje. To se

    postiže CONNMARK naredbom. Sve konekcije imaju na početku od jezgre postavljenu

    connmark vrijednost na 0 koju aplikacija mijenja. Konekcije koje prolaze kroz ovaj korak

    su one čije stanje je NEW ili RELATED.

    • U drugom koraku označuju se pojedini paketi u konekciji. Ovisno o oznaci koju je

    prijašnji korak dodijelio pojedinoj konekciji se svim paketima te konekcije dodjeljuje

    oznaka naredbom MARK. Kroz ovaj korak prolaze NEW, ESTABLISHED i RELATED

    konekcije. Naredba MARK omogućuje ispravnu detekciju paketa u trećem koraku.

    • U trećem koraku koristi se strategija usmjeravanja koja koristi različite tablice

    usmjeravanja. Konekcije kojima je dodijeljena jedna oznaka koriste jednu tablicu

    usmjeravanja dok ostale konekcije koriste drugu tablicu usmjeravanja. Važno je

    napomenuti da aplikacija iptables koristi decimalni sustav kod dodjeljivanja oznaka, a

    strategija usmjeravanja čita taj broj kao heksadecimalni. Ako u iptables aplikaciji

    označimo pakete oznakom 10, a u strategiji usmjeravanja označimo kao uvjet

    usmjeravanja oznaku 10, doći će do nekonzistentnosti uvjeta. Strategija usmjeravanja će

    tražiti oznaku 10 u heksadecimalnom sustavu što je ekvivalentno oznaci 16 u

    decimalnom sustavu.

    • U posljednjem koraku vrši se translacija izvorišne IP adrese paketa u adresu koja

    odgovara lokalnoj mreži iz koje se paket šalje na Internet. U tu svrhu se koristi nat tablica

    u aplikaciji iptables i SNAT naredba.

    Novim konekcijama u dolaznom smjeru se dodjeljuje oznaka ovisno o sučelju i koristi DNAT

    naredba u aplikaciji iptables, ako je to potrebno. Zbog korištenja NAT-a na klijentskom

    računalu postoje razlike u performansama prilikom spajanja na pristupne mreže u NAT

    okruženju i pristupne mreže u kojima se ne koristi NAT.

    2.3. Opis korištenih naredbi

    Najlakši i najbrži način da se u Linux operativnom sustavu podesi neka aplikacija je

    korištenjem Linux shell skripti. Linux shell je program koji prihvaća korisnikove naredbe i

    prosljeđuje ih jezgri. Postoji više vrsta shell programa, poput BASH ili CSH programa.

    Ekvivalent tog programa u Windows operativnom sustavu je cmd (engl. Command prompt).

    Shell skripte su u osnovi tekstualne datoteke koje sadrže niz naredbi i imaju postavljenu

  • 17

    zastavicu za izvođenje (engl. execute permission). Skripte imaju ugrađene specifične naredbe,

    poput if...else uvjeta, for i while petlje te ostale naredbe specifične za programske jezike.

    Prevodilac koji se koristi za prevođenje skripti i prosljeđivanje naredbi jezgri se određuje u

    prvoj liniji skripte naredbom:

    #!/bin/sh

    Tom linijom prenosi se uputa operativnom sustavu da koristi sh prevodilac kod izvođenja

    skripte. Linux skripta ima mogućnost korištenja ostalih aplikacija operativnog sustava Linux

    koristeći posebnu sintaksu. Za potrebe rada korištena je kalkulatorska aplikacija bc, kao i

    aplikacije za parsiranje teksta grep i awk. U daljnjem tekstu će prilikom opisa skripti biti

    opisane i linije koda u kojima se koriste navedene aplikacije.

    U radu je korišteno nekoliko skripti, koje su podijeljene u tri grupe: pripremne skripte, glavne

    skripte i pomoćne skripte.

    2.3.1. Pripremne skripte

    U ovu skupinu spadaju skripte koje služe pripremi iptables i iproute2 aplikacije. To su

    sljedeće skripte:

    1. store_dns.sh

    Skripta služi za spremanje parametara DNS domene. Prilikom spajanja na pristupnu

    mrežu, računalo od DHCP servera dobije adresu DNS servera nadležnog za tu mrežu i naziv

    DNS domene. Linux te parametre sprema u /etc/resolv.conf datoteku. Ispis te datoteke je

    sljedeći:

    search [DNS domena]

    nameserver [IP adresa primarnog DNS servera]

    nameserver [IP adresa sekundarnog DNS servera]

    Prilikom spajanja na prvu pristupnu mrežu računalo pohranjuje ove informacije prvi put.

    Nakon spajanja na drugu pristupnu mrežu računalo pohranjuje DNS informacije druge mreže

    u istu datoteku prepisujući sadržaj koji se u njoj već nalazi. Nakon spajanja na obje mreže

    računalo ima zapisane informacije vezane uz drugu mrežu. DNS upiti uvijek se šalju preko

    glavne poveznice i na njih ne utječe kontrola opterećenja. Ako je glavna poveznica ona na

    koju smo se zadnju spojili, tada nema problema jer računalo posjeduje informacije o toj DNS

    domeni. Međutim, ako je glavna poveznica ona na koju smo se prvi put spojili, tada računalo

    prilikom slanja DNS upita koristi DNS informacije koje ima pohranjene, a to su informacije o

  • 18

    drugoj DNS domeni. Zbog nekonzistentnosti domena, DNS server prve mreže nam na nijedan

    upit neće poslati odgovor. Zato je potrebno pohraniti informaciji o svakoj DNS domeni

    pojedinačno. U datoteku /etc/resolv.conf se zatim kopiraju informacije ovisno o poveznici

    koja se koristi kao glavna. Ispis skripte je sljedeći:

    if [ -s /etc/resolv.conf ]

    then

    cat /etc/resolv.conf > dns

    rm dns2

    fi

    ./reset_settings.sh

    − Uvjet je ispunjen ako /etc/resolv.conf postoji i nije prazna. − cat naredba ispisuje sadržaj datoteke. U ovom slučaju ispisuje sadržaj datoteke

    /etc/resolv.conf u datoteku dns. Datoteka se nakon ove naredbe stvara ako ne postoji, a ako postoji briše se njen sadržaj i zapisuje samo novi.

    − Naredba rm briše datoteku dns2. − Posljednja naredba pokreće skriptu reset_settings.sh.

    2. restore_dns.sh

    Ova skripta sprema parametre druge DNS domene koju je računalo pohranilo prilikom

    spajanja na drugu pristupnu mrežu:

    sleep 3

    if [ -s /etc/resolv.conf ]

    then

    cat /etc/resolv.conf > dns2

    cat dns > /etc/resolv.conf

    fi

    ip route show table main > main.table.bak

    Ako je ispunjen uvjet da datoteka etc/resolv.conf postoji i nije prazna tada se njen sadržaj

    pohranjuje u datoteku dns2. Sadržaj datoteke dns prepisuje se preko sadržaja datoteke

    etc/resolv.conf. Time su u toj datoteci postavljeni parametri prve DNS domene.

    U trenutku kada se izvršava ova skripta podešene su obje pristupne mreže, pa se sadržaj

    tablice usmjeravanja sprema u datoteku main.table.bak. Općenito, operator preusmjeravanja

    „>“ služi za preusmjeravanje ispisa sa standardnog izlaza (engl. screen) u datoteku.

  • 19

    Datoteke store_dns.sh i restore_dns.sh mogu se koristiti ručno na način koji će kasnije

    biti opisan, ali se mogu koristiti i automatski podešavanjem /etc/network/interfaces datoteke.

    Taj način koristimo ako se uvijek spajamo na iste pristupne mreže. Sve datoteke koje nastaju

    korištenjem skripti će biti smještene u onom direktoriju u kojem pokrećemo skripte, ako

    drugačije nije podešeno.

    3. reset_settings.sh

    Skripta služi za poništavanje svih promjena u aplikacijama iptables i iproute2. Koristi se

    samo na početku, kada se namještaju postavke kontrole opterećenja da bi izbrisali naredbe

    koje se greškom nalaze u lancu. To se provjerava na početku korištenjem naredbe:

    flag=`iptables -L -t mangle -n | grep BALANCING_AND_MARKING_1 -c`

    Znak apostrof (engl. back quote) „` “ govori da se radi o naredbi i da se rezultat te naredbe

    sprema u varijablu flag. Glavna naredba ispisuje tablicu mangle. Na ispis se djeluje naredbom

    grep koja ispisuje samo one linije koje sadrže navedenu frazu, a to je u ovom slučaju fraza

    „BALANCING_AND_MARKING_1“. Općenito se više naredbi postavljaju jedna iza druge

    operatorom „|“. Opcija „-c“ naredbe grep ispisuje koliko puta se navedena fraza pojavljuje u

    ispisu. Time smo provjerili da li u tablici mangle već postoje korisnički lanci. Ako postoje,

    znači da već postoje postavke aplikacija i da ih treba izbrisati.

    Naredbe

    ip route flush table master

    ip route flush table slave

    brišu sadržaj tablica master i slave. Naredba

    ip rule del prio [prioritet]

    briše postavke u strategiji usmjeravanja. Ostale naredbe brišu postavke u lancima aplikacije

    iptables.

    2.3.2. Glavne skripte

    U ovu skupinu spadaju skripte koje postavljaju parametre aplikacija iptables i iproute2. To su

    sljedeće skripte:

    1. parsing.sh

    Skripta sprema sve relevantne parametre obje poveznice u dvije datoteke, dev1 i dev2.

    Parametri koji se spremaju su:

  • 20

    • naziv mrežnog sučelja,

    • IP adresa,

    • maska podmreže (engl. subnet mask),

    • IP adresa poveznika (engl. gateway),

    • faktor težine poveznice,

    • oznaka je li poveznica bežična.

    Ne koristi se izravno, već pozivanjem iz druge skripte linijom:

    ./parsing.sh < uređaj 1 > < uređaj 2 >

    Podaci o nazivu uređaja 1 spremaju se u korisničku varijablu DEV_1:

    DEV_1=$1

    Prilikom prevođenja skripti jezgra pamti parametre skripte u posebnim varijablama $0, $1,

    $2,... U varijabli $0 nalazi se ime skripte. Varijabla $1 čuva prvi parametar koji se nalazi

    nakon imena skripte, što je u ovom slučaju naziv uređaja 1, na primjer eth0.

    Sljedeća naredba je

    IP_1=`ifconfig $DEV_1 | grep "inet addr" | awk -F":" '{print $2 }' | awk -F" " '{ print $1 }'`

    Naredba ifconfig $DEV_1 ispisuje parametre sučelja DEV_1. Na tu naredbu djeluje se

    naredbom grep „inet addr“ koja ispisuje redak u kojem se pojavljuje navedeni izraz. Redak se

    parsira naredbom awk koja po zadanoj oznaci „:“ razdvaja dijelove ispisane linije. Parsirani

    dio ispisuje se naredbom print $2. Time se u ispisu dobiva samo informacija koja sadrži IP

    adresu tog mrežnog sučelja. Numerička vrijednost ispisuje se djelovanjem naredbom awk, ali

    ovaj put praznom oznakom (engl. space). Na taj način se u varijablu IP_1 sprema numerička

    IP adresa mrežnog sučelja. Maska podmreže sprema se u varijablu MASK_1 naredbom:

    MASK_1=`ifconfig $DEV_1 | grep "inet addr" | awk -F":" '{print $4 }' | awk -F" " '{ print $1 }'`

    IP adresa poveznika može se saznati iz datoteke main.table.bak:

    GW_1=`cat main.table.bak | grep $DEV_1 | grep default | awk -F" " '{ print $3 }'`

    Oznaku je li poveznica bežična ili ne postavlja sljedeća naredba:

    WIRELESS_1=`iwconfig $DEV_1 | grep -c IEEE`

    Ako je poveznica bežična ova naredba će vratiti vrijednost 1, a ako nije vraća

    vrijednost 0. Posljednja varijabla je varijabla težine poveznice. Ova skripta se može koristiti

    na samom početku konfiguracije kontrole opterećenja, kada se poveznicama dodjeljuju

  • 21

    jednake težine, ali i kada se mijenjaju parametri kontrole opterećenja. Ako postoji generirana

    datoteka weight, tada iz nje čitamo zapisanu vrijednost, a ako ne postoji, u varijablu

    WEIGHT_1 postavlja se vrijednost 1 naredbama:

    if [ -s weight ]

    then

    WEIGHT_1=`cat weight | awk -F";" '{ print $1 }' | awk -F"=" '{ print $2 }'`

    else

    WEIGHT_1=1

    fi

    Ista procedura ponavlja se i za drugo sučelje. Na posljetku se sve informacije spremaju

    u datoteke dev1 i dev2 nizom naredbi:

    echo "dev1=$DEV_1" > dev1

    echo "ip1=$IP_1" >> dev1

    echo "mask1=$MASK_1" >> dev1

    echo "gateway1=$GW_1" >> dev1

    echo "weight1=$WEIGHT_1" >> dev1

    echo "wireless=$WIRELESS_1" >> dev1

    Operator „>“ preusmjerava ispis sa standardnog izlaza u datoteku dev1 i briše prijašnji

    sadržaj te datoteke. Operator „>>“ preusmjerava standardni izlaz u datoteku dev1 i dodaje

    ispis na kraj datoteke, čuvajući postojeće stanje datoteke.

    2. load_balancing.sh

    Ovo je glavna skripta koja namješta parametre kontrole opterećenja. Pokreće se

    naredbom u terminalu

    ~$ sudo ./load_balancing.sh

    Prvih nekoliko funkcija skripte služe za obavijesti korisniku. Funkcija usage() objašnjava

    način korištenja skripte. Funkcija default_behaviour() postavlja glavnu tablicu usmjeravanja

    ovisno je li poveznica bežična ili ne. Ako je prva poveznica bežična, tada se u glavnu tablicu

    upisuje druga pristupna mreža kao glavna i obrnuto. Upisivanje osnovne rute u glavnu tablicu

    usmjeravanja postiže se naredbom:

    ip route add default scope global via $GW_1 dev $DEV_1 metric 99

  • 22

    ip route add default scope global via $GW_2 dev $DEV_2 metric 100

    U ovom slučaju prva mreža je žičana, a druga bežična, pa prva mreža ima manju

    metriku, tj. veći prioritet. Prilikom odabira izvorišne IP adrese paketa jezgra provjerava

    mrežno sučelje s manjom metrikom i šalje paket tim sučeljem. Ovisno o odabiru glavne

    poveznice, potrebno je podesiti parametre DNS domene naredbom:

    cat dns > /etc/resolv.conf

    Na početku glavnog dijela skripte provjerava se je li skriptu pokrenuo osnovni (engl.

    root) korisnik. Ako nije, izlazi se iz skripte i daje uputa korisniku kako ispravno pokrenuti

    skriptu.

    Zatim se provjerava jesu li nazivi mrežnih sučelja ispravni, tj. da li ta sučelja postoje u

    računalu. Ako se utvrdi da je sve u redu, poziva se skripta parsing.sh.

    U daljnjem izvođenju potpuno se briše tablica usmjeravanja i postavlja samo osnovna

    vrijednost:

    ip route add default scope global via $GW_1 dev $DEV_1 table main

    Jezgra na taj način sve pakete usmjerava preko jednog mrežnog sučelja. Nakon toga korisnik

    pokreće test poveznice. Postoje dvije mogućnosti testiranja poveznice. Jedna mogućnost je

    instalacija alata za mjerenje propusnosti poveznice i preuzimanje datoteke sa Interneta. Vrlo

    jednostavan alat za mjerenje propusnosti poveznice je nload. Može se preuzeti sa Interneta

    naredbom:

    ~$ sudo apt-get install nload

    Program se pokreće na sljedeći način:

    ~$ sudo nload $DEV_1 $DEV_2 -m -u H

    Na taj način program mjeri prijenosnu brzinu na obje poveznice.

    Drugi način je korištenje specijaliziranih Internet stranica. Jedna od takvih stranica je

    http://bwm.carnet.hr/ [5]. Na toj stranici može se mjeriti:

    • brzina preuzimanja datoteke (engl download),

    • brzina slanja datoteke (engl. upload),

    • ping vrijeme.

    Nakon što se izmjeri brzina preuzimanja datoteke potrebno ju je zapisati ili zapamtiti.

    Zatim se briše tablica usmjeravanja i postavlja samo redundantna poveznica kao glavnu

    naredbom:

  • 23

    ip route add default scope global via $GW_2 dev $DEV_2 table main

    Jezgra će koristiti samo redundantnu poveznicu za slanje paketa prema Internetu. Potrebno je

    namjestiti parametre DNS domene i pobrisati cache tablica usmjeravanja za što se brinu

    sljedeće naredbe:

    ip route flush cache

    cat dns2 > /etc/resolv.conf

    U idućem koraku korisnik ponovno pokreće test brzine. Ako se koriste Internet

    stranice u svrhu testiranja potrebno je zatvoriti Internet preglednik i ponovno ga pokrenuti.

    Nakon završenog mjerenja potrebno je zapisati brzinu redundantne poveznice.

    Brzine je zatim potrebno prebaciti u težinski faktor. Ako je brzina jedne poveznice

    400 kB/sek, a druge 280 kB/sek, tada je težinski faktor prve poveznice 40, a druge 28.

    Težinski faktor je brojčana vrijednost od 1 do 100. Faktori se zatim uspoređuju i poveznica s

    većim težinskim faktorom postavlja se kao glavna. Ako su težinski faktori jednaki, tada se

    poziva funkcija default_behaviour().

    Težinski faktori se spremaju u datoteku weight. Iz njihove vrijednosti računa se vjerojatnost

    kojom će kontrola usmjeravanja preusmjeravati pakete prema određenoj poveznici po formuli

    probability=.`echo "($weight1*$precision)/($weight1+$weight2)" | bc`

    Rezultat formule upisuje se u datoteku probability. Varijabla precision govori kolika

    je preciznost računanja. Osnovna vrijednost postavljena je na 3 decimale, tj. vrijednost

    varijable je postavljena na 1000. Maksimalna vrijednost varijable je 10000000, tj. preciznost

    na 6 decimala. Osnovna vrijednost varijable nalazi se postavljena u trećem retku skripte i

    tamo se može mijenjati.

    Prije pozivanja skripte primary_configuration.sh, ova skripta još i zapisuje u datoteku main

    naziv mrežnog sučelja koji se koristi kao glavni.

    3. primary_configuration.sh

    U prvom koraku dodaju se nove tablice u listu tablica usmjeravanja:

    echo 201 master >> /etc/iproute2/rt_tables

    echo 202 slave >> /etc/iproute2/rt_tables

    U tablicu master upisuje se samo osnovna ruta preko prve poveznice a u tablicu slave samo

    osnovna ruta preko druge poveznice:

    ip route add table master default via $GW_1 dev $DEV_1

  • 24

    ip route add table slave default via $GW_2 dev $DEV_2

    Prilikom korištenja kontrole usmjeravanja moguće je imati dva slučaja:

    Jedan slučaj je kada je glavna poveznica osnovna a sporedna poveznica redundantna.

    Paketi se obilježavaju oznakama 1 i 2. Paketi s oznakom 1 odlaze na osnovnu poveznicu a

    paketi s oznakom 2 odlaze na redundantnu poveznicu. Nad paketima s oznakom 2 se vrši

    SNAT proces pretvaranja izvorišne IP adrese.

    U drugom slučaju je redundantna poveznica glavna, a osnovna poveznica sporedna.

    Tada su paketi obilježeni oznakama 3 i 4. Paketi s oznakom 3 odlaze na redundantnu

    poveznicu, a paketi s oznakom 4 odlaze na osnovnu poveznicu. Nad paketima s oznakom 4 se

    vrši SNAT proces.

    U skladu s ta dva slučaja namještaju se pravila politike usmjeravanja [3] na sljedeći način:

    ip rule add prio 50 fwmark 1 table master

    ip rule add prio 51 fwmark 3 table slave

    ip rule add prio 52 fwmark 2 table slave

    ip rule add prio 53 fwmark 4 table master

    Prioriteti tih pravila veći su od prioriteta glavne tablice usmjeravanja, pa strategija

    usmjeravanja po tim pravilima usmjerava pakete. Paketi koji nisu obilježeni nikakvim

    oznakama, poput paketa protokola UDP ili ICMP, ne zadovoljavaju postavljene uvjete pa se

    njih usmjerava pomoću glavne tablice usmjeravanja.

    U svrhu lakšeg označavanja paketa dodaju se novi lanci u iptables aplikaciju:

    iptables -t mangle -N BALANCING_AND_MARKING_1

    iptables -t mangle -N BALANCING_AND_MARKING_2

    iptables -t mangle -N MARKING

    iptables -t nat -N NATTING_OUTPUT

    iptables -t nat -N NATTING_INPUT

    iptables -t mangle -N NATTING_OUTPUT

    iptables -t mangle -N NATTING_INPUT

    Ako je došlo do pogreške u postavljanju pravila u lance, na primjer zbog nestanka

    struje, tada se prije svakog postavljanja lanaca brišu sva pravila koja u njima postoje

    naredbom –F (engl. flush) a naredbom –Z (engl. zero) poništavaju se brojači. Također se brišu

    pravila u glavnim lancima naredbom –D (engl. delete). Ako se aplikacija iptables koristi za

  • 25

    druge namjene osim za kontrolu opterećenja, tada će set naredbi koje brišu pravila u glavnim

    lancima pobrisati i pravila drugih aplikacija. Na primjer, vatrozid aplikacije koriste filter

    tablicu za postavljanje pravila odbacivanja paketa. Kontrola opterećenja radi samo sa mangle i

    nat tablicama, pa u tom slučaju ne bi trebalo biti konflikata.

    Na odlazne pakete djeluje se unošenjem idućih pravila u OUTPUT lanac:

    iptables -t mangle -I OUTPUT 1 -s $IP_1 -d ! 127.0.0.1 -p tcp -j BALANCING_AND_MARKING_1

    iptables -t mangle -I OUTPUT 2 -s $IP_2 -d ! 127.0.0.1 -p tcp -j BALANCING_AND_MARKING_2

    Prva naredba dodaje pravilo na prvo mjesto u OUTPUT lancu. Paketi se filtriraju po

    izvorišnoj IP adresi koja je zapisana u varijabli $IP_1, odredišnoj adresi koja mora biti

    različita od IP adrese 127.0.0.1 (engl. loopback) i protokolu TCP. Paketi koji zadovoljavaju

    postavljene uvjete preusmjeravaju se na lanac BALANCING_AND_MARKING_1.

    Druga naredba primjenjuje se na jednak način, ali nad paketima sa odredišnom IP

    adresom zapisanom u varijabli $IP_2. Paketi se usmjeravaju na lanac

    BALANCING_AND_MARKING_2.

    U lanac BALANCING_AND_MARKING_1 upisuju se sljedeće naredbe:

    iptables -t mangle -I BALANCING_AND_MARKING_1 1 -m connmark --mark 0 -m state --state NEW,RELATED -m statistic --mode random --probability $X -j CONNMARK --set-mark 1

    Naredba dodaje pravilo na prvo mjesto u tablicu. Zatim odabire sve one pakete koji

    zadovoljavaju dva uvjeta:

    • -m connmark –mark 0 uvjet filtrira sve neobilježene pakete,

    • -m state –state NEW,RELATED uvjet filtrira pakete ovisno u njihovu statusu u automatu

    stanja.

    Svi paketi koji zadovolje ta dva uvjeta statistički se raspoređuju po vjerojatnosti zapisanoj u

    varijabli $X uvjetom

    -m statistic --mode random --probability $X

    i dodjeljuje im se connmark oznaka naredbom

    -j CONNMARK --set-mark 1

  • 26

    Ako je vrijednost varijable $X jednaka 0.600, tada će 60% paketa dobiti oznaku 1. Ostalih

    40% paketa označava se sljedećim pravilom:

    iptables -t mangle -A BALANCING_AND_MARKING_1 -m connmark --mark 0 -m state --state NEW,RELATED -j CONNMARK --set-mark 2

    Sada su konekcije označene. Potrebno je označiti i sve pakete u konekciji. Za to se

    brinu sljedeća dva pravila:

    iptables -t mangle -A BALANCING_AND_MARKING_1 -m state --state NEW,RELATED,ESTABLISHED -m connmark --mark 1 -j MARK --set-mark 1

    iptables -t mangle -A BALANCING_AND_MARKING_1 -m state --state NEW,RELATED,ESTABLISHED -m connmark --mark 2 -j MARK --set-mark 2

    Kao uvjet statusa konekcije pojavljuje se i ESTABLISHED stanje. Razlog tome je to što

    kontrolu opterećenja prolaze jedino novostvorene konekcije. Već ostvarene konekcije se samo

    trebaju obilježiti odgovarajućom oznakom.

    Isti set pravila postavlja se u lanac BALANCING_AND_MARKING_2, uz

    odgovarajuće promjene. U tom lancu postavljaju se oznake 3 i 4, a vjerojatnost usmjeravanja

    nije više vrijednost varijable $X nego varijable $Y:

    $Y = 1- $X

    Pravila koja se dodaju u taj lanac su:

    iptables -t mangle -I BALANCING_AND_MARKING_2 1 -m connmark --mark 0 -m state --state NEW,RELATED -m statistic --mode random --probability $Y -j CONNMARK --set-mark 3

    iptables -t mangle -A BALANCING_AND_MARKING_2 -m connmark --mark 0 -m state --state NEW,RELATED -j CONNMARK --set-mark 4

    iptables -t mangle -A BALANCING_AND_MARKING_2 -m state --state NEW,RELATED,ESTABLISHED -m connmark --mark 3 -j MARK --set-mark 3

    iptables -t mangle -A BALANCING_AND_MARKING_2 -m state --state NEW,RELATED,ESTABLISHED -m connmark --mark 4 -j MARK --set-mark 4

    Paketi nakon prolaska kroz lanac dolaze do odluke o usmjeravanju. Tada strategija

    usmjeravanja koristi pravila koja su dodana na početku skripte i ovisno o uvjetu usmjerava

    pakete na određeno sučelje. U tom procesu gubi se oznaka paketa koju je potrebno obnoviti u

    sljedećem lancu (POSTROUTING lanac):

    iptables -t mangle -I POSTROUTING 1 -s $IP_1 -d ! 127.0.0.1 -p tcp -m state --state NEW,RELATED,ESTABLISHED -j CONNMARK --restore-mark

  • 27

    iptables -t mangle -I POSTROUTING 2 -s $IP_2 -d ! 127.0.0.1 -p tcp -m state --state NEW,RELATED,ESTABLISHED -j CONNMARK --restore-mark

    Zatim se u istom lancu, ali u nat tablici, usmjeravaju svi paketi protokola TCP na lanac

    NATTING_OUTPUT:

    iptables -t nat -I POSTROUTING 1 -s ! 127.0.0.1 -d ! 127.0.0.1 -p tcp -j NATTING_OUTPUT

    U tablicu NATTING_OUTPUT dodaju se iduća pravila:

    iptables -t nat -A NATTING_OUTPUT -m connmark --mark 2 -j SNAT --to-source $IP_2

    iptables -t nat -A NATTING_OUTPUT -m connmark --mark 4 -j SNAT --to-source $IP_1

    Ako je osnovna poveznica glavna, tada svi paketi koji odlaze na redundantnu

    poveznicu imaju izvorišnu IP adresu osnovne poveznice i oznaku 2. Takvi paketi prolaze kroz

    SNAT proces gdje im se izvorišna IP adresa mijenja u IP adresu redundantne poveznice.

    SNAT proces se brine da odgovori na pakete konekcije kojoj je promijenjena izvorišna IP

    adresa imaju originalnu IP adresu prije nego što ih proslijedi jezgri.

    Ako je redundantna poveznica glavna, paketi koji dolaze na osnovnu poveznicu imaju

    izvorišnu IP adresu redundantne poveznice i oznaku 4. Takvi paketi također prolaze kroz

    SNAT proces.

    Dolazne konekcije koje se ostvaruju prvi put, tj. imaju stanja NEW ili RELATED se

    moraju označiti u lancu PREROUTING. Ovisno o tome koja je poveznica glavna se

    postavljaju različita pravila u novi lanac MARKING mangle tablice. Ako je osnovna

    poveznica glavna upisuju se sljedeća pravila:

    iptables -t mangle -A MARKING -i $DEV_1 -j CONNMARK --set-mark 1

    iptables -t mangle -A MARKING -i $DEV_2 -j CONNMARK --set-mark 2

    iptables -t mangle -A MARKING -m connmark --mark 1 -j MARK --set-mark 1

    iptables -t mangle -A MARKING -m connmark --mark 2 -j MARK --set-mark 2

    Prva dva pravila postavljaju oznaku connmark ovisno o dolaznom sučelju, a druga dva pravila

    označuju pojedine pakete. Ako je redundantna poveznica postavljena kao glavna, koristi se

    sljedeći set pravila:

    iptables -t mangle -A MARKING -i $DEV_2 -j CONNMARK --set-mark 3

    iptables -t mangle -A MARKING -i $DEV_1 -j CONNMARK --set-mark 4

    iptables -t mangle -A MARKING -m connmark --mark 3 -j MARK --set-mark 3

  • 28

    iptables -t mangle -A MARKING -m connmark --mark 4 -j MARK --set-mark 4

    Preusmjeravanje novih konekcija na lanac MARKING vrši se postavljanjem sljedećih pravila

    u PREROUTING lanac:

    iptables -t mangle -I PREROUTING 1 -s ! 127.0.0.1 -d $IP_1 -p tcp -m state --state NEW,RELATED -j MARKING

    iptables -t mangle -I PREROUTING 2 -s ! 127.0.0.1 -d $IP_2 -p tcp -m state --state NEW,RELATED -j MARKING

    Potrebno je postojećim konekcijama vratiti oznaku koju su dobile u OUTPUT lancu:

    iptables -t mangle -I PREROUTING 3 -s ! 127.0.0.1 -d $IP_1 -p tcp -m state --state ESTABLISHED -j CONNMARK --restore-mark

    iptables -t mangle -I PREROUTING 4 -s ! 127.0.0.1 -d $IP_2 -p tcp -m state --state ESTABLISHED -j CONNMARK --restore-mark

    Nad novim konekcijama, ako imaju oznake 2 ili 4, se obavlja DNAT proces. U nat

    tablicu dodajemo novi lanac nazvan NATTING_INPUT:

    iptables -t nat -A NATTING_INPUT -s ! 127.0.0.1 -d ! 127.0.0.1 -p tcp -m connmark --mark 2 -j DNAT --to-destination $IP_1

    iptables -t nat -A NATTING_INPUT -s ! 127.0.0.1 -d ! 127.0.0.1 -p tcp -m connmark --mark 4 -j DNAT --to-destination $IP_2

    Preusmjeravanje na taj lanac vrši se iz lanca PREROUTING:

    iptables -t nat -I PREROUTING 1 -s ! 127.0.0.1 -d ! 127.0.0.1 -p tcp -j NATTING_INPUT

    U odlaznom smjeru se proces SNAT brine da izvorišne IP adrese paketa odgovaraju

    pristupnoj mreži u koju se šalju, a u dolaznom smjeru se proces DNAT brine da paketi koji

    dođu do jezgre uvijek imaju IP adresu glavne poveznice postavljenu kao odredišnu.

    2.3.3. Pomoćne skripte

    Dvije su pomoćne skripte. Jedna se pokreće u pozadini i prati status poveznica, dok druga

    služi za promjenu kontrola opterećenja.

    1. change_balance.sh

    Omogućuje mijenjanje parametara kontrole opterećenja, tj. vrijednost varijabli $X i $Y.

    U osnovi je slična skriptama load_balancing.sh i primary_configuration.sh, samo što mijenja

    određena pravila u lancima. Korisnik unosi vrijednosti težinskih faktora pojedinih poveznica

    te se na temelju tih vrijednosti računa vjerojatnost usmjeravanja paketa na osnovnu, odnosno

  • 29

    redundantnu poveznicu. Nakon izračuna vrijednosti mijenja se pravilo na prvom mjestu u

    tablici BALANCING_AND_MARKING_1:

    iptables -t mangle -R BALANCING_AND_MARKING_1 1 -m connmark --mark 0 -m state --state NEW,RELATED -m statistic --mode random --probability $X -j CONNMARK --set-mark 1

    Ovo pravilo isto je kao i prijašnje, samo što je promijenjena vrijednost varijable $X. Koristi se

    naredba –R (engl. replace) za unos pravila u lanac. Slično pravilo primjenjuje se na lanac

    BALANCING_AND_MARKING_2, samo što se u tom slučaju mijenja vrijednost varijable

    $Y:

    iptables -t mangle -R BALANCING_AND_MARKING_2 1 -m connmark --mark 0 -m state --state NEW,RELATED -m statistic --mode random --probability $Y -j CONNMARK --set-mark 3

    Ako korisnik promijeni odnos osnovne i redundantne poveznice mijenjanjem

    vrijednosti njihova težinskog faktora, potrebno je podesiti tablice usmjeravanja i lanac

    MARKING. U opisu prethodnih skripti objašnjen je način na koji se mijenjaju pravila u

    tablici usmjeravanja. Lanac MARKING se mijenja na način da se izbrišu sva pravila koja

    postoje u lancu i dodaju nova, ovisno o postavkama glavne poveznice:

    flag=`cat main | grep -c $DEV_1`

    if [ $flag -eq 1 ]

    then

    iptables -t mangle -F MARKING

    iptables -t mangle -A MARKING -i $DEV_1 -j CONNMARK --set-mark 1

    iptables -t mangle -A MARKING -i $DEV_2 -j CONNMARK --set-mark 2

    iptables -t mangle -A MARKING -m connmark --mark 1 -j MARK --set-mark 1

    iptables -t mangle -A MARKING -m connmark --mark 2 -j MARK --set-mark 2

    else

    iptables -t mangle -F MARKING

    iptables -t mangle -A MARKING -i $DEV_2 -j CONNMARK --set-mark 3

    iptables -t mangle -A MARKING -i $DEV_1 -j CONNMARK --set-mark 4

    iptables -t mangle -A MARKING -m connmark --mark 3 -j MARK --set-mark 3

    iptables -t mangle -A MARKING -m connmark --mark 4 -j MARK --set-mark 4

    fi

  • 30

    2. gwping.sh

    Ovu skriptu napisao je gosp. Angsuman Chakraborty [6]. Skripta radi tako da izvršava

    naredbu ping nad poveznicama i vrši kontrolu opterećenja pomoću iproute2 programa. Način

    na koji se to radi opisan je u prijašnjem poglavlju. Da bi skripta radila sa aplikacijom iptables

    potrebno je podesiti nekoliko postavki i dodati određene linije koda. Rezultat 0 označava

    uspjeh. Parametre je moguće promijeniti promjenom linija koda. Skripta se pokreće u

    pozadini i vrti u beskonačnoj petlji. Svakih 10 sekundi pokreće naredbu ping koja ispituje je li

    globalna IP adresa dostupna, na primjer www.google.com . Taj dio skripte je promijenjen

    tako da se samo ispituje je li dostupan poveznik (engl. gateway) pristupne mreže. Time se

    dobiju brži odgovori, što znači i brža reakcija na prekid poveznice.

    • Varijabla SLEEPTIME čuva vrijednost pauze u sekundama između provjere stanja

    poveznice. Osnovno je postavljena na 10 sekundi.

    • Varijabla TIMEOUT je konstanta koja postavlja vrijednost vremena na koje naredba ping

    čeka odgovor prije nego što proglasi poveznicu prekinutom. Osnovna je vrijednost

    postavljena na 5 sekundi. Za žičane poveznice vrijeme čekanja uvijek je postavljeno na 1

    sekundu, a za bežične na vrijeme od TIMEOUT + 1 sekunda.

    • Varijable DEV_1 i DEV_2 čuvaju nazive sučelja koji se koriste.

    • Varijable IP_1 i IP_2 čuvaju vrijednosti IP adresa sučelja koji se koriste.

    • Varijable GW_1 i GW_2 čuvaju IP adrese poveznika prema kojima se šalje ping.

    • Varijabla SUCCESSREPEATCOUNT govori koliko uzastopnih ping odgovora treba da

    bi se poveznica proglasila ispravnom. Osnovna vrijednost je postavljena na 4.

    • Varijabla FAILUREREPEATCOUNT govori koliko uzastopno puta mora isteći

    vremenska kontrola čekanja na ping odgovor. Osnovna vrijednost je postavljena na 2. Za

    žičane poveznice dovoljno je ovu vrijednost postaviti na 1, ali je potrebno ovu vrijednost

    povećati na 2 ili više zbog korištenja bežične infrastrukture.

    Ako se prva poveznica prekine potrebno je sve nove konekcije preusmjeriti na redundantnu

    poveznicu:

    echo "Switching to $DEV_2"

    iptables -t mangle -R BALANCING_AND_MARKING_1 1 -m connmark --mark 0 -m state --state NEW,RELATED -m statistic --mode random --probability 0 -j CONNMARK --set-mark 1

  • 31

    iptables -t mangle -R BALANCING_AND_MARKING_2 1 -m connmark --mark 0 -m state --state NEW,RELATED -m statistic --mode random --probability 1 –j CONNMARK --set-mark 3

    ip route del default table main

    ip route del default table main

    ip route add default scope global via $GW_2 dev $DEV_2 metric 99

    ip route flush cache

    cat dns2 > /etc/resolv.conf

    Ako dođe do prekida osnovne poveznice, potrebno je u lancu

    BALANCING_AND_MARKING_1 postaviti vjerojatnost $X jednaku 0, u lanac

    BALANCING_AND_MARKING_2 postaviti vjerojatnost $Y jednaku 1. Glavna tablica

    usmjeravanja postavlja se tako da se paketi usmjeravaju samo prema redundantnom sučelju.

    Prekidom poveznice prekinut će se sve konekcije koje su ostvarene preko te iste poveznice.

    Potrebno je podesiti DNS parametre da svi upiti idu preko redundantnog sučelja.

    Ako je došlo do prekida redundantne poveznice situacija je obrnuta:

    echo "Switching to $DEV_1"

    iptables -t mangle -R BALANCING_AND_MARKING_1 1 -m connmark --mark 0 -m state --state NEW,RELATED -m statistic --mode random --probability 1 -j CONNMARK --set-mark 1

    iptables -t mangle -R BALANCING_AND_MARKING_2 1 -m connmark --mark 0 -m state --state NEW,RELATED -m statistic --mode random --probability 0 -j CONNMARK --set-mark 3

    ip route del default table main

    ip route del default table main

    ip route add default scope global via $GW_1 dev $DEV_1 metric 99

    ip route flush cache

    cat dns > /etc/resolv.conf

    Nakon što skripta ustvrdi da je došlo do ponovnog uspostavljanja veze preko prekinute

    poveznice, vraća aplikacije u prijašnje stanje. Na slici (Sl. 2.5) može se vidjeti ponašanje

    prijenosne brzine korištenjem torrent klijenta u trenutku prekida poveznice eth2:

  • 32

    Sl. 2.5 Prikaz stanja poveznica u slučaju prekida

  • 33

    3. Testiranje i rezultati

    Analiza iskoristivosti izvršena je u laboratoriju na dvije pristupne mreže.

    Prva pristupna mreža je 100 Mbit Ethernet LAN na koju je testno računalo spojeno preko eth0

    mrežnog sučelja. Brzina poveznice prema Internetu mjerena je uz DHCP dodijeljenu adresu u

    okruženju bez NAT-a. Prema informaciji na stranici http://bwm.carnet.hr/ [5] brzina

    preuzimanja datoteke iznosila je 5,23 MB/sek.

    Druga pristupna mreža je IEEE 802.11g WLAN mreža na koju se pristupilo preko eth2

    mrežnog sučelja. Uređaj korišten za pristup mreži je Planet WL-U356 USB bežična kartica

    temeljena na „Atheros zd1211“ čipu. Brzina preuzimanja datoteke mjerena uz DHCP

    dodijeljenu adresu u okruženju bez NAT-a iznosila je 0,98 MB/sek.

    Približni odnosi brzina poveznica u odnosu su 5 : 1 u korist žičane poveznice. Za potrebe

    testiranja korišten je odnos glavne i redundantne poveznice u odnosu 100 : 99. Znači da je

    glavnoj poveznici dodijeljen faktor težine 100, a redundantnoj faktor težine 99. Iako su odnosi

    brzina 5 : 1 u korist žičane poveznice, odnos glavne i redundantne poveznice je u omjeru

    približno 1 : 1.

    Radi lakšeg razumijevanja potrebno je razlikovati pojmove glavne i sporedne, te

    osnovne i redundantne poveznice. U testnom slučaju glavna poveznica je sučelje eth0 prema

    žičanoj mreži, a sporedna poveznica je eth2 sučelje prema bežičnoj mreži. Ovisno o testnom

    scenariju, glavna poveznica može biti ili osnovna ili redundantna. Rezultati će biti točniji ako

    se izjednači raspoređivanje na osnovnu i redundantnu poveznicu omjerom 1 : 1. Najbliži

    takav omjer nam omogućava korištenje najvećih faktorskih vrijednosti, a to su upravo 99 i

    100. Pri tom omjeru približno je jednak odnos poveznica, ali zbog razlike težinskih faktora od

    1 je točno određeno koja poveznica je osnovna a koja redundantna.

    Budući da su korištena sučelja eth0 i eth2 za pristup mrežama, što nije mijenjano tijekom

    testiranja, moguće je ubrzati postupak pripreme poveznica za testiranje. Podešavanje sučelja u

    Linux operativnom sustavu moguće je pomoću mijenjanja parametara /etc/network/interfaces

    datoteke. Ta datoteka sadrži različite postavke određenog mrežnog sučelja koje se automatski

    postavljaju nakon što se sučelje aktivira. To su IP adresa, maska podmreže, naziv DNS

    domene, postavke vezane za pristup bežičnoj mreži (ESSID, vrsta enkripcije i ključ). Moguće

  • 34

    je postaviti naredbu koju će sučelje izvršiti nakon što postane aktivno i spoji se na mrežu. Za

    eth0 sučelje dodaju se sljedeći parametri:

    auto eth0

    iface eth0 inet dhcp

    pre-up echo "" > /etc/resolv.conf

    up /usr/local/share/applications/lb/store_dns.sh

    • Prva naredba označava da sučelje automatski postaje aktivno s podizanjem sustava.

    • Druga naredba označava da sučelje dobiva IP adresu od DHCP servera.

    • Treća naredba označava da se prije postavljanja sučelja eth0 aktivnim, briše sadržaj

    datoteke /etc/resolv.conf. Ključna riječ koja to omogućuje je pre-up.

    • Četvrta naredba označava da se nakon postavljanja sučelja u aktivno stanje pokrene

    skripta /usr/local/share/applications/lb/store_dns.sh. Direktorij

    /usr/local/share/applications/lb je direktorij stvoren za potrebe testiranja. Tu se nalaze

    sve skripte potrebne za testiranje. Pokretanje skripte omogućuje ključna riječ up.

    Na sličan način podesi se sučelje eth2:

    auto eth2

    iface eth2 inet dhcp

    wireless-key key

    wireless-essid ESSID

    up /usr/local/share/applications/lb/restore_dns.sh

    • Treća i četvrta naredba služe za spajanje na bežičnu mrežu dok posljednja naredba služi

    za pokretanje skripte /usr/local/share/applications/lb/restore_dns.sh.

    Za potrebe testiranja korišten je protokol torrent zbog mogućnosti da u vrlo kratkom

    vremenu ostvari velik broj konekcija, što je idealno za testiranje skripte. Korišteni klijentski

    program je µTorrent. Iako na Linux OS-u postoji velik broj klijentskih programa protokola

    torrent, navedeni program vrlo malo utječe na ukupne performanse računala. Zbog toga što ne

    postoji Linux verzija tog programa, potrebno je pokrenuti taj program u Wine emulatoru. To

    je program koji „emulira“ Windows operativni sustav, ali ne na način da virtualizira računalo,

    nego prevodi naredbe iz Windows okruženja u Linux okruženje. Način rada tog programa je

    vidljiv i u imenu koji je zapravo rekurzivna kratica Wine – Wine Is Not Emulator.

  • 35

    Datoteka koja je protokolom torrent preuzeta s Interneta je DVD inačica Debian distribucije

    Linux operativnog sustava. Time nisu prekršena nikakva autorska prava Inače je vrlo raširena

    zabluda da se protokol torrent koristi samo za kršenje autorskih prava i preuzimanje

    zaštićenih materijala. Na slici (Sl. 3.1) se vidi ispis ekrana (engl. screenshot) glavnog prozora

    µTorrent programa.

    Sl. 3.1 Prikaz sučelja programa µTorrent

    U procesu testiranja je korišten program tcptrack. Program pasivno prati stanja TCP konekcija

    na određenom mrežnom sučelju. Na računalo se instalira naredbom

    ~$ sudo apt-get install tcptrack

    Pokreće se naredbom

    ~$ sudo tcptrack –i -d –f

    Pomoću programa moguće je u realnom vremenu prikazati stanje konekcija i širinu korištenog

    prijenosnog pojasa na pojedinom sučelju.

  • 36

    3.1. Postupak testiranja

    Koriste se sučelja eth0 i eth2 koja je potrebno podesiti da bi kontrola opterećenja

    ispravno radila. Najprije je potrebno oba sučelja postaviti u neaktivno stanje naredbama:

    ~$ sudo ifconfig eth0 down

    ~$ sudo ifconfig eth2 down

    Zatim aktiviramo sučelje eth0.

    ~$ sudo ifconfig eth0 up

    Zbog namještenih postavki u /etc/network/interfaces datoteci, mrežno sučelje će od DHCP

    servera dobiti sve potrebne informacije za spajanje na mrežu. Nakon toga aktiviramo sučelje

    eth2 naredbom:

    ~$ sudo ifconfig eth2 up

    Još nam preostaje aktivirati kontrolu opterećenja naredbom:

    ~$ sudo ./load_balancing.sh eth0 eth2

    Time je postupak podešavanja mrežnih sučelja gotov.

    Postoje 4 testna scenarija ovisno o tome da li se koristi NAT u pristupnoj mreži ili ne.

    Scenarij I U prvom scenariju glavna je poveznica osnovna sa faktorom težine 100, a sporedna

    redundantna sa faktorom težine 99. Glavnoj poveznici dodijeljena je IP adresa 161.53.19.66,

    adresa mreže je 161.53.19.0/24, a adresa poveznika 161.53.19.1. Sporedna poveznica nalazi

    se u NAT okruženju, dodijeljena joj je IP adresa 192.168.1.16, adresa mreže je

    192.168.1.0/24, a adresa poveznika je 192.168.1.1. Brzina glavne poveznice je 5,43 MB/sek,

    a sporedne 1,16 MB/sek.

    Ispis tablica usmjeravanja i pravila strategije usmjeravanja vidljiv je na slici (Sl. 3.2).

  • 37

    Sl. 3.2 Prikaz tablica usmjeravanja i strategije usmjeravanja

    Vidljive su postavke glavne tablice usmjeravanja, s glavnom poveznicom postavljenom na

    manju metriku.

    Sl. 3.3 Ispis lanaca mangle tablice za scenarij I

    Nakon pokretanja torrent klijenta potrebno je pričekati neko vrijeme da kroz kontrolu

    opterećenja prođe određen broj paketa.

  • 38

    Naredba

    ~# iptables –t mangle –L –n -- line-numbers –v

    ispisuje lance koji se nalaze u mangle tablici (Sl. 3.3).Odlazni paketi prolaze samo kroz lanac

    BALANCING_AND_MARKING_1. Tu je 216 konekcija označeno oznakom 1, a 208

    konekcija oznakom 2. Konekcije s oznakom 1 su ostvarile 30 MB prometa, a konekcije s

    oznakom 2 5,2 MB prometa. Odnos odlaznog prometa po glavnoj i sporednoj poveznici

    približno je u odnosu 6 : 1, iako je odnos broja konekcija približno 1 : 1.

    Po glavnoj poveznici u dolaznom smjeru pristiglo je 948 MB prometa, a po sporednoj 134

    MB, što čini omjer dolaznog prometa po poveznicama 7 : 1 u korist glavne poveznice.

    Ostvareno je 390 novih konekcija u dolaznom smjeru samo po glavnoj poveznici. Po

    sporednoj poveznici nije pristigao nijedan zahtjev za novom konekcijom. Razlog tomu je što

    se ta poveznica nalazi u mreži koja je zaštićena NAT/vatrozidom (engl. NAT/firewall) pa

    odbija dolazne pakete koji iniciraju konekcije. Također možemo vidjeti i izgled lanaca u nat

    tablici (Sl. 3.4).

    Sl. 3.4 Ispis lanaca nat tablice za scenarij I

    U nat tablici je 210 paketa s oznakom 2 prošlo kroz SNAT proces pretvaranja izvorišne IP

    adrese. Treba napomenuti da svi podatci nisu snimljeni istodobno, pa neki lanci mogu imati

    brojače različite od drugih lanaca. Lanac BALANCING_AND_MARKING_1 u mangle

    tablici prijavljuje da je poslao 208 paketa u NATTING_OUTPUT lanac nat tablice, dok taj

    lanac prijavljuje da je primio 210 paketa. U ovom scenariju vidi se primjer ispisa aplikacije

    tcptrack za glavnu poveznicu (Sl. 3.5).

  • 39

    Sl. 3.5 Ispis aplikacije tcptrack za glavnu poveznicu

    Osnovna poveznica trenutno ima 203 konekcije aktivne i brzina prijenosa je jednaka 3

    MB/sek. Puno je veći broj konekcija koje su ostvarene u dolaznom smjeru nego konekcija

    koje su ostvarene u odlaznom smjeru.

    Ispis aplikacije tcptrack za sporednu konekciju vidljiv je na slici (Sl. 3.6).

  • 40

    Sl. 3.6 Ispis aplikacije tcptrack za sporednu poveznicu

    Radi se o puno manjem broju konekcija (41) i sve su ostvarene u odlaznom smjeru.

    Na slici (Sl. 3.7) se vidi iskorištenost prijenosnog pojasa.

  • 41

    Sl. 3.7 Iskorištenost prijenosnog pojasa u scenariju I

    Scenarij II U drugom scenariju su iste postavke kao u prvom scenariju, samo je razlika što je

    glavna poveznica redundantna, a sporedna osnovna. U odnosu na prvi scenarij primijećeno je

    nekoliko promjena. Torrent klijent prijavljuje grešku da NAT/vatrozid ograničava promet pa

    je potrebno podesiti vrata (engl. port) tako da se ostali korisnici mogu spojiti na klijentsko

    računalo. Ta se greška pojavljuje svaki put kada se klijentsko računalo nađe u mreži u kojoj

    djeluje mrežni NAT/vatrozid.

  • 42

    Sl. 3.8 Ispis mangle tablice za scenarij II

    Konekcije prolaze kroz lanac BALANCING_AND_MARKING_2 (Sl. 3.8). Po sučeljima su

    raspoređene u omjeru približno 1 : 1. Broj konekcija koje su usmjerene na sporednu

    poveznicu je 212, a na glavnu 201. Konekcije s oznakom 3 ostvarile su 22 MB prometa, a

    konekcije sa oznakom 4 23 KB prometa. Odnos odlaznog prometa po sporednoj i glavnoj

    poveznici približno je u odnosu 1000 : 1 u korist sporedne poveznice.

    U dolaznom smjeru je vidljivo da je po glavnoj poveznici pristiglo 72 MB prometa, a po

    sporednoj 31 KB. Ostvarene su 1042 nove konekcije u dolaznom smjeru, i to samo po glavnoj

    poveznici.

    Sl. 3.9 Ispis nat tablice za scenarij II

  • 43

    DNAT je procesirao 1048 paketa koji su pristigli po osnovnoj poveznici, za razliku od

    prošlog scenarija kada DNAT nije ništa procesirao jer po sporednoj poveznici nisu pristizali

    nikakvi zahtjevi za novim konekcijama (Sl. 3.9).

    Aplikacija tcptrack prijavila je da je na glavnoj poveznici bila aktivna 151 konekcija, ali je

    ukupna prijenosna brzina bila 0 KB/sek. Na sporednoj poveznici je bilo aktivno 68 konekcija

    ukupne prijenosne brzine 523 KB/sek.

    Iskorištenost prijenosnog pojasa na obje poveznice dana je na slici (Sl. 3.10).

    Sl. 3.10 Iskorištenost prijenosnog pojasa u scenariju II

    Scenarij III Treći scenarij koristi NAT okolinu kod obje poveznice. Glavna poveznica je

    postavljena kao osnovna i dodijeljena joj je IP adresa 192.168.1.20 sa adresom mreže

    192.168.1.0/24 i adresom poveznika 192.168.1.1. Postavke sporedne poveznice su ostale

    nepromijenjene.

  • 44

    Sl. 3.11 Ispis mangle tablice za scenarij III

    Ispis mangle tablice govori da je raspored konekcija po poveznicama bio u omjeru 281 : 265 u

    korist glavne poveznice (Sl. 3.11). Ukupni odlazni promet je 25 MB, od čega je preko glavne

    poveznice ostvareno 14 MB prometa, a preko sporedne 11 MB prometa.

    Sl. 3.12 Iskorištenost prijenosnog pojasa u scenariju III

  • 45

    U dolaznom smjeru ostvaren je promet od 228 MB, od čega je 174 MB preuzeto preko glavne

    poveznice a 54 MB preko sporedne. U ovom scenariju nije primijećeno ostvarivanje novih

    konekcija od strane vanjskih klijenata, što je o razumljivo jer obje poveznice rade u NAT

    okolini. Torrent klijent je također prijavio grešku da NAT/vatrozid ograničava promet.

    Program tcptrack prijavljuje da su na eth0 sučelju ostvarene 73 konekcije s brzinom 993

    KB/sek, a na eth2 sučelju 79 konekcija s brzinom od 561 KB/sek.

    Iskorištenost prijenosnog pojasa obje poveznice prikazana je slikom (Sl. 3.12).

    Scenarij IV U ovom scenariju su obje poveznice priključene na pristupne mreže u kojima ne postoji NAT

    usmjerivač. Glavna poveznica ima IP adresu 161.53.19.125 sa adresom mreže 161.53.19.0/24

    i adresom poveznika 161.53.19.1. Sporedna poveznica ima IP adresu 161.53.19.131, a ostale

    postavke su jednake kao i mrežne postavke glavne poveznice. U skladu s tim postavkama su

    podešene tablice usmjeravanja i strategija usmjeravanja.

    Sl. 3.13 Ispis mangle tablice za scenarij IV

    Iz ispisa mangle tablice (Sl. 3.13) vidi se da je odnos rasporeda broja konekcija 163 : 147 u

    korist osnovne poveznice. Promet u dolaznom smjeru je 40 MB, od čega je 24 MB ostvareno

    preko glavne poveznice, a 16 MB preko sporedne poveznice. Program tcptrack je prijavio 118

    aktivnih konekcija sa ukupnom prijenosnom brzinom od 3 MB/sek na glavnoj poveznici i 99

  • 46

    aktivnih konekcija sa ukupnom prijenosnom brzinom od 796 KB/sek na sporednoj poveznici.

    Torrent klijent u ovom slučaju nije prijavljivao nikakav problem sa mrežnom opremom i

    ograničavanjem prometa.

    U dolaznom smjeru ostvaren je promet od 484 MB, 387 MB preko glavne poveznice i 96 MB

    preko sporedne. U ovom slučaju ostvareno je 416 novih konekcija u dolaznom smjeru preko

    glavne poveznice i 226 novih konekcija preko sporedne poveznice. DNAT proces u ispisu nat

    tablice prijavio je 256 novih konekcija preko sporedne poveznice.

    Sl. 3.14 Iskorištenost prijenosnog pojasa u scenariju IV

    Diskusija Najvjerojatniji scenarij za prosječnog korisnika izvan laboratorijskih uvjeta je prvi. U tom

    scenariju korisnik može koristiti DSL vezu kao osnovnu i imati mogućnost podešavanja

    mrežne opreme. Time je moguće zaobići NAT okolinu u osnovnoj pristupnoj mreži. Kao

    sporedna poveznica se može koristiti WLAN mreža u čijem dometu se korisnik nalazi. Na

    takvim mrežama je uglavnom postavljen NAT kojeg korisnik ne može konfigurirati jer nije

    vlasnik mreže.

    Problem tog scenarija je u tome što se preko sporedne poveznice ne mogu ostvarivati nove

    konekcije u dolaznom smjeru. Bez obzira na taj problem, korištenjem redundantne poveznice

    se u tom slučaju iskoristi 70% dodatnog prijenosnog pojasa. S obzirom na to da se koristio

  • 47

    protokol torrent kao najpovoljniji za testiranje, njegova iskoristivost i upotreba uvelike ovise

    o broju klijenata koji trenutno preuzimaju datoteku kao i o brzinama poveznica pojedinih

    klijenata s kojima razmjenjujemo podatke.

  • 48

    Zaključak

    Korištenjem redundantne poveznice uspjelo se ostvariti od 50% do 70% ukupnog dodatnog

    prijenosnog pojasa za potrebe prijenosa podataka. Iskoristivost redundantne poveznice

    uvelike ovisi o mrežnim postavkama pristupne mreže, tj. o tome da li u pristupnoj mreži

    postoji NAT/vatrozid.

    Kontrola opterećenja vrši se samo nad TCP protokolom i raspoređuje pojedine konekcije.

    To je trenutno najbolji način korištenja redundantne poveznice. Zbog korištenja aplikacija

    koje su implementirane samo u Linux operativnom sustavu, na ovakav način nije moguće

    ostvariti kontrolu opterećenja u Windows operativnom sustavu . Ipak, neka poboljšanja su

    moguća. Za podešavanje parametara aplikacija koristi se terminal u koji se upisuju naredbe i

    pokreću skripte. Moguće je poboljšanje u vidu implementacije neke vrste korisničkog sučelja,

    po mogućnosti web grafičkog sučelja, kako bi se prosječnom korisniku olakšao rad.

    Iako su vidljivi neki važniji nedostatci, kao što je nemogućnost da jedna konekcija

    istovremeno koristi obje poveznice, moguća su dodatna poboljšanja. Tako možemo nekim

    konekcijama (HTTP, SMTP) dodijeliti viši prioritet pa ih automatski usmjeravati na sučelje

    na kojem je manje opterećenje mreže. Implementacijom dinamičke kontrole opterećenja

    ovisne o stanju poveznice i raspoloživom kapacitetu bi se dodatno optimizirao rad i poboljšala

    iskoristivost redundantne poveznice.

  • 49

    Literatura

    [1] ANDREASSON, O. 2006. Iptables Tutorial 1.2.2. GNU General Public License. [2] BROWN, M. A. 2007. Guide to IP Layer Network Administration with Linux Version

    0.4.5: IP Routing, http://linux-ip.net/html/ch-routing.html , ožujak 2007.

    [3] BROWN, M. A. 2007a. Guide to IP Layer Network Administration with Linux Version 0.4.5: Routing Policy Database (RPDB), http://linux-ip.net/html/ch-routing.html , ožujak 2007.

    [4] HUBERT, B. 2007. Linux Advanced Routing and Traffic Control HOWTO, http://lartc.org/howto/lartc.rpdb.multiple-links.html , rujan 2008.

    [5] CARNet: Bandwidth Metar, http://bwm.carnet.hr/ , rujan 2008. [6] BLOG „SIMPLE THOUGHTS“, http://blog.taragana.com/, rujan 2008.

  • 50

    Skraćenice

    DSL Digital Subscriber Line digitalna pretplatnička linija

    OSI Open System Interconnection Reference Model referentni model opisa dizajna mrežnih protokola

    TCP Transmission Control Protocol konekcijski protokol za pouzdan prijenos podataka

    LAN Local Area Network lokalna mreža

    WLAN Wireless LAN bežična lokalna mreža

    UDP User Datagram Protocol bezkonekcijski protokol za prijenos podataka

    ICMP Internet Control Message Protocol protokol za razmjenu kontrolnih poruka

    NAT Network Address Translation Uređaj za prevođenje IP adrese

    TOS Type Of Service Polje u zaglavlju IP paketa

    TTL Time To Live Polje u zaglavlju IP paketa

    SNAT Source NAT Izvorišni NAT

    DNAT Destination NAT Odredišni NAT

    DHCP Dynamic Host Configuration Protocol Protokol za podešavanje mrežnih postavki klijentskih računala u LAN-u

    ESSID Extended Service Set Identifier Oznaka proširenog skupa usluga u bežičnoj lokalnoj mreži

  • 51

    Popis stranih izraza

    bandwidth širina prijenosnog pojasa

    load balancing kontrola opterećenja

    policy routing strategija usmjeravanja

    kernel jezgra OS-a

    driver upravljački program

    root user osnovni korisnik

    firewall vatrozid

    port vrata

    gateway poveznik

    route put usmjeravanja

    connectionlessl bezkonekcijski

    subnet mask maska podmreže

    interface sučelje

    loopback address adresa povratne petlje

    screenshot prikaz računalnog ekrana

  • 52

    Dodatak

    Instalacija programske podrške U radu se koristi neko