Portál AbcLinuxu, 3. května 2024 08:42

OSPF - dynamické routování

3. 8. 2006 | Dušan Hokův
Články - OSPF - dynamické routování  

Snad každý jel jednou autem a ví, že z místa A do místa B může jet jednou třeba po dálnici, jindy třeba přes místo C anebo objížďkou a musí jet po okreskách. Podobně se může chovat i paket při svém putování sítí.

Cílem tohoto článku je vysvětlit, jak na to. V našem případě se jedná o kombinaci Linux, routovací démon quagga a protokol OSPF. Není mou snahou dopodrobna ihned rozpitvat všechny pojmy, ale rád bych čtenářům vysvětlil, jak začít, a třeba postupně se i ke složitějším situacím a řešením dopracoval.

Protokol OSPF

Název znamená Open Shortest Path First a jedná se protokol používaný pro interní routování uvnitř autonomního systému (AS). Autonomním systémem může být např. infrastruktura ISP - linky po republice nebo v menším měřítku například wifi síť v nějaké lokalitě. OSPF a dynamické routování obecně se používá v případech, kdy se cesta ven (default route) dá uskutečnit více než jednou trasou. V praxi to znamená v podstatě ten příklad s jízdou autem. OSPF je tzv. link-state protokol, pomocí kterého si sousední routery prostřednictvím hello paketů vyměňují informace o stavu linek, a každý z routerů v dané oblasti (area) zná celou topologii sítě. Výchozí konfigurace je hello paket jednou za 10 sekund, a pokud nepřijde žádná odezva do 40 sekund, vyprší dead interval a linka je prohlášena za mrtvou. Poté následuje přepočet a router hledá cestu jinudy, nezapomene však informovat všechny své sousedy (neighbor). Proces OSPF zjištěné informace předá démonu zebra, který již kernelu řekne novou default routu a routy přijaté od sousedů.

Příklad dynamického okruhu

ospf 1

Na obrázku je vidět situace, kdy router A je tzv. hraničním routerem v oblasti, routery B a C jsou routery v různých lokalitách této oblasti. Z obrázku rovněž vyplývají možné cesty ven. V tomto případě se tedy quagga postará o to, že router A bude propagovat ostatním routerům sebe jako default routu. Pomocí cost můžeme určit "cenu" linky a tím určit i preferovanou trasu, nebo můžeme traffic rovnoměrně rozprostřít (load balancing, equal cost multipath) a nechat jej téct více směry. Dokonce můžeme zařídit, že směr ven půjde jinou cestou než směr dovnitř. V našem případě použijeme na všech spojnicích cost 100, tedy všechny tři linky jsou kvalitativně stejné. Neurčujeme žádnou preferovanou trasu. Platí princip, že čím menší cost, tím kvalitnější linka a má přednost. V případě poruchy linky např. mezi routerem A, B se tedy nastaví na routeru B default routa přes C s costem 201 a rovněž cost na router A bude 200. Na routeru A bude cost na router B 200 a trasa bude přes router C. Samozřejmě, že se vzájemně vypropagují i routy na sítě BB a CC. Pro všechny případy je nutné vypnout na routerech RP Filter, aby routerům nevadilo, že odpověď na paket odeslaný jedním rozhraním může přijít z jiného:

#!/bin/bash
for i in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo "0" > $i; done
echo "1" > /proc/sys/net/ipv4/conf/lo/rp_filter

V tomto případě jsou mezi jednotlivými routery použity spojovací sítě /30 (4 adresy). Za routery B a C jsou v sítích BB a CC koncoví uživatelé, kteří mají default routu nastavenu na router B resp. C.

Konfigurace routerů

Na routerech B a C nenastavovat default routu. Ta bude nastavena právě díky OSPF podle výpočtu nejkratší trasy. O komunikaci s kernelem a mj. i nastavení default routy se přes rozhraní Netlink postará démon zebra. V tomto konfiguračním souboru je třeba nastavit název, heslo, heslo pro pokročilé funkce, vyjmenovat interface, případně vyjmenovat statické routy. Na hraničním routeru (v našem případě router A) by zde měla být i default routa směrem ven.

Příklad konfigurace zebra.conf

hostname router
password nejakeheslo
enable password nejakejineheslo
log file /dev/null
service advanced-vty
!debug zebra events
!debug zebra kernel
!
interface lo
!
interface eth0
!
interface eth1
!
interface eth2
!

Konfigurace OSPF démona je o něco složitější, ale nic záludného to není. Opět zde nastavíme hostname, obě hesla, poté se vyjmenují interface, na kterých se má OSPF používat, a nakonec globální nastavení včetně pokročilých nastavení.

Příklad konfigurace ospfd.conf

! Jmeno routeru
hostname router
! Heslo pro vzdaleny vty pristup (konzole)
password nejakeheslo
! Heslo pro prechod do rozsireneho modu v quagga shellu (konzoli)
enable password nejakejineheslo
! Kam logovat (doporucuji po odladeni /dev/null, nebot zebra a ospfd
! na disk chrli mega a mega logu)
log file /dev/null
! Povolit funkce rozsireneho virtual-terminalu (konzole)
service advanced-vty
!
! Co logovat
!debug ospf ism
!debug ospf zebra
!
! Loopback
interface lo
description system loopback
!
! Prvni sitovka zakomentovana, do internetu nebudeme vysilat OSPF
!interface eth0
!
! Druha sitovka
interface eth1
description smer router A
ip ospf cost 100
ip ospf dead-interval 40
ip ospf hello-interval 10
!
! Treti sitovka
interface eth2
description smer router C
ip ospf cost 100
ip ospf dead-interval 40
ip ospf hello-interval 10
!
!
! Konfigurace ospfd
router ospf
! ID-routeru (napr. IP adresa)
ospf router-id 10.10.10.1
redistribute connected metric-type 1
redistribute static metric-type 1
!
network 10.0.0.0/24 area 0
network 10.0.1.0/24 area 0
network 10.0.2.0/24 area 0
!
!tohle jen na hranicnim routeru (router A) - propagovani default routy
default-information originate always metric-type 1

Díky těmto nastavením a OSPF se na router A vypropagují i statické routy na sítě BB a CC z routerů B a C a rovněž mezi B a C si vzájemně předají routy na BB a CC.

Důležité:

Sousedi musí mít vzájemně shodné nastavení intervalů pro hello pakety a dead interval, jinak se spolu nedomluví. Rovněž router-id musí být v celé OSPF síti unikátní, jinak se ospf proces bude chovat velice divně, pokud náhodou úplně nezkolabuje. Toto bývají jedny z nejčastějších chyb, proto si své konfigurační soubory důkladně přečtěte a možné překlepy opravte.

Routovací tabulka na routeru B

Adresát      Brána        Maska           Přízn Metrik Odkaz  Užt Rozhraní
10.0.0.0     0.0.0.0      255.255.255.252 U     0      0        0 eth0
10.0.0.4     0.0.0.0      255.255.255.252 U     0      0        0 eth1
10.0.2.0     10.0.0.6     255.255.255.0   UG    100    0        0 eth1
10.0.1.0     0.0.0.0      255.255.255.0   U     0      0        0 eth2
127.0.0.0    0.0.0.0      255.0.0.0       U     0      0        0 lo
0.0.0.0      10.0.0.1     0.0.0.0         UG    101    0        0 eth0

Pomocí metrik se vypočítává nejkratší cesta a z výpisu je poznat, že routy označené metrikou nastavila zebra. Ještě lépe je to vidět, použijete-li příkaz ip route, např. pro routu do sousední sítě:

10.0.2.0/24 via 10.0.0.6 dev eth1  proto zebra  metric 100

Quagga VTY shell

Démony zebra i ospfd lze během provozu ovládat přes konzoli (quagga shell, vty). Ve výše uvedeném nastavení budou poslouchat pouze na loopbacku. Přihlášení lze provést pomocí telnetu, přičemž zebra poslouchá na portu 2601 a ospfd na portu 2604. Podrobnostem se budu věnovat později.

Závěr

Kdo umí routovat staticky a chápe základní principy, tomu by nemělo dynamické routování pomocí OSPF činit vážnější potíže. To by bylo pro začátek vše, teď by bylo dobré trošku si zaexperimentovat, ať není jen teorie. To už je ale na každém z vás. Pokud bude zájem, rád bych se rozepsal podrobněji například o věcech jako je route-mapa, quagga vty shell, zabezpečení komunikace, propojení se snmp včetně posílání trapů a složitějších topologiích a situacích, včetně různých úskalí přechodu od statického routování k dynamickému.

Seriál OSPF - dynamické routování (dílů: 3)

První díl: OSPF - dynamické routování, poslední díl: OSPF - dynamické routování - 3 (topologie, zabezpečení).
Následující díl: OSPF - dynamické routování - 2 (SNMP, Quagga)

Související články

OSPF - dynamické routování - 2 (SNMP, Quagga)
Seriál: Domácí síť
Seriál: Soukromá síť
Seriál: Stavíme bezdrátovou síť
Seriál: Linuxové DMZ
Seriál: Nastavení poštovního subsystému v Linuxu
Seriál: Spam: naučte se bránit
Jak na WiFi kartu v Linuxu
Jak jsem budoval přípojný bod CZFree.Net
Distribuce OpenWrt prakticky

Odkazy a zdroje

OSPF
quagga.net
www.zebra.org

Další články z této rubriky

PowerDNS – přívětivý a jednoduchý DNS server
Bootování ze sítě: pxelinux a kořenový adresář na NFS
Těžký život Do Not Track
OpenAFS – servery
Architektura IPv6 – konfigurace adres a objevování sousedů (2)

Diskuse k tomuto článku

3.8.2006 02:21 trekker.dk | skóre: 72
Rozbalit Rozbalit vše Re: OSPF - dynamické routování
Odpovědět | Sbalit | Link | Blokovat | Admin
Pokud bude zájem, rád bych se rozepsal podrobněji například o věcech jako je route-mapa, quagga vty shell, zabezpečení komunikace, propojení se snmp včetně posílání trapů a složitějších topologiích a situacích, včetně různých úskalí přechodu od statického routování k dynamickému.
Per to do nás ;-)
Quando omni flunkus moritati
3.8.2006 10:13 xxxxxxxx | skóre: 16 | blog: mrtvy blog | v nebi
Rozbalit Rozbalit vše Re: OSPF - dynamické routování
3.8.2006 10:22 Qaxi | skóre: 14 | blog: Qaxi
Rozbalit Rozbalit vše Re: OSPF - dynamické routování
+400 uživatelů -- www.Bezdrev.Net, právě to řešíme ...
6.8.2006 10:24 MartinT | skóre: 12 | blog: MT blog
Rozbalit Rozbalit vše Re: OSPF - dynamické routování
Taky se přidám. Zájem je o nabídnuté route-mapa, quagga vty shell, zabezpečení komunikace, propojení se snmp včetně posílání trapů a dále o load balancing, equal cost multipath a hinty pro ladění guaggy via vty shell. A pokud byste měl, tak i nějaké doporučení na timeouty pro wifi spoje. Díky.
hwsoft avatar 3.8.2006 08:25 hwsoft | skóre: 19
Rozbalit Rozbalit vše Re: OSPF - dynamické routování
Odpovědět | Sbalit | Link | Blokovat | Admin
No me zajima spoluprace a ladeni ruznych verzi Quaggy. OSPF jsem museli globalne vypnout a nechat jen na mensich castech, protoze treba StarOS se nedokazal domluvit s normalnimi Linuxy (mam hlasen ten samy problem i s Mikrotikem) a pak se obcas v routovacich tabulkach objevovala hrozna zverstva :(.
ITF FreeNet Liberec
3.8.2006 13:17 Led Astray
Rozbalit Rozbalit vše Re: OSPF - dynamické routování
StarOS se nedokaze domluvit ani s druhym StarOS. Resenim je smazat StarOS a nainstalovat neco rozumnejsiho, napr. Voyage.

ast
Drom avatar 4.8.2006 02:09 Drom | skóre: 24 | Kdyne
Rozbalit Rozbalit vše Re: OSPF - dynamické routování
Souhlas :)
21.8.2006 00:19 Zdeněk Štěpánek | skóre: 57 | blog: uz_mam_taky_blog | varnsdorf
Rozbalit Rozbalit vše Re: OSPF - dynamické routování
Mam uplne vsude 0.9.56 (identicky balicek) a nemam s timhle absolutne zadne problemy. Tak si na starosu zkompiluj stejnou verzi.
www.pirati.cz - s piráty do parlamentu i jinam www.gavanet.org - czfree varnsdorf
3.8.2006 08:43 jkcinik
Rozbalit Rozbalit vše Re: OSPF - dynamické routování
Odpovědět | Sbalit | Link | Blokovat | Admin
Jo, OSPF :) prave mi vypadl jeden router na trase a rozesralo to router o dva skoky bliz k internetu. A to tak, ze mi trvalo hodinu to dat do kupy. Quagga proste odmitla predavat routy i kdyz se tvarila FULL/DR. I kdyz to dost usnadnuje praci, tak premejslim, ze kdybych delal staticky routy tak mam klid :(
3.8.2006 09:50 kolemjdoucí
Rozbalit Rozbalit vše Re: OSPF - dynamické routování
Odpovědět | Sbalit | Link | Blokovat | Admin
pěkný článek.
3.8.2006 20:10 b42
Rozbalit Rozbalit vše Re: OSPF - dynamické routování
jj ... tesim se na dalsi dily
3.8.2006 10:40 J
Rozbalit Rozbalit vše Re: OSPF - dynamické routování
Odpovědět | Sbalit | Link | Blokovat | Admin
Par pripominek:

A) Neni od veci to, co se zada jako router ID pridelit jako IP/32(pripadne /128) adresu dummy rozhrani a samozrejme to pak distribuovat dal, jelikoz pak lze velmi snadno overovat, kudyma prave data tecou.

B) Taky pouzivani area 0 timhle zpusobem neni zrovna idealni, protoze ma jisty vysadni postaveni => v nejakym dalsim clanecku rozebrat pouzivani vice oblasti a vzajemnou komunikaci.

C) Ty konfiguraky by vypadaly lip okomentovany po jednotlivych radcich.

D) Uplne mi chybi nastaveni FW aby si routery spolu vubec povidaly. Je treba povolit komunikaci z prislusne IP souseda na multicastovou adresu(224.0.0.5). V pripade IPv6 neni jako zdrojova IP pouzita globalni ale linkova, cil je opet multicast(ff02::5). Taky je treba mit povoleny ICMP/ICMPv6.

E) vypis routovaci tabulky vypada IMO srozumitelnejs za pouziti ip ro ls. Je tam taky hned videt, co je ziskano pres zebru a co staticky.

F) na hranicnim routeru by melo byt v zebra.conf neco takoveho:
ip route 10.0.0.0/8 reject
ip route 192.168.0.0/16 reject
ip route 172.16.0.0/12 reject
Pouzivani OSPF je dobry uz jen proto, ze po kazdy zmene nemusi clovek rikat vsem smerovacum cestou, ze pribyl dalsi rozsah a kam mu maj posilat pakety, je uplne fuk ze trebas neexistuje zadna alternativni cesta.

BTW: Me osobne by zajimalo, jestli se nekomu povedlo rozchodit Router Advertisement (http://www.quagga.net/docs/docs-info.php#SEC140). Pokud dobre chapu, melo by to delat totez, co radvd, ale me to proste nefunguje.

2redakce: spravte si web, nefuguje vam to bez cookies.
3.8.2006 15:03 D-Evil | skóre: 25 | Praha
Rozbalit Rozbalit vše Re: OSPF - dynamické routování
Ad F) Nebral bych to jako dogma. Např. CZFree.Net běži na privátních adresách a takhle, jestli se nepletu, by do zebry neprošly žádný routy ze sousedních AS.
4.8.2006 11:38 J
Rozbalit Rozbalit vše Re: OSPF - dynamické routování
Proto tam pisu ze to ma prijit na hranicni router => tam kde se nejspis provadi nejaky NAT => zakazeme smerovani privatnich rozsahu na default routu. Je jasny ze to nebudu zakazovat tam, kde je naopak smerovani tehto rozsahu zadouci.

Pro jistotu je lepsi to pridat jeste do nastaveni FW.
4.8.2006 20:17 D-Evil | skóre: 25 | Praha
Rozbalit Rozbalit vše Re: OSPF - dynamické routování
No ono právě v CZFree.Net jsou mezi jednotlivejma AS hraniční routery (NAT se tam ale neprovádí a v některejch případech tam neni ani default route, protože tam internetová konektivita neteče), proto jsem psal, že to nemůže fungovat jako dogma.
3.8.2006 22:21 Dan Ohnesorg | skóre: 29 | blog: Danuv patentovy blog | Rudná u Prahy
Rozbalit Rozbalit vše Re: OSPF - dynamické routování
No router advertisement funguje takle:
interface eth0
  ipv6 address 2001:1508:1710:0007::2/64
  no ipv6 nd suppress-ra
  ipv6 nd prefix 2001:1508:1710:0007::/64
  ipv6 nd ra-interval 60
v zebra.conf a potom vidite
gateji:~ # radvdump
Router advertisement from fe80::20d:b9ff:fe02:8710 (hoplimit 255)
Received by interface eth0
        # Note: {Min,Max}RtrAdvInterval cannot be obtained with radvdump
        AdvCurHopLimit: 64
        AdvManagedFlag: off
        AdvOtherConfigFlag: off
        AdvHomeAgentFlag: off
        AdvReachableTime: 0
        AdvRetransTimer: 0
        Prefix 2001:1508:1710:7::/64
                AdvValidLifetime: 2592000
                AdvPreferredLifetime: 604800
                AdvOnLink: on
                AdvAutonomous: on
                AdvRouterAddr: off
        AdvSourceLLAddress: 00 0D B9 02 87 10
Ma to jednu zasadni chybu, tady totiz chybi adresa routeru, cehoz lze dosahnout teoreticky zadanim prikazu
ipv6 nd prefix 2001:1508:1710:0004::/64 router-address
ale to mi quagga ze stable debianu nesezere.

ale situace speje k dhcp6, protoze takle lidem nedate furu informaci, ktere celkem potrebuji, hlavne DNS. Moje zakladni zkusenost je takova, ze zebra nevidi adresy, ktere sama nenastavila, takze kompletni konfiguraci IPv6 rozhrani delam ze zebra.conf.
I'm an Igor, thur. We don't athk quethtionth. Really? Why not? I don't know, thur. I didn't athk. TP -- Making Money
4.8.2006 11:47 J
Rozbalit Rozbalit vše Re: OSPF - dynamické routování
Nj, ja to zhruba takhle zkousel, ale router se mi bohuzel nehlasi.

Adresu routeru si to IMO veme primo z adresy prislusnyho rozhrani, netreba mu ji vnucovat. Me zebra bez problemu prevezme nastaveni IP.
4.8.2006 16:55 Dan Ohnesorg | skóre: 29 | blog: Danuv patentovy blog | Rudná u Prahy
Rozbalit Rozbalit vše Re: OSPF - dynamické routování
To je prave ten problem, ja ji vubec nenastavuju na rozhrani, necham to na zebre a potom to chodi. Kdyz ji nastavim ja, tak to nechodi.
I'm an Igor, thur. We don't athk quethtionth. Really? Why not? I don't know, thur. I didn't athk. TP -- Making Money
6.8.2006 13:24 Robert Krátký | skóre: 94 | blog: Robertův bloček
Rozbalit Rozbalit vše Re: OSPF - dynamické routování
2redakce: spravte si web, nefuguje vam to bez cookies.
Co nefunguje?
7.8.2006 13:47 J
Rozbalit Rozbalit vše Re: OSPF - dynamické routování
Bez povolenych cookies nejde odeslat prispevek, vrati se to vzdy jen na moznost nahled.
David Watzke avatar 3.8.2006 11:36 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: OSPF - dynamické routování
Odpovědět | Sbalit | Link | Blokovat | Admin
Překlep?
s/dopracoval/dopracovat/
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
David Watzke avatar 3.8.2006 16:52 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: OSPF - dynamické routování
Aha, tak ne ;-)
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
3.8.2006 12:39 zde | skóre: 9 | blog: Linuch | Brno
Rozbalit Rozbalit vše Re: OSPF - dynamické routování
Odpovědět | Sbalit | Link | Blokovat | Admin
K cemu OSPF? Vsude nam bezi full BGP ;-)
Táto, ty de byl? V práci, já debil.
3.8.2006 15:43 Led Astray
Rozbalit Rozbalit vše Re: OSPF - dynamické routování
Ty routovaci tabulky jsou ale ponekud obludne, ne? Tam musi byt nekolik set tisic rout. A je to stabilni? Na jakem HW to provozujete? ast
7.8.2006 09:54 zde | skóre: 9 | blog: Linuch | Brno
Rozbalit Rozbalit vše Re: OSPF - dynamické routování
256MB. Stabilnější než OSPF. Cisco.
Táto, ty de byl? V práci, já debil.
7.8.2006 12:08 Dušan Hokův | skóre: 43 | blog: Fedora a další...
Rozbalit Rozbalit vše Re: OSPF - dynamické routování
Hmm, ne vsichni si muzou dovolit cisco. Ne vsichni chteji pouzivat routovaci protokol urceny pro vymenu routovacich informaci mezi AS. OSPF je protokol pro interni routovani uvnitr AS. Clanek je urcen prave pro ctenare, kteri resi routovani uvnitr sveho AS. Az budu psat o BGP a nebudu si vedet s necim rady... Koukam, ze jste odbornik, ktery na chytani mouchy pouziva buldozer :-)
3.8.2006 22:23 Dan Ohnesorg | skóre: 29 | blog: Danuv patentovy blog | Rudná u Prahy
Rozbalit Rozbalit vše Re: OSPF - dynamické routování
To je samozrejme cool, hlavne musi byt fakt zabavne vyjmenovavat do konfiguraku vsechny sousedy pro kazdy BGP router.
I'm an Igor, thur. We don't athk quethtionth. Really? Why not? I don't know, thur. I didn't athk. TP -- Making Money
7.8.2006 09:50 zde | skóre: 9 | blog: Linuch | Brno
Rozbalit Rozbalit vše Re: OSPF - dynamické routování
Ano, vyjmenovat OBA DVA route reflektory je fakt problem.
Táto, ty de byl? V práci, já debil.
13.8.2006 00:37 Dan Ohnesorg | skóre: 29 | blog: Danuv patentovy blog | Rudná u Prahy
Rozbalit Rozbalit vše Re: OSPF - dynamické routování
No jo, jenze potom v casti site, ktera ztrati spojeni na oba RR nastane chaos. To se u ospf nestane, tam jen zmizi defaultrouta, ale zbytek zijicich uzlu dokaze komunikovat kazdy s kazdym.
I'm an Igor, thur. We don't athk quethtionth. Really? Why not? I don't know, thur. I didn't athk. TP -- Making Money
8.8.2006 01:07 zed | skóre: 6
Rozbalit Rozbalit vše Re: OSPF - dynamické routování
Odpovědět | Sbalit | Link | Blokovat | Admin
Autor rozhrani (za hranice ospfd site) kde se nevysilaji multicasty quaggy resi takhle:

! Prvni sitovka zakomentovana, do internetu nebudeme vysilat OSPF !interface eth0

ja se domnivam ze je lepe vsechny rozhrani vypsat, tak jako by mely byt v ospfd aktivni a k rozhrani a tam kde se ospfd routery nepotkavaji pouzit:

passive-interface eth0
24.3.2007 22:59 jw
Rozbalit Rozbalit vše OT: routování/router -> směrování/směrovač
Odpovědět | Sbalit | Link | Blokovat | Admin
Vadí někomu, že zřejmě velká část lidí používá anglické názvy či jejich patvary (router/routování) místo českých ekvivalentů směrovač/směrování?
houska avatar 29.8.2007 15:03 houska | skóre: 41 | blog: HW
Rozbalit Rozbalit vše Re: OT: routování/router -> směrování/směrovač
me ne
Max avatar 1.10.2008 19:50 Max | skóre: 72 | blog: Max_Devaine
Rozbalit Rozbalit vše Re: OT: routování/router -> směrování/směrovač
Rozhodně ne. Ba naopak, myslím si, že je to dobře.
Zdar Max
Měl jsem sen ... :(

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.