Annotation of embedaddon/bird/doc/slt2001/slt.tex, revision 1.1.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>