Configuración de BGP con BIRD2 en un VPS Linux

15 min de lectura·Matthieu·bgpbird2routingipv6firewall|

Instala BIRD2 en Debian 12 o Ubuntu 24.04 y configura una sesión BGP para anunciar tus propios prefijos IP. Dual-stack, filtros de exportación, interfaces dummy persistentes, reglas nftables y verificación con birdc.

BIRD es el demonio de enrutamiento mantenido por CZ.NIC. La versión 2 unifico IPv4 e IPv6 en un solo demonio, reemplazo la arquitectura dividida BIRD/BIRD6 de la versión 1.x e incorporo un potente lenguaje de filtros. Está guia cubre la instalación de BIRD2 en un VPS Linux, la configuración de una sesión BGP con tu proveedor upstream, el anuncio de tus prefijos IP y la verificación de todo el proceso.

Todos los ejemplos son dual-stack (IPv4 + IPv6). Sustituye los ASN, IPs y prefijos de ejemplo por tus propios valores.

¿Qué necesitas antes de configurar BIRD2 para BGP?

Antes de tocar bird.conf, necesitas un ASN, espacio IP asignado y un proveedor qué ofrezca sesiones BGP en tu VPS. Sin estos tres elementos, BIRD2 no tiene nada qué anunciar ni con quien hacer peering.

Reune estos datos de tu proveedor o de tu asignación RIR:

Elemento Valor de ejemplo Donde obtenerlo
Tu ASN AS65400 RIPE NCC, ARIN o tu LIR
Tu prefijo IPv4 203.0.113.0/24 Asignación RIR o asignación PA del proveedor
Tu prefijo IPv6 2001:db8:1000::/48 Asignación RIR o asignación PA del proveedor
ASN del upstream AS64496 Detalles de la sesión BGP del proveedor
IP de peering IPv4 del upstream 198.51.100.1 Detalles de la sesión BGP del proveedor
IP de peering IPv6 del upstream 2001:db8::1 Detalles de la sesión BGP del proveedor
Tu IP de peering IPv4 198.51.100.2 Detalles de la sesión BGP del proveedor
Tu IP de peering IPv6 2001:db8::2 Detalles de la sesión BGP del proveedor
Contraseña MD5 (secreto compartido) Acordada con el proveedor

También necesitas registros ROA publicados para tus prefijos antes de qué tus rutas pasen la validacion RPKI en redes downstream. Consulta RPKI ROA para BGP: crear ROAs, validar rutas en BIRD2 y FRR para esa configuración.

Asegúrate de qué tu proveedor ha añadido tus prefijos a sus filtros IRR. Sin eso, tus anuncios serán filtrados aunque la sesión BGP se establezca.

Un VPS con al menos 1 GB de RAM es suficiente para BIRD2 con una tabla completa (más de 1 millón de rutas IPv4). Si solo aceptas una ruta por defecto de tu upstream, el consumo de memoria se mantiene por debajo de 100 MB.

¿Cómo instalar BIRD2 en Debian 12 y Ubuntu 24.04?

BIRD2 está disponible en los repositorios por defecto de ambas distribuciones. Debian 12 incluye la versión 2.0.12, Ubuntu 24.04 incluye la 2.14. Ambas funcionan para BGP básico, pero el repositorio oficial de CZ.NIC proporciona BIRD 2.18 (publicado en enero de 2026) con soporte para BGP dynamic unnumbered, mejoras de rendimiento y correcciones recientes. Usa el repositorio de CZ.NIC para despliegues en producción.

Nota: CZ.NIC publica los paquetes de BIRD2 bajo el nombre de proyecto bird2. No lo confundas con el proyecto bird (qué solo cubre Debian) ni con bird3 (BIRD 3.x).

Instalar desde el repositorio de CZ.NIC (recomendado)

Añade el repositorio oficial e instala:

sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates wget

Importa la clave GPG de CZ.NIC:

sudo wget -O /usr/share/keyrings/cznic-labs-pkg.gpg https://pkg.labs.nic.cz/gpg

Añade el repositorio. En Debian 12:

echo "deb [signed-by=/usr/share/keyrings/cznic-labs-pkg.gpg] https://pkg.labs.nic.cz/bird2 bookworm main" | sudo tee /etc/apt/sources.list.d/cznic-labs-bird.list

En Ubuntu 24.04:

echo "deb [signed-by=/usr/share/keyrings/cznic-labs-pkg.gpg] https://pkg.labs.nic.cz/bird2 noble main" | sudo tee /etc/apt/sources.list.d/cznic-labs-bird.list

Instala BIRD2:

sudo apt-get update
sudo apt-get -y install bird2

Instalar desde los repositorios por defecto

Si prefieres el paquete de la distribución:

sudo apt-get update
sudo apt-get -y install bird2

Verificar la instalación

bird --version

Salida esperada (repositorio CZ.NIC):

BIRD version 2.18

Comprueba qué el servicio está en ejecución:

sudo systemctl status bird

BIRD arranca automáticamente tras la instalación. La configuración por defecto en /etc/bird/bird.conf es un esqueleto. La reemplazarás por completo en la siguiente sección.

¿Cómo está estructurado bird.conf para BGP?

Un bird.conf preparado para BGP tiene cinco bloques: configuración global y cuatro secciones de protocolo (device, direct, kernel, bgp). Cada protocolo funciona de forma independiente y se comunica a traves de tablas de enrutamiento.

Este es el bird.conf completo para una configuración BGP dual-stack. Leelo primero; las secciones siguientes explican cada bloque.

sudo cp /etc/bird/bird.conf /etc/bird/bird.conf.bak
sudo tee /etc/bird/bird.conf > /dev/null << 'BIRDCONF'
# /etc/bird/bird.conf - BIRD2 BGP configuration
# Replace all placeholder values with your own

log syslog all;

router id 198.51.100.2;

# Watch interface state changes
protocol device {
    scan time 10;
}

# Import connected routes (needed for next-hop resolution)
protocol direct {
    ipv4;
    ipv6;
    interface "dummy0";
    interface "eth0";
}

# Sync BIRD routes to kernel routing table
protocol kernel {
    ipv4 {
        export all;
        import all;
    };
    learn;
    scan time 15;
    merge paths on;
}

protocol kernel {
    ipv6 {
        export all;
        import all;
    };
    learn;
    scan time 15;
    merge paths on;
}

# Define your prefixes
define OWN_V4_PREFIX = 203.0.113.0/24;
define OWN_V6_PREFIX = 2001:db8:1000::/48;

# Export filter: only announce your own prefixes
filter export_bgp_v4 {
    if net = OWN_V4_PREFIX then accept;
    reject;
}

filter export_bgp_v6 {
    if net = OWN_V6_PREFIX then accept;
    reject;
}

# Static routes for prefix origination (point to dummy0)
protocol static static_v4 {
    ipv4;
    route 203.0.113.0/24 via "dummy0";
}

protocol static static_v6 {
    ipv6;
    route 2001:db8:1000::/48 via "dummy0";
}

# BGP session with upstream provider
protocol bgp upstream1 {
    description "Upstream Provider";
    local 198.51.100.2 as 65400;
    neighbor 198.51.100.1 as 64496;
    source address 198.51.100.2;
    hold time 90;
    keepalive time 30;
    password "your-md5-secret";

    ipv4 {
        import all;
        export filter export_bgp_v4;
        next hop self;
    };

    ipv6 {
        import all;
        export filter export_bgp_v6;
        next hop self;
    };
}
BIRDCONF

Establece los permisos del archivo de configuración. Solo root y el usuario bird necesitan acceso:

sudo chown root:bird /etc/bird/bird.conf
sudo chmod 640 /etc/bird/bird.conf

Verifica los permisos:

ls -la /etc/bird/bird.conf

Salida esperada:

-rw-r----- 1 root bird 1247 Mar 19 12:00 /etc/bird/bird.conf

Configuración global

log syslog all;
router id 198.51.100.2;

router id debe ser una dirección IPv4 única a nivel global. Usa una de tus IPs asignadas. BIRD puede auto-detectarla desde las interfaces, pero es mejor declararla explicitamente.

log syslog all envia todos los mensajes de log al journal del sistema. Léelos con journalctl -u bird -f. Si necesitas salida detallada mientras depuras un protocolo concreto, añade debug protocols all; temporalmente. Elimínalo cuando la sesión funcione. El logging a nivel debug genera un volumen alto y puede llenar el almacenamiento del journal.

Protocol device

protocol device {
    scan time 10;
}

Vigila cambios de estado en las interfaces cada 10 segundos. Obligatorio. Sin el, BIRD no sabe cuando las interfaces suben o bajan.

Protocol direct

protocol direct {
    ipv4;
    ipv6;
    interface "dummy0";
    interface "eth0";
}

Importa rutas conectadas de las interfaces listadas. BIRD las necesita para la resolución de next-hop. Lista solo las interfaces involucradas en tu configuración BGP.

Protocol kernel

Se necesitan dos bloques kernel protocol: uno para IPv4 y otro para IPv6. Cada uno sincroniza su familia de direcciones entre la tabla de enrutamiento de BIRD y la tabla del kernel de Linux.

merge paths on habilita ECMP si tienes multiples upstreams. learn importa las rutas existentes del kernel a BIRD.

¿Qué hace el bloque protocol BGP?

El bloque protocol bgp define una sesión de peering con un vecino. Especifica quien eres (local ... as), con quien haces peering (neighbor ... as), la autenticación (password) y qué rutas se intercambian (bloques de canal).

Campos clave:

Directiva Funcion
local <ip> as <ASN> Tu IP de peering y tu ASN
neighbor <ip> as <ASN> IP de peering y ASN del upstream
source address <ip> IP de origen para la conexión TCP
hold time 90 Segundos antes de declarar al peer cómo caido (3x keepalive)
keepalive time 30 Intervalo entre mensajes keepalive
password "..." Autenticacion MD5 (RFC 2385)

La autenticación MD5 protege la sesión BGP contra resets TCP falsificados y ataques de inyección. Ambos lados deben configurar la misma contraseña. Solicita el secreto compartido a tu proveedor.

¿Cómo configurar canales dual-stack IPv4 e IPv6?

BIRD2 gestiona IPv4 e IPv6 cómo canales separados dentro del mismo bloque de protocolo. Cada canal tiene su propia politica de importacion/exportacion:

ipv4 {
    import all;
    export filter export_bgp_v4;
    next hop self;
};

ipv6 {
    import all;
    export filter export_bgp_v6;
    next hop self;
};

import all acepta todas las rutas del upstream. En producción, deberías filtrar también las importaciones. Consulta Filtrado de rutas BGP: Prefix Lists, Filtros AS-Path, Rechazo de Bogons y GTSM para ejemplos de filtros de importación.

next hop self reescribe el atributo next-hop con tu IP de peering. Es necesario cuando el upstream espera qué el tráfico fluya a traves de tu dirección, qué es la configuración estandar en un VPS.

Si tu proveedor ejecuta sesiones BGP separadas para IPv4 e IPv6 (IPs de vecino distintas por familia de direcciones), dividelas en dos bloques protocol bgp.

¿Cómo escribir filtros de exportación para anunciar solo tus prefijos?

Los filtros de exportación controlan qué rutas envia BIRD al upstream. Un filtro de exportación mal configurado puede dejar escapar rutas qué no te pertenecen, lo qué hará qué tu sesión sea cerrada y potencialmente recibas una llamada del NOC de tu upstream.

El filtro en la configuración anterior usa una coincidencia simple de prefijo:

define OWN_V4_PREFIX = 203.0.113.0/24;

filter export_bgp_v4 {
    if net = OWN_V4_PREFIX then accept;
    reject;
}

Esto acepta solo el /24 exacto. Todo lo demas se rechaza. El reject al final es el deny por defecto.

Para multiples prefijos, usa un set:

define OWN_V4_PREFIXES = [ 203.0.113.0/24, 198.51.100.0/24 ];

filter export_bgp_v4 {
    if net ~ OWN_V4_PREFIXES then accept;
    reject;
}

El operador ~ compara contra un prefix set. También soporta notacion de rango:

define OWN_V4_PREFIXES = [ 203.0.113.0/24{24,24} ];

El {24,24} restringe la coincidencia exactamente a /24. Usa {24,28} para permitir también desagregacion hasta /28 si necesitas anunciar more-specifics para ingeniería de tráfico (traffic engineering).

Para IPv6, se aplica el mismo patron:

define OWN_V6_PREFIXES = [ 2001:db8:1000::/48{48,48} ];

filter export_bgp_v6 {
    if net ~ OWN_V6_PREFIXES then accept;
    reject;
}

Mantén siempre los filtros de exportación lo más restrictivos posible. Anuncia solo lo qué te pertenece, con las longitudes de prefijo exactas qué pretendes. Un reject ausente al final del filtro hará qué BIRD use la accion por defecto del canal, qué puede ser accept. Termina siempre con un reject explicito.

Puedes probar tu filtro sin aplicarlo:

sudo birdc eval '203.0.113.0/24 ~ [ 203.0.113.0/24 ]'

Esto devuelve TRUE o FALSE y ayuda a depurar la lógica de filtros antes de recargar la configuración.

¿Cómo crear una interfaz dummy persistente para la originación de prefijos?

BGP anuncia prefijos qué existen en la tabla de enrutamiento. Necesitas una interfaz con tu prefijo asignado para qué BIRD pueda originar la ruta. Una interfaz dummy cumple está funcion: siempre está activa, no tiene enlace fisico y sobrevive a reinicios cuando se configura a traves de systemd-networkd.

Los comandos efimeros ip link add se pierden tras un reinicio. Usa systemd-networkd en su lugar.

Crear el archivo .netdev

sudo tee /etc/systemd/network/10-dummy0.netdev > /dev/null << 'EOF'
[NetDev]
Name=dummy0
Kind=dummy
EOF

Crear el archivo .network

sudo tee /etc/systemd/network/10-dummy0.network > /dev/null << 'EOF'
[Match]
Name=dummy0

[Network]
Address=203.0.113.1/32
Address=2001:db8:1000::1/128
EOF

Asigna un solo /32 (o /128 para IPv6) de tu prefijo asignado a la interfaz dummy. Está dirección no necesita ser alcanzable desde el exterior. Existe solo para qué BIRD tenga una ruta conectada para el prefijo.

Aplicar y verificar

sudo systemctl restart systemd-networkd

Espera unos segundos y comprueba:

ip addr show dummy0

Salida esperada:

3: dummy0: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
    link/ether aa:bb:cc:dd:ee:ff brd ff:ff:ff:ff:ff:ff
    inet 203.0.113.1/32 scope global dummy0
       valid_lft forever preferred_lft forever
    inet6 2001:db8:1000::1/128 scope global
       valid_lft forever preferred_lft forever

El state UNKNOWN en una interfaz dummy es normal. Significa qué la capa de enlace no tiene un portador fisico qué rastrear, pero la interfaz está UP y reenviando tráfico. La dirección MAC es generada aleatoriamente por systemd-networkd y sera distinta en tu sistema.

Si usas ifupdown en lugar de systemd-networkd (compruébalo con networkctl status), puede qué necesites habilitar systemd-networkd primero:

sudo systemctl enable --now systemd-networkd

Verifica qué los archivos estan en su sitio para el proximo reinicio:

ls -la /etc/systemd/network/10-dummy0.*
-rw-r--r-- 1 root root  42 Mar 19 12:00 /etc/systemd/network/10-dummy0.netdev
-rw-r--r-- 1 root root  89 Mar 19 12:00 /etc/systemd/network/10-dummy0.network

¿Cómo proteger BGP con reglas de firewall nftables?

BGP funciona sobre el puerto TCP 179. Sin reglas de firewall, cualquier host en internet puede intentar abrir una sesión BGP con tu router. Los escaneadores automatizados encuentran un puerto 179 abierto en cuestión de horas tras poner un VPS en línea. Restringe el puerto 179 solo a las IPs de tus peers.

nftables puede no estar instalado por defecto en Ubuntu 24.04. Instálalo primero:

sudo apt-get -y install nftables

Crear el conjunto de reglas nftables

sudo tee /etc/nftables.d/bgp.conf > /dev/null << 'EOF'
table inet bgp_filter {
    set bgp_peers_v4 {
        type ipv4_addr
        elements = { 198.51.100.1 }
    }

    set bgp_peers_v6 {
        type ipv6_addr
        elements = { 2001:db8::1 }
    }

    chain input {
        type filter hook input priority 0; policy accept;

        # Allow BGP from known peers only
        tcp dport 179 ip saddr @bgp_peers_v4 accept
        tcp dport 179 ip6 saddr @bgp_peers_v6 accept

        # Drop BGP from everyone else
        tcp dport 179 drop
    }
}
EOF

Añade más IPs de peers a los sets a medida qué agregues upstreams. Los named sets permiten actualizar listas de peers sin reescribir las reglas.

Integrar con tu configuración nftables existente

Si ya tienes /etc/nftables.conf, incluye las reglas BGP:

echo 'include "/etc/nftables.d/bgp.conf"' | sudo tee -a /etc/nftables.conf

Si aun no tienes nftables configurado, crea el directorio y carga la configuración:

sudo mkdir -p /etc/nftables.d
sudo systemctl enable --now nftables

enable --now inicia nftables inmediatamente y asegura qué se cargue en cada arranque.

Aplica las reglas:

sudo nft -f /etc/nftables.d/bgp.conf

Verificar las reglas

sudo nft list table inet bgp_filter

Salida esperada:

table inet bgp_filter {
	set bgp_peers_v4 {
		type ipv4_addr
		elements = { 198.51.100.1 }
	}

	set bgp_peers_v6 {
		type ipv6_addr
		elements = { 2001:db8::1 }
	}

	chain input {
		type filter hook input priority filter; policy accept;
		tcp dport 179 ip saddr @bgp_peers_v4 accept
		tcp dport 179 ip6 saddr @bgp_peers_v6 accept
		tcp dport 179 drop
	}
}

nft list normaliza priority 0 a priority filter y elimina los comentarios. Esto es esperado.

Comprueba qué la regla funciona verificando el estado de las conexiones. Desde el VPS:

sudo nft list ruleset | grep -c "179"

Esto debería devolver un conteo qué coincida con el número de reglas de puerto 179 qué creaste.

Confirma también qué el tráfico BGP no está bloqueado entre tu y tu peer. Las reglas anteriores solo afectan las conexiones entrantes. BIRD inicia conexiones salientes hacia el peer, qué son gestionadas por la entrada conntrack established/related. Si tienes una politica de salida restrictiva, añade:

sudo nft add rule inet bgp_filter input ct state established,related accept

Esto ya debería estar en tu conjunto de reglas base del firewall. Si no lo está, añádelo antes de las reglas BGP.

¿Cómo aplicar la configuración de BIRD2?

Antes de cargar una nueva configuración, validala:

sudo birdc configure check

Salida esperada:

BIRD 2.18 ready.
Reading configuration from /etc/bird/bird.conf
Configuration OK

Si hay errores de sintaxis, BIRD informa el número de línea y el problema. Corrige y vuelve a verificar.

Aplica la configuración:

sudo birdc configure
BIRD 2.18 ready.
Reading configuration from /etc/bird/bird.conf
Reconfigured

Puede qué veas Reconfiguration in progress en lugar de Reconfigured si BIRD aun está procesando cambios de protocolo (cómo establecer una nueva sesión BGP). Ambos mensajes son normales.

BIRD aplica la nueva configuración sin reiniciar. Las sesiones existentes realizan una reconfiguración suave cuando es posible. Si cambiaste la IP del vecino o el AS local, BIRD reinicia el protocolo afectado automáticamente.

Para cambios de configuración qué no deben interrumpir las sesiones en ejecución (cambios de filtros, adición de rutas estáticas), usa:

sudo birdc reload upstream1

Esto re-aplica los filtros de importacion/exportacion a las rutas existentes sin cerrar la sesión TCP.

¿Cómo verificar tu sesión BGP y los anuncios de rutas?

Después de aplicar la configuración, usa birdc para comprobar qué la sesión está establecida y las rutas se estan anunciando. Estos comandos son tus herramientas principales de depuración.

Comando Qué muestra Cuando usarlo
show protocols Resumen del estado de los protocolos (Established, Active, etc.) Primera comprobación tras un cambio de configuración
show protocols all upstream1 Detalles completos de la sesión, contadores, temporizadores Depurar una sesión concreta
show route Todas las rutas en la tabla de BIRD Verificar rutas recibidas y estáticas
show route export upstream1 Rutas qué se envian al upstream Confirmar qué tus prefijos se anuncian
show route for 203.0.113.0/24 Mejor ruta para un prefijo concreto Rastrear la selección de ruta
show route protocol static_v4 Rutas de un protocolo concreto Verificar qué las rutas estáticas estan cargadas

Comprobar el estado de la sesión

sudo birdc show protocols

Salida esperada cuando funciona:

BIRD 2.18 ready.
Name       Proto      Table      State  Since         Info
device1    Device     ---        up     12:00:00.000
direct1    Direct     ---        up     12:00:00.000
kernel1    Kernel     master4    up     12:00:00.000
kernel2    Kernel     master6    up     12:00:00.000
static_v4  Static     master4    up     12:00:00.000
static_v6  Static     master6    up     12:00:00.000
upstream1  BGP        ---        up     12:00:05.000  Established

El estado Established significa qué la sesión BGP está activa y se pueden intercambiar rutas. Cualquier otro estado indica un problema.

Comprobar las rutas exportadas

sudo birdc show route export upstream1
BIRD 2.18 ready.
Table master4:
203.0.113.0/24       unicast [static_v4 12:00:00.000] * (200)
	dev dummy0
Table master6:
2001:db8:1000::/48   unicast [static_v6 12:00:00.000] * (200)
	dev dummy0

Tus prefijos IPv4 e IPv6 deben aparecer aqui. Si falta un prefijo, el filtro de exportación lo está rechazando.

Comprobar los detalles completos de la sesión

sudo birdc show protocols all upstream1

Busca la línea Routes::

  Routes:         2 imported, 0 filtered, 2 exported, 0 preferred

El valor exported debe coincidir con el número de prefijos qué pretendes anunciar.

Verificar desde fuera

Usa un looking glass público para confirmar qué tu prefijo es visible en internet. NLNOG Looking Glass o PeeringDB pueden ayudar. Busca tu prefijo y verifica:

  • El AS de origen coincide con el tuyo
  • El AS path pasa por tu upstream
  • No aparece estado RPKI invalid

Comprueba también desde la tabla de enrutamiento del kernel:

ip route show | grep 203.0.113
ip -6 route show | grep 2001:db8:1000

Deberias ver rutas apuntando a la interfaz dummy0.

¿Cómo solucionar problemas frecuentes de BGP en BIRD2?

La mayoria de problemas BGP caen en unas pocas categorias. Verificalos en orden.

Referencia de estados de sesión BGP

Estado Significado Qué comprobar
Idle BIRD no está intentando conectar Error de configuración, protocolo deshabilitado
Connect Conexión TCP en progreso Firewall bloqueando puerto 179, IP de vecino incorrecta
Active Conexión TCP fallida, reintentando Peer inalcanzable, firewall, dirección de origen incorrecta
OpenSent TCP conectado, esperando respuesta OPEN Contraseña MD5 incorrecta, ASN incorrecto en el lado remoto
OpenConfirm OPEN recibido, esperando KEEPALIVE Rara vez se ve, normalmente transiciona rápido
Established Sesion activa, intercambiando rutas Funcionando

Sesion atascada en Connect o Active

Esto significa qué TCP no puede alcanzar el puerto 179 del peer. Comprueba:

# Can you reach the peer at all?
ping -c 3 198.51.100.1

# Is port 179 open on the peer?
nc -zv 198.51.100.1 179

# Are your nftables rules blocking outbound?
sudo nft list ruleset | grep 179

# Check BIRD logs
journalctl -u bird --since "5 minutes ago" --no-pager

Causas frecuentes: source address incorrecto en el bloque BGP, el peer aun no ha configurado su lado, o tu firewall bloquea las conexiones salientes.

Sesion atascada en OpenSent

La conexión TCP funciona pero el mensaje BGP OPEN es rechazado. Casi siempre es una discrepancia en la contraseña MD5. Verifica:

  1. Tu password en bird.conf coincide exactamente con la qué el proveedor te dio (sensible a mayusculas, cuidado con espacios al final)
  2. Ambos lados coinciden en el ASN

Revisa los logs para más detalles:

journalctl -u bird | grep -i "error\|md5\|password"

El prefijo no aparece en show route export

Tu prefijo existe en la tabla de BIRD pero el filtro de exportación no lo está aceptando. Depura el filtro:

sudo birdc show route 203.0.113.0/24 all

Comprueba el origen de la ruta. Si dice [device1] o [direct1] en lugar de [static_v4], la ruta estática no está configurada correctamente. El filtro de exportación coincide con la ruta, asi qué debe provenir del protocolo correcto.

sudo birdc show route noexport upstream1

Esto muestra las rutas qué el filtro rechazo explicitamente. Si tu prefijo aparece aqui, la lógica del filtro tiene un error.

Prefijo anunciado pero no visible en looking glass

Tu exportación funciona pero la ruta no se propaga. Posibles causas:

  • Sin registro ROA: Tu upstream o sus peers filtran rutas RPKI-invalid. Publica registros ROA primero RPKI ROA para BGP: crear ROAs, validar rutas en BIRD2 y FRR
  • Filtrado IRR: Tu upstream filtra basándose en objetos IRR (RIPE DB, RADB). Crea o actualiza tus objetos route/route6
  • Limite max-prefix: Tu upstream puede tener un limite de prefijos configurado. Contacta con ellos si lo estas alcanzando
  • Retraso de propagación: La convergencia BGP tarda minutos. Espera 5-10 minutos y comprueba de nuevo

Leer los logs

BIRD registra en el journal del sistema. Para depuración en tiempo real:

journalctl -u bird -f

Para eventos de la última hora:

journalctl -u bird --since "1 hour ago" --no-pager

Busca lineas qué contengan Error, BGP, session o Received. Te dicen exactamente qué está haciendo BIRD y qué salio mal.

BIRD2 vs BIRD 1.x: notas de migración

Si estas migrando desde BIRD 1.x, las principales diferencias son:

  • Un solo demonio: BIRD2 reemplaza tanto bird cómo bird6 con un único proceso
  • Sintaxis de canales: IPv4 e IPv6 se configuran cómo canales dentro de bloques de protocolo, no cómo protocolos separados
  • Sintaxis de filtros: Mayormente compatible, pero algunas funciones cambiaron de nombre. Consulta la documentacion de BIRD2 para la referencia completa de filtros
  • Archivo de configuración: La ubicación por defecto cambio de /etc/bird/bird.conf y /etc/bird/bird6.conf a un único /etc/bird/bird.conf
  • Socket de birdc: Un solo socket en /run/bird/bird.ctl en lugar de sockets separados para IPv4/IPv6

Siguientes pasos

Con tu sesión BGP establecida y los prefijos anunciados, hay varias cosas qué configurar a continuacion:

Para el demonio de enrutamiento alternativo, consulta Configuración de BGP con FRRouting en un VPS Linux. Para el recorrido completo de BYOIP, comienza desde BGP y Bring Your Own IP en un VPS: la guía completa.