Spanning Tree Protocol: 3 - Protegiendo la topología

Controla donde pueden encontrarse y conectarse los Root Bridge candidatos. Básicamente un switch aprende el Bridge ID del Root Bridge actual. Si otro switch anuncia una BPDU superior o con mejor Bridge ID en un puerto donde está configurado Root Guard, el switch local no permite que el nuevo switch sea el Root Bridge. Mientras se sigan recibiendo BPDUs con mejor Bridge Id el puerto se mantendrá en el estado root-inconsistent de STP. No se envía ni recibe datos en este estado solo escucha BPDUs. Cuando deja de recibir sus BPDUs entonces pasa por los estados de STP normales hasta el Forwarding de forma automática.

Root Guard designa que un puerto solo puede enviar o re-enviar BPDUs, pero no puede usarse para recibir BPDUs. Por lo que previene que un puerto sea Root Port por donde normalmente se reciben BPDUs desde el Root Bridge.

Por defecto, Root Guard está desactivado en todos los interfaces del switch.

Para configurarlo se debe hacer en cada puerto con el siguiente comando:

Switch(config-if)# spanning-tree guard root

Para ver que puertos están es estado root-inconsistent podemos usar este comando:

Switch# show spanning-tree inconsistentports

Se deb usar Root Guard en los puertos del switch donde nunca esperará encontrar un Root Bridge para una VLAN. De hecho, Root Guard afecta a todo el puerto para que nunca se pueda permitir un Root Bridge en ninguna VLAN en el puerto. Cuando se escucha un BPDU superior en el puerto, el puerto completo se bloquea.

Protege la integridad de los puertos que tiene activado PortFast. Si se recibe una BPDU en un puerto donde está configurado con BPDU Guard ese puerto se pone inmediatamente en estado errdisable. Si se deja de recibir las BPDUs el puerto sigue en el estado errdisable. El puerto se pone en shutdown y DEBE ser activado manualmente o automáticamente usando el comando errdisable recovery.

Por defecto, BPDU Guard está desactivado en todos los interfaces del switch.

Podemos configurarlo de forma global que solo afectará a los puertos que estén con PortFast:

Switch(config)# spanning-tree portfast bpduguard default

También se puede activar o desactivar (en caso de que esté globalmente activado) en cada puerto con el comando:

Switch(config-if)# [no] spanning-tree bpduguard enable

Se debe usar BPDU Guard en todos los puertos del switch donde está habilitado STP PortFast. Esto evita cualquier posibilidad de que se agregue un switch al puerto, ya sea intencionalmente o por error. Sobre todo es conveniente configurar BPDU Guard en puertos de switch de capa de acceso.

Mantiene la pista de la actividad de BPDUs en puertos nondesignated. Mientras se reciben BPDUs se permite que el puerto funcione normalmente, pero cuando se dejan de recibir las BPDUs, Loop Guard, pasa el puerto al estado de loop-inconsistent. El puerto sigue bloqueado en este punto para prevenir bucles y que siga como nondesignated. Cuando se vuelven a recibir BPDUs por el puerto,  Loop Guard hace que el puerto pase por los estados de STP hasta que quede en Forwarding.

Por defecto Loop Guard está desactivado en todos los puertos y lo podemos activar globalmente con el siguiente comando:

Switch(config)# spanning-tree loopguard default

Y para activarlo o desactivarlo en un puerto concreto podemos usar el comando:

Switch(config-if)# [no] spanning-tree guard loop

Aunque Loop Guard se activa en un puerto solo bloquea la Vlan por donde se dejan de recibir BPDU no el puerto completo.

Por lo general la unión entre switches es bidireccional, pero en algún extraño caso puede pasar que falla el circuito de transmisión (en un GBIC o SFP) lo cual para los switches es un enlace bidireccional, pero el tráfico solo va en un sentido, lo que se conoce como enlace unidireccional.

UniDirectional Link Detection (UDLD) monitoriza un puerto para ver si realmente es bidireccional. El switch envía una trama espacial de Capa 2 UDLD identificando su puerto a intervalos regulares que se puede configurar, pero por defecto son 15 segundos. UDLD espera que el switch del otro extremo responda esas tramas por el mismo enlace con su propia identificación añadida. Si la comunicación se mantiene el enlace se considera bidireccional si no se considera unidireccional.

Hay dos modos de operación:

  • Modo Normal: cuando se detecta un enlace unidireccional el puerto continua normal y UDLD simplemente marca el puerto con estado indeterminado y genera un mensaje de syslog.
  • Modo Agresivo: cuando se detecta un enlace unidireccional el switch envía mensajes UDLD cada segundo durante 8 segundos, si ninguno de esos mensajes se responden, el puerto se pasa al estado errdisabled con lo que deja de transmitir tráfico.

Por defecto, UDLD está desactivado en todos los interfaces del switch.

UDLD puede configurarse de forma global (aunque solo afecta a los puertos de fibra óptica):

Switch(config)# udld {enable | aggressive | message time seconds}

Para modo normal usaremos enable y para modo agresivo aggressive y podemos indicar el intervalo de los mensajes.

También podemos configurarlo por cada puerto:

Switch(config-if)# udld {enable | aggressive | disable}

Para modo normal usaremos enable y para modo agresivo aggressive y podemos indicar disable para desactivar UDLD en un interface de fibra óptica.

Una vez que el modo agresivo UDLD haya puesto un puerto de switch en el estado errdisable, se debe usar el siguiente comando para volver a habilitarlo:

Switch# udld reset

Siempre se debe usar STP para evitar bucles, pero en ciertos casos se puede necesitar evitar el envío o proceso de BPDUs en uno o varios puertos para ello podemos usar el filtro de BPDUs que deshabilita el STP en dichos puertos. Por defecto, evidentemente, está desactivado este filtro, pero podemos activarlo tanto globalmente como a nivel de interface.

Para activarlo globalmente aunque SOLO afectará a los puertos configurados como PortFast:

Switch(config)# spanning-tree portfast bpdufilter default

Con esto activamos el filtro de BPDUs en TODOS los puertos que estén configurados como PortFast, los puertos que no estén configurados con PortFast no se activa el filtro de BPDUs.

Para activar o desactivar ciertos puertos concretos:

Switch(config-if)# spanning-tree bpdufilter {enable | disable}

Con esto activamos el filtro de BPDUs en el puerto que esté configurados como PortFast, los puertos que no estén configurados con PortFast no se activa el filtro de BPDUs.

Es muy importante activar el filtro de BPDUs en puertos que sepamos que sean un dispositivo, que sea imposible generar un bucle y NUNCA este dispositivo va a aceptar o enviar BPDUs, ya que si no, se permitirá funcionar el STP con normalidad.

IMPORTANTE: Si se ven BPDUs el puerto pierde su estado de PortFast, BPDU filtering se deshabilita y STP toma el control por defecto. Cuando el puerto se levanta (UP) envía 10 BPDUs, si escucha cualquier BPDU durante ese periodo, PortFast y el filtro BPDU se deshabilitan.

NOTA: si se habilita BPDU Guard y BPDU Filtering en la misma interface, BPDU Guard no tiene efecto ya que BPDU Filtering tiene preferencia.

Consejo: No confundir el filtrado de BPDU (BPDU Filter) con la función BPDU Guard. BPDU Guard se usa para detectar BPDUs de entrada en puertos donde no se espera que se vean las BPDUs, por lo que se protege la estabilidad del STP impidiendo que se procesen esas BPDU. Por contra, el filtrado de BPDU (BPDU Filter) impide que todas las BPDU se reciban o se envíen en un puerto de switch, lo que desactiva efectivamente el STP.

Muestra un listado con los puertos que están etiquetados en estado inconsistente:

Switch# show spanning-tree inconsistentports

Para ver información detallada de las razones del estado inconsistente de un puerto:

Switch# show spanning-tree interface type mod/num [detail]

Muestra los estados globales de BPDU Guard, BPDU filter y Loop Guard

Switch# show spanning-tree summary

Muestra el estado UDLD de uno o todos los puertos:

Switch# show udld [type mod/num]

Vuelve a habilitar los puertos que UDLD en modo agresivo puso en errdisable:

Switch# udld reset
  • Root Guard: se aplica a puertos donde NO se espera un Root Bridge, bloquea el puerto pero se reactiva automaticamente cuando deja de recibir la BPDU con mejor prioridad
  • BPDU Guard: se aplica a todos los puertos donde el está activado PortFast, deshabilita la interfaz portfast al recibir una BPDU, dejando la interfaz en errdisable. Previene de recibir BPDU.
  • BPDU Filter: Previene de enviar y recibir BPDU. Para el spanning-tree en el interface.
  • Loop Guard: se aplica a los puertos no designados (nondesignated) pero no hay problema en aplicarlo a todos los puertos.
  • UDLD: se aplica a todos los enlaces de fibra óptica entre switches, se dede configurar en ambos extremos.
  • Combinaciones permisibles en un puerto de switch:
    • Loop Guard y UDLD
    • Root Guard y UDLD
  • Combinaciones NO permisibles en un puerto de switch:
    • Loop Guard y Loop Guard
    • Root Guard y BPDU Guard

Retro

Lugares

Redes

Sistemas

Varios