Tunnelling 1 / 4 (Siete)

Libor Bešenyi  /  15. 01. 2007, 00:00

Krátky seriál pre začínajúcich fanúšikov IT o tom, aké sú primitívne metódy tunnelingu na sieťach (Internet).

Úvod

            Kedysi pred časom som začal písať pre mladších stredoškolákov seriál, ktorý ich mal pritiahnuť ku informačným technológiám. V tej dobe sa na našom gymnáziu rozbehávala možnosť štúdia na CNA (Cisco Network Academy), čo je nadčasová vec, ktorú bohužiaľ množstvo vedení škôl nechápe. Vtedy som bol ešte žiakom tej školy a chcel som pomôcť ľuďom ako kedysi ja, ktorí majú záujem o vedomosti, no učebnice sú náročne písané pre človeka základnej školy (teda napr. primanov), knihy veľmi drahé, chuť odborníkov vysvetľovať malá a Internet plný nezmyslov.

Mňa našťastie odchytil úžasný pedagóg Andrej Belovežčík, ktorého týmto pozdravujem. Preto som si povedal, že aj ja budem pomáhať začínajúcim fanúšikom IT. V tomto krátkom seriáli budú štyri články, ktoré boli vybraté z komplexnejšieho seriálu vychádzajúcom potom ako revízia článkov zo strednej školy na jednom serveri, ktorý už však asi dohára. Aby tieto dokumenty nezhnili na mojom disku, rozhodol som sa niektoré najzaujímavejšie časti znova publikovať.

 

            Tunnelling - pojem známi hackerskémuy slovníku - doň však nepatrí; častejšie ho používajú administrátori, ktorí sú konfrontovaní deň čo deň s rôznymi problémami. Príklad:

            Sme vývojárska firma, ktorá má nasadiť aplikáciu tenkých klientov na serveri, ktorá komunikuje so serverom cez nejaký distributívny systém a na živej prevádzke potrebujeme testovať novú verziu. Aplikácia je teda typu ISAPI / ASPX alebo niečo podobné, ktorá sa „prilinkuje“ ku webovej službe (napr. IIS).

Tenký klient je zasa zariadenie, ktoré nenesie funkčnosť na svojich ramenách, len interpretuje výsledok zo servera, ktorý všetko za neho „odmaká“. Príkladom je práve web, keď server všetko spracuje a nám už len pošle HTML stránku, ktorú náš tenký klient len zobrazí. Práve preto sú tenkí klienti nenároční na kapacitu RAM, či výpočtovú silu a sú vhodní do prostredia ako napríklad sklad, kde skladníci prijímajú, vydávajú tovar priamo cez prenosný počítač (s pripojeným snímačom čiarových kódov). Tento počítač (napr. PocektPC), nemusí mať veľký výkon, stačí, ak vie zobrazovať HTML kód.

Ak teda už skladníci pracujú vo veľkom na stabilnej verzii programu a my potrebujeme otestovať novú verziu „za chodu“ (priepustnosť siete, reálne vyťaženie databázového servera apod.), ak by sme len vytvorili nový virtuálny adresár a testovaciemu PocetPC by sme len zmenili URL, neriešilo by to problém s možným „odpálením“ celej webovej služby, ktorej by pomohol reštart servera (takýto časový prestup si nemôže nikto dovoliť).

Práve tu nastupuje tunnelling. WiFi sieť, na ktorú sú napojené zariadenia v sklade, vidia server, nie však sieť za ním (administratíva). My tunnellingom dokážeme forwardovať služby práve z vnútra tejto siete (s riadnymi počítačmi) na port viditeľný aj WiFi zariadeniam. Teda na nejaký počítač nahodíme novú webovú službu, forwardujeme port na server a ak naša testovacia aplikácia zhodí službu, port síce prestane na strane servera reagovať, ale len dovtedy, kým sa nerozbehá počítač, na ktorom „fyzicky“ sa služba nachádzala!

Aby sme dobre pochopili základom tunnellingu, zoznámme sa so sieťami. Toto je ľahký úvod, ktorý však preskakuje OSI a úplne prvotnú problematiky, pretože nie je ani cieľom týchto článkov vyučovanie sieti, ale hlavne problematika tunnellingu.

Troška o sieťach

Smerovanie

Sieť ako taká málokedy existuje. Existuje ale množstvo sietí, ktoré sú vzájomne prepojené (ako náš WiFi priestor a LAN za serverom). Ako prepájať takéto siete (aj Internet je množstvo robustných sietí vzájomne prepojených)?

Jedná možnosť je ATM, ktorou sa však nebudeme zaoberať. Aby sme si povedali, ako funguje väčšina TCP/IP sieti, musíme sa porozprávať o smerovaní (routing). Kedysi existovali v rámci podnikov také siete, ktoré nedokázali medzi sebou komunikovať. Administrátori to riešili pripájaním týchto sietí na Internet a vytvorením akéhosi tunela. Ak si to predstavíme v dnešnej dobe, zjaví sa nám isto úsmev na tvári – využiť Internet ako všeobecné médium prepájajúce siete.

To sa však zmenilo. Jeden mladý párik (teda muž a žena) zo Standfordskej univerzity prišiel na spôsob prepojenia týchto separovaných sieti – vytvorili smerovač (router). Prvé takéto zariadenie si predstavme ako počítač s dvoma sieťovými kartami a prepracovaným OS, ktorý vedel komunikovať „rečou“ viacerých sietí a vzájomne túto komunikáciu konvertoval do „reči“ inej.

V tej dobe nastalo takmer šialenstvo. Toto jednoduché zariadenie náš mladý pár predával za peknú sumičku – a v podstate mali monopol. Takto vzniká obrovské korporačné monštrum zvané Cisco Systems. Firme, ktorej ďakujeme za dnešnú podobu sietí, firma, ktorá svojimi inováciami prispela ku zrýchľovaniu Internetu a jeho rozšírenosť, firma, ktorá udávala dokonca aj smer spravovania IT monštra, keď prišla na trh s tým, že nemá v úmysle konkurenciu ničiť, ale skupovať. Tento krok bol dovtedy nezvyčajný a veľmi odvážny. Toto obdobie odštartovalo moderný trend akvizícii IT podnikov, s ktorým sa stretávame doteraz. Tak do podniku prichádzalo množstvo špičkových odborníkov z rôznych oblastí. Tým vznikalo zdravé prostredie, keď sa o problémoch dalo diskutovať s rozličných strán pohľadu. Tým sa zariadenie router samozrejme začalo zdokonaľovať a vďaka nemu sa rozmohol ako sme už spomínali aj Internet – vďaka doteraz autonómnym sieťam v rôznych štátoch (predstavme si štátne „internety“), ktoré sa prepojili Cisco zariadeniami (tzv. ehm, myslím že ma neukrižujete keď poviem české slovo, ktoré by v slovenčine neznelo veľmi výstižne) vytvorili „páteř“ Internetu.

 

No a ako to celé funguje? Smerovačom prepojíme napr. dve podnikové siete v rámci budovy. Toto bude typická štruktúra pobočky. Pobočky máme v rôznych mestách (oblastiach). Teraz nebudeme pripájať siete, ale len routre. Prepojíme napr. tieto routre do kruhu a jeden bude v strede. Ak chceme v rámci podnikovej siete (vnútornej) – intranet, poslať dáta do inej, tak údaje pôjdu do lokálneho routra. Ten zistí, či daná adresa sa nenachádza na druhej lokálnej sieti, ktorú on zastrešuje. Ak nie, posiela router informáciu ďalšiemu routru. Tu však máme problém. Ak sme routre napr. prepojili do kruhu, ktorá cesta je tá lepšia?

Tu prichádza na rad smerovanie. Ak administrátor fixne nastaví: „Ak ideš z tade sem, tak pôjdeš touto cestou...“ sa jedná o statické smerovanie. Ak to necháme na routroch, nech si vyberú lepšiu cestu, musíme ich nakonfigurovať na určitý (smerovací) protokol. Napr. RIP, OSPF, IGRP ... (tieto protokoly sa delia na smerované a smerovacie, tak pozor). Každý z týchto protokolov má nejakú výhodu a samozrejme i nevýhody (skúsenejší čitateľ istotne pozná diskrétnu matematiku a teóriu grafou, z ktorej tieto protokoly vychádzajú). Dôležité však je, že protokoly dokážu pracovať s tzv. metrikami (ohodnotené grafy). Teda, dalo by sa povedať, že nastavíme vzdialenosť medzi routrami (čo je blbosť, pretože či 1km alebo 2km prejde signál mi to nepostrehneme). Ale takto sa dajú „ovládať“ dynamické smerovania. Keď si teraz predstavíte topológiu. Totiž to tie metriky nastavíme tak, aby jednoducho povedané súčet metrík bol najmenší, teda táto cesta je najlepšia. Ak máme topológiu v tvare nejakého stromu a vysielajúci router je napojený na ďalšie dva, to že jeden má s ním spojenie metriky menšie ako druhý, neznamená, že cesta cez neho je najkratšia. Ďalej to závisí totiž so „susedmi“ na druhom kroku a analogicky ďalej, ako vidno obrázok. Tieto metriky sa nenastavujú, ako bolo povedané, podľa fyzickej vzdialenosti, ale hlavne podľa priepustnosti a rýchlosti prepojených liniek medzi routrami. Ak sú teda dve spojenia prepojené raz cez DSL a druhýkrát cez Dial-Up, väčšiu metriku bude mať pomalšie (alebo podľa typu protokolu, ktorý môže brať aj tú „najdlhšiu“ cestu).


Teória grafov
Zväčšiť

Teda, ak máme takúto topológiu sietí vzájomne prepojených a nastavíme metriku T1 sietí napríklad na jedna, DSL na desať a dial-up na tisíc, tak cesta červená cesta bude z pohľadu prenosu najrýchlejšia, pretože bude mať výslednú hodnotu 5, hoci nám sa javí ako najdlhšia. Ak však vypadne napríklad server na LAN sieti číslo 4, T1 spojenie je pretrhnuté a tak sa vyberie druhá najkratšia cesta, ktorá bude viesť cez siete 2, 3 priamo na cieľ. Všimnime si, že, sieť číslo 3 je v tejto topológii kľúčová z hľadiska rýchlosti. Ak by vypadlo spojenie, tak ostala by jediná možná cesta, ktorá by viedla cez dial-up spojenie, ale stále by tu spojenie bolo! Toto je fantastická záležitosť decentralizácie siete (kľúčová podmienka vzniku Internetu, pre prípad vojny – keďže Internet bol vojenským projektom v počiatkoch jeho vzniku).

 

Routre pracujú teda so sieťami a ich podsieťami. To znamená, že smerovač nemusí vedieť presnú polohu hľadaného počítača (ako napr. switch pri MAC adresách – tento port, táto MAC), ale keď si nevie rady, proste pošle paket do danej podsiete (podľa masky). Tam ho buď odchytí ďalší smerovač, ktorý ma na starosti hlbšie delenie danej podsiete, alebo ho spracuje switch, čo z paketu vyčíta MAC a hodí ho na príslušný port.

IP Adresovanie

TCP/IP protokol pri vyhľadávaní segmentov v sieťach využíva tzv. IP adresovanie. IP adresa je jedinečný súbor čísel a má 32 bitový[1] číselný formát, ktorý je rozdelený na štyri osem bitové časti. 8 (teda v rozsahu 0...255) v takomto formáte:

 

XXX . XXX . XXX . XXX

 

            Každý počítač musí obsahovať inú IP adresu, ináč by mohli vznikať problémy s adresovaním paketov (bližší popis je mimo rozsah tohto dokumentu). IP adresy rozdeľujeme do niekoľkých tried:

 

  • trieda A – 1.x.x.x – 126.x.x.x
  • trieda B – 128.0.x.x – 191.254.x.x
  • trieda C – 192.0.0.x – 223.254.254.x
  • trieda D – 224.0.0.x – 239.254.254.254

 

Pričom adresy v rozsahu 127.x.x.x sú vyhradené pre špeciálne účely (diagnostické testy siete apod.) Čo sa týka udeľovania IP adries pre počítače v LAN (a sieťam podobného typu) je teoretický možné udeľovanie ľubovoľných (no jedinečných) IP adries podľa zvolenia triedy a nemalo by sa zabúdať na rovnakú masku podsiete[2]. Počítačom pripájajúcim sa do Internetu (cez modem) býva adresa dynamicky generovaná DHCP serverom poskytovateľa (ISP – Internet Service Provider).

Pre človeka je komplikované pamätať si čísla daných serverov (napr. pri surfovaní na WWW) a tak sa riešenie našlo v podobe DNS (Domain Name Server). Jedná sa o službu, ktorá dokáže prideliť každej IP adrese meno a to sa skladá z niekoľkých slov oddelených bodkami (). O tieto mená sa starajú medzinárodne (aj tuzemské spoločnosti). Systém doménových mien je však trochu nedomyslený, pretože v dobe ich vývoja autori nepočítali s rozšírením za hranice USA. Preto sa zaviedli domény najvyššej úrovne (top-level domains), ktoré vyjadrovali charakter jednotlivých organizácií. Internet za hranicami začal používať domény najvyššej úrovne vo forme dvoj - písmenových skratiek daného štátu (Country Code) a preto vlastne Amerika nemá vlastnú doménu, ale ostali im prevažne prípony ako COM, NET, MIL, EDU apod.

Každý počítač musí mať teda jedinečnú IP adresu ak chce pracovať v sieti. Aj keď sa to nezdá, tie adresy sú veľmi obmedzené. V podstate sú možné 4 oktety po 255 klientov, čo činí 2554 počítačov a to je niečo okolo 4 mld. Je to málo, lebo si zoberme, že aj mi máme svoju IP adresu na Internete a všetky webové stránky ju musia mať (teda ich hostitelia). Pre každý región (slovensko, česko apod.) je pridelený istý rozsah adries. Servery musia mať pevne stanovené adresy – teda si ich musia rezervovať. Pretože dómenový server pre našu krajinu uchováva názvy jeho top level dómeny (.sk). Takže náš PC, pred tým ako sa vyberie na návštevu sa opýta DNS servera, akú IP má server iNet. Ten ju nájde v databáze a vráti IP adresu. Potom prehliadač sa pripája na konkrétnu IP adresu. Ak by si server IP adresu zmenil, musel by to oznámiť aj organizácia SKNic, ktorá sa stará o tieto dómenové názvy. Ak by však každá stránka mala mať vlastné, jedinečné IP, tak už niekedy v roku 1995, by bol nedostatok stránok. Tak stránky bežia na servroch ako ich podúrovňové domény, napr. liborbes.devnet.sk no o to, ktoré stránky zobrazí server devnet.sk sa už stará sám server! Na SKNicu si teda môžeme zaregistrovať stránku liborbes.sk ktorá však bude odkazovať na liborbes.devnet.sk (fyzicky) a tá teda na devnet.sk, ktorý na IP adresu devnetu.

Teda, ak zadáme do prehliadača liborbes.sk, server nás najprv nasmeruje na DNS server SKNicu, ktorého sa opýta, kde sídli táto stránka. Server mu vráti adresu liborbes.devnet.sk. Táto adresa je ekvivalentná s adresou devnet.sk/liborbes, a teda sa znova opýtame DNS servera, kde sídli tentoraz už server devnet.sk. DNS nám vráti IP adresu a mi sa obrátime na server devnet z jeho IP a požiadame ho o zobrazenie jeho virtuálneho adresára liborbes.

Teda zaregistrovaný server, musí mať pevnú IP adresu aj v prípade jeho reštartu. Ináč by sa znova a znova museli preregistrovať jeho domény. Ako potom príde ku IP adrese obyčajný človek? Podobne. Provajder si zaregistruje svoj server a užívateľ je evidovaný už jeho interným „Internetom“, pričom na Internet vonkajší pristupuje cez IP adresu servera provajdera. Podobné to je ako s mobilmi. Kúpime si kartu Orange, tí nás zaregistrujú a využívame ich vnútornú infraštruktúru. Ak však voláme do zahraničia, tam už nemusí mať vybudované svoje BTS stanice Orange a tak naša požiadavka smeruje na centrálny systém Orange, ten nadviaže spojenie s podobným systémom v štáte, do ktorého voláme (IP adresy sú tam vlastne telefónne čísla, DNS zoznam je interný telefónny zoznam v mobile) a vo svojej vnútornej sieti nájde konkrétneho človeka, ktorému voláme. Internet by v tomto zmysle bola sieť prepojenia operátorov a ich veľkých počítačov.

IP adresa počítača nesmie na konci obsahovať číslo 0 ani 255. Tieto číslice sú rezervované. Ako dosiahnuť, aby naša IP adresa spadala do určitej triedy? Musíme jej prideliť masku siete. Táto maska, nám umožní deliť sieť na rôzne ďalšie podsiete. Ak máme napr. pridelený interval IP adries, s ktorými môžeme ako administrátor disponovať a máme navrhnúť logické rozdelenie sieti (napr. 3 siete po 8 staníc), tak len vyhľadajme na Google nejaký on-line IP kalkulátor. Samotná IP adresácia je pomerne komplikovaná, aby som ju začiatočníkom vysvetľoval. No môžeme si ukázať aspoň jednoduchý princíp fungovania.

Trieda A má nenormálne veľké množstvo podsietí, s ktorými disponuje. Prvý oktet sa nemení, ale menia sa ďalšie tri. Ak by sme chceli takúto sieť bez ďalšieho delenia, logicky dostaneme možných pripojených 2553 klientov. Každý oktet je z intervalu 0..255, ako sme si už povedali a tých oktetov máme tri. Trieda A má teda masku 255.0.0.0 (s prvým číslom nedisponujeme, ale pracujeme s druhými). Prečo práve 255 a 0? Tak, rozložme si túto masku do binárnej podoby:

11111111.00000000.00000000.00000000

            Tam, kde sú nuly, môžeme pracovať s číslami. Ak teda by sme chceli pracovať iba od druhej polovice druhého oktetu, mali by sme masku 255.240.0.0:

11111111.11110000.00000000.00000000

            Masku si však nemôžeme vymýšľať. Pracovať s IP intervalom začneme od konca. Teda po prvú nájdenú jednotku. Tak a ešte sa pozrime na zvláštne – rezervované adresy. Tak napríklad 127.0.0.1 [3] reprezentuje číslo samého seba. Je to akási slučka na sieťovej karte, ktorá sa pripája sama na seba. Alebo číslo 255.255.255.255 je bradcast – odosiela pakety na všetky IP adresy v sieti (napr. switch by paket presmeroval každému, takto sa dajú zisťovať aktívne zariadenia na sieti).

 

            Doteraz sme pracovali len s IP adresami koncových zariadení. V časti o smerovaní sme sa však dozvedeli, že IP adresou sa dá určovať aj podsieť. Ak teda máme IP adresu 192.168.1.1 triedy C (maska 255.255.255.0) ale nie je priamo počítač pripojený s PC, ale je prepojený so switchom a ten je napojený na router, router nevie, kde sa nachádza IP 192.168.1.1, lebo na svojom porte (sused) ma switch. Do jeho tabuľku už router nevidí a tak si konkrétnu IP adresu rozloží pomocou masky a zistí do akej podsiete patrí. Podsieť je prvé číslo intervalu. Teda ak máme interval (trieda C) 192.168.1.0 – 192.168.1.255 tak podsieť naznačíme IP adresou 192.168.1.0 (preto je toto číslo rezervované).

Predstavme si, že máme obrovskú sieť triedy A, ktorá je rozčlenená na menšie a menšie a tak smerovače si nemôžu pamätať 4mld. IP adries. Preto hlavný smerovač, keď napr. z Internetu dostane paket pre počítač 192.168.1.1 si rozdelí IP adresu podľa svojej masky triedy A a hodí paket do siete 192.0.0.0. Tam ho spracuje ďalší router, ktorý člení celú sieť vlastne na triedu B. Tiež si nevie rady s týmto paketom a tak hodí paket do podsiete 192.168.0.0, tam sa to opakuje až kým nepríde paket do spomínaného smerovača, ktorý už priamo pozná MAC adresu z paketu a odošle ho teda priamo príjemcovi. Táto cesta po sieti sa pamätala a „pribaľovala“ na paket. Ak teda príjemca bude chcieť odpovedať, paket sa začne „rozbaľovať“ ako cibuľa od konca.

            Prečo však nemohol prvý router hodiť paket do podsiete 192.168.1.0? Pretože nevedel, ako je sieť ďalej diferencovaná. Za ním, mohla byť „skupina“ switchov, ktoré mali pripojených 2553 klientov. Ako som spomenul 0 je rezervované číslo pre podsieť. To je aj nie je pravda. Pretože podsieťovím číslom môže byť ktorékoľvek prvé číslo vyhovujúce maske. Zoberme si masku 255.255.255.240 a rozložme ju do binárnej sústavy:

              255      .255                 .255                 .240        

        1111111       .11111111       .11111111       .11110000

        1111111       .11111111       .11111111       .11110001

Z toho vyplýva, že na rozdelenie adries počítačom, máme poslednú polovicu z posledného oktetu. Ak máme takúto masku, číslo podsiete bude prvé číslo intervalu, teda 1111000 a to je číslo 240 a teda získavame interval voľných IP adries od 241 po 254, teda do takejto siete pripojíme maximálne 13 počítačov.

Vieme už o prvom čísle, ale čo znamená posledné číslo? No to má veľmi veľa spoločného s adresou 255.255.255.255, ktorá vyšle paket všetkým klientom. Ak použijeme adresu 192.168.1.255 s maskou 255.255.255.240 sa vyšle paket do počítačov z intervalu predchádzajúceho odseku.

A aby nás nemiatlo, IP adresa aj MAC adresa sú uložené v hlavičke paketu. Je tam viacero informácií, ktoré sa dokonca pri manuálnom prepise dajú zneužiť a tak príjem takýchto paketov, by mohlo spôsobiť v niektorých prípadoch aj pomerne veľkú kalamitu v pretečení zásobníka. Takže paket nesie informácie o IP a presnejšie jeho rozdelenie na rámce (frames) o MAC adrese.

 



[1] Bit (z anglického) Binary Digit = dvojková číslica. Je to jednotka informácie pamäti, ktorá môže nadobúdať hodnoty  0 – 1.

[2] Maska podsiete ma taktiež 32 bytový číselný formát s rovnakým rozložením ako IP adresa. Masky umožňujú napríklad administrátorom deliť prideľované IP adresy do menších celkov. No jedná sa o zložitú problematiku, ktorá taktiež nezapadá obsahovo do tohto dokumentu. Pre útočníka však je dôležité vedieť, aká je maska, pretože adresovanie či smerovanie dát pri maskách iných ako 255.255.255.0 je úplne odlišné!

[3] Ekvivalent ku číselnej podobe je slovo localhost.

Neprehliadnite: