Možnosti ochranného mechanismu Loop Guard v implementaci Spanning Tree firmy Cisco Bronislav Feču, Jiří Vychodil Abstrakt: Projekt se zabývá protokolem Spanning Tree a jeho ochranným mechanismem Loop Guard. Je zde teoreticky vysvětleno a prakticky ověřeno fungování protokolu Spanning Tree s implementací Loop Guard. V praktické části je na jednoduché topologii přepínačů zapojených do smyčky zprovozněn protokol Spanning Tree, spuštěn mechanismus Loop Guard a je zaznamenán síťový provoz v topologii. Tento provoz je následně vyhodnocen a popsán. Klíčová slova: Spanning Tree, Loop Guard, switch, smyčka 1 Úvod.............................................................................................................................2 2 Spanning Tree Protocol................................................................................................2 2.1 Určení nejkratší cesty............................................................................................2 2.2 Bridge ID – BID....................................................................................................2 2.3 Bridge Protocol Data Units – BPDU....................................................................2 2.4 Root Bridge...........................................................................................................3 2.5 Volba Root Bridge.................................................................................................3 2.6 Typy portů.............................................................................................................3 3 Rapid Spanning Tree Protocol......................................................................................4 3.1 Změny oproti STP.................................................................................................4 3.2 Typy portů / linek..................................................................................................4 3.3 Role portů..............................................................................................................4 4 Loop Guard...................................................................................................................4 5 Praktické ověření chování protokolu Spanning Tree a Loop Guard............................5 5.1 Topologie..............................................................................................................5 5.2 Konfigurace...........................................................................................................5 6 Závěr.............................................................................................................................7
listopad 2008
1/7
1 Úvod Zálohování fyzických spojů v síti je důležité, umožňuje sítím bezporuchový provoz a chrání uživatele před nedostupností sítě. Nedostupnost sítě může být způsobena selháním spoje, portu, nebo celého síťového zařízení. Zálohování fyzických spojů je proto vyžadováno jako ochrana proti ztrátě konektivity z důvodu selhání některého prvku sítě. Ale díky tomuto opatření vznikají v síti smyčky, které mohou být v přepínané síti problémem. Další možností selhání sítě bývá chyba obsluhy či neodborná manipulace, která způsobí vytvoření smyčky v síti. Ve větší síti není problém omylem propojit dva přepínače dohromady, místo abychom připojili nějakou stanici. Může se také stát, že někdo připojí do sítě přepínač místo stanice a připojí jej do dvou zásuvek. Důležité je vědět co může smyčka v síti způsobit, a že je možno využít Spanning Tree Protokol. Spanning Tree Protokol (zkratka STP) je prostředek k vytvoření logické topologie sítě bez smyček v přepínané síti se smyčkami. Spoje a porty přepínačů, které nejsou součástí aktivní bezsmyčkové topologie nepřeposílají data. STP je silný nástroj, který umožňuje správcům sítě zálohování fyzických spojů sítě bez rizika problémů plynoucích ze smyček v síti.
2 Spanning Tree Protocol - STP Proto, abychom zabránili smyčkám v síti, slouží Spanning Tree Protocol - STP. Můžeme říci, že protokol pracuje na principu, kdy síť je ohodnocený graf a algoritmus hledá kostru tohoto grafu. Jinak řečeno, zajišťuje, aby mezi dvěma přepínači byla jen jedna cesta. Používá Spanning Tree Algorithm (STA) pro hledání a rušení redundantních spojů (blokuje porty - ty nevysílají a přijatá data zahazují). STP je definován normou IEEE 802.1d. Originální STP norma již dnes neexistuje. V roce 2004 byla revidována norma IEEE 802.1d a byla sloučena s rozšířeními 802.1t a 802.1w, přičemž originální STP bylo nahrazeno pomocí Rapid Spanning Tree Protocol – RSTP. STP na fyzické topologii, která může obsahovat smyčky, vytvoří virtuální topologii, která již smyčky neobsahuje. SPT je dynamický protokol, pokud tedy vznikne smyčka, tak se překonfiguruje, aby jí zabránil. Stejně tak, pokud se přeruší některá linka, tak se pokusí vytvořit alternativní cestu (povolením dříve blokovaného portu), pokud je to možné.
2.1 Určení nejkratší cesty STP vytváří strom nejkratších cest (kostru grafu). Kořenem tohoto grafu je jeden přepínač tzv. Root Bridge. Nejkratší cesta je určována na základě kumulativní ceny linek. Cena linky je dána její propustností (bandwith), podle následující tabulky tab. 1. V původní specifikaci se počítalo s maximální rychlostí 1Gbs, takže byla aktualizována, aby zahrnovala i linky 10Gbps. rychlost linky
cena (nově)
cena (původní)
10 Gbps
1
1
1 Gbps
4
1
100 Mbps
19
10
10 Mbps 100 100 Tab. 1 Cena linek podle Cisco-specific
2.2 Bridge ID – BID Bridge ID (BID) je základní hodnota každého přepínače a skládá se z priority (velikost 2B) a MAC adresy přepínače (velikost 6B). Přepínač, který má nejnižší BID se stává hlavním přepínačem tzv. Root Bridgem (kořenovým přepínačem). BID můžeme změnit tím, že změníme prioritu přepínače.
2.3 Bridge Protocol Data Units – BPDU STP využívá zasílání speciálních zpráv mezi přepínači. Tyto zprávy se jmenují BPDU (Bridge Protocol Data Units) a jsou přijímány i blokovanými porty. Na začátku komunikace se používají konfigurační BPDU. BPDU má tři hlavní části. Globální informace o STP (verze apod.), informace pro konfiguraci a časové parametry. Hello Time je interval, po kterém se zasílají BPDU (default 2s). Max age a Forward delay jsou doby mezi jednotlivými stavy (viz kapitola 2.6) listopad 2008
2/7
2.4 Root Bridge • • • •
je to kořen stromu má nejnižší BID všechny jeho porty jsou ve stavu forwarding (jsou komunikující) a jsou typu designated běžně je dobré zajistit, aby Root Bridge byl nejvýkonnější přepínač
2.5 Volba Root Bridge Pokud nastavíme prioritu přepínače na nižší hodnotu než jakou má přepínač který chceme použít jako Root Bridge, můžeme tak určit, který přepínač bude Root Bridgem. Volba Root Bridge probíhá následovně: • přepínač (například nově připojený) odešle BPDU (jako multicast), kde nastaví svoje BID jako root BID • každý přepínač přijme BPDU a pokud je jeho BID menší než root, tak je opraví na svoje a odešle • pokud přepínač přijme BPDU s nižším root BID, než je jeho, tak jej uzná za Root Bridge
2.6 Typy portů
Obr. 1 Typy portů přepínačů nastavené SPT Jednotlivým portům na přepínači nastaví STP jeden ze tří typů (pokud není port disabled tzn. blokovaný), příkladem je obr. 1: • root port - port s nejnižší cenou linky, buď linka přímo spojená s Root Bridgem nebo s nejkratší cestou k němu. • designated port - port, který je členem STP topologie a připojuje další segment sítě. • non-designated port - blokovaný port, redundantní cesta. Root a designated port jsou porty, které posílají data, jsou ve stavu forwarding. Non-designated port je blokovaný. Při změně topologie, například připojení přepínače do sítě prochází jednotlivé porty několika stavy. Mezi každým přechodem je určitý maximální časový interval. Každý port přepínače, který používá STP, je v jednom z pěti možných stavů: • Blocking state • Listening state • Learning state • Forwarding state • Disabled state V blocking state porty přijímají pouze BPDU. Data jsou zahazována a přepínač se na tomto portu neučí MAC adresy. V listening state přepínač zjišťuje, zda nevede další cesta k root bridge. Cesty, které nemají nejnižší cenu linky k root bridge se vrátí do blocking state. Doba naslouchání se nazývá forward delay a trvá 15 sekund. Data nejsou přeposílána a MAC adresy se neučí, ale BPDU se stále zpracovávají. V learning state se učí MAC adresy, ale data stále nejsou přeposílána. BPDU jsou stále zpracovávána. listopad 2008
3/7
Ve forwarding state se přeposílají data, učí se MAC adresy a BPDU jsou zpracovávána. Port může být i v disabled state. V tomto stavu je port, když je administrátorem vypnut, nebo má poruchu. Přepínaná počítačová síť je konvergovaná ve chvíli, kdy všechny porty přepínačů jsou buď ve stavu blocking, nebo forwarding. Tedy doba konvergence je čas, než port projde ze stavu blocking do forwarding, nebo zůstane ve stavu bloking. Standardně je to max. 50s. Ke konvergenci dochází vždy při změně topologie, tedy připojení či odpojení přepínače, nebo portu, nebo změně konfigurace STP. Standardně tedy každý nově připojený port začne komunikovat až po 50s. Stejně tak při výpadku jedné linky dojde k překlopení na záložní linku až po této době.
3 Rapid Spanning Tree Protocol - RSTP Maximální čas, kdy konverguje STP je 50s, což je pro praktické situace příliš vysoká hodnota. Proto byl vytvořen upravený algoritmus zvaný Rapid Spanning Tree Protocol (RSTP), který má čas konvergence v praxi kolem 1 či 2s. RSTP byl původně definován jako rozšíření normou IEEE 802.1w, ale v roce 2004 byl zařazen do normy IEEE 802.1d. Základní princip je podobný klasickému STP, ale je upraven pro rychlejší konvergenci při změně topologii. Má integrován ekvivalent Cisco funkcí PortFast, UplinkFast a BackboneFast.
3.1 Změny oproti STP • • • • • •
změna formátu BPDU (používá se verze 2) všechny switche generují BPDU a posílají je na všechny porty každý hello time (místo přeposílání Root BPDU) posílají se Agreement / Proposal BPDU pro linky se definuje jejich typ (point-to-point, edge, shared), takže některé mohou rychle přejít do stavu forwarding změnily se role/typy portů, jsou čtyři (root, designated, alternate, backup) stavy portů (discarding, learning, forwarding)
3.2 Typy portů / linek Point-to-point P2P - tedy spoj bod-bod, připojení dalšího switche, linka musí být full duplex Edge - koncový/hraniční port (PortFast), je do něj připojeno koncové zařízení (jako PC či tiskárna) Shared - sdílená linka, například hub, linka je half duplex Výchozí stav pro full duplex linky je P2P. Pro P2P musíme zaručit, aby byla linka ve full duplex módu. • • •
3.3 Role portů • • • •
Root Port - port přepínače který je připojen k Root Bridgi Designated Port Alternate Port - blokovaný, alternativní cesta k rootu (záloha root) Backup Port - blokovaný, redundantní cesta k segmentu (záloha designated)
4 Loop Guard - LG STP Loop Guard poskytuje dodatečnou ochranu proti smyčkám na druhé vrstvě RM OSI. STP smyčka se vytvoří, pokud STP port ve stavu blocking v redundantní topologii chybně přejde do stavu forwarding. To se obvykle stává, pokud jeden z portů ve fyzické topologii (ne nutně port ve stavu blocking) přestane přijímat BPDU. Toto se může stát například při jednostranné poruše linky, kdy se poškodí jen část párů v kabelu a ostatní jsou funkční. STP se spoléhá na trvalé přijímání nebo posílání BPDU - záleží na stavu portu. Designated port vysílá BPDU a non-designated přijímá BPDU. Pokud jeden z portů v redundantní fyzické topologii přestane přijímat BPDU, STP se bude domnívat, že topologie je bez smyček. Případně blocking port ze stavu alternate, nebo backup přejde do stavu designated a stavu forwarding a vytvoří se smyčka. LG vytváří přídavnou ochranu. Pokud BPDU na non-designated portu přestanou být náhle přijímány a LG je povolen, tento port je převeden do stavu STP loop-inconsistent blocking, místo toho, aby přešel do stavů listening / learning a forwading. Bez LG by port přešel do typu designated a do stavu forwarding, takže se vytvoří smyčka.
listopad 2008
4/7
5 Praktické ověření chování protokolu Spanning Tree a Loop Guard 5.1 Topologie Pro praktické ověření možností protokolu Spanning Tree a funkce Loop Guard jsme sestavili následující topologii. V topologii na obr. 2 byly použity přepínače Cisco 2960.
Obr. 2 Testovací topologie V zapojené topologii spustíme protokol Spanning Tree a budeme sledovat jak se síť chová při vytvoření smyčky a jak protokol Spanning Tree tuto smyčku zruší. Pro ověření funkce rozšíření Loop Guard budeme simulovat jednostranné přerušení linky pomocí access listu. Chování sítě v jednotlivých stavech budeme sledovat pomocí výpisů z jednotlivých přepínačů. Pro sledování provozu v síti použijeme také program Wireshark spuštěný na počítači PC.
5.2 Konfigurace Nastavení přepínače jako root bridge Pro nastaveni přepínače 1 jako root bridge jsme použili příkaz: SWITCH(config)#spanning-tree vlan 1 priority 4096 Příkazem na přepínači 3 jsme získali následující výpis: Switch#show spanning-tree Interface Role Sts Cost Prio.Nbr Type ------------------- ---- --- --------- -------- -------------------------------Fa0/1 Root FWD 19 128.1 P2p Fa0/3 Desg FWD 19 128.3 P2p
listopad 2008
5/7
Stejným příkazem na přepínači 2 jsme získali následující výpis: Interface Role Sts Cost Prio.Nbr Type ------------------- ---- --- --------- -------- -------------------------------Fa0/1 Root FWD 19 128.1 P2p Fa0/3 Altn BLK 19 128.3 P2p Stejným příkazem na přepínači 1 jsme získali následující výpis: Interface Role Sts Cost Prio.Nbr Type ------------------- ---- --- --------- -------- -------------------------------Fa0/1 Desg FWD 19 128.1 P2p Fa0/3 Desg FWD 19 128.3 P2p Stavy portů jsou vysvětleny v podkapitole 3.3. Přepínač 1 je opravdu Root Bridgem, všechny porty má ve stavu Designated Forwarding. Nastavení access listu Jednosměrné porušení linky budeme simulovat pomocí access listu. Tímto nastavením přestane přepínač 2 na portu Fa0/3 dostávat BPDU od přepínače 3, bude se proto domnívat že v topologii není smyčka a port Fa 0/3 přejde do stavu forwarding. Nastavení jsme provedli pomocí následujících příkazů na přepínači 2. Vytvoření access listu který blokuje rámce se zdrojovou mac adresou přepínače: 001a.6dde.6403. Switch(config)#mac access-list extended mac1 Switch(config-ext-macl)#deny 001a.6dde.6403 0000.0000.0000 any Následujícím příkazem jsme přiřadili access list na port přepínače. Switch(config-if)#mac access-group mac1 in Ověření nastavení Do topologie jsme k přepínači 3 připojili počítač PC. Na počítači jsme spustili příkaz ping. Počítač potřeboval přeložit IP adresu na fyzickou adresu (mac adresu) pomocí ARP dotazu. Ten se šířil broadcastem na fyzické vrstvě. Způsobilo to zahlcení linek, protože je v topologii smyčka a přepínače šíří broudcast na všechny porty. Zahlcení linek jsme sledovali pomocí výpisu provozu v programu Wireshark a velký provoz indikovaly i samotné přepínače kontrolkami u portů. Následující výpis jsme získali na přepínači 2, protože ARP dotaz se zdrojovou mac adresou počítače přichází střídavě na port Fa0/1 a Fa0/3. Přepínač tak neustále přepisuje CAM tabulku (přiřazení mac adresy k portu). Switch# *Mar 1 01:18:58.489: %SW_MATM-4-MACFLAP_NOTIF: Host 0016.7669.01be in vlan 1 is flapping between port Fa0/1 and port Fa0/3 0016.7669.01 - mac adresa přepínače
listopad 2008
6/7
Povolení Loop Guard Před povolením Loop Guard jsme zrušili přiřazení access listu k portu přepínače. Port Fa0/3 na přepínači 2 se přepnul do stavu Alternate Blocking. Povolíme Loop Guard na přepínači 2 port Fa0/3. Interface Role Sts Cost Prio.Nbr Type ------------------- ---- --- --------- -------- -------------------------------Fa0/1 Root FWD 19 128.1 P2p Fa0/3 Altn BLK 19 128.3 P2p Switch(config)#int fastEthernet 0/3 Switch(config-if)#spanning-tree guard loop Opět přiřadíme access list na port Fa0/3 přepínače 2. Funkce Loop Guard zjistí že přestaly přicházet BPDU na portu Fa0/3 a přepne tento port do stavu loop-inconsistent blocking. *Mar 1 00:56:00.568: %SPANTREE-2-LOOPGUARD_BLOCK: Loop guard blocking port FastEthernet0/3 on VLAN0001 Příkazem na přepínači 2 jsme získali následující výpis: Switch#show spanning-tree Interface Role Sts Cost Prio.Nbr Type ------------------- ---- --- --------- -------- -------------------------------Fa0/1 Root FWD 19 128.1 P2p Fa0/3 Desg BKN*19 128.3 P2p *LOOP_Inc Opět přiřadíme access list na port Fa0/3 a tento port přejde do stavu Alternate Blocking. *Mar 1 01:09:05.524: %SPANTREE-2-LOOPGUARD_UNBLOCK: Loop guard unblocking port. *Mar 1 01:09:05.524: STP: VLAN0001 Fa0/3 -> listening *Mar 1 01:09:05.524: STP: VLAN0001 Fa0/3 -> blocking Příkazem na přepínači 2 jsme získali následující výpis: Switch#show spanning-tree Interface Role Sts Cost Prio.Nbr Type ------------------- ---- --- --------- -------- -------------------------------Fa0/1 Root FWD 19 128.1 P2p Fa0/3 Altn BLK 19 128.3 P2p
6 Závěr Funkce Loop Guard poskytuje ochranu proti smyčkám při jednosměrné nefunkčnosti linky. Je nutné, aby byl zapnut Spanning Tree protokol. Smyčce zabrání tak že port s chybnou linkou zablokuje. Po plném obnovení funkčnosti linky vrátí port do původního stavu. Prakticky jsme ověřili chování Spanning Tree protokolu bez zapnuté funkce Loop Guard a se zapnutou funkcí Loop Guard. V obou případech se přepínač chová podle předpokladů.
listopad 2008
7/7