Configurar Keepalived en modo Unicast en lugar de Multicast

Por defecto, Keepalived siempre funciona en modo multicast, es decir, un emisor (Master) envía un mensaje VRRP y son uno o varios los receptores (Backups/Slaves) que reciben el mismo. Como si fuera una conferencia, una comunicación de uno a varios.

En el caso de que nos encontremos en una infraestructura de red que no permita la comunicación Multicast, será necesario hacer el cambio a Unicast, de modo que la comunicación entre nodos sea de uno a uno y directa.

Importante indicar que Keepalived permite establecer el tráfico VRRP por Unicast a partir de la versión 1.2.8 (es vieja ya, así que no debería ser problema).

Ejemplo de comunicación VRRP por multicast:

15:45:20.455857 IP 192.168.33.183 > vrrp.mcast.net: VRRPv2, Advertisement, vrid 50, prio 100, authtype simple, intvl 3s, length 28
15:45:23.460853 IP 192.168.33.183 > vrrp.mcast.net: VRRPv2, Advertisement, vrid 50, prio 100, authtype simple, intvl 3s, length 28
15:45:26.465665 IP 192.168.33.183 > vrrp.mcast.net: VRRPv2, Advertisement, vrid 50, prio 100, authtype simple, intvl 3s, length 28
15:45:29.460852 IP 192.168.33.183 > vrrp.mcast.net: VRRPv2, Advertisement, vrid 50, prio 100, authtype simple, intvl 3s, length 28

Para pasar a Unicast, es necesario especificar en cada uno de los nodos de keepalived, quien es el PEER con el que se va a comunicar. En un entorno de dos nodos (Master/Backup), es sencillo, pues se comunicarán el único con el otro. Estableceremos la configuración dentro del bloque VRRP correspondiente

Nodo 1:

vrrp_instance foo {
   interface eth0
 
   state MASTER           
   virtual_router_id 10
   priority 50
 
   unicast_src_ip 10.0.0.200   
   unicast_peer {              
     10.0.0.100
   }
 
   virtual_ipaddress {    
     10.0.0.5 dev eth0
   }
 }

Nodo 2:

vrrp_instance foo {
   interface eth0
 
   state BACKUP
   virtual_router_id 10
   priority 100
 
   unicast_src_ip 10.0.0.100   
   unicast_peer {              
     10.0.0.200
   }
 
   virtual_ipaddress {    
     10.0.0.5 dev eth0
   }
 }

Como veis, es tan sencillo como especificar:

  • unicast_src_ip: IP/interfaz del nodo por la que se transimitirá el tráfico Unicast
  • unicast_peer: IP del Peer

Tras reiniciar Keepalived en ambos nodos, si analizamos el tráfico de red veremos que ya no hay tráfico Multicast para VRRP:

# tcpdump -vvv -n -i eth0 host 224.0.0.18