Configuracion 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 sesion BGP para anunciar tus propios prefijos IP. Dual-stack, filtros de exportacion, interfaces dummy persistentes, reglas nftables y verificacion con birdc.

BIRD es el demonio de enrutamiento mantenido por CZ.NIC. La version 2 unifico IPv4 e IPv6 en un solo demonio, reemplazo la arquitectura dividida BIRD/BIRD6 de la version 1.x e incorporo un potente lenguaje de filtros. Esta guia cubre la instalacion de BIRD2 en un VPS Linux, la configuracion de una sesion BGP con tu proveedor upstream, el anuncio de tus prefijos IP y la verificacion de todo el proceso.

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

Que necesitas antes de configurar BIRD2 para BGP?

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

Reune estos datos de tu proveedor o de tu asignacion RIR:

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

Tambien necesitas registros ROA publicados para tus prefijos antes de que tus rutas pasen la validacion RPKI en redes downstream. Consulta para esa configuracion.

Asegurate de que tu proveedor ha anadido tus prefijos a sus filtros IRR. Sin eso, tus anuncios seran filtrados aunque la sesion BGP se establezca.

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

Como instalar BIRD2 en Debian 12 y Ubuntu 24.04?

BIRD2 esta disponible en los repositorios por defecto de ambas distribuciones. Debian 12 incluye la version 2.0.12, Ubuntu 24.04 incluye la 2.14. Ambas funcionan para BGP basico, 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 produccion.

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

Instalar desde el repositorio de CZ.NIC (recomendado)

Anade 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

Anade 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 distribucion:

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

Verificar la instalacion

bird --version

Salida esperada (repositorio CZ.NIC):

BIRD version 2.18

Comprueba que el servicio esta en ejecucion:

sudo systemctl status bird

BIRD arranca automaticamente tras la instalacion. La configuracion por defecto en /etc/bird/bird.conf es un esqueleto. La reemplazaras por completo en la siguiente seccion.

Como esta estructurado bird.conf para BGP?

Un bird.conf preparado para BGP tiene cinco bloques: configuracion 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 configuracion 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 configuracion. 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

Configuracion global

log syslog all;
router id 198.51.100.2;

router id debe ser una direccion IPv4 unica 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. Lelos con journalctl -u bird -f. Si necesitas salida detallada mientras depuras un protocolo concreto, anade debug protocols all; temporalmente. Eliminalo cuando la sesion 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 resolucion de next-hop. Lista solo las interfaces involucradas en tu configuracion 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.

Que hace el bloque protocol BGP?

El bloque protocol bgp define una sesion de peering con un vecino. Especifica quien eres (local ... as), con quien haces peering (neighbor ... as), la autenticacion (password) y que 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 conexion TCP
hold time 90 Segundos antes de declarar al peer como caido (3x keepalive)
keepalive time 30 Intervalo entre mensajes keepalive
password "..." Autenticacion MD5 (RFC 2385)

La autenticacion MD5 protege la sesion BGP contra resets TCP falsificados y ataques de inyeccion. Ambos lados deben configurar la misma contrasena. Solicita el secreto compartido a tu proveedor.

Como configurar canales dual-stack IPv4 e IPv6?

BIRD2 gestiona IPv4 e IPv6 como 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 produccion, deberias filtrar tambien las importaciones. Consulta para ejemplos de filtros de importacion.

next hop self reescribe el atributo next-hop con tu IP de peering. Es necesario cuando el upstream espera que el trafico fluya a traves de tu direccion, que es la configuracion 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.

Como escribir filtros de exportacion para anunciar solo tus prefijos?

Los filtros de exportacion controlan que rutas envia BIRD al upstream. Un filtro de exportacion mal configurado puede dejar escapar rutas que no te pertenecen, lo que hara que tu sesion sea cerrada y potencialmente recibas una llamada del NOC de tu upstream.

El filtro en la configuracion 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. Tambien 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 tambien desagregacion hasta /28 si necesitas anunciar more-specifics para ingenieria de trafico (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;
}

Manten siempre los filtros de exportacion lo mas restrictivos posible. Anuncia solo lo que te pertenece, con las longitudes de prefijo exactas que pretendes. Un reject ausente al final del filtro hara que BIRD use la accion por defecto del canal, que 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 logica de filtros antes de recargar la configuracion.

Como crear una interfaz dummy persistente para la originacion de prefijos?

BGP anuncia prefijos que existen en la tabla de enrutamiento. Necesitas una interfaz con tu prefijo asignado para que BIRD pueda originar la ruta. Una interfaz dummy cumple esta funcion: siempre esta 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. Esta direccion no necesita ser alcanzable desde el exterior. Existe solo para que 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 que la capa de enlace no tiene un portador fisico que rastrear, pero la interfaz esta UP y reenviando trafico. La direccion MAC es generada aleatoriamente por systemd-networkd y sera distinta en tu sistema.

Si usas ifupdown en lugar de systemd-networkd (compruebalo con networkctl status), puede que necesites habilitar systemd-networkd primero:

sudo systemctl enable --now systemd-networkd

Verifica que 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

Como 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 sesion BGP con tu router. Los escaneadores automatizados encuentran un puerto 179 abierto en cuestion de horas tras poner un VPS en linea. Restringe el puerto 179 solo a las IPs de tus peers.

nftables puede no estar instalado por defecto en Ubuntu 24.04. Instalalo 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

Anade mas IPs de peers a los sets a medida que agregues upstreams. Los named sets permiten actualizar listas de peers sin reescribir las reglas.

Integrar con tu configuracion 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 configuracion:

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

enable --now inicia nftables inmediatamente y asegura que 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 que la regla funciona verificando el estado de las conexiones. Desde el VPS:

sudo nft list ruleset | grep -c "179"

Esto deberia devolver un conteo que coincida con el numero de reglas de puerto 179 que creaste.

Confirma tambien que el trafico BGP no esta bloqueado entre tu y tu peer. Las reglas anteriores solo afectan las conexiones entrantes. BIRD inicia conexiones salientes hacia el peer, que son gestionadas por la entrada conntrack established/related. Si tienes una politica de salida restrictiva, anade:

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

Esto ya deberia estar en tu conjunto de reglas base del firewall. Si no lo esta, anadelo antes de las reglas BGP.

Como aplicar la configuracion de BIRD2?

Antes de cargar una nueva configuracion, 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 numero de linea y el problema. Corrige y vuelve a verificar.

Aplica la configuracion:

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

Puede que veas Reconfiguration in progress en lugar de Reconfigured si BIRD aun esta procesando cambios de protocolo (como establecer una nueva sesion BGP). Ambos mensajes son normales.

BIRD aplica la nueva configuracion sin reiniciar. Las sesiones existentes realizan una reconfiguracion suave cuando es posible. Si cambiaste la IP del vecino o el AS local, BIRD reinicia el protocolo afectado automaticamente.

Para cambios de configuracion que no deben interrumpir las sesiones en ejecucion (cambios de filtros, adicion de rutas estaticas), usa:

sudo birdc reload upstream1

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

Como verificar tu sesion BGP y los anuncios de rutas?

Despues de aplicar la configuracion, usa birdc para comprobar que la sesion esta establecida y las rutas se estan anunciando. Estos comandos son tus herramientas principales de depuracion.

Comando Que muestra Cuando usarlo
show protocols Resumen del estado de los protocolos (Established, Active, etc.) Primera comprobacion tras un cambio de configuracion
show protocols all upstream1 Detalles completos de la sesion, contadores, temporizadores Depurar una sesion concreta
show route Todas las rutas en la tabla de BIRD Verificar rutas recibidas y estaticas
show route export upstream1 Rutas que se envian al upstream Confirmar que tus prefijos se anuncian
show route for 203.0.113.0/24 Mejor ruta para un prefijo concreto Rastrear la seleccion de ruta
show route protocol static_v4 Rutas de un protocolo concreto Verificar que las rutas estaticas estan cargadas

Comprobar el estado de la sesion

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 que la sesion BGP esta 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 exportacion lo esta rechazando.

Comprobar los detalles completos de la sesion

sudo birdc show protocols all upstream1

Busca la linea Routes::

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

El valor exported debe coincidir con el numero de prefijos que pretendes anunciar.

Verificar desde fuera

Usa un looking glass publico para confirmar que 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 tambien 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.

Como solucionar problemas frecuentes de BGP en BIRD2?

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

Referencia de estados de sesion BGP

Estado Significado Que comprobar
Idle BIRD no esta intentando conectar Error de configuracion, protocolo deshabilitado
Connect Conexion TCP en progreso Firewall bloqueando puerto 179, IP de vecino incorrecta
Active Conexion TCP fallida, reintentando Peer inalcanzable, firewall, direccion de origen incorrecta
OpenSent TCP conectado, esperando respuesta OPEN Contrasena MD5 incorrecta, ASN incorrecto en el lado remoto
OpenConfirm OPEN recibido, esperando KEEPALIVE Rara vez se ve, normalmente transiciona rapido
Established Sesion activa, intercambiando rutas Funcionando

Sesion atascada en Connect o Active

Esto significa que 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 conexion TCP funciona pero el mensaje BGP OPEN es rechazado. Casi siempre es una discrepancia en la contrasena MD5. Verifica:

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

Revisa los logs para mas 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 exportacion no lo esta 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 estatica no esta configurada correctamente. El filtro de exportacion coincide con la ruta, asi que debe provenir del protocolo correcto.

sudo birdc show route noexport upstream1

Esto muestra las rutas que el filtro rechazo explicitamente. Si tu prefijo aparece aqui, la logica del filtro tiene un error.

Prefijo anunciado pero no visible en looking glass

Tu exportacion 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
  • Filtrado IRR: Tu upstream filtra basandose 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 propagacion: La convergencia BGP tarda minutos. Espera 5-10 minutos y comprueba de nuevo

Leer los logs

BIRD registra en el journal del sistema. Para depuracion en tiempo real:

journalctl -u bird -f

Para eventos de la ultima hora:

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

Busca lineas que contengan Error, BGP, session o Received. Te dicen exactamente que esta haciendo BIRD y que salio mal.

BIRD2 vs BIRD 1.x: notas de migracion

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

  • Un solo demonio: BIRD2 reemplaza tanto bird como bird6 con un unico proceso
  • Sintaxis de canales: IPv4 e IPv6 se configuran como canales dentro de bloques de protocolo, no como 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 configuracion: La ubicacion por defecto cambio de /etc/bird/bird.conf y /etc/bird/bird6.conf a un unico /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 sesion BGP establecida y los prefijos anunciados, hay varias cosas que configurar a continuacion:

  • Validacion RPKI: Configura RTR para validar rutas entrantes contra datos ROA
  • Filtros de importacion: Filtra rutas entrantes para prevenir fugas de rutas y secuestros
  • Multiples upstreams: Anade un segundo bloque protocol bgp para redundancia. Usa preference para definir primario/respaldo
  • BFD: Habilita Bidirectional Forwarding Detection para failover en sub-segundos entre upstreams
  • Monitorizacion: Exporta metricas de BIRD a Prometheus con bird_exporter

Para el demonio de enrutamiento alternativo, consulta . Para el recorrido completo de BYOIP, comienza desde la guia BYOIP.


Copyright 2026 Virtua.Cloud. Todos los derechos reservados. Este contenido es una obra original del equipo de Virtua.Cloud. La reproduccion, republicacion o redistribucion sin permiso escrito esta prohibida.

¿Listo para probarlo?

Despliega tu propio servidor en segundos. Linux, Windows o FreeBSD.

Ver planes VPS