CCNP SWITCH 13: Alta disponibilidad en Capa 3

Redundancia en switches multicapa

Hot Standby Router Protocol (HSRP)

HSRP es un protocolo propietario de Cisco para permitir que varios router o switches multicapa aparezcan como una única puerta de salida (gateway). RFC 2281 para información detallada del mismo.

Cada router que ofrece redundancia para una dirección de gateway se asigna a un grupo HSRP común, de los cuales un router se elige como primario o activo (active), otro como pasivo o secundario (standby) y el resto permanecen como el estado de escucha (listen). Entre los routers se intercambian mensajes hello a intervalos regulares, a la dirección multicast 224.0.0.2 usando el puerto 1985 UDP, para que comprobar la existencia los otros routers y sobre todo del router activo.

Elección del router HSRP

La elección del router activo HSRP está basado en la prioridad asignada que puede ir de 0 a 255 (siendo 255 la máxima prioridad) que por defecto está en 100. Si todos los routers tienen la misma prioridad entonces se usa el router con la dirección IP más alta. El grupo HSRP puede asignarse con un número que va desde 0 a 255. Para configurar la prioridad usamos el comando:

Switch(config-if)# standby group priority priority

Cuando se configura el HSRP el router pasa por ciertos estado hasta que se vuelve activo, lo que permite al router escuchar a los otros routers del mismo grupo. Los estados por los que debe pasar son:

  1. Disabled
  2. Init
  3. Listen
  4. Speak
  5. Standby
  6. Active

Por defecto los mensajes hello se envían cada 3 segundos, si no se reciben mensajes hello durante el periodo de tiempo indicado por holdtime (por defecto 10 segundos o 3 veces el tiempo de envío de los mensajes hello), se asume que el router activo está caído por lo que el router en standby toma el papel de activo.

Para cambiar los intervalos tanto de los mensajes hello como del holdtime podemos usar el comando:

Switch(config-if)# standby group timers [msec] hello [msec] holdtime

Normalmente cuando el router activo falla y el router standby se convierte en activo, cuando se recupera el router que era activo no puede volver a ser el router activo inmediatamente. Dicho de otra manera, si un router no es activo, no puede ser activo hasta que el actual router activo falla aunque éste (el que no es activo) tenga mayor prioridad que el router activo actual. Como caso curioso cuando los routers se encienden o se añaden a la red, el primero router que levanta su interface se convierte en el router activo HSRP incluso aunque su prioridad sea la más baja de todos los routers del grupo HSRP.

Podemos cambiar esta situación y que un router asuma el estado de activo (siempre que su prioridad sea la más alta) cuando se recupera o reinicia utilizando el parámetro peempt con este comando:

Switch(config-if)# standby group preempt [delay [minimum seconds] [reload seconds]]

Autenticación HSRP en plano

Los mensajes HSRP son enviados usando una clave en texto plano (que puede ser interceptada fácilmente) de hasta 8 caracteres. Para configurar esta clave usamos el comando:

Switch(config-if)# standby group authentication string

Autenticación MD5

Para reforzar la seguridad podemos usar claves en MD5 que son suficientemente fuertes y la configuramos con el comando:

Switch(config-if)# standby group authentication md5 key-sting [0 | 7] string

Concediendo la elección

HSRP tiene un mecanismo para detectar fallos de enlaces que permite cambiar la prioridad del router haciendo de este modo que pueda (o no) cambiar el estado, para ello podemos usar el comando:

Switch(config-if)# standby group track type mod/num [decrementvalue]

El valor por defecto de decrementvalue es de 10. Hay que tener en cuenta que este comando NO hace que cambie el estado del router solo decrementa la prioridad cuando un enlace falla y recupera el valor cuando el enlace vuelve a estar disponible.

Asignando direcciones al HSRP

Cada router del grupo HSRP tiene su propia y única dirección IP asignada al interface y además tienen una dirección IP común que es la puerta de salida (gateway) también llamada “dirección virtual del router (virtual router address)”. Para asigna esta IP virtual usamos el comando:

Switch(config-if)# standby group ip ip-address [secondary]

Podemos añadir el parámetro “secondary” para agregar una segunda IP y así tener una puerta de salida (gateway) redundado.

Cada router tiene una única dirección MAC para su interface que es asociada a una dirección IP única. Para la dirección virtual HSRP define una dirección MAC especial con el formato 0000.00c7.acXX, donde XX es el número de grupo HSRP (en hexadecimal).

Balanceo de carga con HSRP

HSRP no soporta balanceo de carga pero se puede usar un truco que es dividir los servidores en 2 grupos y que cada grupo tenga una puerta de salida que ambas se configuran en los dos router pero con prioridad contraria para que así un grupo de servidores sale por un router y el otro por el otro router, si alguno de los dos routers falla el otro router asume ambos grupos que salen por el mismo y único router (al estar el otro caído).

Un ejemplo sería:

SwitchA(config)# interface vlan 69
SwitchA(config-if)# ip address 192.168.69.3 255.255.255.0
SwitchA(config-if)# standby 1 priority 200
SwitchA(config-if)# standby 1 preempt
SwitchA(config-if)# standby 1 ip 192.168.69.1
SwitchA(config-if)# standby 1 authentication clave
SwitchA(config-if)# standby 2 priority 100
SwitchA(config-if)# standby 2 ip 192.168.69.2
SwitchA(config-if)# standby 2 authentication clave

SwitchB(config)# interface vlan 69
SwitchB(config-if)# ip address 192.168.69.4 255.255.255.0
SwitchB(config-if)# standby 1 priority 100
SwitchB(config-if)# standby 1 ip 192.168.69.1
SwitchB(config-if)# standby 1 authentication clave
SwitchB(config-if)# standby 2 priority 200
SwitchB(config-if)# standby 2 preempt
SwitchB(config-if)# standby 2 ip 192.168.69.2
SwitchB(config-if)# standby 2 authentication clave

Protocolo de Redundancia de Router Virtual (VRRP)

VRRP (Virtual Router Redundancy Protocol) es un estándar que surge como alternativa a HSRP que está definido por IETF en el RFC 2338. Ambos protocolos son similares.

VRRP ofrece dirección de la puerta de salida (gateway) redundante para un grupo de routers. El router activo se llama router maestro (master router) y es el que tiene mayor prioridad, mientras que los otros están en estado de backup (backup state). El número de grupo va de 0 a 255 y la prioridad va de 1 a 254 (siendo la más alta) y por defecto es de 100.

La dirección virtual MAC es de la forma 0000.5e00.01XX, donde XX son los 3 dígitos en hexadecimal del número de grupo VRRP. Los mensajes son enviados cada 1 segundo. Por defecto todos los routers VRRP están configurados para asumir el papel de master (siempre que tenga la mayor prioridad) lo que se llama preempt. Y Al contrario que HSRP, VRRP no tiene forma de monitorizar interfaces.

Gateway Load Balancing Protocol (GLBP)

Gateway Load Balancing Protocol (GLBP) es un protocolo propietario de Cisco diseñado para ofrecer balanceo de carga sin la limitaciones de HSRP (o VRRP). Al contrario que HSRP todos los routers están activos con lo cual el balanceo de carga se cumple entre todos los routers del grupo.

Puerta de salida virtual activa (Active Virtual Gateway – AVG)

Uno de los routers del grupo GLBP, el que tenga mayor prioridad o en su defecto la IP más alta, es elegido como puerta de salida virtual activa (Active Virtual Gateway – AVG). El cometido del AVG es responder a todas las peticiones ARP de los servidores que llegan a la dirección del router virtual, luego dependiendo del algoritmo que se use este router AVG responderá con la MAC del router que corresponda al cual se enviarán los paquetes.

El router AVG asigna las direcciones MAC virtuales de cada router que participe en el grupo GLBP hasta un máximo de 4 direcciones MAC. Cada uno de estos 4 routers se llaman Active Virtual Forwarder (AVF). En caso de que haya más routers en el grupo GLBP se mantienen en backup o secundarios por si algún AVF falla y tenga que sustituirlo.

Para asignar la prioridad a un router en un grupo GLBP:

Switch(config-if)# glbp group priority level

El número de grupo GLBP va de 0 a 1023 y la prioridad de 1 a 255 (siendo 255 la máxima prioridad) que por defecto es de 100.

Al igual que el HSRP es necesario configurar el preempt para que un ruoter con mayor prioridad asuma su papel (en este caso de AVG), para ello usamos el comando:

Switch(config-if)# glbp group preempt [delay minimum seconds]

Los mensajes hello se envían cada 3 segundos y en caso de que no se reciban durante un periodo de tiempo indicado por holdtime (que por defecto son 10 segundos) se considera que el router está caído. Para ajustar estos valores:

Switch(config-if)# glbp group timers [msec] hellotime [msec] holdtime

Los valores se asignan en segundo a menos que se especifique el parámetro msec entonces se indican en mili segundos. hellotime va de 1 a 60 segundos o de 50 a 60.000 mili segundos. holdtime debe ser mayor que hellotime y puede ir hasta 180 segundos o 180.000 mili segundos. Al igual que HSRP holdtime debe ser al menos tres veces mayor que hellotime.

Active Virtual Forwarder

NOTA: ampliar

Ajustar los temporizadores:

Switch(config-if)# glbp group timers redirect redirect timeout

Para definir la interface a comprobar:

Switch(config)# track object-number interface type mod/num {line-protocol | ip routing}

Para ajustar los pesos:

Switch(config-if)# glbp group weighting maximum [lower lower] [upper upper]

Indicar el objeto para que se ajuste los pesos:

Switch(config-if)# glbp group weighting track object-number [decrement value]

Cuando el objeto comprobado falla se decrementa la cantidad indicado por value (que va de 1 a 254 y por defecto es 10).

Balanceo de Carga GLBP

Se pueden configurar uno de estos métodos de balanceo de carga:

  • Round robin: cada nueva petición ARP se asigna la siguiente dirección de MAC disponible a modo circular, con esto se consigue distribuir la carda de igual forma a cada AVF asumiendo que los cliente envían y reciben la misma cantidad de tráfico. Este método es usado por defecto.
  • Weighted: el peso asignado a la interface del grupo GLBP determina la proporción de tráfico que se envía a cada AVF, cuanto mayor sea el peso más tráfico se envía a ese router. Si la comprobación de interface no se ha configurado, el valor máximo de peso se utiliza para establecer las proporciones relativas entre los AVFs.
  • Host dependent: cada petición ARP de los clientes se le asigna la misma dirección MAC con lo que cada cliente tiene la misma dirección MAC de salida (la del AVF asignado).

Para configurar el método de balanceo:

Switch(config-if)# glbp group load-balancing [round-robin | weighted | host-dependent]

Activando GLBP

Para activar GLBP se debe asignar una dirección IP virtual al grupo con el comando:

Switch(config-if)# glbp group ip [ip-address [secondary]]

Si no se indica la dirección IP se aprende de otro router del grupo. Si por el contrario este router va a ser el AVG se debe configurar la IP explícitamente.

Redundancia del procesador de rutas y la supervisora

Los protocolos HSRP, VRRP y GLBP ofrecen redundancia para la dirección de la puerta de salida (gateway) pero si alguno de los dispositivos que ofrecen esta dirección falla debemos tener otros dispositivos para que sigan ofreciendo la redundancia y no se queda un solo dispositivo. Pero también podemos redundar la supervisora del dispositivo para que en caso de que falle no haya problema con lo que se consigue doble redundancia.

Supervidora del switch redundante

Podemos usar estos modos de redundancia en un switch Catalyst:

  • Route processor redundancy (RPR): la supervisora redundante solo se inicializa en parte y solo cuando la supervisora activa falla, se recargan los módulos del switch e inicializa el resto de funciones.
  • Route processor redundancy plus (RPR+):  La supervisora redundante se inicializa la supervisora por completo así como el motor de enrutado (route engine) pero no la funciones de Capa 2 ni Capa 3. Cuando la supervisora activa falla, se terminan de inicializar los módulos pero NO se reinicia los módulos del switch, lo que permite mantener el estado a los puertos.
  • Stateful switchover (SSO): La supervisora redundante es completamente inicializada y tanto las configuraciones running y startup son sincronizadas entre las supervisoras. La información de la Capa 2 se mantiene en ambas supervidoras por lo que el hardware de conmutado funciona incluso durante el fallo. También se mantiene el estado de las interfaces en ambas supervisoras por lo tanto los enlaces no pierden enlace durante el fallo.

Para configurar la redundancia de la supervisora primero entramos en el modo redundancia y luego activamos el modo con estos 2 comandos:

Router(config)# redundancy
Router(config-red)# mode {rpr | rpr-plus | sso}

Y para ver el modo y estado de la redundancia:

Router# show redundancy states

Configurar la sincronización de la supervisora

Por defecto la supervisora activa sincroniza su configuración startup y los valores de los registros pero se pueden especificar otra información a sincronizar:

Router(config)# redundancy
Router(config-red)# main-cpu
Router(config-r-mc)# auto-sync {startup-config | config-register | bootvar}

Nonstop Forwarding (NFS)

Además de la redundancia SSO (en Catalyst 4500R y 6500) podemos activa Nonstop Forwarding que es un método que reconstruye rápidamente la tabla de Routing Information Base (RIB) cunado se conmutan las supervisoras. La tabla RIB se usa para generar la tabla FIB para CEF la cual se descarga a cualquier módulo de switch o hardware que ofrece CEF.

Para activar Nonstop Forwarding (NFS) en el protocolo BGP:

Router(config)# router bgp as-number
Router(config-router)# bgp graceful-restart

Para activar Nonstop Forwarding (NFS) en el protocolo EIGRP:

Router(config)# router eigrp as-number
Router(config-router)# nsf

Para activar Nonstop Forwarding (NFS) en el protocolo OSPF:

Router(config)# router ospf process-id
Router(config-router)# nsf

Para activar Nonstop Forwarding (NFS) en el protocolo IS-IS:

Router(config)# router isis [tag]
Router(config-router)# nsf [cisco | ietf]
Router(config-router)# nsf interval [minutes]
Router(config-router)# nsf t3 {manual [seconds] | adjacency}
Router(config-router)# nsf interface wait seconds