====== OSPF - Open Shortest Path First ====== //(RFC 2328)// ===== Úvod do OSPF ===== * Link state routovací protokol * hiearchický design - možnost segmentace sítě (Areas) Link state: - neighbor discovery - topology database exchange - naplnění LSDB - route computation - SPF Algorithm LSDB obsahuje: * info o existenci a indentifikátoru všech routerů (router ID) * interface, IP adress, mask, subnet * list dostupných routerů přes každý router na každém interfejsu Hiearchický model OSPF: {{ :wiki:site:cisco:ospf-hyearchical-model.png?direct&800 |}} * rozdělení na různé area * 1 area (0) je backbone a jsou do ní připojeny všechny ostatní * paket, který má má projít z jedné non-backbone area do jiné, musí vždy projít Area0 * ABR - Area Border Router * ABR tvoří hranici mezi areami * ABR udržuje LSDB všech area do kterých je připojen * ABR mezi areami nepřenáší podrobné informace o tolpologii * ABR přenáší jen info o subnetech a délce prefixu, subnety se tak z perspektivy vnitřních routerů tváří jako přímo připojené k ABR * díky rozdělení sítě lze snížit nároky na výpočet topologie (CPU,Mem,přenos topolog. informací) Přehled Pojmů: * LSDB Link State Database - informace o topologii udržované routerem * SPF Shortest Path First - algoritmus analyzující data v LSDB * LSU Link State Update - název OSPF paketu obsahujícího detailní topolog.informace, konkrétně LSA * LSA Link State Advertisement - OSPF struktura dat obsahující topolog.informace, je v paměti LSDB a vyměňují si ji routery v síti pomocí LSU zpráv * Area - skupina routerů a interfaců, která si vyměňuje podrobné topologické informace. Neučí se nic o topologii z jiných Areas . * ABR Area Border Router - router, který má interfacy v různých areách. * Backbone router - router, který má alespoň jeden interface v Area 0 * Internal routers - router, který má všechny interfacy jen v jedné area * DR Designated Router - Zvolený router v multiaccess síti, který má zvláštní funkci při zpracování LSA * BDR Backup Designated Router - monitoruje DR a je připraven převzít jeho úlohu v případě poruchy Konfigurace: - **router ospf //process-id//** - číslo procesu nemá vliv na sestavení sousedství - **network //net-id wildcard-mask// area //area-id//** - subnet se zařadí do connected sítí a router rozešle OSPF Hello zprávy z interfaců v daném subnetu - volba aktivních interfaců probíhá porovnáváním IP a wildcard masky s IP adresou interfacu - nezávisle na pořadí při konfiguraci, router ukládá //network// záznamy dle nejspecifičtější (nejvíce nul) wildcard masky - ta je první. - pořadí network příkazů v **show running-config** se porovnávají IP interfejsů a první souhlas určuje Area id interfacu Příklad - Network matching: * na R2 je vidět že most-specific network příkaz má vždy přednost * S0/0/1 je tedy v Area 1 {{ :wiki:site:cisco:ospf-network-matching.png?direct&600 |}} RID Router ID: - Použije se RID definované příkazem **router-id //x.x.x.x//** - Nejvyšší IP adresa up/up Loopbacku - Nejvyšší IP adresa up/up non-Loopback interfejsu Verifikace OSPF - Zjistit na kterých int. je zapnuto OSPF - Ověřit zda o sobě vědí sousední routery (neighborship) - Ověřit obsah topology table non-ABR routerů, zda obsahují data jen ze své Area - Ověřit zda jsou dostupné všechny routy >Router# **show ip ospf interface brief** >Router# **show ip protocols** >Router# **show ip ospf neighbors** >Router# **show ip ospf database** >Router# **show ip route** OSPF Shrnutí: * **Transport** - IP, protocol type 89 (nepoužívá UDP ani TCP) * **Metric** - kumulovaná cena(odv.od šířky pásma) všech výstupních interfaců v cestě (routě), lze explicitně stanovit * **Hello interval** - interval vysílání Hello zpráv na interfacu * **Dead interfval** - slouží k odhalení závady souseda když od něj určitou dobu nepříjmáme žádné zprávy * **Update destination address** - 224.0.0.5 (všechny SPF routery), 224.0.0.6 (všechny Designated routery) * **Full or partial updates** - full updaty jen při zjištění nového souseda, jinak partial updaty * **Authentication** - MD5 nebo clear-text * **VLSM/classless** - každá routa obshuje masku, podpora nespojitých sítí a VLSM * **Route tags** - umožňují OSPF označkovat routy dle způsobu jakým byly redistribuovány do OSPF * **Next-hop field** - podpora distribuce rout s rozdílnou next-hop adresou * **Manual route sumarization** - podpora sumarizace pouze na ABR routerech ====== OSPF Neighbors on LAN ====== Hello zprávy: * na interfacu musí být zapnuté OSPF (globálním příkazem **network** nebo na interfejsu **ip ospf area**) * interface nesmí být nastaven jako pasivní (příkazem **passive-interface**) * multicast 224.0.0.5 Obsah Hello zpráv: * OSPF RID * Stub area flag * Interface specific settings: * Hello interval * Dead interval * Subnet mask * list of neighbors reachable on interface * Area ID * Router priority * DR IP address * BDR IP address * Authentication digest Podmínky navázání sousedství: * primární IP interfaců musí být ve stejném subnetu * connected interface nesmí být pasivní * musí být ve stejné Area * Hello a Dead timer musí být stejný * unikátní RID * IP MTU musí souhlasit * musí projít authentikace (je-li nastaveno) * (OSPF process-ID nemá vliv) **show ip ospf neighbor** States: * FULL/.. - znamená plnohodnotný sousedský ztah, kompletní výměna topo informací napřímo * 2WAY/.. - funkční sousedský vztah, topo se vyměnuje prostřednictvím DR * FULL/DR * FULL/BDR * 2WAY/DROTHER ===== Hello and Dead Timers ===== * **Hello interval** - (def. 10 s) definuje jak často jsou vysílány Hello zprávy * **Dead timer** - (def. 40 s) definuje jak dlouho router čeká než vyřadí souseda, pokud od něj nechodí hello zprávy * Selhání interfacu - všechny OSPF sousedy dostupné přes int. router považuje za failed bez čekání na vypršení Dead timeru * nastvím-li jen hello interval, změní se automaticky i dead interval na 4x hello >Router(config-if)# **ip ospf hello-interval** //sekundy// >Router(config-if)# **ip ospf dead-interval** //sekundy// >**show ip ospf interface fa0/0 ** >**show ip ospf neighbors** >//Nastavi dead-interval na 1s, hello na 1/4s// >Router(config-if)# **ip ospf dead-interval minimal hello-multiplier** //4// ===== Router-ID ===== Určuje se v tomto pořadí: - hodnota nastavená příkazem **router-id** - nejvyšší IP up/up Loopbacku - nejvyšší IP up/up non-Loopback interface * musí být **unikátní** * dle RID se identifikují routery v topo databázi * OSPF proces nemůže nastartovat bez RID * mají-li dva routery stejné RID, nenavážou spolu sousedství * ostatní routery s oběma routery se shodným RID naváží sousedství, avšak routy si natáhnou od toho se kterým sousedili jako s prvním ===== Shodné IP MTU ===== * shodné MTU je podmínkou pro funkční sousedství ! * defaultně 1500 byte, z důvodu limitu ethernetu na 1526 byte * je-li potřeba přenést větší paket, router jej buď zahodí nebo fragmentuje * je-li v IP hlavičce nastaven bit DF (don't fragment), router paket zahodí * není-li DF nastaven, router paket fragmentuje na dva či více menších Mají-li routery rozdílné MTU: * ve výpisu sousedů **sh ip ospf neighbors** je vidět soused s měnícím se statusem (EXSTART,INIT,DOWN) * soused tedy je vidět v tabulce sousedů * k výměně topo informací však nedochází !!! ===== OSPF Authentikace ===== * authentikují se všechny OSPF zprávy * routery používají pre-shared-key * MD5 otisk klíče+zprávy je v každé zprávě * nesouhlasí-li otisk přijaté zprávy s otiskem vytvořeným z lokálního klíče příjemce, je zpráva zahozena * selže-li autentikace, nelze ani navázat sousedství, protože neautentifikované Hello zrávy jsou zahazovány * neumožňuje jako EIGRP time-based klíče * pro změnu klíče je dobré na všech routerech přidat nový klíč s jiným id než měl starý a poté starý klíč smazat * pokud je na interfejsu nastaveno více klíčů jsou OSPF zprávy vysílány pro každý klíč zvlášť * např. jsou-li na int. dva klíče, odesílají se všechny OSPF zprávy dvakrát Tři typy auth.: * **type 0** - no authentication (default) * **type 1** - clear text * **type 2** - MD5, jediná rozumná metoda pro skutečné nasazení Konfigurace: >//Type 0 - none// >Router(config-if)# **ip ospf authentication null** >//Type 1 - per-interface// >Router(config-if)# **ip ospf authentication** >Router(config-if)# **ip ospf authentication-key** //key-value// >//Type 1 - Globálně// >Router(config-router)# **area** //area-id// **authentication** >//Type 2 - per-interface// >Router(config-if)# **ip ospf authentication message-gigest** >Router(config-if)# **ip ospf message-digest-key** //key-number// **md5** //key-value// >//Type 2 - Globálně// >Router(config-router)# **area** //area-id// **authentication message-digest** >//key-value// - maximálně 16 znaků >**show ip ospf interface** >**show ip ospf neighbor** >**debug ip ospf adjacency** ====== OSPF Neighbors on WAN ====== FIXME str.162 ==== Command reference ==== >router(config)#router ospf >router(config-router)#network area >show ip protocols >show ip route >show ip ospf >show ip ospf neighbor >show ip ospf interface >debug ip ospf packet >debug ip ospf hello >debug ip ospf adj Plain text authentikace per Area: >Router(config)# **router ospf** //1// >Router(config-router)# **area** //0// **authentication** >Router(config)# **interface** //fa 0/0// >Router(config-if)# **ip ospf authentication-key** //password// Plain text authentikace per Interface: >Router(config)# **interface** //fa 0/0// >Router(config-if)# **ip ospf authentication** >Router(config-if)# **ip ospf authentication-key** //password// MD5 authentikace per Area: >Router(config)# **router ospf** //1// >Router(config-router)# **area** //0// **authentication message-digest** >Router(config)# **interface** //fa 0/0// >Router(config-if)# **ip ospf message-digest-key** //10// **md5** //password// MD5 authentikace per Interface: >Router(config)# **interface** //fa 0/0// >Router(config-if)# **ip ospf authentication message-digest** >Router(config-if)# **ip ospf message-digest-key** //10// **md5** //password// Tuninng - priority: >Router(config)# **interface** //fa 0/0// >Router(config-if)# **ip ospf priority** //<0-255>// >Router# **clear ip ospf process** Tuninng - Router ID: >Router(config)# **router ospf** //1// >Router(config-router)# **router id** //// >Router# **clear ip ospf process** Tunning - Loopback: >Router(config)# **interface** //Loopback 1// >Router(config-if)# **ip address** //10.10.10.10 255.255.255.255// Tunning - Bandwidth/Cost: >Router(config)# **interface** //ser 0/0/0// >Router(config-if)# **bandwidth** //64// nebo: >Router(config-if)# **ip ospf cost** //1562// Tunning - Refernece BW pro linky > 100Mbps: >Router(config)# **router ospf** //1// >Router(config-router)# **auto-cost reference-bandwidth** //10000// (max.rychlost v Mbps) Propagace default-route (ta je pak v RT ostatnich routeru oznacena E2*O): >Router(config)# **router ospf** //1// >Router(config-router)# **default-information originate** Inter Area sumarizace na ABR: >Router(config)# **router ospf** //1// >Router(config-router)# **network 192.168.10.64 0.0.0.3 area 1** >Router(config-router)# **network 192.168.10.68 0.0.0.3 area 1** >Router(config-router)# **network 10.10.10.10 0.0.0.255 area 0** >Router(config-router)# **area 1 range 192.168.10.64 255.255.255.248** Load Balancing (jen equal-cost, 1-16 smeru, def.4): >Router(config)# **router ospf** //1// >Router(config-router)# **maximum-paths** //<1-16>//