Článek byl doplněn o stručné informace o dalších protokolech pro zajištění redundance gatewaye.
Princip HSRP
V praxi je běžné, že máme v lokální síti redundantní cesty na L2 (podle OSI modelu), takže výpadek některého aktivního prvku nebo propojovacího kabelu nepřeruší komunikaci v celé síti. V takovéto síti běžně provozujeme celou řadu VLAN a ty jsou mezi sebou spojené pomocí inter-VLAN routingu. Tato komunikace je již na L3 a my potřebujeme řešit výpadek switche/routeru, který všechny VLANy propojuje a slouží jako brána (gateway). Je to o to složitější, že všechny stanice mají zadánu IP adresu tohoto routeru jako svoji gateway. Právě tuto situaci nám řeší HSRP, kdy sice potřebujeme záložní router, ale v případě výpadku se komunikace automaticky přepne na tento záložní. Navíc záložní router může být méně výkonný.
Pozn.: Stejná je i situace, kdy se jedná o centrální bránu, kterou jsme připojeni do internetu. Ovšem bývá to složitější o to, že zde většinou běží Firewall.
HSRP je proprietární protokol firmy Cisco. Existuje i standardizovaný protokol, svou funkcí shodný, který se jmenuje Virtual Router Redundancy Protocol - VRRP. Podle mých zkušeností se však v praxi více používá právě verze od Cisca, tedy HSRP.
Princip funkce je takový, že máme virtuální IP adresu (interfacu) brány, kterou používají klienti, a k ní virtuální MAC adresu. Tyto virtuální adresy sdílí nakonfigurovaná skupina routerů (jejich rozhraní mají svoji vlastní IP a MAC adresu). Jeden z routerů je vybraný jako aktivní, ten drží virtuální adresy, a ostatní jsou standby (záložní). HSRP detekuje výpadek aktivního routeru a v tom případě standby router převezme virtuální IP a MAC adresu a tím se stane aktivním zařízením, které routuje provoz. Informace o dostupnosti routeru se provádí pomocí Hello paketů.
Jak je vidět, tak standardně máme jeden aktivní router, který pracuje, a jeden záložní, který pouze čeká na výpadek aktivního. Pomocí Hot Standby group můžeme vytvořit více konfigurací pro různé skupiny VLAN a rozdílně nastavit aktivní a standby router, takže dochází k vyvažování (manuálnímu) zátěže.
Hlavní vlastnosti
- popsáno v RFC 2281
- z routerů, které jsou součástí HSRP skupiny, se jeden zvolí jako primární – active, jeden jako záložní – standby a ostatní poslouchají – listen
- HSRP skupiny mohou mít čísla 0 až 255, ale často můžeme použít maximálně 16 skupin dohromady
- podporuje Ethernet, FDDI, Token Ring
- skupina používá virtuální IP adresu a MAC adresu
0000.0c07.acXX
, kdeXX
je číslo skupiny - aktivní router se volí podle standby priority, vyšší hodnota vítězí, defaultní je 100 z rozsahu 1 až 255
- standby track interface priority je 10
- to že je aktivní router živý se ověřuje pomocí hello paketu, který se standardně posílá každé 3s
- pokud po dobu holdtime (defaultně 10s) neobdrží hello paket, tak prohlásí aktivní router za nefunkční
- prochází se několik stavů - Disabled, Init, Learn, Listen, Speak (začíná posílat hello pakety), Standby, Active
Konfigurace HSRP
HSRP můžeme konfigurovat na L3 rozhranní:
- VLAN interface (SVI)
- fyzický routovaný port
- etherchannel
Vlastní zapnutí HSRP na interfacu se provádí příkazem
SWITCH(config-if)#standby 1 ip 192.168.1.1
Kde číslo 1 je číslo skupiny, může nabývat hodnot 0 až 255, kdy 0 je defaultní a nemusí se zadávat. IP adresa je virtuální adresa brány.
Příklad základního nastavení
SWITCH1(config)#interface vlan 100 SWITCH1(config-if)#ip address 192.168.1.2 255.255.255.0 // vlastní adresa interfacu SWITCH1(config-if)#standby 1 ip 192.168.1.1 // zapnutí HSRP a nastavení virtuální adresy
Aby mělo nastavení smysl, tak je třeba nakonfigurovat i druhý router:
SWITCH2(config)#interface vlan 100 SWITCH2(config-if)#ip address 192.168.1.3 255.255.255.0 SWITCH2(config-if)#standby 1 ip 192.168.1.1
Dalším, co asi v praxi nakonfigurujeme, je určení priority, podle které se volí aktivní router.
SWITCH1(config-if)#standby 1 priority 150 // nastaví prioritu na 150, defaultní je 100 (rozsah 1 - 255), vhodné je volit hodnoty větší SWITCH1(config-if)#standby 1 preempt // zajistí, aby po naběhnutí původního aktivního routeru se stal opět aktivním
Takže náš předchozí příklad můžeme doplnit tak, aby SWITCH1 byl primárně aktivní:
SWITCH1(config-if)#standby 1 priority 150 SWITCH1(config-if)#standby 1 preempt SWITCH2(config-if)#standby 1 priority 120 SWITCH2(config-if)#standby 1 preempt
Pozn.: Pro inter-VLAN routing samozřejmě musíme nakonfigurovat HSRP i pro další VLANy, které jsou routovány. Pro různé VLANy můžeme použít jednu HSRP skupinu, ale často je lepší rozdělit VLANy do několika skupin. Celá skupina se vždy přepíná najednou.
Pro zobrazení informací o HSRP máme příkaz
SWITCH#show standby
Následující příkaz nám zobrazí, která strana je aktivní, a jestli je dostupný další člen.
SWITCH#show standby brief
Při běžném provozu nesmíme zapomenout na to, že se mezi routery v dané VLANě musí šířit multicasty s hello pakety, jinak nám přepínání nebude fungovat. Takže když konfigurujeme ACL na VLANu, musíme povolit tuto komunikaci, například něco jako:
permit udp any 224.0.0.0 0.0.0.255
Multiple HSRP
Pro load balancing můžeme použít rozšíření HSRP nazvané MHSRP. To nám dovolí zadat do konfigurace více skupin s rozdílnou prioritou a část klientů nakonfigurovat pro jeden router a část pro druhý.
To se může hodit pro některé situace, ale pro běžný inter-VLAN routing spíše využijeme různé skupiny, takže některé VLANy budou standardně routovány jedním routerem a ostatní druhým.
Příklad nastavení:
SWITCH1(config)#interface g1/0/1 SWITCH1(config-if)#no switchport // aby se interface stal pouze L3 (routovací) SWITCH1(config-if)#ip address 192.168.1.10 255.255.255.0 SWITCH1(config-if)#standby 1 ip 192.168.1.1 SWITCH1(config-if)#standby 1 priority 150 SWITCH1(config-if)#standby 1 preempt SWITCH1(config-if)#standby 2 ip 192.168.1.2 SWITCH1(config-if)#standby 2 priority 110 SWITCH1(config-if)#standby 2 preempt SWITCH2(config)#interface g1/0/1 SWITCH2(config-if)#no switchport // aby se interface stal pouze L3 (routovací) SWITCH2(config-if)#ip address 192.168.1.11 255.255.255.0 SWITCH2(config-if)#standby 1 ip 192.168.1.1 SWITCH2(config-if)#standby 1 priority 110 SWITCH2(config-if)#standby 1 preempt SWITCH2(config-if)#standby 2 ip 192.168.1.2 SWITCH2(config-if)#standby 2 priority 150 SWITCH2(config-if)#standby 2 preempt
Pro konfiguraci HSRP je k dispozici ještě řada dalších možností, pro běžnou praxi však stačí pouze to výše uvedené.
ICMP Internet Router Discovery Protocol - IRDP
- popsáno v RFC 1256
- host si pomocí ICMP zjistí skutečnou adresu routeru (nepoužívá se virtuální)
- poslouchá multicastové pakety od routerů a podle nich nalezne GW na svém subnetu
- používá zprávy ICMP router advertisement (periodicky) a router solicitation
- pokud nedostane pravidelnou zprávu od své GW, tak přepne na záložní
- perioda odesílání advertisement bývá v řádu minut, takže přepnutí na záložní router může trvat dlouho
- pokud stanice nastartuje, tak nemusíme čekat, než dorazí advertisement, ale můžeme odeslat solicitation zprávu jako dotaz na údaje
Virtual Router Redundancy Protocol – VRRP
- standard popsaný v RFC 2338
- velice podobné HSRP
- používá virtuální router, který má virtuální IP adresu a MAC
0000.5e00.01xx
, kdexx
je číslo skupiny v hexa (VRID) - hlavní router je master, má nejvyšší prioritu (může nabývat hodnot 1 až 254, 100 je default) ve skupině (skupiny mají číslo 0 až 255)
- ostatní routery jsou backup
- každou 1s (default) posílá advertisement
- defaultně používá preempt – když je dostupný router s vyšší prioritou, přebírá roli master
- nemá žádný mechanismus pro interface tracking (sledování stavu interfacu a podle toho úprava priority)
- jako virtuální IP adresa se může použít skutečná IP adresa jednoho z routerů
Gateway Load Balancing Protocol – GLBP
- Cisco proprietární protokol, který k vlastnostem obdobným jako HSRP přidává Load Balancing
- všechny routery ve skupině forwardují data, využívá Load Balancing per host pomocí Round Robin (nemá žádný vztah k zátěži)
- Load Balancing je pomocí ARP odpovědí, kdy se odesílá MAC adresa vybraného routeru ze skupiny
- klienti mají stejnou IP adresu brány, ale jinou MAC adresu
- routery posílají (defaultně) hello paket každé 3s na multicast adresu
224.0.0.102 UDP port 3222
- volí Active Virtual Gateway (AVG), která přiděluje virtuální MAC adresy
- routery, které přijmou tuto MAC, se označují jako Active Virtual Forwarder (AVF), může jich být max. 4 pro skupinu
- podporuje weighting – určuje, zda router funguje jako AVF, když hodnota klesne, pod danou mez, tak není AVF a tracking – sleduje stav interfacu, a když jde interface dolů, tak se sníží hodnota weighting
Příklad funkce weighting a interface tracking:
SWITCH(config)#track 1 interface serial 2/0 line-protocol SWITCH(config)#interface f0/1 SWITCH(config-if)#glbp 10 weighting 110 lower 95 upper 105 SWITCH(config-if)#glbp 10 weighting track 1 decrement 10
Možná jenom doplním.
Vrrp nabízí jednu zajímavou vlastnost, můžete využít jako "virtuální ip" ip adresu rozhraní jednoho ze směrovačů.
Ještě existuje GLBP, možná někdy příště o něm napíšete, mezi hodně zajímavou vlastnost u něj patří, že umí loadbalancing mezi směrovači (není zde rozděleno striktně na forwarding a stand-by, takže můžete využívat kapacitu dostupných linků, ale hůře se debuguje chování sítě :) )
Ohľadom HSRP,mi tam niečo chýba...
Najprv musíme na smerovačoch nakonfigurovať objeky pre sledovanie, aby HSRP mohol sledovať stav rozhraní. A to príkazom track xx int [wan rozhranie] line-protocol - kde xx je čislo traku.
Napríklad pri Vašej konfigurácii MHSRP by som doplnil ešte sledovanie WAN rozhrania do sveta, či nieje down.
Napríklad R1 a R2 su smerovače ktoré rutujú pre rôzne VLANy.
SWITCH1(config)#track 10 interface Serial0/0/0 line-protocol
SWITCH1(config)#interface g1/0/1
SWITCH1(config-if)#no switchport
SWITCH1(config-if)#ip address 192.168.1.10 255.255.255.0
SWITCH1(config-if)#standby 1 ip 192.168.1.1
SWITCH1(config-if)#standby 1 priority 150
SWITCH1(config-if)#standby 1 preempt
SWITCH1(config-if)#standby 2 ip 192.168.1.2
SWITCH1(config-if)#standby 2 priority 110
SWITCH1(config-if)#standby 2 preempt
SWITCH1(config-if)#track 10
SWITCH2(config)#track 11 interface Serial0/0/0 line-protocol
SWITCH2(config)#interface g1/0/1
SWITCH2(config-if)#no switchport
SWITCH2(config-if)#ip address 192.168.1.11 255.255.255.0
SWITCH2(config-if)#standby 1 ip 192.168.1.1
SWITCH2(config-if)#standby 1 priority 110
SWITCH2(config-if)#standby 1 preempt
SWITCH2(config-if)#standby 2 ip 192.168.1.2
SWITCH2(config-if)#standby 2 priority 150
SWITCH2(config-if)#standby 2 preempt
SWITCH2(config-if)#track 11
A ešte by som doplnil k tomu prikazu dielči príkaz decrement xx kde xx je hodnota o ktorú sa zníži priorita rozhrania pri výpadku.
odpověď na [2]MacGyver: Nevím, jestli je to na routerech nějak jinak. Ale na switchi to co píšete nefunguje. Tedy sledování interfacu tam je, ale konfiguruje se jinak a rozhodně není povinné. Je tam pouze kvůli změně priority, pokud bychom ji chtěli.
odpověď na [3]Samuraj: No na rútroch to je tak ako som písal. Layer 3 switche na routing som nskúšal,.. Vychádzal som z toho, že to bude zhodné...:-)
Díky za moc pěknou sérii článků. Chtěl bych se zeptat k HSRP a určení cesty v síti. Předpokládejme, že máme jeden L2 switch-SW1 v přístupové vrstvě připojený k dvěma routerům/L3 switchům -R2 a R3 v distribuční vrstvě pracující v HSRP. PC připojená na SW1 mají default gateway HSRP IP adresu a aktivní router je R2. Tudíž PC při odesílání paketů do jiného subnetu obdrží na ARP žádost virtuální HSRP MAC adresu od R2 (je aktivní) a SW1 si tuto MAC adresu uloží do CAM tabulky. Nyní R2 umře, aktivním se stane R3. PC opět odesílá pakety do jiného IP subnetu na HSRP MAC adresu kterou má v ARP cache (a vše je v pořádku, protože tuto MAC adresu převzal záložní a nyní aktivní R3). Paket dorazí na SW1 a ten má ve své CAM ovšem uloženu tuto cílovou HSRP MAC adresu na portu vedoucím k R2 (který není aktuálně funkční) a pošle tedy paket z rozhraní k R2, což způsobí nedoručitelnost, protože R2 je mrtvý a aktuálně aktivní je R3...Jak je toto ošetřeno? Díky. Milan.
Omlouvám se za zavádějící pojmy paket. V případě, SW1 (L2 zařízení) pojmem paket v příspěvku výše myslím rámec...
odpověď na [5]Milan: Nechce se mi nad tím dlouhým popisem moc přemýšlet, tak snad to řeknu správně :-).
Je to jednoduché a plyne to z toho, jakým způsobem si switch vytváří CAM tabulku. Na portu 1 přijde rámec s MAC, tato dvojice se uloží do CAM tabulky. Pokud ale přijde na portu 2 rámec se stejnou MAC, tak se uloží tato nová dvojice (a ta stará se smaže). Pokud by komunikovala přes dva porty stejná MAC, tak se nám do logu ukládá address flapping a je to problém (i když třeba u load balancingu by se to hodilo).
Jasne,tomu rozumim. Jedna se mi o to,jakym zpusobem si SW zmeni CAM tabulku v pripade, ze aktivni HSRP router umre a druhy zapojeny do tohoto SW prevezme jeho funkci. Toto SW nevi a ma ve sve CAM tabulce stale svazanu virtualni HSRP MAC adresu s portem za kterym je nyni jiz neaktivni/mrtvy HSRP routern.
odpověď na [8]Milan: No to je přeci jasné :-). Kvůli tomu, aby záložní server zjistil, že se má stát aktivním máme hello paket. Když standby převezme active roli, tak informuje svoje okolí.
Taky jasne:-) ale porad me trapi toto: switch si ulozi do sve CAM tabulky cislo portu a MAC adresu(fiktivni HSRP MAC adresu),cislo portu switche bude korespondovat s rozhranim na kterem je aktivni HSRP router. Tento HSRP aktivni router umre,aktivnim se stane do te doby standby HSRP router,ktery je ovsem zapojen na fyzicky jiny port switche. Switch ovsem o teto zmene aktivnich routeru nevi a v CAM tabulce ma porad onu virtualni HSRP MAC adresu svazanu s portem na kterem byl predchozi(nyni mrtvy) akivni router. Tudiz prichozi ramec bude forwardovat na rozhrani na kterem je mrtvy router...Tudiz se mi zda,ze zde bude blackhole do doby nez vyprsi ARP cache v klientovi a pozada si znova nebo do doby zestarnuti zaznamu v CAM tabulce a jeji aktualizaci.
odpověď na [10]Milan: No to jsem přeci popsal hned v první odpovědi. Switch si dělá záznamy do CAM tabulky podle příchozích rámců na interfacu (ne podle ARP rámců). Aktivní router posílá Hello Packety ze své IP adresy a virtuální MAC adresy (té, o které se pořád bavíme). Takže jakmile se standby router stane aktivním, tak hned odešle Hello Packet s virtuální MAC adresou a switch si aktualizuje CAM tabulku.
Tak co, jasné? :-)
Diky,uz temer jasne :-) Kdyz uvazuji,ze by mezi dvema routery v HSRP byl primy L3 propoj,tak by hello pakety tekly pres tento propoj(domnivam se) a ne pres L2 infrastrukturu smerem k switchi v access vrstve.
odpověď na [12]Milan: Řekl bych, že je to naprosto nesmyslné zapojení a navíc nefunkční. To by byl jako druhý interface připojen do switche pro komunikaci klientů nebo by se klienti naučili čarovat a GW by adresovali na L3 a jak by se směrovaly ty multicasty (Hello Packet) do toho L3 propoje ....
Ne,myslim standardni(Cisco doporucene zapojeni). Z access switche 2cesty (jedna ke kazdemu ze dvou routeru v distribucni vrstve) a tyto routery prpojeny navzajem pres L3 cestu(routovane porty s IP dresou). L3 propoj mezi routery,ze VLANy nepresahuji jedotlive switche (VLANy jsou omezeny vzdy na jeden access switch),coz je doporuceny design.
Super clanek.
Diky!
Myslím, že to není Routing Protocol, ale Router Protocol...
Moc pěkný srozumitelný článek. Měl bych ale dotaz (tím se článek nezabývá) jak je řešena konfigurace IP adres na portech routeru, jestliže máme do jednoho routeru připojeny 2 a více kabelů (ze spodních switchů, viz. obrázek článku)? Routovací porty jednoho routeru přeci neumožňují mít IP adresy ze stejné sítě. Řeším to, že návodem v článku nastavím pouze jeden z těchto portů, ale další porty (kvůli redundanci zařízení) již nevím jak nastavit.
odpověď na [17]Knight: Je mi líto, ale nějak nechápu ten dotaz. Já to v praxi řeším jen na switchích a ne pro port interface, ale VLAN interface. Ale stejně vždy pro jednu VLANu mám jednu IP (plus VIP). Takže i kdyby to bylo na porty, tak by to měl být vždy jiný subnet. Ale možná mi něco uniká.
odpověď na [18]Samuraj: Mám například jednoduchou síť (jedna vlan, jeden subnet 192.168.0.0 /24). Zde nastavit záložní router umím. Pokud chci ale síť rozšířit podle doporučeného cisco hierarchického modelu, kde figurují zdvojené nejen routery (resp. L3 switche) ale i L2 switche, mám problém s tím co nastavit na routerech na další připojené porty. Tyto porty jsou ve stejné síti jako ty již nastavené a nevím co dál, protože IP adresu tam již nedám.
Pro názornost přikládám obrázek: imgur.com/2yjokxA
Zatím neřeším další vlany, pouze chci aby bylo zajištěno připojení ze sítě ven, i v případě, že by se vyskytl v sítí výpadek na routeru nebo switchi. Kdybych dal interfacy na jednom routeru do jiné vlany, tak udělám spíše nějaký traffic control, ale nedocílím toho, že kdyby jeden vypadl, tak pořád bude fungovat druhý.
Je to vůbec možné, nebo řeším blbost, kterou v praxi nikdo nedělá?
odpověď na [19]Knight: To zdvojení je jasné, ale to je na L2, takže tam žádné IP adresy neřeším. L3 nastavuji na VLANě, ne na portu. Takže oba porty, kde jsou připojené různé switche, používají stejnou jednu adresu (v rámci VLANy).
odpověď na [20]Samuraj: Děkuji za odpověd. Myslel jsem, že už to chápu, ale když jsem to zkusil zapojit, tak se nespojím s L3 switchem a jeho IP na vlan interface. Porty do lokální sítě jsem na L3SW nastavil "no switchport", ale tím pádem reálně nemají žádnou IP adresu a tudíž se nespojím ani s adresou vlany na stejném L3SW.
Obrázek: imgur.com/BGPirUa
Všude mám vlan1. Pingy na L2SW .3 a .4 fungují jelikož zařízení jsou propojené switchovacími porty. Na L3SW .10 se ale již nedostanu pokud nastavím pouze vlan IP. Můžete mi prosím poradit co mám ještě nastavit, abych měl konektivitu na L3SW přes danou vlan IP? Takto jsem se nedostal ke konfiguraci HSRP, jelikož mi nefunguje ani základní konektivita.
odpověď na [21]Knight: Vy vůbec nerozumíte úplným základům, to se pak těžko něco vysvětluje. Když mluvíte o L2 switchcích, tak kde na nich máte nastavenou IP adresu, abyste se na ně dostal? Asi na VLANě, ne? A úplně stejně to uděláte na tom L3. Ale nechcete routovat porty, na co by to bylo? Takže příkaz no switchport je totální nesmysl.
odpověď na [22]Samuraj: Nemusíte hned vyvozovat závěry a říkat, že lidé nic neumí... Myslel jsem, že právě kvůli dotazům a problémům tu jsou komentáře.
VLANy a jejich interface jsem nastavil na SW již v předchozím postu. Chybu jsem ale dělal v tom, že porty na L3SW směrem do LAN jsem nastavoval jako routovací. Vždy jsem pracoval jen přímo s routery, ale ne L3SW. Tím pádem jsem měl naučeno, že na routeru mají být automaticky porty routovací. Bohužel to mi zadělalo na problém zde. Po úpravě mi zapojení již funguje (i když důsledkem switchovacích portů vzniká smyčka a STP mi stejně jeden redundantní spoj odpojí - což jde proti mému původnímu záměru mít zdvojené připojení)
Nicméně děkuji za trpělivost a poslední odpověď, to bylo to co jsem hledal - nedávat "no switchport" na L3.
Na závěr tedy k mé původní otázce: z tohoto tedy plyne, že dané redundantní zapojení není realizovatelné s použitím routerů (s routovacími porty)? Protože pak vzniká uplně stejný problém, který jsem já vytvořil u L3SW.
odpověď na [23]Knight: Je mi líto, ale stále se potkávám s lidmi, kteří se pouštějí do nějakých konfigurací a vůbec nerozumí co nastavují. Na webu mám spoustu článků, které různé základy vysvětlují. Třeba váš další problém.
Je jasné, že komunikace jedné stanice na L2 (MAC) nemůže přicházet ze dvou portů, došlo by k flapování MAC adresy a tím k mnoha problémům. Proto vzniklo STP a proto se vypínají porty. Dneska existují mnohem lepší řešení. Nastudujte si Port Channel (LACP) u Cisca dříve EtherChannel. Mám na to téma několik článků.
Ahoj. Řešil jste někdo HSRP mezi lokalitami? Příklad: Mám dvě LAN na dvou budovách. Každá budova má L3 box a ty jsou v HSRP. Každá budova má přípoj do jednoho stejného ISP, ale každý přípoj je v jiné OSPF Area. A teď mi padne linka mezi budovami. Z HSRP clusteru se stanou dva ostrůvky a oba se budou tvářit jako Primary. Ven z LAN do ISP OK, ale návratový trafic mi může chodit pak přes druhou stranu a bude nedostupný host. Na internetu jsem našel možnost rozjet L2 tunel přes ISP mezi oběma L3 boxy a tím by chodilo HSRP pak. Ale bohužel tohle nelze tady použít. Řešil jste to někdo?
HSRP version IP Protocol Group address UDP Port Virtual MAC address range
1 IPv4 224.0.0.2 (all routers)odpověď na odpověď na [1]tomfi: tomfi: 1985 00:00:0c:07:ac:XX
2 IPv4 224.0.0.102 (HSRP)odpověď na odpověď na [1]tomfi: tomfi: 1985 00:00:0c:9f:fX:XX
IPv6 ff02::66 2029 00:05:73:a0:0X:XX