MP-BGP (Multiprotocol BGP) extiende BGP para transportar múltiples familias de direcciones (IPv4, IPv6, VPNv4, etc.) sobre las mismas sesiones. Cada familia se configura en su propia sección address-family, y cada vecino debe activarse por familia.

Familias de direcciones principales

  • ipv4 unicast — la familia por defecto, el BGP clásico.
  • ipv6 unicast — rutas IPv6, la más común después de IPv4.
  • vpnv4 / vpnv6 — para MPLS L3VPN (rutas de clientes en VPN).
  • l2vpn evpn — para VXLAN en data centers.

La sintaxis es la misma para todas; solo cambia la familia declarada.

El caso más común es correr IPv4 e IPv6 juntos (dual stack). El método recomendado es usar sesiones separadas por familia. Dos sesiones TCP separadas entre los mismos routers: una IPv4 sobre transporte IPv4, otra IPv6 sobre transporte IPv6. Cada familia viaja por su propia sesión.

Configuración

Desactiva la activación automática en IPv4 unicast

  • Comando: R1(config-router)# no bgp default ipv4-unicast

Obliga a activar explícitamente cada vecino en cada familia, evitando activaciones accidentales.

Recomendado

Usar siempre no bgp default ipv4-unicast en configuraciones MP-BGP. La activación explícita por familia es más limpia y evita activaciones accidentales.

Configura el Router ID manualmente

  • Comando: R1(config-router)# bgp router-id <ipv4-address>
  • Ejemplo: R1(config-router)# bgp router-id 1.1.1.1

El Router ID es único por proceso BGP (no por familia). Conviene fijarlo para que no dependa de qué interfaces existan.

Declara ambos vecinos (fuera de las address-family)

  • Comando: R1(config-router)# neighbor <ip-peer-v4> remote-as <as>

  • Comando: R1(config-router)# neighbor <ipv6-peer> remote-as <as>

  • Ejemplo: R1(config-router)# neighbor 10.0.0.2 remote-as 200

  • Ejemplo: R1(config-router)# neighbor 2001:DB8::2 remote-as 200

Activa cada vecino solo en su familia

  • Comando:
R1(config-router)# address-family ipv4 unicast
R1(config-router-af)# neighbor <ip-peer-v4> activate
R1(config-router-af)# network <red-v4> mask <máscara>
R1(config-router-af)# exit-address-family

R1(config-router)# address-family ipv6 unicast
R1(config-router-af)# neighbor <ipv6-peer> activate
R1(config-router-af)# network <red-v6>/<longitud>
R1(config-router-af)# exit-address-family
  • Ejemplo:
R1(config-router)# address-family ipv4 unicast
R1(config-router-af)# neighbor 10.0.0.2 activate
R1(config-router-af)# network 192.0.2.0 mask 255.255.255.0
R1(config-router-af)# exit-address-family

R1(config-router)# address-family ipv6 unicast
R1(config-router-af)# neighbor 2001:DB8::2 activate
R1(config-router-af)# network 2001:DB8:AAAA::/48
R1(config-router-af)# exit-address-family

La sesión con el vecino es una sola, pero se activa por cada familia que quieras intercambiar (neighbor <ip> activate dentro de la address-family).

Ejemplo

R1 (AS 100) peerea con R2 (AS 200) en dual stack

R1(config)# router bgp 100
R1(config-router)# no bgp default ipv4-unicast
R1(config-router)# bgp router-id 1.1.1.1

R1(config-router)# neighbor 10.0.0.2 remote-as 200          
R1(config-router)# neighbor 2001:DB8::2 remote-as 200       

R1(config-router)# address-family ipv4 unicast
R1(config-router-af)# neighbor 10.0.0.2 activate
R1(config-router-af)# network 192.0.2.0 mask 255.255.255.0
R1(config-router-af)# exit-address-family

R1(config-router)# address-family ipv6 unicast
R1(config-router-af)# neighbor 2001:DB8::2 activate
R1(config-router-af)# network 2001:DB8:AAAA::/48
R1(config-router-af)# exit-address-family
R2(config)# router bgp 200
R2(config-router)# no bgp default ipv4-unicast
R2(config-router)# bgp router-id 2.2.2.2

R2(config-router)# neighbor 10.0.0.1 remote-as 100          
R2(config-router)# neighbor 2001:DB8::1 remote-as 100       

R2(config-router)# address-family ipv4 unicast
R2(config-router-af)# neighbor 10.0.0.1 activate           
R2(config-router-af)# network 203.0.113.0 mask 255.255.255.0
R2(config-router-af)# exit-address-family

R2(config-router)# address-family ipv6 unicast
R2(config-router-af)# neighbor 2001:DB8::1 activate        
R2(config-router-af)# network 2001:DB8:BBBB::/48
R2(config-router-af)# exit-address-family

Cómo se vería la topología completa (con las redes internas):

[192.0.2.0/24]           Sesion IPv4            [203.0.113.0/24]
[2001:DB8:AAAA::/48]  === (10.0.0.x) ===        [2001:DB8:BBBB::/48]
        \                                              /
         R1 ========================================= R2
        AS 100          Sesion IPv6              AS 200
                        (2001:DB8::x)

El Router ID es único por proceso

El Router ID es único por proceso BGP, no por familia. Se configura una vez y aplica a todas. Si BGP no tiene interfaces IPv4 para elegirlo automáticamente, hay que configurarlo manualmente con bgp router-id.

El patrón clave

El peer IPv4 (10.0.0.2) se activa solo en la familia IPv4, y el peer IPv6 (2001:DB8::2) solo en la familia IPv6. Cada uno en su sesión y su familia. Eso es lo que no bgp default ipv4-unicast hace posible y limpio.

Verificación

  • Ver la tabla BGP de una familia específica: R1# show bgp ipv6 unicast

  • Ver el resumen de sesiones de una familia R1# show bgp ipv6 unicast summary

  • Confirmar que un vecino está activado en la familia: R1# show bgp ipv6 unicast neighbors <ip-peer>

Si un vecino no aparece activo en la familia esperada, casi siempre es porque falta el neighbor <ip> activate dentro de esa address-family.