Annotation of embedaddon/bird/doc/slt2001/slt.tex, revision 1.1
1.1 ! misho 1: \magnification=\magstep1
! 2: \input epsf.tex
! 3: \input mjmac.tex
! 4:
! 5: \language=\czech
! 6: \chyph
! 7:
! 8: \hsize=160truemm % A4 with 25mm margins
! 9: \vsize=247truemm
! 10: \parindent=2em
! 11: \nopagenumbers
! 12:
! 13: \def\hdr#1{\medskip\leftline{\bf #1}\smallskip}
! 14: \def\\{\hfil\break}
! 15: \def\BIRD{{\sc Bird}}
! 16:
! 17: \def\inititemize{\vskip 1pt\begingroup
! 18: \parskip=1pt plus 0.3pt minus 0.1pt
! 19: \advance\leftskip by 3em
! 20: \advance\rightskip by 3em
! 21: \parindent=0pt
! 22: }
! 23:
! 24: %%% Úvod a historie projektu
! 25: \hdr{Na počátku bylo vejce aneb Úvodem}
! 26:
! 27: \noindent Internet i UNIX jsou na světě již pěkných pár pátků. Počítače pracující
! 28: pod nepřeberným množstvím unixovských systémů od nepaměti fungují jako
! 29: internetové poštovní servery, name-servery a menší routery. Skoro by se zdálo, že
! 30: si tyto dva světy už nemají co nového říci. V~posledních letech ovšem
! 31: výrazně vzrostl výkon běžných PC-ček a objevily se pro ně karty podporující
! 32: nejrůznější síťové technologie, a~tak se tyto počítače staly vhodnými
! 33: kandidáty i~pro funkci routerů. Na~mnoha místech tak starší PC-čko
! 34: s~volně šiřitelným softwarem předstihlo svého staršího a dražšího
! 35: komerčního sourozence. Ačkoliv podpora routingu, firewallingu a inteligentní
! 36: queue management v~jádrech těchto~OS (a~zejména Linuxu) je již velice
! 37: vyspělá, ještě nedávno byly notně zanedbávány protokoly pro dynamický
! 38: routing, tradiční unixovskou koncepcí umístěné do~uživatelského prostoru
! 39: v~podobě routovacích daemonů.
! 40:
! 41: Tento nedostatek se pokoušela mezi jinými napravit také skupina nadšenců
! 42: na~pražské Matematicko-fyzikální fakultě UK, která se rozhodla jako svůj
! 43: studijní projekt vytvořit nového routovacího daemona, který by se stal
! 44: něčím víc než jen důstojným konkurentem komerčních routerů -- nejen
! 45: kopíroval už známá řešení, ale také přispěl něčím novým; na~jedné straně
! 46: být stabilním a efektivním programem pro praxi, na~straně druhé ovšem
! 47: i~laboratoří pro snadné experimentování s~novými myšlenkami. A~tak se
! 48: narodil projekt {\it BIRD Internet Routing Daemon} (zkráceně \BIRD\footnote{$^0$}{Projekt
! 49: si samozřejmě vysloužil nejrůznější přezdívky -- od Ptáčete až po~Ptákovinu.}).
! 50:
! 51: Původní plány byly smělé a rozhodné: Vytvořit nejlepšího routovacího
! 52: daemona na světě, který by fungoval na~všech platformách, vyžadoval
! 53: minimum strojového času a paměti, podporoval všechny routovací protokoly
! 54: atd., zkrátka sen, jaký má být. Přeskočme nyní dva roky vývoje\footnote{$^1$}{během nichž
! 55: z~některých požadavků samozřejmě sešlo -- například logem projektu
! 56: se nakonec nestal ptáček nesoucí v~zobáčku snítku byliny řečené routa \dots}
! 57: a podívejme se, co z~toho vzešlo.
! 58:
! 59: %%% Svět routingu
! 60: %% v~tištěné verzi přeskočíme
! 61:
! 62: %%% Co BIRD dokáže
! 63: \hdr{Když ptáčka lapají, pěkně mu zpívají aneb Feature list}
! 64:
! 65: \noindent \BIRD\ dostal od svých sudiček do~vínku mnohé dary:
! 66:
! 67: \def\icirc{\raise0.2ex\hbox{$\circ$}} % Signs frequently used for \itemize
! 68:
! 69: \itemize\ibull
! 70: \:Schopnost komunikovat protokoly IPv4 i IPv6.
! 71: \:Podporu všech základních routovacích protokolů:
! 72: \itemize\icirc
! 73: \:RIPv2 (Routing Information Protocol, viz RFC 1723 a 2080)\\
! 74: Určen pro interní routing, dnes významu spíše historického.\\
! 75: Algoritmus: distance vector (Bellman-Ford).\\
! 76: Velmi pomalá konvergence, použitelý pouze pro maličké sítě.
! 77: \:OSPFv2 (Open Shortest Path First, viz RFC 2328)\\
! 78: Určen pro interní routing, v~současné době asi nejběžnější.\\
! 79: Algoritmus: link state (Dijkstra).\\
! 80: Rychlá konvergence, ale velice komplikovaný.\\
! 81: Zatím podporujeme pouze pro IPv4.
! 82: \:BGP4 (Border Gateway Protocol, viz RFC 1771 a 2283)\\
! 83: Standardní protokol pro externí routing mezi AS.\\
! 84: Rychlá konvergence, možnost administrativní filtrace.\\
! 85: Algoritmus: path vector (upravený Bellman-Ford).
! 86: \endlist
! 87: \:Propojování protokolů a výměnu dat mezi nimi.
! 88: \:Schopnost uplatňovat routing policy -- určovat, které routovací informace
! 89: budou od~kterých protokolů přijímány a do~kterých protokolů vysílány.
! 90: \:Snadnou konfiguraci a údržbu, ale o~tom až později.
! 91: \:Modulární architekturu umožňující snadné doplňování nových protokolů,
! 92: filtrů i jednoduché portování na~další systémy. (Interface k~routovacím
! 93: službám jádra je bohužel i mezi jednotlivými unixovskými systémy natolik
! 94: různorodý, že dokonce i~Linux 2.0 a Linux 2.2 jsou naprogramovány jako dva
! 95: odlišné porty.)
! 96: \:A v~neposlední řadě kvalitní dokumentaci jak uživatelskou, tak
! 97: programátorskou (to je vítaný důsledek bytí školním projektem).
! 98: \endlist
! 99:
! 100: %%% A jak to všechno propojit
! 101: \hdr{Svět z~ptačí perspektivy aneb Jak to všechno dát dohromady?}
! 102:
! 103: \noindent Hlavním problémem ovšem není ani tak všechny tyto vymoženosti naprogramovat
! 104: a popropojovat, nýbrž udělat to tak, aby z~toho nevznikl neudržovatelný
! 105: a neefektivní zmatek\footnote{$^2$}{Nádherným příkladem je Mendelův pes,
! 106: jak ho kdysi nakreslil pan Kantorek.}. Z~toho se zrodil modulární pohled
! 107: na~svět routingu a následně i celá modulární architektura programu:
! 108:
! 109: \bigskip
! 110:
! 111: \centerline{\epsfxsize=0.9\hsize\epsfbox{../slides/obr5.eps}}
! 112:
! 113: \medskip
! 114:
! 115: Základem pohledu na~Internet z~naší \uv{ptačí perspektivy} je routovací
! 116: tabulka. Na~ní jsou připojeny jednotlivé routovací protokoly -- jak
! 117: protokoly reálné, tak i několik virtuálních, jako je například protokol
! 118: Kernel zajišťující synchronizaci tabulky s~tabulkou jádra nebo protokol
! 119: Static generující podle své konfigurace statické směrování. Každý z~protokolů
! 120: posílá do~tabulky položky pro všechny routy, které se na~základě svých informací
! 121: o~topologii sítě dozvídá. Tabulka pro každou síť vybírá na základě preferencí
! 122: jednotlivých protokolů a jejich metrik optimální směr a ten oznamuje
! 123: zpět protokolům. V~cestě ovšem v~obou směrech stojí filtry, které mohou
! 124: tok dat regulovat -- některé položky odmítat, jiné upravovat (například
! 125: jim přenastavovat metriky či tagy; to se dokonce vztahuje i~na
! 126: atributy doplňované cílovým protokolem, protože nejprve cílový protokol
! 127: nastaví implicitní hodnoty svých atributů, pokud je již položka neobsahovala,
! 128: a teprve pak dojde k~filtrování).
! 129:
! 130: Routovacích tabulek může dokonce existovat vícero a pomocí protokolu Pipe
! 131: si mohou přeposílat vybrané položky. Tím můžeme zajistit například
! 132: routing závislý na~zdrojové adrese či vstupním interfacu: u~Linuxu 2.2
! 133: či novějšího nakonfigurujeme jádru více routovacích tabulek a každou
! 134: z~nich připojíme na~jednu tabulku naši.
! 135:
! 136: \hdr{Ptačí zpěv aneb User interface}
! 137: %%% User interface: konfigurace, logging a filtry. Remote control.
! 138:
! 139: \noindent Síť se mění a s~ní se musí měnit i konfigurace síťových
! 140: komponent. Ta se pozvolna stala tradičním kamenem úrazu většiny routerů.
! 141: U~tohoto kamene se totiž scházejí dva odvěcí nepřátelé:
! 142: snaha o~snadnost a flexibilitu konfigurace a snaha o~nepřetržitý
! 143: provoz sítě. A~jednou sleví ten, podruhé onen -- autoři některých
! 144: routerů vsadili na~sílu textových konfiguračních souborů za~cenu
! 145: toho, že se po~každé změně konfigurace musí router restartovat
! 146: a po~nějakou dobu neroutuje, jiní zase podřídili non-stop provozu
! 147: vše ostatní a stvořili konfigurování nepřeberným množstvím online
! 148: příkazů, pomocí nichž se některé věci provádějí snadno, jiné,
! 149: na~které autoři speciální příkaz nevymysleli, už obtížněji a ještě jiné
! 150: vyžadují do~výsledného stavu dospět postupným provedením mnoha změn,
! 151: což má obvykle za~důsledek daleko delší výpadek než jaký by byl vznikl
! 152: reloadem celého routeru.
! 153:
! 154: \BIRD\ se snaží dosáhnout obojího: používá textové konfigurační soubory,
! 155: uživateli tak dává možnost vytvářet konfiguraci víceméně libovolným
! 156: způsobem -- ať již ručním editováním, interaktivními programy či
! 157: automatickým generováním pomocí scriptů. Po~změně konfigurace je
! 158: ovšem schopen si novou verzi souboru přečíst, porovnat s~právě
! 159: používanou konfigurací a změnám se za běhu přízpůsobit (pokud
! 160: jsou změny příliš velké, může to způsobit restart
! 161: některého z~protokolů, ale provoz těch, kterých se změna
! 162: netýkala, to nijak neohrozí).
! 163:
! 164: Konfigurace každého protokolu (lépe řečeno každé jeho instance --
! 165: protokoly mohou být spuštěny několikrát na~různých rozhraních
! 166: či nad různými tabulkami) vypadá přibližně takto:
! 167:
! 168: \verbatim{ protocol bgp TestBGP { # instanci si můžeme nazvat
! 169: local as 65000; # náš AS
! 170: neighbor 195.39.3.64 as 5588; # sousední AS
! 171: export all; # posílat budeme všechno
! 172: import filter { # na vstupu některé odmítneme
! 173: if !(bgp_path ~ / ? 5588 ? /) then reject;
! 174: if net ~ [ 10.0.0.0/8+, 192.168.0.0/16+ ] then reject;
! 175: preference = 101; # zbylým nastavíme preferenci
! 176: accept; # a přijmeme je
! 177: };
! 178: }}
! 179: \noindent Vždy popisuje protokol, jeho parametry, připojení k~tabulkám
! 180: (v~našem případě používáme tabulku implicitní) a nastavení vstupních
! 181: i~výstupních filtrů.
! 182:
! 183: Filtry jsou popisovány jednoduchým procedurálním programovacím jazykem,
! 184: který má k~dispozici všechny informace o~právě zpracovávané položce, může
! 185: se podle nich rozhodovat a libovolně je měnit. Díky tomu je možné jednoduše
! 186: zadávat i velice složitá pravidla, definovat si podprogramy sdílené
! 187: filtry patřícími k~více protokolům, i~počítat metriky pro jeden protokol
! 188: na základě metrik protokolů ostatních.
! 189:
! 190: Vítaným pomocníkem při odhalování problémů v~sítích je rovněž volitelné
! 191: logování důležitých událostí a trasování činnosti protokolů: zde si je
! 192: možno pro každý protokol vyžádat prakticky cokoliv počínaje základními informacemi o~běhu
! 193: protokolu (připojování a odpojování sousedů apod.), přes výměnu položek
! 194: mezi protokolem, filtry a jeho tabulkou, a konče detailním výpisem všech
! 195: přijatých i odeslaných paketů.
! 196:
! 197: Mimo to \BIRD\ disponuje \uv{dálkovým ovládáním} -- jednoduchým příkazovým
! 198: rozhraním, přes které se mohou připojovat různí klienti a vydávat jak
! 199: některé řídící příkazy (restarty protokolů, reload konfigurace, přepínání
! 200: trasování, \dots), tak požadavky na~vypisování stavu routovacích tabulek
! 201: a protokolů. U~těchto příkazů je možno využívat plné síly filtrovacího
! 202: jazyka, takže chceme-li například znát všechny routy směrované pomocí
! 203: BGP na jednoho konkrétního souseda, stačí položit dotaz typu
! 204:
! 205: \verbatim{ bird> show route where source=RTS_BGP && gw=62.168.0.1}
! 206:
! 207: \noindent a dozvíme se ihned vše, co jsme potřebovali. Ladění filtrů
! 208: navíc usnadní i~to, že se můžeme zeptat na~obsah routovací tabulky
! 209: z~pohledu některého z~běžících protokolů.
! 210:
! 211: %%% BIRD uvnitř
! 212: %\hdr{Ptačí anatomie}
! 213: %% existuje progdoc
! 214:
! 215: %%% Netradicni pouziti
! 216: \hdr{Cesty tažných ptáků aneb Za hranicemi všedních dnů}
! 217:
! 218: \noindent Hotová modulární implementace routovacího daemona samozřejmě
! 219: svádí i k~méně tradičnímu využití. Zde se fantazii meze nekladou, autory
! 220: samé během vývoje napadly například tyto triky:
! 221:
! 222: \itemize\ibull
! 223: \:{\I multirouter} -- \uv{schizofrenní} zařízení pracující na různých
! 224: skupinách interfaců jako různé routery řídící se různými pravidly,
! 225: ležící třeba i v~různých autonomních systémech. To je možno zařídit
! 226: patřičným nastavením jádra a buďto více běžícími \BIRD{}y nebo dokonce
! 227: jedním pracujícím s~několika různými routovacími tabulkami. Tak by
! 228: mohl například celý pražský NIX běžet na jediném routeru (pravda,
! 229: běžné PC by na to nestačílo), a přesto by si každý provider mohl sám
! 230: určovat a konfigurovat svou vlastní routovací politiku.
! 231: \:{\I šedá eminence} -- \BIRD\ by ani nemusel běžet přímo na~stroji, který
! 232: pakety routuje, mohl by také hotové routovací tabulky diktovat
! 233: nějakému dedikovanému routeru disponujícím výkonnějším hardwarem,
! 234: a tak skloubit špičkovou propustnost \uv{velkého železa}
! 235: s~flexibilitou routeru bežícího pod unixovským systémem.
! 236: \:{\I inteligentní mirror} -- aplikace se nemusí zastavovat u~routingu
! 237: jako takového, mnohdy je možno informace získané z~provozu routeru
! 238: využívat k~dalším účelům, například k~inteligentnímu přesměrovávání
! 239: klientů na~nejbližší mirror vašeho archivu.
! 240: \endlist
! 241:
! 242: %%% A co dal?
! 243: \hdr{Čas ptáčat aneb Co dál?}
! 244:
! 245: Přestože po~úspěšném obhájení projektu a prvních několika desítkách
! 246: spokojených uživatelů (a samozřejmě i~pár opravených chybách) nyní vývoj
! 247: spíše stagnuje, autoři již spřádají plány do~budoucnosti, které
! 248: by měly \BIRD{}ovi přinést mimo jiné také routování multicastů, agregaci
! 249: síťových prefixů, OSPFv3 pro IPv6, on-demand linky a porty na~další systémy.
! 250:
! 251: %%% Reference na nás a ostatní routery
! 252: \hdr{Snůška odkazů na závěr}
! 253:
! 254: \noindent {\sc Bird Team} pod vedením RNDr. Libora Forsta ({\I forst@cuni.cz}) tvořili:
! 255: $$\vbox{\halign{#\hfil & \quad \it # \hfil & \quad \it # \hfil\cr
! 256: Ondřej Filip&feela@ipex.cz&http:/$\!$/feela.ipex.cz/\cr
! 257: Martin Mareš&mj@ucw.cz&http:/$\!$/atrey.karlin.mff.cuni.cz/\char126mj/\cr
! 258: Pavel Machek&pavel@ucw.cz&http:/$\!$/atrey.karlin.mff.cuni.cz/\char126pavel/\cr}}$$
! 259: Domácí stránku projektu najdete na {\it http:/$\!$/bird.network.cz/,} odtamtud již
! 260: vedou odkazy na~aktuální verzi, online dokumentaci i mailing list
! 261: uživatelů.
! 262: Všechna zmiňovaná RFC i mnoho dalších naleznete na {\it http:/$\!$/www.rfc-editor.org/},
! 263: první myšlenky o~využívání ptactva v~Internetu sahají až k~RFC~1149.
! 264: \BIRD\ není na~světě sám, má i~příbuzné; mezi nimi za zmínku stojí
! 265: daemoni {\sc GateD} ({\I http:/$\!$/www.gated.org/}), \hbox{\sc Zebra} ({\I http:/$\!$/www.zebra.org/})
! 266: a {\sc Mrtd} ({\I http:/$\!$/www.mrtd.net/}).
! 267: O~IPv6 se bohužel zatím jen píše, na~jeho celointernetové nasazení se stále
! 268: čeká a mezitím přibývá address-translatorů a dalších zvěrstev. Snad jediná
! 269: větší síť používající tento protokol je experimentální virtuální síť 6-bone
! 270: (viz {\it http:/$\!$/www.6bone.net/} a odkazy odtamtud).
! 271:
! 272: Dotazy a připomínky posílejte buďto autorovi nebo celému {\sc Bird Team}u na~adresu
! 273: {\I bird@bird.network.cz}.
! 274:
! 275: \bye
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>