Configuración de BGP con BIRD2 en un VPS Linux
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:
- Tu
passworden bird.conf coincide exactamente con la qué el proveedor te dio (sensible a mayusculas, cuidado con espacios al final) - 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
birdcómobird6con 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.confy/etc/bird/bird6.confa un único/etc/bird/bird.conf - Socket de birdc: Un solo socket en
/run/bird/bird.ctlen 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:
- Validacion RPKI: Configura RTR para validar rutas entrantes contra datos ROA RPKI ROA para BGP: crear ROAs, validar rutas en BIRD2 y FRR
- Filtros de importación: Filtra rutas entrantes para prevenir fugas de rutas y secuestros Filtrado de rutas BGP: Prefix Lists, Filtros AS-Path, Rechazo de Bogons y GTSM
- Multiples upstreams: Añade un segundo bloque
protocol bgppara redundancia. Usapreferencepara 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 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.
¿Listo para probarlo?
Ejecute sesiones BGP en su propio espacio IP con VPS Virtua.Cloud. →