Smyčka v síti a STP

Co smyčka dělá?

Smyčky působí přetížení v síti (neustálým posíláním velkého množství paketů dochází k přehlcování aktivních prvků – brutálně blikající switche) a vedou ke snížení rychlosti nebo k úplné ztrátě konektivity k síti.

Příčinou může být špatná konfigurace switchů, stejně jako špatné fyzické propojení kabely mezi switchi, různé hardwarové nebo softwarové závady. Za nejčastější příčinu se považuje právě špatné fyzické propojení nebo chyba v konfiguraci propojení v IOSu. Nejrychlejším typem pomoci může být okamžité rozpojení, ať již na virtuální (softwarové) nebo fyzické (kabeláž), nechtěného propoje mezi switchi.

 Co udělat nejdříve?

Každopádně, před léčením neduhů se smyčkami je dobré si nejprve pořídit detailní schéma síťových prvků a jejich zapojení, ze kterého bude mj. patrné, kterými porty jsou mezi sebou jednotlivé prvky propojeny a jakým způsobem jsou na těchto prvcích zkonfigurované STP (kdo je root, kdo je záloha rootu, který spoj má specifickou hodnotu priority nebo váhy, umístění blokovaných portů).

Jak se vlastně smyčka pozná?

Mezi typické projevy smyček patří:

  • Ztráta konektivity k, z nebo skrz postiženou oblast sítě.
  • Vysoká utilizace CPU na routerech připojených k postiženému segmentu sítě nebo k VLAN, což může vést k flappingu („mihotání“ zařízení mezi dvěma
    porty na stejném switchi) RTP mezi sousedními prvky nebo k flappingu HSRP.
  • Vysoká utilizace spoje (obvykle 100%).
  • Vysoká celková utilizace zařízení v poměru k běžnému, korektnímu stavu.
  • Množství zpráv syslogu indikujících paketovou smyčku (kupř. HSRP s duplikáty IP adres).
  • Množství zpráv, které indikují neustálé učení se MAC tabulky nebo flapping MAC adres.

Pokud objevíte více z výše uvedených příznaků, je velmi pravděpodobné, že ve vaší síti je smyčka.

Nejrychlejším způsobem, jak ověřit celkovou utilizaci provozem, je vložit následující příkaz:

name# show device_name traffic-meter (ovšem pouze na Catalystech 6000 a výše).

Pro ostatní typy lze využít standardní IOS příkaz pro zobrazení přenosů na jednotlivých portech switche, což umožňuje rychlou analýzu zátěže:

name# show interface | include line|\/sec

Mělo by se nám dostat podobného výpisu, jako je zde:

GigabitEthernet0/1 is up, line protocol is down
 5 minute input rate 0 bits/sec, 0 packets/sec
 5 minute output rate 0 bits/sec, 0 packets/sec
GigabitEthernet0/2 is up, line protocol is up
 5 minute input rate 99765230 bits/sec, 24912 packets/sec
 5 minute output rate 0 bits/sec, 0 packets/sec
GigabitEthernet0/3 is up, line protocol is up
 5 minute input rate 2000 bits/sec, 41 packets/sec
 5 minute output rate 99552940 bits/sec, 24892 packets/sec

Porty 1 a 3 se jeví jako velmi utilizované a může se tedy jednat o porty ve smyčce.

Jak smyčku odstranit?

Jak již bylo řečeno, je potřeba rozpojit postižené porty na switchích. Je velice důležité nalézt základní příčinu vzniku smyčky, mimo její odstranění. Během odstraňování tedy není příliš šťastné poshazovat všechny porty a nahazovat je jeden po druhém. Smyčka zmizí a nemusí se projevit ihned po znovusestavení spojení. Pak je samozřejmě velice obtížné lokalizovat smyčku na konkrétní port.

Namísto toho je vhodnější postupně odpojovat aktivní porty a při každém odpojení sledovat utilizaci linek (viz výše). Jakmile se po určitém odpojení utilizace
sníží, našli jste velice pravděpodobně jeden z portů, který se smyčky účastní.

Ukázka smyčky v síti

Jak zjistit a odstranit příčinu smyčky?

 

Nastává nejobtížnější část operace. Příčin může být více a tak se podívejme alespoň na dvě obecné cesty, jak se dopídit podstaty:

          Prozkoumejte schéma topologie sítě a najděte redundantní cesty – viz obrázek výše, cesta smyčky je AD-DB-BA

          Na každém switchi, který je součástí redundance, zkontrolujte následující:

 

  • Zná switch správný STP root?

Každý switch (L2) by měl odsouhlasit společný STP root. Jasným příznakem problémů je, když switche v konkrétní VLANě nebo STP instanci neustále zobrazují různé ID STP rootu. Ke zjištění ID STP rootu použijte následující příkaz:

 

name# show spanning-tree vlan xx

 

Všechny switche by měly mít shodnou hodnotu Root ID:

 

.
.
Root ID      Priority     xxxx
             Address      yyyy.yyyy.yyyy
.
.

 

  • Je root port identifikován správně?

Root port by měl mít nejnižší váhu (cost) k root switchi (někdy cesta, která je podle hopů kratší, je z pohledu váhy delší (vyšší), protože nízkorychlostní porty mívají výše nastavenou váhu). Pro zjištění portu, který je určen jako root pro danou VLAN, opět zadejte příkaz:

 

name# show spanning-tree vlan xx

 

A podívejte se na řádek Port:

 
.
.
Root ID      Priority            xxxx
             Address             yyyy.yyyy.yyyy
             Cost          zzzzz
             Port         www (GigabitEthernet0/v)
.    
.

 

  • Jsou BPDU přijímány pravidelně na root port a na porty, které jsou pokládány za blokované?

BPDU jsou posílané root switchem v každém hello intervalu (defaultně 2 sekundy). Nerootovské switche přijímají, zpracovávají, upravují a propagují BPDU, které poskytuje root switch.

 

Napište následující příkaz, abyste se podívali, zda jsou BPDU skutečně přijímány:

 

name# show spanning-tree interface g3/2 detail
Port 130 (GigabitEthernet3/2) of MST00 is backup blocking
   Port path cost 20000, Port priority 128, Port Identifier 128.130.
   Designated root has priority 0, address 0007.4f1c.e847
   Designated bridge has priority 32768, address 00d0.003f.8800
   Designated port id is 128.129, designated path cost 2000019
   Timers: message age 4, forward delay 0, hold 0
   Number of transitions to forwarding state: 0
   Link type is point-to-point by default, Internal
   Loop guard is enabled by default on the port
   BPDU: sent 3, received 53
name# show spanning-tree interface g3/2 detail
Port 130 (GigabitEthernet3/2) of MST00 is backup blocking
   Port path cost 20000, Port priority 128, Port Identifier 128.130.
   Designated root has priority 0, address 0007.4f1c.e847
   Designated bridge has priority 32768, address 00d0.003f.8800
   Designated port id is 128.129, designated path cost 2000019
   Timers: message age 5, forward delay 0, hold 0
   Number of transitions to forwarding state: 0
   Link type is point-to-point by default, Internal
   Loop guard is enabled by default on the port
   BPDU: sent 3, received 54

Je zřejmé, že během dvojího použití příkazu switch obdržel jeden BPDU (viz poslední řádek výpisu výše). Čítač ukazuje hodnotu spravovanou samotným STP procesem. To znamená, že pokud čítač roste, není BPDU přijímáno pouze fyzickým portem, ale také STP procesem.

 

Jestliže se hodnota čítače (received) na portu, který je předurčen jako root nebo backup, nezvyšuje, je třeba provést kontrolu toho, který port přijímá mutlicasty (BPDU je posíláno jako multicast). Toho lze dosáhnout následujícím příkazem:

 

name# show interface g3/2 counters

 

Ve výpisu čítačů portu je třeba se zaměřit na položku InMcastPkts (přijímané multicastové pakety):

 

Port  InOctets     InUcastPkts  InMcastPkts  InBcastPkts
Gi3/2 14873036     2            89387        0

 

Pokud nejsou přijímány žádné BPDU, zkontrolujte, který port nenačítá žádné chyby.

 

name# show interface g4/3 counters errors

 

Tedy:

 

Port  Align-Err    FCS-Err      Xmit-Err     Rcv-Err      UnderSize    OutDiscard
Gi4/3 0            0                   0      0            0

 

Je možné, že BPDU jsou přijímány fyzickým portem, ale nedosáhnou na STP proces. Pokud je přítomná situace jako z předchozích dvou příkladů, tj. nějaké multicasty jsou přijaté a chyby se nevyskytují, je třeba zkontrolovat, které BPDU jsou zahazovány na úrovni STP procesu. Což lze ovšem pouze na řadě 6500/6000.

 

  • Jsou BPDU posílány pravidelně na porty designované jako nerootovské?

Jestliže, v závislosti na roli portu, port odesílá BPDU, ale soused je nepřijímá, zkontrolujte, které BPDU jsou aktuálně odesílané.

 

name# show spanning-tree interface g3/1 detail
Port 129 (GigabitEthernet3/1) of MST00 is designated forwarding
   Port path cost 20000, Port priority 128, Port Identifier 128.129.
   Designated root has priority 0, address 0007.4f1c.e847
   Designated bridge has priority 32768, address 00d0.003f.8800
   Designated port id is 128.129, designated path cost 2000019
   Timers: message age 0, forward delay 0, hold 0
   Number of transitions to forwarding state: 0
   Link type is point-to-point by default, Internal
   Loop guard is enabled by default on the port
   BPDU: sent 1774, received 1

 

name# show spanning-tree interface g3/1 detail
Port 129 (GigabitEthernet3/1) of MST00 is designated forwarding
   Port path cost 20000, Port priority 128, Port Identifier 128.129.
   Designated root has priority 0, address 0007.4f1c.e847
   Designated bridge has priority 32768, address 00d0.003f.8800
   Designated port id is 128.129, designated path cost 2000019
   Timers: message age 0, forward delay 0, hold 0
   Number of transitions to forwarding state: 0
  Link type is point-to-point by default, Internal
   Loop guard is enabled by default on the port
   BPDU: sent 1776, received 1

 

V tomto příkladě je vidět, že mezi výstupy z příkazu byly dva BPDU.

 

Protože STP proces obhospodařuje čítač BPDU:sent, znamená to, že tento čítač indikuje BPDU odeslané vůči fyzickému portu, aby byly eventuelně odeslány pryč ze switche.  Zkontrolujte, jestli čítače portů OutMcastPkts rostou, protože odcházejí BPDU.

 

name# show interface g3/1 counters
 
Port            InOctets   InUcastPkts   InMcastPkts   InBcastPkts
Gi3/1          127985312         83776        812319            19

 

Port           OutOctets  OutUcastPkts  OutMcastPkts  OutBcastPkts
Gi3/1          131825915          3442        872342           386

 

Smyslem veškerého předchozího počínání tedy bylo najít switch nebo spoj, na kterém nelze přijímat, odesílat nebo zpracovávat BPDU.

 

Může se rovněž stát, že STP správně spočítalo stav pro fyzický port, ale z důvodu chyby v kontrolních mechanismech není možné tento stav nastavit na forwardovací hardware. Smyčka může vzniknout, pokud dle předpokladu zablokovaný port není na hardwarové úrovni blokován. Toto je ovšem incident pro technickou podporu Cisco.

 

  • Obnova redundance

Jakmile je jednou zařízení nebo spoj, který způsobuje smyčku, nalezen, musí být toto zařízení buď izolováno od zbytku sítě nebo musí být podniknuta odpovídající opatření (např. náhradou vlákna nebo GBIC). Poté je možné redundanci opět obnovit.

 

Takže tolik k problematice smyček (prozatím) z pohledu hledání a prevence. Opakuji důrazně, neresetujte switche, dokud není posbíráno dostatek informací k analýze, jinak se nalezení příčiny stane velice obtížným až nemožným.

 

Poslední část se týká problematiky zabezpečení sítě proti smyčkám. Aby bylo možné obejít neschopnost STP z určitých příčin nesprávně fungovat, existují na Cisco zařízeních fíčury a rozšíření, které pomáhají ochránit síť před vznikem smyček.

 

Po vyhledání problému (smyčky) a příčiny vzniku je jedinou účinnou ochranou proti vzniku nasazení výše zmíněných rozšíření. Nyní se podívejme, jakými metodami ochranu zajistit:

 

          Zapněte UDLD (Unidirectional Link Detection) na všech spojích switch-switch.

 

          Zapněte Loop Guard na všech switchích.

 

Tyto dvě metody eliminují většinu možných příčin vzniku smyček. Zajistí, že namísto toho, aby vznikla smyčka, bude postižený spoj (nebo spoje postižené hadrwarovou chybou) vypnuty nebo zablokovány. Každá z metod používá specifické techniky, a proto je doporučeno, pro maximalizaci ochrany, používat obě dvě zároveň.

 

Pozor na použití UDLD v agresivním módu. Nepřináší více ochrany, než normální mód a může způsobovat odpojování spojů i při nefatálních chybách. Ve vzácných případech může dokonce agresivní UDLD poshazovat všechny uplink porty, což spolehlivě izoluje daný switch od zbytku sítě. Vysoká zátěž CPU na uzlových switchích může být tedy v agresivním módu vyhodnocena jako flood/smyčka a nastane případ popsaný v předchozí větě.

 

          Zapněte portfast na všech edge portech (end-station portech – portech na kterých jsou koncová zařízení).

Tato funkce omezí nárůst TC (změn topologie) a následný flooding, který může výrazně ovlivnit výkon sítě. Nepoužívejte tuto metodu na propojích jiných, než koncových, protože můžete náhodně vytvořit smyčku v topologii způsobující zacyklení datových paketů a zničit tak operabilitu switche nebo celé sítě.

 

          Nastavte EtherChannels do módu desirable, s možností non-silent, na obou stranách.

Mód desirable zapne PAgP (Port Aggregation Protocol), aby byla zajištěna konzistence mezi svázanými porty. Poskytuje tak přidanou ochranu proti smyčkám, především během rekonfigurace kanálů (když spoje přibývají do nebo ubývají z kanálu a při detekci chybových spojů). V akci je také vestavěná funkce Channel Misconfiguration Guard, která je defaultně zapnutá a chrání před vznikem smyček při nesprávné konfiguraci kanálu či z jiných důvodů.

 

          Nevypínejte auto-negotiation na spojích switch-switch

Autonegociační mechanismus dopravuje informace o vzdálených chybách, což je nejrychlejší způsob, jak zjistit selhání na vzdálené straně. Pokud by bylo na vzdálené straně zjištěno selhání, lokální strana vypne spoj, i když přes něj stále probíhají pulsy. V porovnání s vysokostupňovou ochranou typu UDLD, je autonegociace velice rychlá (v řádech mikrosekund), ale schází jí end-to-end pokrytí, které UDLD má (UDLD chrání celou datovou cestu: CPU fwd logika <> port 1< > port 2 <> CPU fwd logika / autonegociace pouze: port 1 <> port 2). Agresivní UDLD poskytuje podobnou funkcionalitu jako autonegociace. Pokud je negociace podporovaná na obou stranách spoje, není potřeba zapínat agresivní UDLD mód.

 

          Dávejte velký pozor, když dolaďujete časovače STP

STP časovače jsou závislé jeden na druhém a také na síťové topologii. STP nemusí fungovat správně, pokud budou časovače měněny nahodile.

 

          Pokud hrozí DoS útoky, zabezpečte STP perimetr Root Guardem

Root Guard a BPDU Guard zajišťují ochranu STP proti vnějším vlivům. Pokud je pravděpodobný výskyt útoků, Root Guard a BPDU Guard poskytnou ochranu proti podobným událostem.

 

          Zapněte BPDU Guard na portech se zapnutým portfastem k ochraně STP proti vlivům neautorizovaných síťových zařízení (jako jsou huby, switche, bridging routery), které jsou nebo mohou být k portům připojeny.

Pokud je Root Guard správně nastaven, chrání STP před vlivy zvenčí. Pokud je zapnut BPDU Guard, vypne porty které přijímají jakékoliv BPDU (ne jen nadřazené BPDU). To může být užitečné v případě, že je potřeba vyšetřit bezpečnostní incidenty, protože BPDU generuje syslog zprávy a vypíná porty. Root nebo BPDU Guard nejsou účinné proti krátkodobým smyčkám, pokud jsou napřímo (nebo přes hub) propojeny dva portfast spoje.

 

          Zamezte uživatelskému provozu na management VLANě. Management rozhraní switche přijímá broadcast pakety na management VLANě. Pokud by vznikl výrazný boradcast provoz (např. broadcast storm nebo kvůli chybně fungující aplikaci), CPU switche bude přetíženo, což může způsobit narušení STP operací.

 

          Umístěte napevno STP root a jeho backup.

STP root a backup musí být nakonfigurovány tak, aby bylo v případě selhání možno vytvořit optimální topologii pro každý scénář. Nenechávejte STP prioritu na defaultní hodnotě a zabraňte tak nepředvídatelnému výběru root switche.

 

Zdroje:

http://www.cisco.com/en/US/tech/tk389/tk621/technologies_tech_note09186a0080136673.shtml

 

Technická podpora Cisco:

http://www.cisco.com/cisco/web/support/index.html

 

UDLD:

http://www.cisco.com/en/US/tech/tk389/tk621/technologies_tech_note09186a008009477b.shtml

 

Loop Guard:

http://www.cisco.com/en/US/tech/tk389/tk621/technologies_tech_note09186a0080094640.shtml

 

UDLD versus Loop Guard

http://www.cisco.com/en/US/tech/tk389/tk621/technologies_tech_note09186a0080094640.shtml#loop_guard_vs_uld

 

Zabezpečení sítě proti smyčkám – upozornění k portfast

http://www.cisco.com/en/US/tech/tk389/tk621/technologies_tech_note09186a0080136673.shtml#secure_loops

 

Detekce nekonzistencí EtherChannelu

http://www.cisco.com/en/US/tech/tk389/tk213/technologies_tech_note09186a008009448d.shtml

 

STP časovače

http://www.cisco.com/en/US/tech/tk389/tk621/technologies_tech_note09186a0080094954.shtml

 

Root Guard

http://www.cisco.com/en/US/tech/tk389/tk621/technologies_tech_note09186a00800ae96b.shtml

 

PortFast BPDU Guard

http://www.cisco.com/en/US/tech/tk389/tk621/technologies_tech_note09186a008009482f.shtml