CCNP SWITCH 9: Protegiendo la topología de Spanning-tree

Protegiendo contra BPDUs inesperados

Root Guard

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.

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

BPDU Guard

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.

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

Protección contra pérdida repentina de BPDUs

Loop Guard

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.

UDLD

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 se envían mensajes UDLD cada segundo durante 8 segundos, si ninguno de esos mensajes se responden el puerto se pasa al estado errdisabled.

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

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

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 el intervalo de los mensajes.

Usando el filtro de BPDUs para desactivar STP en un puerto.

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 configura TODOS los puerto sPortFast con el filtro de BPDUs. 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.

Para activar o desactivar ciertos puertos concretos:

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

Ignora todas la BPDUs que recibe. No transmite BPDUs.

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

Solución de problemas con la protección de 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

Retro

Lugares

Redes

Sistemas

Varios