Konfigurace pokročilých nastavení v protokolu OSPF: MD5 autentifikace a její problémy, exporty a rychlost linek.
23.1.2008 07:00 | Radim Kolář | přečteno 9097×
V přechozím příkladě nemáme nastavenou žádnou autentifikaci. Pro nasazení do produkce se doporučuje autentifikaci použít, abychom stabilitu sítě ochránily před chybně, nedostatečně nebo záměrně špatně nakonfigurovanými routery.
Protokol OSPF umí dva druhy autentifikace. Plain password a MD5 hash. Pokud použijeme plain heslo tak toho heslo bude uvedeno v každém paketu v plain formátu a tedy dostupné každému, kdo si na síti spustí tcpdump. Plain heslo je pořád lepší než žádné heslo, protože chrání síť před případem, kdy se do sítě připojí počítač (typicky unix notebook) se spuštěným OSPFd exporujícím statický routing.
MD5 hesla jsou sice bezpečnější ale mají dvě zásadní nevýhody. V první řadě je neumí OSPF router vestavěný ve Windows a některé lowend inteligentní switche. V druhé řadě jsou naneštěstí MD5 hashe chráněné pomocí časových značek proti replay attackům. OSPF protokol synchronizované hodiny na routerech nevyžaduje. Mělo by jen stačit aby se hodiny vždy pohybovaly na časové ose směrem vpřed, ale implementace synchronizace routerů je v různých programech pojata různě. Například OpenOSPFd je poměrně vybíravý a stává se, že se v některých případech nikdy nesyncne nebo jen syncne částečně, což je mnohem horší protože se to prakticky nedá bez podrobného studia routovacích tabulek zjistit. Na problémy OpenOSPFd se podíváme podrobněji.
Rozborem síťového provozu jsem zjistil, že OpenOSPFd reaguje na packety s chybou časovou značkou (např. hodiny posunuté dozadu) tak, že změní svůj interní stav a vyšle žádost o resend. Ostatní programy t.j. XORP a Quagga mají lepší obsluhu chyb a tento packet prostě ignorují. Oba dva tyto programy se ale už nesyncnou pokud posunete hodiny na druhém routeru dozadu, zato OpenOSPFd ano. Postup XORPu a Quaggy je lepší, protože je odolnější vůči chybám a stačí se naučit při každé změně hodin restartovat ospfd.
OpenOSPFd má další problém. Pokud dostane jeden packet od druhého routeru (přesněji řečeno stačí packet se stejným router-id a seriovým číslem) vícekrát tak duplicitní kopii považuje za packet v minulosti. Následně změní svůj interní stav a bude se chtít resyncnout, což se mu nepovede protože každý packet dostane dvakrát. Typicky k této situaci dochází pokud máme v síti vzniklou routing loop (na základě statického routingu, který používáme k OSPF navíc a buďto ho úplně máme chybně nebo jej neexportujeme či chybně nastaveným firewallem filtrujeme OSPF packety) nebo pokud nám v jedné broadcast domain běhá více sítí než jsme v konfiguraci OpenOSPFd oznámili.
OpenOSPFd 4.2 je oproti verzi 4.1 vůči více neznámým sítím výrazně odolnější, nedělá už packet storm při desynchronizaci, ale resenduje žádost o resync každých 5 sekund. Je to sice dost výrazné zlepšení stavu, ale pořád nedosahuje odolnosti softwaru kategorie XORP či Quagga.
do /etc/ospfd.conf přidejte:
#md5 varianta auth-type crypt auth-md 1 "secretpassword" auth-md-keyid 1 #plain text varianta auth-type simple auth-key "osmznaku"
Heslo se dá v případě potřeby konfigurovat i per netmaska, v příkladu je ale pro jednoduchost uvedena jeho globální konfigurace. Globální konfigurace má tu výhodu, že při předrátování sítě na switchi není potřeba přenastavovat na routerech hesla fyzicky sousedících sítí.
V OpenOSPFd můžeme konfigurovat pravidla co se má exportovat. Standardní nastavení je:
redistribute connected no redistribute default no redistribute static
Nastavením redistribute connected OSPFd oznámí ostatním routerům ke kterým sítím je přímo připojen. Doporučuji toto nastavení ponechat, jen v případě že chcete oznámit default routing (pro připojení sítě do Internetu) nastavit redistribute default.
U protokolu OSPF se narozdíl od BGP nedá použít routovací politika pomocí import filtrů - každý router musí routovat všechny IP pakety a oznamovat dál všechny údaje, které se pomocí OSPF dozvěděl. Protokol OSPF to potřebuje ke své správné činnosti, bez toho není schopen nastavit správně routing v celé síti. Proto je bezpodmínečně nutné mít dobře nakonfigurovaný firewall a nefiltrovat žádné OSPF pakety.
Hezkou vlastností protokolu OSPF je zohlednění rychlosti linky při kalkulaci optimální trasy. Slouží k tomu klíčové slovo metric spolu s číselnou hodnotou v rozsahu 1-65535 připojené k danému rozhraní. Pokud k cíli vedou dvě stejně ohodnocené cesty, ospf protokol může použít IP multipathing a rozdělit tak zátěž.
area 0.0.0.1 { interface de0 { metric 10 } interface de1 { metric 100 } }
V každé síti je potřeba použít jednotnou politiku převodu rychlosti linky na hodnotu metric abychom měli konzistentní routing. Příklad převedení rychlosti linky na hodnotu metric:
metric rychlost linky 1 1Gbit 10 100Mbit 100 10Mbit 500 2Mbit
OSPF router periodicky oznamuje ostatním svou přítomost. K tomu slouží konfigurační parametr hello-interval. Pokud o routeru není slyšet více než router-dead-time, je prohlášen za nedostupný a routing v síti je příslušným způsobem upraven. Standardní hodnoty jsou 10 a 40 sekund. To je na dnešní sítě docela dost a proto doporučuji prozačátek polovinu t.j. hello po 5 ti sekundách a dead time po 4x5+1(kvůli zaokrouhlování) 21 sekundách.
U nespolehlivých WiFi, Point to point či satelitních sítí se doporučuje dead time patričně zvětšit, abychom eliminovali jev odborně nazývaný route flap při kterém linka rychle mění svůj stav (up/down). Route flap v protokolu OSPF není narozdíl od BGP příliš problém, protože díky Dijkstra algoritmu výpočet routingu v síti rychle konverguje.