Zpět na seznam článků     Číst komentáře (7)     Verze pro tisk

Protokol sem, protokol tam ..

Autor: compman   
24.6.2006

...aneb stručná rekapitulace protokolů se zaměřením na IPv4, hlavně na tunelovací protokoly a na tunelování samotné, nebude chybět ani špetka praxe :)


Z nadpisu a "podtitulku" jste asi usoudili, že dnešní článek bude spíše o teorii. Máte pravdu. Vám, kteří chcete jen přesné návody, jak někomu něco smazat, či jak se nějkam dostat, a nechtít se naučit nic teoretického, tento článek nedoporučuji, protože je zde především pro navštěvníky, kteří chtějí vědět "jak věci fungují".

Začněme tedy popořádku...

Protokol

Všichni víme, že existuje něco jako hardware a software. Hardwarově propojíme třeba ethernet kabelem dva či více PC a softwarově zajistíme, aby věděli, jakým způsobem mezi sebou komunikovat. Právě tuto funkci zastávají protokoly.
Protokoly jsou definovány standarty (podle RFC, ISO, IEEE, atd...), aby se tak předešlo situaci, kdy každý PC bude používat svůj protokol a tudíž se "nedomluví" nikdo s nikým. Existují však také jakési soukromé protokoly (zřejmě pro testovací účely).

Co tedy vlastně protokol může provádět?
  • detekci existence (cílových) zařízení (wireless)
  • proceduru navázání spojení
  • adresování (např. v síti)
  • přenos dat
  • zpracování chyb (příp. odeslání požadavku o náhradu "poškozených" dat)
  • řízení toku komunikace
  • přidělování prostředků
  • uzavření relace či spojení
Je toho zřejmě více, avšak toto je nejpodstatnější. Jak vidíte, protokoly "předurčují", jakým způsobem a jak se bude komunikovat.

TCP/IP , TCP , UDP , ICMP, ....

O nejrozšířenějším TCP/IP protokolu se rozepisovat nebudu, neboť vše o něm se dá najít v češtině na webu. Rovněž o TCP (Transmission Control Protocol), UDP (User Datagram Protocol), ICMP (Internet Control Message Protocol), IGMP (Internet Group Management Protocol), IPCP (Internet Protocol Control Protocol) a dalších.

IPX (/SPX)

O IPX (Internetwork Packet Exchange) protokolu už ví méně lidí. Používá (či snad používal?) se v Novell sítích, nejčastěji v síťovém OS NetWare. Byl vyvíjen od začátku devadesátých let, později ho v Internetu převálcoval TCP/IP, ještě později i v LAN sítích. Protokol vychází z protokolu IDP firmy XNS (Xerox Network Services). Starší hry (třeba i StarCraft) ještě podporují možnost síťového hraní přes protokol IPX (musí však být nainstalován v OS). Pokud si dobře pamatuji, systém Windows vždy podporoval a snad ještě i nativně podporuje IPX (ve Win9x automaticky po instalaci, v XP se musí "aktivovat" ručně).
Adresování probíhá přímo na 48-mi bitové MAC adresy síťových karet. Sítě samotné mají však unikátní 32-bitovou hexadecimální adresu (rozsah 0x1 - 0xFFFFFFFE). Směrování u protokolu IP je složitější, protože se IP adresa musí nejdříve "resolvnout" (můj oblíbený pojem :) ), tj. se nejdříve musí zjistit, jaké síťové kartě (jakému PC v síti) náleží ona IP adresa. Síťová karta, jež ji vlastní poté odpoví také přes ARP (Address Resolution Protocol) (stejně jako dotazatel), že je vlastníkem této IP adresy a má MAC adresu takovou a makovou.. Tento "krok" je u IPX zbytečný a proto ho IPX nepoužívá (což má za následek nepatrné zvýšení výkonu a snížení zátěže sítě).
Praktické využití IPX/SPX protokolu je hlavně v přímém propojení dvou PC přes sériový kabel (také skoro nejčastěni používaná realizace spojeni po sériovém kabelu), také však i v LAN sítích.
To by bylo asi vše ze základů o IPX/SPX.. pokud vám to nestačí, Google vás zasytí (ba přímo zahltí).

IP protokol

Dnes nejrozšířenější rodina protokolů. IP protokol je také jistou součástí i v TCP/IP. Dvě nejpoužívanější verze tohoto protokolu jsou IPv4 (dnes nejrozsáhlejší - xxx.xxx.xxx.xxx) a IPv6 (na její rozšíření teprve přijde s úbytkem volných IPv4 adres - viz. "basic info"). Rozepisovat všech 255 protokolů (přesně definovaných 137) zde nebudu. Od toho je tu seznam IPv4 adres s podrobným popisem (na hyperlinku) a Google.

Teď, když máte alespoň základní přehled co jsou to protokoly a znáte ty základní, můžeme se podívat na některé zajímavější a méně fádní protokoly..

Tunelování

O praktické stránce tunelování toho bylo řečeno jinde až moc. Obecná teorie však zaostává. Samotné tunelování není nijak konkretizováno. Tunelovat můžete lopatou, težkými stroji, na banky doporučuji výkonnou zbíječku. Tunelování v počítačových sítích také není obecně specifikováno. Tunelovat zde můžete mnoha způsoby a mnoho "věcí", např. tunelování NATů, přenos dat internetem přes šifrovaný tunel (třeba SSH). Tunelováním se dá projít skrze firewall či "špiónské" nástroje na výchozí bráně, avšak používá se i k připojení klienta do sítě, která leží za hromadou jiných sítí. V tom případě se dá využít tzv. VPN (Virtual Private Network) sítích, o kterých dnes také bude řeč. Více informací, pokud potřebujete, víte, kde najít.... Globálně vzato, tunelovat se dá vždy a všechno, jen přes málo propustné firewally a tvrdou ocel to jde těžko.. :)

PPP

Nikoliv "Public Private Partnership" či "Purchasing power parity", ale Point-to-Point Protocol. Ano, vraťme se ještě k protokolům - PPP se používá k přímému propojení dvou "nodů" (z angl. "node" - komunikační bod). Používá se jak na sériovém kabelu, telefonních linkách, mobilních telefonech, dial-up připojeních, optických kabelech, tak i na páteřní síti Internetu. Narozdíl od "seskupení TCP/IP", které je specializováno na více PC v síti, PPP se primárně používá k propojení dvou strojů. PPP vychází z protokolů SLIP (Serial Line Internet Protocol) a PLIP (Paralell Line Internet Protocol), které se používaly k propojení dvou "PC" po jednom kabelu (sériovém/paralelním).
PPP je však virtuální protokol. Jen software, vzpomínáte? :) .. proto může existovat něco jako "Multilink PPP" a "Multiclass PPP".

Multilink PPP > Multiclass PPP < Multilink PPP , .....

Protože, a díky bohu, jsou protokoly virtuální, může jich běžet najednou hned několik, a to nejen různého druhu. "Multilink PPP" toho využívá a otevírá několik PPP spojení zároveň. Data tím pádem proudí mnohem rychleji. Ale samotný Multilink může být jen jeden. O duplikaci Miltilinku se stará "Multiclass PPP", který, jak už je patrné z názvu, je zařazuje do jakýchsi tříd (class) a spouští nezávisle na sobě (používá se zde frequenční multiplexing). Tím se vlastně násobitel násobí násobitelem (správně řečeno - činitel činitelem) a dosahuje se tak mnohonásobné rychlosti. Zatímco Multilink je typický pro analogové/digitální linky (analogové modemy, ... , ISDN), Multiclass je čistě klientská a většinou i individuální záležitost (individuální pro dvě cílové stanice)... Zabezpečení obstarává třeba EAP Odbornější info o PPP dejme tomu na RFC 1661 a na Googlu.

A konečně už se dostáváme pomalu ale jistě k tomu podstatnému.. Nyní si předvedeme jeden ne příliš známý, přesto často využívaný protokol ve VPN sítích....

L2TP (Layer 2 Tunneling Protocol)

Ano, tak jeho název už znáte :)
L2TP byl vyvinut "by" IETF (Internet Engineering Task Force - organizace vytvářející standarty) pro tunelování jednoho nebo více PPP spojení přes IP tunel skrz IP síť (sítě). Používá dva typy zpráv - "ovládací" (control) a datové (data). "Ovládací" zprávy slouží k navázání spojení, většinou přes standartní TCP/IP, a zajišťují i případnou náhradu při ztrátě packetu, zatímco datové "zprávy" přenášejí samotná data přes PPP tunel a náhradu ztraceného packetu neposkytují. Chytrým hlavám to náramně připomíná TCP a UDP, že? :)
Přes jeden tunel mezi dvěma (příp. více) stanicemi může vést až 65535 spojení. "Kontrolní zprávy" u každého z nich obstarají navázání a datové "zprávy" potom přenášejí data. Přestože se může zdát, že toto všechno musí dohromady přenášet data velkou rychlostí, není tomu tak - logicky - data jsou totiž tunelována přes IP a přes vaši limitující gateway, ... apod.


Diagram okopírovaný z RFC2661 znázorňující postup tunelování ("přenos" z PPP na "IP vrstvu" či jinou):
+-------------------+				  
| PPP Frames        |				  
+-------------------+    +-----------------------+
| L2TP Data Messages|    | L2TP Control Messages |
+-------------------+    +-----------------------+
| L2TP Data Channel |    | L2TP Control Channel  |
| (unreliable)      |    | (reliable)            |
+------------------------------------------------+
|      Packet Transport (UDP, FR, ATM, etc.)     |
+------------------------------------------------+

L2TP Access Concentrator (LAC)

je jakýsi modulátor dat, který zpracovává klientské požadavky a posílá je do PPP tunelu. Ano, L2TP pracuje na principu server<-client. LAC naslouchá na zvoleném zařízení a "zprávy" (messages) potom přeposílá do PPP tunelu, přičemž přidává "kontrolní zprávy" a stará se o spojení samotné. Většinou je toto "zařízení" spuštěno na localhostu, ale nemusí to být pravidlem, může běžet třeba na gatewayi, ne však v sítích Microsoft :).

L2TP Network Server (LNS)

Možná vás překvapím, ale je to server. :) Je to vlastně serverová část PPP tunelu. Přijímá požadavky na otevření tunelu, otevírá nové sessions na požádání klienta, ale také může kdykoli jakoukoli session ukončit (což je samozřejmostí - když jsme na návštěvě, také nás hostitel může "vyhostit"). Tento server však také nemusí být cíl PPP tunelu. Může to být třeba zase gateway, která "rozluští" PPP tunel a na server v lokální síti přeposílá samotná data.
Virtual Private Network
Tuto část úmyslně píši "malým písmem", i když se jedná o giganta hýbající světem Internetu a je "symbolem" tunelování. To je však jen napůl pravda.
O praktické stránce VPN je toho napsáno velmi, nejen zde. Teoretickou část nyní vidíte všude kolem, resp. v tomto článku. VPN (jak jsem již psal) z velké části používá L2TP, šifrování IPSec, kterým se šifruje také onen L2TP a o kterém si ještě povíme.
Jinak nevidím důvod, proč se u VPN dále zdržovati.. nakonec si jednu takovou "rádoby VPN" zrealizujeme už prakticky.

Šifrování IPSec

Jednodušše řečeno, IPSec je jakési bezpečnostní rozšíření IP protokolu. Funguje na 3. (síťové) vrstvě v OSI architektuře. Původně jsem se chtěl o tomto tématu rozepsat, ale při hledání jsem narazil na již obsáhlý referát v češtině. Doporučuji alespon prvnich pár řádků přečíst :). IPSec můžeme použít i v PPP tunelu, tak jako v každém jiném.
Tolik o IPSec. Opisovat link nebudu a cokoli navíc je nošení dříví do lesa.

Plány naplánovány, jde se do praxe

Předpokládejme, že si chceme takovýto tunel vytvořit. Pokud jste někdy používali VPN, tak jste, ač třeba nevědomky, již jakový tunel vytvářeli. My si však ukážeme trochu složitější nastavení a nebudeme se zaměřovat hlavně na VPN, i když použijeme principy jemu blízké.
Mezi nejznámnější aplikace pro vytvráření tunelů přes L2TP patří hlavně OpenL2TP, se kterým budeme pracovat, dále třeba L2tpns a RP-L2TP.
Nutno podotknout, že všechny tyto aplikace běží na unix-like OS, tudíž ve Windows jedině asi pod cygwinem nebo coLinux Projectem.. , pokud vůbec. K dispozici jsou ale zdrojové kódy, tak by snad nebyl takový problém (pro ty zkušenější), zdrojáky upravit a zkompilovat ve Winu. V OS Windows sice podpora VPN je, ne však "čistý" L2TP server či klient.

První krok - download

http://sourceforge.net/project/showfiles.php?group_id=118353&package_id=128860
berte 0.10 a novější, v případě, že vám nejdou ani za boha rozchodit, tak starší.

Instalace

Kdo už párkrát kompiloval v Linuxu nějaký program, který už obsahoval makefile v archivu (příp. i configure), tak ví, že si má přečíst soubor INSTALL (případně i README) .. v INSTALLu se dočteme, že (pokud nechceme upravovat samotný makefile (já ho ale upravit musel, neboť mi make nechtěl nalézt zdrojové kódy kernelu pro kompilaci modulu pro PPP přenos), pro zdrojové kódy, či měnit defaultní cestu) stači pustit make, nasledovaný příkazem make install (nebo checkinstall pro ty, kdo vědí, o čem mluvím). Tím jsme nainstalovali celý balík tří nástrojů (server/client , konfigurační nástroj serveru/clienta a a klienta pro vzdálené ovládání serveru přes RPC) i jejich manuálové stránky (!).

Spouštíme

Takže.. základem bude na jednom počítači spustit openl2tpd a nastavit ho jako LNS (server) a na jiném PC také spustit openl2tpd a nastavit ho jako klienta (dokonce můžeme použít mód "jen klient", kdy openl2tpd odmítá příchozí požadavky na tvorbu tunelu (a jednání jako server)).

Na jedné straně tedy spustíme "server":

/usr/sbin/openl2tpd
Tím jsme ale spustili jen daemona, konfigurovat ho můžeme interaktivně za běhu jiným nástrojem:

/usr/bin/l2tpconfig
V případě, že jste změnili výchozí cestu, tak se to samozřejmě bude spouštět odjinud. Po spuštění konfiguračního nástroje se dostaneme do onoho interaktivního módu. Je zde plno nápovědy, nejen v manuálové stránce. Pokud potřebujete vysvětlení pro jakoukoli nabídku, vložte prostě "?" místo příkazu. Pokud po startu l2tpconfig napíšete "?", zobrazí se vám hlavní menu. Pokud si chcete třeba prohlédnout práci s tunely, použijete "tunnel ?". Pokud napíšete "tunnel create ?", zobrazí se vám možnosti při vytváření tunelu, atd.
Jednoduchý princip činí konfigurační nástroj l2tpconfig přehledným a logickým. Co víc si přát? :) Stručně řečeno, l2tpconfig je jakýmsi prostředníkem mezi uživatelem a daemonem openl2tpd.

Konkrétní příklad

Existuje více a jednodušších řešení, jak vytvořit L2TP tunel, než to, ktere zde popíši, ale snažil jsem se vybrat příklad, který poskytuje jistou malou míru zabezpečení (ale IPSec neběží) a přesto je jednoduchý. Nutno však podotknout, že toto je pouze příklad. OpenL2TP má mnohem více možností, které zde nejsou uvedeny.
Server - ležící, spící
Začněme pěkně popořadě. Vše budu popisovat, takže se nebojte :)

l2tp> peer profile create profile_name=neco \
default_tunnel_profile=profil_tunelu \
default_session_profile=profil_session \
default_ppp_profile=profil_ppp
Created peer profile neco
Tím jsme vytvořili peer profil "neco" a definovali mu jména profilů jiných služeb, které teprve vytvoříme. Nutno podotknout, že "peer" zpracovává samotný přenos. Pro představu se dá přirovnat k fyzické vrstvě v ISO architektuře.

l2tp> tunnel profile modify profile_name=default \
	auth_mode=simple
Modified tunnel profile default

l2tp> tunnel profile create profile_name=profil_tunelu \
	hide_avps=yes secret=tajneheslo auth_mode=challenge
Created tunnel profile profil_tunelu
Tímto jsme vytvořili jak standartní profil "default" (či spíše upravili), kde je jednoduchý autorizační mód. Je dobré si k defaultnímu profilu nastavit alepsoň jednoduchou autorizaci. My však použijeme druhou část, kde máme už vylepšenou autentizaci přes "tajneheslo", což je tzv. "shared key". Tento klíč musí klient znát, aby se mohl připojit. Rovněž díky "challenge" typu autentizace můžeme zapnout i AVP hiding. Tunel zajišťuje jakési přesměrování dat z nekolika sessions do jednoho "proudu dat", který je přenášen peerem.

l2tp> session profile create profile_name=profil_session \
	use_data_sequencing=yes
Created session profile profil_session
Vytvoříme nový session profil (v jednou tunelu může být 65535 sessions) a povolíme mu, aby používal sequenční čísla (což je užitečné přo "kontrolní PPP zprávy", které tak mohou zjistit, zda se nějaký packet neztratil).

l2tp> ppp profile create profile_name=profil_ppp \
	lcp_echo_interval=5
Created ppp profile profil_ppp
A nakonec vytvoříme samotný PPP profil. "lcp_echo_interval=5" znamená, že náš server bude každých 5 sekund posílat PPP LCP echo.
LCP (Link Control Protocol) je velmi důležitý, je součástí PPP protokolu. Jak klient, tak i server posílají tyto packety, aby zjistili konkretní informace o typu přenosu, které datové spojení vyžaduje. Více zde.

Server máme nakonfigurován a spuštěn (už běží :) ).
Klient, prvek inicializace
Nyní nakonfigurujeme klienta. Ten buď poběží na jiném PC, nebo na stejném jako server (testovací účely) a bude se potom připojovat na 127.0.0.1. Nutno podotknout, že je to klient, kdo vytváří tunel:

l2tp> tunnel create dest_ipaddr=IP_serveru \
secret=tajneheslo hide_avps=yes tunnel_name=nas_tunel
Created tunnel 4964

l2tp> session create tunnel_name=nas_tunel
Created session 4964/54933
Tím jsme nakonfigurovali klienta, vytvořili tunel se serverem a do tunelu přidali jednu session pro přenos dat. Rovněž jsme zapnuli skrývání AVP (jako na serveru). Při vytváření session je možné specifikovat "user_name=" a "password=" pro PPP daemona běžícího na serveru (pppd).

Overview

Tak. Server i klient běží. Pokud jste se dočetli až sem, možná si říkáte, naco je nám PPP tunel? Jak přes něj přenášet data? Odpověď je jednoduchá - ppp spojení je potřeba pro programy, které jej vyžadují (a spojují se s ppp daemonem). Tímto řešením jim tak můžeme poskytnout jednoduchý tunel přes IP protokol.
Jak jste si možná všimli, "profily" se používají na serveru. Konfigurační příkazy pro klienta jsou stejné jako pro server, jen bez toho slova "profile".
OpenL2TP poskytuje až netušené možnosti, je však podstatně složitější než nedávno recenzovaný chownat, který však tuneluje TCP/UDP traffic.

Závěrem

Wow. To jsem se rozepsal. Začali jsme u definice protokolů a končíme nastavováním L2TP tunelu. Původně jsem praxi chtěl jsen tak naťuknout, ale zabrala mi graficky polovinu článku :). Zatvrzelým uživatelům OS Windows se omlouvám, ale GNU/Linux je OS zaměřený hlavně na sítě a síťovou komunikaci, která je v OS Windows na nižší (ne-li nízké) úrovni. OS Windows má zase lepší podporu multimédií :). Uvažoval jsem nad rozdělením článku do dvou dílů, neuskutečnil jsem to nakonec, protože začátek má za úkol uživateli nastínit teorii protokolů a druhá část článku zaměření na mé oblíbené tunelovací protokoly (a jejich využití v praxi).
V tomto článku jsem úmyslně nerozepisoval některé pojmy. Snažil jsem se ho napsat tak, aby si ti čtenáři, kreří jsou schopni tomu porozumnět a chtějí se učit, si tyto informace našli sami na googlu nebo na Wikipedii a tímto se pokouším alespoň trochu zvednout úroveň soomu a přimnět uživatele hledat! Doufám, že to nevyvolá v diskuzi další vlnu snadno nalezitelných a .. ehrm.. "lamerských" (promiňte mi to slovo) otázek.
Doufám, že si z článku odnesli něco i ti pokročilejší :) a za případné nepřesnosti se omlouvám. Možná, že je toto nejdelší článek na soomu.

PS.:Většina těch méně zkušených uživatelů volá po konkrétním návodu, jak to a ono nastavit. .. Občas mám pocit, že si bez návodu ani nevyčistí zuby. Já však říkám: Nejlepší návod je znalost teorie. Potom si návody budete vymýšlet podle sebe a se znalostí teorie se stanete více samostatní.

Já vám mohu ukázat dveře, vstoupit už musíte sami.

compman :)


Líbil se Vám článek?
Budeme potěšeni, pokud vás zaujme také reklamní nabídka

Social Bookmarking

     





Hodnocení/Hlasovalo: 4.54/89

1  2  3  4  5    
(známkování jako ve škole)