diff --git a/doc/slt2001/Makefile b/doc/slt2001/Makefile new file mode 100644 index 00000000..5979e1a0 --- /dev/null +++ b/doc/slt2001/Makefile @@ -0,0 +1,10 @@ +all: slt.dvi + +slt.dvi: slt.tex + csplain slt.tex + +slt.ps: slt.dvi + dvips -o slt.ps -D600 -ta4 slt.dvi + +clean: + rm -f *~ *.log *.tfm *.*pk *.*gf *.ps *.dvi diff --git a/doc/slt2001/slt.tex b/doc/slt2001/slt.tex new file mode 100644 index 00000000..fb948586 --- /dev/null +++ b/doc/slt2001/slt.tex @@ -0,0 +1,275 @@ +\magnification=\magstep1 +\input epsf.tex +\input mjmac.tex + +\language=\czech +\chyph + +\hsize=160truemm % A4 with 25mm margins +\vsize=247truemm +\parindent=2em +\nopagenumbers + +\def\hdr#1{\medskip\leftline{\bf #1}\smallskip} +\def\\{\hfil\break} +\def\BIRD{{\sc Bird}} + +\def\inititemize{\vskip 1pt\begingroup +\parskip=1pt plus 0.3pt minus 0.1pt +\advance\leftskip by 3em +\advance\rightskip by 3em +\parindent=0pt +} + +%%% Úvod a historie projektu +\hdr{Na počátku bylo vejce aneb Úvodem} + +\noindent Internet i UNIX jsou na světě již pěkných pár pátků. Počítače pracující +pod nepřeberným množstvím unixovských systémů od nepaměti fungují jako +internetové poštovní servery, name-servery a menší routery. Skoro by se zdálo, že +si tyto dva světy už nemají co nového říci. V~posledních letech ovšem +výrazně vzrostl výkon běžných PC-ček a objevily se pro ně karty podporující +nejrůznější síťové technologie, a~tak se tyto počítače staly vhodnými +kandidáty i~pro funkci routerů. Na~mnoha místech tak starší PC-čko +s~volně šiřitelným softwarem předstihlo svého staršího a dražšího +komerčního sourozence. Ačkoliv podpora routingu, firewallingu a inteligentní +queue management v~jádrech těchto~OS (a~zejména Linuxu) je již velice +vyspělá, ještě nedávno byly notně zanedbávány protokoly pro dynamický +routing, tradiční unixovskou koncepcí umístěné do~uživatelského prostoru +v~podobě routovacích daemonů. + +Tento nedostatek se pokoušela mezi jinými napravit také skupina nadšenců +na~pražské Matematicko-fyzikální fakultě UK, která se rozhodla jako svůj +studijní projekt vytvořit nového routovacího daemona, který by se stal +něčím víc než jen důstojným konkurentem komerčních routerů -- nejen +kopíroval už známá řešení, ale také přispěl něčím novým; na~jedné straně +být stabilním a efektivním programem pro praxi, na~straně druhé ovšem +i~laboratoří pro snadné experimentování s~novými myšlenkami. A~tak se +narodil projekt {\it BIRD Internet Routing Daemon} (zkráceně \BIRD\footnote{$^0$}{Projekt +si samozřejmě vysloužil nejrůznější přezdívky -- od Ptáčete až po~Ptákovinu.}). + +Původní plány byly smělé a rozhodné: Vytvořit nejlepšího routovacího +daemona na světě, který by fungoval na~všech platformách, vyžadoval +minimum strojového času a paměti, podporoval všechny routovací protokoly +atd., zkrátka sen, jaký má být. Přeskočme nyní dva roky vývoje\footnote{$^1$}{během nichž +z~některých požadavků samozřejmě sešlo -- například logem projektu +se nakonec nestal ptáček nesoucí v~zobáčku snítku byliny řečené routa \dots} +a podívejme se, co z~toho vzešlo. + +%%% Svět routingu +%% v~tištěné verzi přeskočíme + +%%% Co BIRD dokáže +\hdr{Když ptáčka lapají, pěkně mu zpívají aneb Feature list} + +\noindent \BIRD\ dostal od svých sudiček do~vínku mnohé dary: + +\def\icirc{\raise0.2ex\hbox{$\circ$}} % Signs frequently used for \itemize + +\itemize\ibull +\:Schopnost komunikovat protokoly IPv4 i IPv6. +\:Podporu všech základních routovacích protokolů: + \itemize\icirc + \:RIPv2 (Routing Information Protocol, viz RFC 1723 a 2080)\\ + Určen pro interní routing, dnes významu spíše historického.\\ + Algoritmus: distance vector (Bellman-Ford).\\ + Velmi pomalá konvergence, použitelý pouze pro maličké sítě. + \:OSPFv2 (Open Shortest Path First, viz RFC 2328)\\ + Určen pro interní routing, v~současné době asi nejběžnější.\\ + Algoritmus: link state (Dijkstra).\\ + Rychlá konvergence, ale velice komplikovaný.\\ + Zatím podporujeme pouze pro IPv4. + \:BGP4 (Border Gateway Protocol, viz RFC 1771 a 2283)\\ + Standardní protokol pro externí routing mezi AS.\\ + Rychlá konvergence, možnost administrativní filtrace.\\ + Algoritmus: path vector (upravený Bellman-Ford). + \endlist +\:Propojování protokolů a výměnu dat mezi nimi. +\:Schopnost uplatňovat routing policy -- určovat, které routovací informace + budou od~kterých protokolů přijímány a do~kterých protokolů vysílány. +\:Snadnou konfiguraci a údržbu, ale o~tom až později. +\:Modulární architekturu umožňující snadné doplňování nových protokolů, + filtrů i jednoduché portování na~další systémy. (Interface k~routovacím + službám jádra je bohužel i mezi jednotlivými unixovskými systémy natolik + různorodý, že dokonce i~Linux 2.0 a Linux 2.2 jsou naprogramovány jako dva + odlišné porty.) +\:A v~neposlední řadě kvalitní dokumentaci jak uživatelskou, tak + programátorskou (to je vítaný důsledek bytí školním projektem). +\endlist + +%%% A jak to všechno propojit +\hdr{Svět z~ptačí perspektivy aneb Jak to všechno dát dohromady?} + +\noindent Hlavním problémem ovšem není ani tak všechny tyto vymoženosti naprogramovat +a popropojovat, nýbrž udělat to tak, aby z~toho nevznikl neudržovatelný +a neefektivní zmatek\footnote{$^2$}{Nádherným příkladem je Mendelův pes, +jak ho kdysi nakreslil pan Kantorek.}. Z~toho se zrodil modulární pohled +na~svět routingu a následně i celá modulární architektura programu: + +\bigskip + +\centerline{\epsfxsize=0.9\hsize\epsfbox{../slides/obr5.eps}} + +\medskip + +Základem pohledu na~Internet z~naší \uv{ptačí perspektivy} je routovací +tabulka. Na~ní jsou připojeny jednotlivé routovací protokoly -- jak +protokoly reálné, tak i několik virtuálních, jako je například protokol +Kernel zajišťující synchronizaci tabulky s~tabulkou jádra nebo protokol +Static generující podle své konfigurace statické směrování. Každý z~protokolů +posílá do~tabulky položky pro všechny routy, které se na~základě svých informací +o~topologii sítě dozvídá. Tabulka pro každou síť vybírá na základě preferencí +jednotlivých protokolů a jejich metrik optimální směr a ten oznamuje +zpět protokolům. V~cestě ovšem v~obou směrech stojí filtry, které mohou +tok dat regulovat -- některé položky odmítat, jiné upravovat (například +jim přenastavovat metriky či tagy; to se dokonce vztahuje i~na +atributy doplňované cílovým protokolem, protože nejprve cílový protokol +nastaví implicitní hodnoty svých atributů, pokud je již položka neobsahovala, +a teprve pak dojde k~filtrování). + +Routovacích tabulek může dokonce existovat vícero a pomocí protokolu Pipe +si mohou přeposílat vybrané položky. Tím můžeme zajistit například +routing závislý na~zdrojové adrese či vstupním interfacu: u~Linuxu 2.2 +či novějšího nakonfigurujeme jádru více routovacích tabulek a každou +z~nich připojíme na~jednu tabulku naši. + +\hdr{Ptačí zpěv aneb User interface} +%%% User interface: konfigurace, logging a filtry. Remote control. + +\noindent Síť se mění a s~ní se musí měnit i konfigurace síťových +komponent. Ta se pozvolna stala tradičním kamenem úrazu většiny routerů. +U~tohoto kamene se totiž scházejí dva odvěcí nepřátelé: +snaha o~snadnost a flexibilitu konfigurace a snaha o~nepřetržitý +provoz sítě. A~jednou sleví ten, podruhé onen -- autoři některých +routerů vsadili na~sílu textových konfiguračních souborů za~cenu +toho, že se po~každé změně konfigurace musí router restartovat +a po~nějakou dobu neroutuje, jiní zase podřídili non-stop provozu +vše ostatní a stvořili konfigurování nepřeberným množstvím online +příkazů, pomocí nichž se některé věci provádějí snadno, jiné, +na~které autoři speciální příkaz nevymysleli, už obtížněji a ještě jiné +vyžadují do~výsledného stavu dospět postupným provedením mnoha změn, +což má obvykle za~důsledek daleko delší výpadek než jaký by byl vznikl +reloadem celého routeru. + +\BIRD\ se snaží dosáhnout obojího: používá textové konfigurační soubory, +uživateli tak dává možnost vytvářet konfiguraci víceméně libovolným +způsobem -- ať již ručním editováním, interaktivními programy či +automatickým generováním pomocí scriptů. Po~změně konfigurace je +ovšem schopen si novou verzi souboru přečíst, porovnat s~právě +používanou konfigurací a změnám se za běhu přízpůsobit (pokud +jsou změny příliš velké, může to způsobit restart +některého z~protokolů, ale provoz těch, kterých se změna +netýkala, to nijak neohrozí). + +Konfigurace každého protokolu (lépe řečeno každé jeho instance -- +protokoly mohou být spuštěny několikrát na~různých rozhraních +či nad různými tabulkami) vypadá přibližně takto: + +\verbatim{ protocol bgp TestBGP { # instanci si můžeme nazvat + local as 65000; # náš AS + neighbor 195.39.3.64 as 5588; # sousední AS + export all; # posílat budeme všechno + import filter { # na vstupu některé odmítneme + if !(bgp_path ~ / ? 5588 ? /) then reject; + if net ~ [ 10.0.0.0/8+, 192.168.0.0/16+ ] then reject; + preference = 101; # zbylým nastavíme preferenci + accept; # a přijmeme je + }; + }} +\noindent Vždy popisuje protokol, jeho parametry, připojení k~tabulkám +(v~našem případě používáme tabulku implicitní) a nastavení vstupních +i~výstupních filtrů. + +Filtry jsou popisovány jednoduchým procedurálním programovacím jazykem, +který má k~dispozici všechny informace o~právě zpracovávané položce, může +se podle nich rozhodovat a libovolně je měnit. Díky tomu je možné jednoduše +zadávat i velice složitá pravidla, definovat si podprogramy sdílené +filtry patřícími k~více protokolům, i~počítat metriky pro jeden protokol +na základě metrik protokolů ostatních. + +Vítaným pomocníkem při odhalování problémů v~sítích je rovněž volitelné +logování důležitých událostí a trasování činnosti protokolů: zde si je +možno pro každý protokol vyžádat prakticky cokoliv počínaje základními informacemi o~běhu +protokolu (připojování a odpojování sousedů apod.), přes výměnu položek +mezi protokolem, filtry a jeho tabulkou, a konče detailním výpisem všech +přijatých i odeslaných paketů. + +Mimo to \BIRD\ disponuje \uv{dálkovým ovládáním} -- jednoduchým příkazovým +rozhraním, přes které se mohou připojovat různí klienti a vydávat jak +některé řídící příkazy (restarty protokolů, reload konfigurace, přepínání +trasování, \dots), tak požadavky na~vypisování stavu routovacích tabulek +a protokolů. U~těchto příkazů je možno využívat plné síly filtrovacího +jazyka, takže chceme-li například znát všechny routy směrované pomocí +BGP na jednoho konkrétního souseda, stačí položit dotaz typu + +\verbatim{ bird> show route where source=RTS_BGP && gw=62.168.0.1} + +\noindent a dozvíme se ihned vše, co jsme potřebovali. Ladění filtrů +navíc usnadní i~to, že se můžeme zeptat na~obsah routovací tabulky +z~pohledu některého z~běžících protokolů. + +%%% BIRD uvnitř +%\hdr{Ptačí anatomie} +%% existuje progdoc + +%%% Netradicni pouziti +\hdr{Cesty tažných ptáků aneb Za hranicemi všedních dnů} + +\noindent Hotová modulární implementace routovacího daemona samozřejmě +svádí i k~méně tradičnímu využití. Zde se fantazii meze nekladou, autory +samé během vývoje napadly například tyto triky: + +\itemize\ibull +\:{\I multirouter} -- \uv{schizofrenní} zařízení pracující na různých + skupinách interfaců jako různé routery řídící se různými pravidly, + ležící třeba i v~různých autonomních systémech. To je možno zařídit + patřičným nastavením jádra a buďto více běžícími \BIRD{}y nebo dokonce + jedním pracujícím s~několika různými routovacími tabulkami. Tak by + mohl například celý pražský NIX běžet na jediném routeru (pravda, + běžné PC by na to nestačílo), a přesto by si každý provider mohl sám + určovat a konfigurovat svou vlastní routovací politiku. +\:{\I šedá eminence} -- \BIRD\ by ani nemusel běžet přímo na~stroji, který + pakety routuje, mohl by také hotové routovací tabulky diktovat + nějakému dedikovanému routeru disponujícím výkonnějším hardwarem, + a tak skloubit špičkovou propustnost \uv{velkého železa} + s~flexibilitou routeru bežícího pod unixovským systémem. +\:{\I inteligentní mirror} -- aplikace se nemusí zastavovat u~routingu + jako takového, mnohdy je možno informace získané z~provozu routeru + využívat k~dalším účelům, například k~inteligentnímu přesměrovávání + klientů na~nejbližší mirror vašeho archivu. +\endlist + +%%% A co dal? +\hdr{Čas ptáčat aneb Co dál?} + +Přestože po~úspěšném obhájení projektu a prvních několika desítkách +spokojených uživatelů (a samozřejmě i~pár opravených chybách) nyní vývoj +spíše stagnuje, autoři již spřádají plány do~budoucnosti, které +by měly \BIRD{}ovi přinést mimo jiné také routování multicastů, agregaci +síťových prefixů, OSPFv3 pro IPv6, on-demand linky a porty na~další systémy. + +%%% Reference na nás a ostatní routery +\hdr{Snůška odkazů na závěr} + +\noindent {\sc Bird Team} pod vedením RNDr. Libora Forsta ({\I forst@cuni.cz}) tvořili: +$$\vbox{\halign{#\hfil & \quad \it # \hfil & \quad \it # \hfil\cr +Ondřej Filip&feela@ipex.cz&http:/$\!$/feela.ipex.cz/\cr +Martin Mareš&mj@ucw.cz&http:/$\!$/atrey.karlin.mff.cuni.cz/\char126mj/\cr +Pavel Machek&pavel@ucw.cz&http:/$\!$/atrey.karlin.mff.cuni.cz/\char126pavel/\cr}}$$ +Domácí stránku projektu najdete na {\it http:/$\!$/bird.network.cz/,} odtamtud již +vedou odkazy na~aktuální verzi, online dokumentaci i mailing list +uživatelů. +Všechna zmiňovaná RFC i mnoho dalších naleznete na {\it http:/$\!$/www.rfc-editor.org/}, +první myšlenky o~využívání ptactva v~Internetu sahají až k~RFC~1149. +\BIRD\ není na~světě sám, má i~příbuzné; mezi nimi za zmínku stojí +daemoni {\sc GateD} ({\I http:/$\!$/www.gated.org/}), \hbox{\sc Zebra} ({\I http:/$\!$/www.zebra.org/}) +a {\sc Mrtd} ({\I http:/$\!$/www.mrtd.net/}). +O~IPv6 se bohužel zatím jen píše, na~jeho celointernetové nasazení se stále +čeká a mezitím přibývá address-translatorů a dalších zvěrstev. Snad jediná +větší síť používající tento protokol je experimentální virtuální síť 6-bone +(viz {\it http:/$\!$/www.6bone.net/} a odkazy odtamtud). + +Dotazy a připomínky posílejte buďto autorovi nebo celému {\sc Bird Team}u na~adresu +{\I bird@bird.network.cz}. + +\bye