364.4 - HA de Red

Network Bonding

El bonding combina multiples interfaces de red fisicas en una interfaz logica para proporcionar redundancia y/o mayor ancho de banda.

Modos de Bonding

ModoNombreDescripcionRequiere switch
0balance-rrRound Robin: transmite por cada interfaz alternativamenteSi (EtherChannel)
1active-backupUna interfaz activa, las demas en esperaNo
2balance-xorHash de MAC origen/destino para seleccionar interfazSi (EtherChannel)
3broadcastTransmite en todas las interfacesSi
4802.3adLACP (Link Aggregation Control Protocol)Si (LACP)
5balance-tlbBalanceo adaptativo de transmisionNo
6balance-albBalanceo adaptativo de transmision y recepcionNo

Para el examen: El modo 1 (active-backup) es el mas simple y no requiere configuracion del switch. El modo 4 (802.3ad/LACP) ofrece mayor rendimiento pero requiere soporte LACP en el switch.

Configuracion de Bonding

Via archivos de configuracion (RHEL/CentOS)

# /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
TYPE=Bond
BONDING_MASTER=yes
IPADDR=192.168.1.10
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
ONBOOT=yes
BONDING_OPTS="mode=active-backup miimon=100 primary=eth0"
 
# /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
MASTER=bond0
SLAVE=yes
ONBOOT=yes
 
# /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
TYPE=Ethernet
MASTER=bond0
SLAVE=yes
ONBOOT=yes

Via ip y modprobe

# Cargar modulo
modprobe bonding mode=active-backup miimon=100
 
# Configurar bond
ip link add bond0 type bond mode active-backup miimon 100
ip link set eth0 master bond0
ip link set eth1 master bond0
ip addr add 192.168.1.10/24 dev bond0
ip link set bond0 up

Via nmcli (NetworkManager)

# Crear bond
nmcli con add type bond con-name bond0 ifname bond0 \
    bond.options "mode=active-backup,miimon=100,primary=eth0"
 
# Añadir esclavos
nmcli con add type ethernet con-name bond0-eth0 ifname eth0 master bond0
nmcli con add type ethernet con-name bond0-eth1 ifname eth1 master bond0
 
# Configurar IP
nmcli con mod bond0 ipv4.addresses 192.168.1.10/24
nmcli con mod bond0 ipv4.gateway 192.168.1.1
nmcli con mod bond0 ipv4.method manual
 
# Activar
nmcli con up bond0

Parametros de Bonding

ParametroDescripcion
modeModo de bonding (0-6 o nombre)
miimonIntervalo de monitorizacion MII (ms)
primaryInterfaz preferida (modo 1)
lacp_rateslow (30s) o fast (1s) para LACP
xmit_hash_policyPolitica de hash para modos 2 y 4
fail_over_macPolitica de MAC en failover

Monitorizacion del Bond

# Estado del bond
cat /proc/net/bonding/bond0
 
# Via sysfs
cat /sys/class/net/bond0/bonding/mode
cat /sys/class/net/bond0/bonding/slaves
cat /sys/class/net/bond0/bonding/active_slave

Network Teaming

El teaming es la alternativa moderna al bonding en Linux, usando el daemon teamd en espacio de usuario.

Runners (Tipos de Teaming)

RunnerEquivalente BondingDescripcion
broadcastmode 3Transmite en todos los puertos
roundrobinmode 0Round Robin
activebackupmode 1Activo/pasivo
loadbalancemode 2/5/6Balanceo de carga
lacpmode 4LACP 802.3ad

Configuracion con teamd

# Crear team con nmcli
nmcli con add type team con-name team0 ifname team0 \
    config '{"runner": {"name": "activebackup"}, "link_watch": {"name": "ethtool"}}'
 
# Añadir puertos
nmcli con add type team-slave con-name team0-eth0 ifname eth0 master team0
nmcli con add type team-slave con-name team0-eth1 ifname eth1 master team0
 
# Configurar IP
nmcli con mod team0 ipv4.addresses 192.168.1.10/24
nmcli con mod team0 ipv4.gateway 192.168.1.1
nmcli con mod team0 ipv4.method manual
 
# Activar
nmcli con up team0

Configuracion JSON de teamd

{
    "device": "team0",
    "runner": {
        "name": "activebackup",
        "hwaddr_policy": "same_all"
    },
    "link_watch": {
        "name": "ethtool"
    },
    "ports": {
        "eth0": {
            "prio": 100
        },
        "eth1": {
            "prio": 50
        }
    }
}

Administracion con teamdctl

# Ver estado del team
teamdctl team0 state
 
# Ver estado detallado
teamdctl team0 state dump
 
# Ver configuracion
teamdctl team0 config dump
 
# Cambiar puerto activo (activebackup)
teamdctl team0 port disable eth0
teamdctl team0 port enable eth0

Para el examen: teamd es la alternativa moderna a bonding. Los runners son equivalentes a los modos de bonding. teamdctl gestiona el team en tiempo real.

VRRP con Keepalived

VRRP (Virtual Router Redundancy Protocol) permite que multiples routers compartan una IP virtual, proporcionando redundancia del gateway.

Arquitectura VRRP

                    VIP: 192.168.1.1
                         │
         ┌───────────────┼───────────────┐
         │               │               │
  ┌──────┴──────┐ ┌──────┴──────┐ ┌──────┴──────┐
  │   Router 1  │ │   Router 2  │ │   Router 3  │
  │  MASTER     │ │  BACKUP     │ │  BACKUP     │
  │  Prio: 100  │ │  Prio: 90   │ │  Prio: 80   │
  └─────────────┘ └─────────────┘ └─────────────┘

Configuracion de Keepalived para VRRP

# /etc/keepalived/keepalived.conf
 
global_defs {
    router_id LVS_ROUTER1
    vrrp_garp_interval 0
    vrrp_gna_interval 0
}
 
vrrp_script chk_gateway {
    script "/usr/local/bin/check_gateway.sh"
    interval 5
    weight -20          # Reduce prioridad si falla
    fall 3              # Fallos consecutivos para marcar DOWN
    rise 2              # Exitos consecutivos para marcar UP
}
 
vrrp_instance VI_1 {
    state MASTER                # MASTER o BACKUP
    interface eth0              # Interfaz de red
    virtual_router_id 51        # ID unico (0-255)
    priority 100                # Prioridad (mayor = preferido)
    advert_int 1                # Intervalo de anuncios (s)
    nopreempt                   # No recuperar automaticamente
 
    authentication {
        auth_type PASS
        auth_pass secreto123
    }
 
    virtual_ipaddress {
        192.168.1.1/24 dev eth0
    }
 
    track_interface {
        eth0 weight -20        # Reduce prioridad si eth0 cae
        eth1 weight -20
    }
 
    track_script {
        chk_gateway
    }
 
    # Notificaciones
    notify_master "/usr/local/bin/notify.sh master"
    notify_backup "/usr/local/bin/notify.sh backup"
    notify_fault  "/usr/local/bin/notify.sh fault"
}
 
# Segunda instancia VRRP (para segundo gateway)
vrrp_instance VI_2 {
    state BACKUP
    interface eth1
    virtual_router_id 52
    priority 90
    advert_int 1
 
    authentication {
        auth_type PASS
        auth_pass secreto456
    }
 
    virtual_ipaddress {
        10.0.0.1/24 dev eth1
    }
}

Parametros VRRP Importantes

ParametroDescripcion
stateEstado inicial: MASTER o BACKUP
interfaceInterfaz para anuncios VRRP
virtual_router_idID unico del router virtual (0-255)
priorityPrioridad (1-254, mayor = preferido)
advert_intIntervalo de anuncios en segundos
nopreemptNo recuperar el rol MASTER automaticamente
preempt_delayTiempo de espera antes de preempt
track_interfaceInterfaces a monitorizar
track_scriptScripts de monitorizacion
virtual_ipaddressIPs virtuales

Para el examen: VRRP usa multicast 224.0.0.18 y protocolo IP 112. El virtual_router_id debe ser unico en la red. El nodo con mayor priority activa se convierte en MASTER.

Multiples Gateways Predeterminados

Para tener redundancia de salida a Internet con multiples ISPs:

# Crear tablas de enrutamiento personalizadas
echo "100 isp1" >> /etc/iproute2/rt_tables
echo "200 isp2" >> /etc/iproute2/rt_tables
 
# Reglas de enrutamiento por origen
ip rule add from 192.168.1.0/24 table isp1
ip rule add from 10.0.0.0/24 table isp2
 
# Rutas en cada tabla
ip route add default via 192.168.1.1 table isp1
ip route add default via 10.0.0.1 table isp2
 
# Ruta predeterminada con multiples nexthops (balanceo)
ip route add default \
    nexthop via 192.168.1.1 weight 1 \
    nexthop via 10.0.0.1 weight 1

Network Namespace Failover

Los network namespaces permiten aislar pilas de red completas, util para failover de servicios:

# Crear namespace
ip netns add ns_servicio
 
# Crear par veth
ip link add veth0 type veth peer name veth1
 
# Mover interfaz al namespace
ip link set veth1 netns ns_servicio
 
# Configurar en el namespace
ip netns exec ns_servicio ip addr add 192.168.100.1/24 dev veth1
ip netns exec ns_servicio ip link set veth1 up
ip netns exec ns_servicio ip link set lo up
 
# Ejecutar proceso en el namespace
ip netns exec ns_servicio /usr/sbin/nginx
 
# Listar namespaces
ip netns list
 
# Migrar interfaz entre namespaces (failover)
ip link set eth2 netns ns_servicio

Comparativa Bonding vs Teaming

AspectoBondingTeaming
EspacioKernelUserspace (teamd)
ModularidadMonoliticoModular (runners)
Monitorizacionmiimon, arp_intervalethtool, arp_ping, nsna_ping
IPv6 link-localNoSi (nsna_ping)
D-BusNoSi
JSON configNoSi
Max interfacesIlimitadoIlimitado
LatenciaMenor (kernel)Mayor (userspace)

Trampas del examen

Errores comunes y distinciones criticas que LPI suele evaluar en este subtema:

  • Bonding modo 1 (active-backup) no requiere configuracion del switch — los modos 0, 2, 3 y 4 requieren soporte en el switch (EtherChannel o LACP). El modo 1 funciona con cualquier switch porque solo una interfaz esta activa. El examen pregunta que modo usar cuando no se puede configurar el switch: modo 1
  • Bonding modo 4 (802.3ad/LACP) requiere soporte LACP en el switch — si el switch no soporta LACP, el modo 4 no funciona y las interfaces no se agregan. El examen puede presentar un bond modo 4 que no funciona: la causa suele ser que el switch no tiene LACP habilitado
  • miimon vs arp_intervalmiimon detecta caida del enlace fisico (cable desconectado); arp_interval detecta caida del enlace logico (ping a un gateway). Si un switch intermedio falla pero el enlace fisico sigue activo, solo arp_interval lo detecta. El examen puede preguntar cuando usar cada uno
  • Teaming (teamd) vs Bonding: userspace vs kernel — bonding opera en el kernel (menor latencia); teaming usa teamd en userspace (mas flexible, configuracion JSON, D-Bus). El examen puede preguntar la diferencia principal: bonding es kernel, teaming es userspace
  • VRRP virtual_router_id unico por red — dos instancias VRRP en la misma LAN con el mismo virtual_router_id interfieren entre si. Cada servicio VRRP necesita un ID diferente (0-255). El examen puede presentar dos servicios VRRP que fallan: verifica que los IDs no colisionen
  • nopreempt evita flapping — sin nopreempt, un nodo MASTER que se recupera de un fallo retoma inmediatamente el rol, provocando otra migracion de la VIP. Con nopreempt, el BACKUP que tomo el control lo mantiene hasta que falle. El examen puede preguntar como evitar failback automatico
  • track_script weight negativo reduce prioridad — un vrrp_script con weight -20 reduce la prioridad efectiva del nodo si el script falla. Si la prioridad cae por debajo del BACKUP, se produce failover. El examen puede pedir calcular la prioridad efectiva: priority + weight cuando el script falla
  • ip route con nexthop para balanceo multi-ISP — usar ip route add default nexthop via GW1 weight 1 nexthop via GW2 weight 1 distribuye trafico entre dos ISPs. Las tablas de enrutamiento personalizadas (/etc/iproute2/rt_tables) permiten routing por origen. El examen puede preguntar como configurar failover entre dos ISPs
  • Bonding: /proc/net/bonding/bond0 muestra el estado completo — este archivo muestra modo, interfaz activa, estado de cada slave, MII status, velocidad y errores. Es el comando principal para diagnosticar problemas de bonding. El examen puede pedir como verificar que interfaz esta activa
  • teamdctl vs nmcli para gestionar teamingteamdctl team0 state muestra el estado en tiempo real del team; nmcli gestiona la configuracion persistente. Para diagnostico rapido se usa teamdctl, para configuracion permanente se usa nmcli