Configuracion de BGP con FRRouting en un VPS Linux

14 min de lectura·Matthieu·bgpfrroutingfrrnetworkingipv6firewall|

Guia paso a paso para configurar BGP con FRRouting y anunciar tus propios prefijos IPv4 e IPv6 desde un VPS Linux. Incluye instalacion, configuracion con vtysh, prefix-lists, route-maps, GTSM y reglas de firewall con nftables.

Este tutorial explica como configurar FRRouting (FRR) para anunciar tus propios prefijos IPv4 e IPv6 via BGP desde un VPS Linux. Todos los comandos estan probados en Debian 12 y Ubuntu 24.04 con FRR 10.5.

Al finalizar tendras una sesion eBGP activa con tu proveedor upstream, originacion de prefijos dual-stack mediante interfaces dummy persistentes, filtrado de rutas entrante y saliente, seguridad de sesion con GTSM y reglas de firewall nftables protegiendo TCP 179.

Si estas evaluando entre FRR y BIRD2, ambos son opciones solidas. FRR usa una CLI estilo Cisco (vtysh) que resulta familiar si has trabajado con IOS o JunOS. BIRD2 usa un archivo de configuracion declarativo. Esta guia cubre FRR. Para BIRD2, consulta BIRD2 BGP Configuration on a Linux VPS.

Para contexto sobre como traer tu propio espacio IP a un VPS, consulta BGP: Bring Your Own IP to a VPS.

Requisitos previos

Antes de empezar, necesitas:

  • Un ASN (Autonomous System Number) publico. Si no tienes uno, consulta Register an ASN at RIPE NCC.
  • Al menos un prefijo IPv4 /24 o IPv6 /48 asignado a tu ASN.
  • Objetos ROA (Route Origin Authorization) creados en el panel RPKI de tu RIR. Consulta .
  • Un proveedor upstream que ofrezca una sesion BGP (IP transit o peering). Necesitaras: el ASN del proveedor, las direcciones IPv4 e IPv6 del peer y una contrasena MD5 acordada si corresponde.
  • Un VPS Linux con Debian 12 (Bookworm) o Ubuntu 24.04 (Noble). Acceso root o sudo.

A lo largo de esta guia, reemplaza estos placeholders con tus valores reales:

Placeholder Significado Ejemplo
YOUR_ASN Tu numero de AS 212345
PEER_ASN Numero de AS del proveedor upstream 6939
PEER_IPV4 IPv4 del peer BGP del proveedor 198.51.100.1
PEER_IPV6 IPv6 del peer BGP del proveedor 2001:db8:1::1
YOUR_IPV4 Tu lado del peering BGP (IPv4) 198.51.100.2
YOUR_IPV6 Tu lado del peering BGP (IPv6) 2001:db8:1::2
YOUR_PREFIX_V4 Tu prefijo IPv4 203.0.113.0/24
YOUR_PREFIX_V6 Tu prefijo IPv6 2001:db8:abc::/48
MD5_PASSWORD Contrasena TCP MD5 acordada (de tu proveedor)

Como instalar FRRouting en Debian 12 y Ubuntu 24.04

Instala FRR desde el repositorio apt oficial para obtener la ultima version estable (10.5.x a marzo de 2026). Los paquetes de las distribuciones Debian y Ubuntu suelen estar varias versiones principales por detras. El repositorio oficial sigue la rama estable actual y soporta tanto Bookworm como Noble.

Agrega la clave GPG de firma:

curl -s https://deb.frrouting.org/frr/keys.gpg | sudo tee /usr/share/keyrings/frrouting.gpg > /dev/null

Agrega el repositorio. Usa frr-stable para seguir la ultima rama estable:

FRRVER="frr-stable"
echo deb '[signed-by=/usr/share/keyrings/frrouting.gpg]' https://deb.frrouting.org/frr \
     $(lsb_release -s -c) $FRRVER | sudo tee /etc/apt/sources.list.d/frr.list

Instala FRR y las herramientas Python (necesarias para frr-reload.py):

sudo apt update && sudo apt install -y frr frr-pythontools

Verifica la version instalada:

sudo vtysh -c "show version" | head -1

Salida esperada:

FRRouting 10.5.3 (<hostname>) on Linux(6.8.0-xxx-generic).

FRR se instala como servicio systemd. Activalo para que sobreviva a reinicios e inicialo de inmediato:

sudo systemctl enable --now frr

Verifica que esta corriendo:

systemctl status frr

Deberias ver active (running) en la salida. FRR ejecuta multiples daemons (zebra, bgpd, etc.) gestionados por un unico proceso padre.

Como activar el daemon BGP en FRR

FRR viene con todos los daemons de protocolo desactivados excepto zebra. Debes activar explicitamente bgpd en el archivo daemons antes de que FRR inicie un proceso BGP. El archivo daemons se encuentra en /etc/frr/daemons.

Edita el archivo daemons:

sudo nano /etc/frr/daemons

Busca la linea bgpd y ponla en yes:

bgpd=yes

Los demas daemons (ospfd, isisd, etc.) pueden quedarse en no a menos que los necesites. Zebra siempre esta activado y gestiona la tabla de rutas del kernel.

Esto es lo que hace cada daemon:

Daemon Funcion Por defecto
zebra Gestion de rutas del kernel, seguimiento de interfaces siempre activo
bgpd Protocolo BGP no
ospfd OSPFv2 no
ospf6d OSPFv3 (IPv6) no
ripd RIP no
isisd IS-IS no
staticd Rutas estaticas via vtysh no

Reinicia FRR para aplicar el cambio:

sudo systemctl restart frr

Verifica que bgpd esta corriendo:

sudo vtysh -c "show bgp summary"

Deberias ver % BGP instance not found. Eso es normal: bgpd esta ejecutandose, pero no se ha configurado ningun router bgp todavia. Lo haremos a continuacion.

Conceptos basicos de vtysh

vtysh es la shell integrada de FRR. Proporciona una CLI estilo Cisco para configurar todos los daemons de FRR desde una sola interfaz. Algunos aspectos esenciales antes de empezar a configurar.

Entra a vtysh:

sudo vtysh

Ahora estas en la CLI de FRR. El prompt muestra el hostname. Los modos que usaras:

Modo Entrar con Prompt Proposito
Exec (por defecto) # Comandos show, verificacion
Config configure terminal (config)# Configuracion global
Router BGP router bgp ASN (config-router)# Configuracion BGP
Address-family address-family ipv4 unicast (config-router-af)# Configuracion por AFI/SAFI

Para guardar la configuracion en ejecucion a disco:

write memory

Esto escribe en /etc/frr/frr.conf. FRR usa un modelo de configuracion integrado por defecto: todas las configuraciones de los daemons residen en un unico archivo.

Sal de vtysh con exit o end (vuelve al modo exec desde cualquier submodo).

Como configurar una sesion BGP con el proveedor upstream

Entra a vtysh y al modo configure terminal para establecer la configuracion base de BGP. Esto crea el proceso router, define el router ID, desactiva IPv4 unicast automatico (para que controles exactamente que address families se activan por vecino) y define el peer upstream.

sudo vtysh
configure terminal

router bgp YOUR_ASN
 bgp router-id YOUR_IPV4
 no bgp default ipv4-unicast

 neighbor PEER_IPV4 remote-as PEER_ASN
 neighbor PEER_IPV4 description Upstream-v4
 neighbor PEER_IPV4 password MD5_PASSWORD
 neighbor PEER_IPV4 ttl-security hops 1
 neighbor PEER_IPV4 soft-reconfiguration inbound

 neighbor PEER_IPV6 remote-as PEER_ASN
 neighbor PEER_IPV6 description Upstream-v6
 neighbor PEER_IPV6 password MD5_PASSWORD
 neighbor PEER_IPV6 ttl-security hops 1
 neighbor PEER_IPV6 soft-reconfiguration inbound

Que hace cada directiva:

  • bgp router-id: Un identificador de 32 bits, tipicamente tu direccion IPv4 principal. Debe ser unico en el peering.
  • no bgp default ipv4-unicast: Evita que FRR active automaticamente IPv4 unicast para cada vecino. Activas las address families explicitamente. Esta es la practica estandar para configuraciones dual-stack.
  • ttl-security hops 1: Activa GTSM (RFC 5082). Requiere que los paquetes lleguen con TTL 254 (a un salto de distancia). Descarta paquetes BGP falsificados de fuentes remotas. Mutuamente excluyente con ebgp-multihop.
  • password: Establece autenticacion TCP MD5 (RFC 2385). Ambos lados deben coincidir en la misma cadena. No todos los proveedores usan esto. Omitelo si tu proveedor no lo requiere.
  • soft-reconfiguration inbound: Almacena las rutas recibidas en memoria para poder aplicar cambios de politica sin reiniciar la sesion. Usa mas RAM pero evita caidas de sesion al actualizar filtros.

No salgas del modo config todavia. Agregaremos address families y filtros a continuacion.

Como anunciar tus propios prefijos IPv4 e IPv6

La originacion de prefijos en FRR requiere dos cosas: una declaracion network en la configuracion BGP y que el prefijo este presente en la tabla de rutas del kernel. La forma mas sencilla de inyectar el prefijo en el kernel es mediante una interfaz dummy. Primero configuraremos las interfaces dummy y luego las address families de BGP.

Como crear interfaces dummy persistentes para originacion de prefijos

Una interfaz dummy es una interfaz tipo loopback que mantiene una direccion IP sin estar vinculada a hardware fisico. El daemon zebra de FRR recoge las rutas del kernel, asi que si tu prefijo esta asignado a una interfaz dummy, zebra lo instala y bgpd puede anunciarlo.

Crea las interfaces dummy usando systemd-networkd para que persistan entre reinicios.

Crea el archivo netdev:

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

Crea el archivo network con tus prefijos:

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

[Address]
Address=YOUR_PREFIX_V4

[Address]
Address=YOUR_PREFIX_V6
EOF

Para la direccion IPv4, usa la primera IP utilizable de tu prefijo (ej., 203.0.113.1/24). Para IPv6, usa cualquier direccion dentro de tu prefijo (ej., 2001:db8:abc::1/48).

Activa systemd-networkd si no esta activo y reinicialo:

sudo systemctl enable --now systemd-networkd
sudo systemctl restart systemd-networkd

Verifica que la interfaz dummy esta activa:

ip addr show dummy-bgp

Deberias ver ambas direcciones IPv4 e IPv6 asignadas a la interfaz.

Verifica que las rutas estan en el kernel:

ip route show dev dummy-bgp
ip -6 route show dev dummy-bgp

Configuracion de address-family

De vuelta en el modo config de vtysh (o vuelve a entrar con sudo vtysh luego configure terminal y router bgp YOUR_ASN):

 address-family ipv4 unicast
  network YOUR_PREFIX_V4
  neighbor PEER_IPV4 activate
  neighbor PEER_IPV4 route-map EXPORT-V4 out
  neighbor PEER_IPV4 route-map IMPORT-V4 in
  neighbor PEER_IPV4 prefix-list BOGONS-V4 in
  neighbor PEER_IPV4 maximum-prefix 500000 80
 exit-address-family

 address-family ipv6 unicast
  network YOUR_PREFIX_V6
  neighbor PEER_IPV6 activate
  neighbor PEER_IPV6 route-map EXPORT-V6 out
  neighbor PEER_IPV6 route-map IMPORT-V6 in
  neighbor PEER_IPV6 prefix-list BOGONS-V6 in
  neighbor PEER_IPV6 maximum-prefix 200000 80
 exit-address-family

Detalles:

  • activate activa el vecino dentro de esta address family. Necesario porque desactivamos bgp default ipv4-unicast.
  • network indica a bgpd que origine este prefijo. El prefijo debe existir en la tabla de rutas del kernel (zebra lo recoge de la interfaz dummy).
  • maximum-prefix 500000 80 cierra la sesion si el peer envia mas de 500.000 prefijos IPv4. El 80 genera una advertencia al 80% (400.000). Ajusta segun recibas tabla completa o solo ruta por defecto. Para sesion solo con ruta por defecto, establece 10.
  • Las referencias a route-map y prefix-list apuntan a filtros que definiremos a continuacion.

Como filtrar rutas BGP con prefix-lists y route-maps

El filtrado de rutas no es opcional. Sin filtros de salida, un error de configuracion podria filtrar prefijos que no te pertenecen. Sin filtros de entrada, aceptas rutas bogon y potencialmente haces blackhole del trafico. Esto sigue RFC 7454 (BGP Operations and Security).

Para un analisis mas detallado de estrategias de filtrado, consulta .

Prefix-lists de salida

Solo anuncia prefijos que te pertenecen. Nada mas.

ip prefix-list OUR-PREFIXES-V4 seq 10 permit YOUR_PREFIX_V4
ip prefix-list OUR-PREFIXES-V4 seq 999 deny any

ipv6 prefix-list OUR-PREFIXES-V6 seq 10 permit YOUR_PREFIX_V6
ipv6 prefix-list OUR-PREFIXES-V6 seq 999 deny any

Si anuncias multiples prefijos, agrega mas lineas permit con numeros de secuencia crecientes.

Prefix-lists de entrada para bogons

Rechaza prefijos que nunca deberian aparecer en internet publico. Esta lista sigue la NLNOG BGP Filter Guide:

ip prefix-list BOGONS-V4 seq 10 deny 0.0.0.0/8 le 32
ip prefix-list BOGONS-V4 seq 20 deny 10.0.0.0/8 le 32
ip prefix-list BOGONS-V4 seq 30 deny 100.64.0.0/10 le 32
ip prefix-list BOGONS-V4 seq 40 deny 127.0.0.0/8 le 32
ip prefix-list BOGONS-V4 seq 50 deny 169.254.0.0/16 le 32
ip prefix-list BOGONS-V4 seq 60 deny 172.16.0.0/12 le 32
ip prefix-list BOGONS-V4 seq 70 deny 192.0.2.0/24 le 32
ip prefix-list BOGONS-V4 seq 80 deny 192.88.99.0/24 le 32
ip prefix-list BOGONS-V4 seq 90 deny 192.168.0.0/16 le 32
ip prefix-list BOGONS-V4 seq 100 deny 198.18.0.0/15 le 32
ip prefix-list BOGONS-V4 seq 110 deny 198.51.100.0/24 le 32
ip prefix-list BOGONS-V4 seq 120 deny 203.0.113.0/24 le 32
ip prefix-list BOGONS-V4 seq 130 deny 224.0.0.0/4 le 32
ip prefix-list BOGONS-V4 seq 140 deny 240.0.0.0/4 le 32
ip prefix-list BOGONS-V4 seq 999 permit 0.0.0.0/0 le 24

ipv6 prefix-list BOGONS-V6 seq 10 deny ::/8 le 128
ipv6 prefix-list BOGONS-V6 seq 20 deny 100::/64 le 128
ipv6 prefix-list BOGONS-V6 seq 30 deny 2001:2::/48 le 128
ipv6 prefix-list BOGONS-V6 seq 40 deny 2001:10::/28 le 128
ipv6 prefix-list BOGONS-V6 seq 50 deny 2001:db8::/32 le 128
ipv6 prefix-list BOGONS-V6 seq 60 deny 3fff::/20 le 128
ipv6 prefix-list BOGONS-V6 seq 70 deny 2002::/16 le 128
ipv6 prefix-list BOGONS-V6 seq 80 deny 3ffe::/16 le 128
ipv6 prefix-list BOGONS-V6 seq 90 deny 5f00::/16 le 128
ipv6 prefix-list BOGONS-V6 seq 100 deny fc00::/7 le 128
ipv6 prefix-list BOGONS-V6 seq 110 deny fe80::/10 le 128
ipv6 prefix-list BOGONS-V6 seq 120 deny fec0::/10 le 128
ipv6 prefix-list BOGONS-V6 seq 130 deny ff00::/8 le 128
ipv6 prefix-list BOGONS-V6 seq 999 permit ::/0 le 48

La ultima linea permit de cada lista acepta todo lo que no fue explicitamente denegado. El le 24 (IPv4) y le 48 (IPv6) rechazan prefijos demasiado especificos: nadie deberia anunciar un /25 o mas largo en IPv4, ni un /49 o mas largo en IPv6.

Route-maps

Los route-maps unen las prefix-lists y te dan un lugar para agregar mas politicas despues (local-pref, communities, AS-path prepending).

route-map EXPORT-V4 permit 10
 match ip address prefix-list OUR-PREFIXES-V4

route-map EXPORT-V6 permit 10
 match ipv6 address prefix-list OUR-PREFIXES-V6

route-map IMPORT-V4 permit 10
 match ip address prefix-list BOGONS-V4

route-map IMPORT-V6 permit 10
 match ipv6 address prefix-list BOGONS-V6

Los route-maps de exportacion solo permiten tus propios prefijos. Todo lo demas se deniega implicitamente (FRR deniega todo lo que no coincide explicitamente con un route-map). Los route-maps de importacion pasan el trafico a traves de la prefix-list de bogons, que deniega los rangos bogon y permite todo lo demas.

Guarda la configuracion:

write memory

Verifica que la config se escribio:

ls -la /etc/frr/frr.conf

El archivo deberia mostrar una marca de tiempo de modificacion reciente con propiedad frr:frr y permisos 640.

Como proteger la sesion BGP y TCP 179

BGP corre en TCP puerto 179. Cualquier host en internet puede intentar conectarse. Ademas de GTSM y la autenticacion MD5 ya configurados, necesitas reglas de firewall para restringir TCP 179 a las direcciones de tus peers.

Reglas de firewall con nftables

Instala nftables si no esta presente. En instalaciones minimas de Ubuntu 24.04 no viene incluido por defecto:

sudo apt install -y nftables

Crea el directorio /etc/nftables.d/ para archivos de configuracion adicionales y agrega una directiva include al archivo principal de nftables para que las reglas personalizadas persistan entre reinicios:

sudo mkdir -p /etc/nftables.d
echo 'include "/etc/nftables.d/*.conf"' | sudo tee -a /etc/nftables.conf

Crea un archivo de configuracion nftables dedicado para BGP:

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

    set bgp_peers_v6 {
        type ipv6_addr
        elements = { PEER_IPV6 }
    }

    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

        # Allow BGP return traffic (our side initiates)
        tcp sport 179 ip saddr @bgp_peers_v4 accept
        tcp sport 179 ip6 saddr @bgp_peers_v6 accept

        # Drop all other BGP attempts
        tcp dport 179 drop
        tcp sport 179 drop
    }
}
EOF

Si ya tienes una configuracion nftables existente, integra estas reglas en tu chain input existente en lugar de crear una tabla separada. El enfoque anterior es autocontenido y no interfiere con otras reglas de firewall.

Para agregar multiples peers, anade sus IPs al set elements:

elements = { 198.51.100.1, 203.0.113.1 }

Activa nftables para que las reglas persistan entre reinicios y recarga para aplicar el nuevo include:

sudo systemctl enable --now nftables
sudo systemctl reload nftables

Verifica que las reglas estan cargadas:

sudo nft list table inet bgp-filter

Deberias ver las IPs de tus peers en los sets y las reglas del chain listadas.

Resumen de seguridad

Proteccion Que hace Configurado en
GTSM (ttl-security hops 1) Descarta paquetes BGP que no son de un peer directamente conectado vtysh, por vecino
TCP MD5 (password) Autentica segmentos TCP, previene inyeccion de RST vtysh, por vecino
Prefix-list (salida) Solo anuncia tus propios prefijos vtysh, route-map
Prefix-list (entrada) Rechaza rangos bogon/reservados vtysh, por vecino
maximum-prefix Cierra la sesion si el peer envia demasiadas rutas vtysh, por address-family
nftables Restringe TCP 179 a IPs de peers conocidos /etc/nftables.d/bgp.conf

Como verificar la sesion BGP y la propagacion de prefijos

Despues de guardar la configuracion con write memory, la sesion BGP deberia empezar a establecerse. La verificacion se hace en tres etapas: comprobaciones locales con vtysh, tabla de rutas del kernel y looking glasses externos.

Comandos de verificacion en vtysh

Comando Que muestra
show bgp summary Todos los peers, su estado, prefijos recibidos
show bgp ipv4 unicast Tabla BGP IPv4
show bgp ipv6 unicast Tabla BGP IPv6
show bgp ipv4 unicast neighbors PEER_IPV4 advertised-routes Lo que estas enviando al peer
show bgp ipv4 unicast neighbors PEER_IPV4 received-routes Lo que el peer te envia (requiere soft-reconfiguration inbound)
show ip bgp neighbors PEER_IPV4 Estado detallado del vecino, uptime, capabilities

Comprueba el estado de la sesion:

sudo vtysh -c "show bgp summary"

Salida esperada (recortada):

IPv4 Unicast Summary:
BGP router identifier YOUR_IPV4, local AS number YOUR_ASN, vrf default
Neighbor        V    AS   MsgRcvd  MsgSent  TblVer   InQ  OutQ  Up/Down  State/PfxRcd
PEER_IPV4       4  PEER_ASN   1205     843       0      0     0 01:23:45        12

Observa la columna State/PfxRcd. Un numero indica que la sesion esta establecida y se recibieron esa cantidad de prefijos. Si ves Active, Connect u OpenSent, la sesion aun no esta activa. Consulta la seccion de solucion de problemas.

Verifica que tu prefijo se esta anunciando:

sudo vtysh -c "show bgp ipv4 unicast neighbors PEER_IPV4 advertised-routes"

Tu prefijo deberia aparecer en la salida. Si no aparece, verifica que:

  1. La interfaz dummy esta activa (ip addr show dummy-bgp).
  2. La ruta existe en el kernel (ip route show YOUR_PREFIX_V4).
  3. La declaracion network coincide con el prefijo y mascara exactos.

Verificacion externa

Comprueba desde fuera de tu red que el prefijo es visible en internet.

Desde tu maquina local (no el VPS):

traceroute YOUR_PREFIX_V4_FIRST_IP

Usa bgp.tools para buscar tu prefijo y verificar:

  • El AS de origen coincide con tu ASN.
  • El estado ROA muestra "Valid" (no "Unknown" ni "Invalid").
  • El prefijo es visible desde multiples puntos de vista.

Tambien puedes consultar el looking glass de RIPE RIS:

curl -s "https://stat.ripe.net/data/looking-glass/data.json?resource=YOUR_PREFIX_V4" | python3 -m json.tool | head -50

Persistencia de la configuracion

FRR guarda su configuracion en /etc/frr/frr.conf cuando ejecutas write memory en vtysh. Mientras el servicio FRR este activado (systemctl enable frr), lee este archivo al arrancar.

Verifica ambos mecanismos de persistencia:

sudo systemctl is-enabled frr

Deberia devolver enabled.

sudo vtysh -c "show running-config" | head -5

Compara con el archivo guardado:

head -5 /etc/frr/frr.conf

Deberian coincidir. Si difieren, ejecuta write memory de nuevo.

La interfaz dummy persiste a traves de systemd-networkd (configurada antes). Verifica:

sudo systemctl is-enabled systemd-networkd

frr.conf completo y anotado

Aqui tienes una configuracion de ejemplo completa como referencia. Reemplaza todos los placeholders con tus valores.

frr version 10.5.3
frr defaults traditional
hostname bgp-vps
log syslog informational
!
! --- Prefix-lists: salida (solo nuestros prefijos) ---
ip prefix-list OUR-PREFIXES-V4 seq 10 permit 203.0.113.0/24
ip prefix-list OUR-PREFIXES-V4 seq 999 deny any
!
ipv6 prefix-list OUR-PREFIXES-V6 seq 10 permit 2001:db8:abc::/48
ipv6 prefix-list OUR-PREFIXES-V6 seq 999 deny any
!
! --- Prefix-lists: filtros bogon de entrada ---
ip prefix-list BOGONS-V4 seq 10 deny 0.0.0.0/8 le 32
ip prefix-list BOGONS-V4 seq 20 deny 10.0.0.0/8 le 32
ip prefix-list BOGONS-V4 seq 30 deny 100.64.0.0/10 le 32
ip prefix-list BOGONS-V4 seq 40 deny 127.0.0.0/8 le 32
ip prefix-list BOGONS-V4 seq 50 deny 169.254.0.0/16 le 32
ip prefix-list BOGONS-V4 seq 60 deny 172.16.0.0/12 le 32
ip prefix-list BOGONS-V4 seq 70 deny 192.0.2.0/24 le 32
ip prefix-list BOGONS-V4 seq 80 deny 192.88.99.0/24 le 32
ip prefix-list BOGONS-V4 seq 90 deny 192.168.0.0/16 le 32
ip prefix-list BOGONS-V4 seq 100 deny 198.18.0.0/15 le 32
ip prefix-list BOGONS-V4 seq 110 deny 198.51.100.0/24 le 32
ip prefix-list BOGONS-V4 seq 120 deny 203.0.113.0/24 le 32
ip prefix-list BOGONS-V4 seq 130 deny 224.0.0.0/4 le 32
ip prefix-list BOGONS-V4 seq 140 deny 240.0.0.0/4 le 32
ip prefix-list BOGONS-V4 seq 999 permit 0.0.0.0/0 le 24
!
ipv6 prefix-list BOGONS-V6 seq 10 deny ::/8 le 128
ipv6 prefix-list BOGONS-V6 seq 20 deny 100::/64 le 128
ipv6 prefix-list BOGONS-V6 seq 30 deny 2001:2::/48 le 128
ipv6 prefix-list BOGONS-V6 seq 40 deny 2001:10::/28 le 128
ipv6 prefix-list BOGONS-V6 seq 50 deny 2001:db8::/32 le 128
ipv6 prefix-list BOGONS-V6 seq 60 deny 3fff::/20 le 128
ipv6 prefix-list BOGONS-V6 seq 70 deny 2002::/16 le 128
ipv6 prefix-list BOGONS-V6 seq 80 deny 3ffe::/16 le 128
ipv6 prefix-list BOGONS-V6 seq 90 deny 5f00::/16 le 128
ipv6 prefix-list BOGONS-V6 seq 100 deny fc00::/7 le 128
ipv6 prefix-list BOGONS-V6 seq 110 deny fe80::/10 le 128
ipv6 prefix-list BOGONS-V6 seq 120 deny fec0::/10 le 128
ipv6 prefix-list BOGONS-V6 seq 130 deny ff00::/8 le 128
ipv6 prefix-list BOGONS-V6 seq 999 permit ::/0 le 48
!
! --- Route-maps ---
route-map EXPORT-V4 permit 10
 match ip address prefix-list OUR-PREFIXES-V4
!
route-map EXPORT-V6 permit 10
 match ipv6 address prefix-list OUR-PREFIXES-V6
!
route-map IMPORT-V4 permit 10
 match ip address prefix-list BOGONS-V4
!
route-map IMPORT-V6 permit 10
 match ipv6 address prefix-list BOGONS-V6
!
! --- Configuracion BGP ---
router bgp 212345
 bgp router-id 198.51.100.2
 no bgp default ipv4-unicast
 !
 ! Peer IPv4
 neighbor 198.51.100.1 remote-as 6939
 neighbor 198.51.100.1 description Upstream-v4
 neighbor 198.51.100.1 password SECRET
 neighbor 198.51.100.1 ttl-security hops 1
 neighbor 198.51.100.1 soft-reconfiguration inbound
 !
 ! Peer IPv6
 neighbor 2001:db8:1::1 remote-as 6939
 neighbor 2001:db8:1::1 description Upstream-v6
 neighbor 2001:db8:1::1 password SECRET
 neighbor 2001:db8:1::1 ttl-security hops 1
 neighbor 2001:db8:1::1 soft-reconfiguration inbound
 !
 address-family ipv4 unicast
  network 203.0.113.0/24
  neighbor 198.51.100.1 activate
  neighbor 198.51.100.1 route-map EXPORT-V4 out
  neighbor 198.51.100.1 route-map IMPORT-V4 in
  neighbor 198.51.100.1 prefix-list BOGONS-V4 in
  neighbor 198.51.100.1 maximum-prefix 500000 80
 exit-address-family
 !
 address-family ipv6 unicast
  network 2001:db8:abc::/48
  neighbor 2001:db8:1::1 activate
  neighbor 2001:db8:1::1 route-map EXPORT-V6 out
  neighbor 2001:db8:1::1 route-map IMPORT-V6 in
  neighbor 2001:db8:1::1 prefix-list BOGONS-V6 in
  neighbor 2001:db8:1::1 maximum-prefix 200000 80
 exit-address-family
!

Solucion de problemas

Sesion BGP atascada en estado Active o Connect

La sesion intenta establecerse pero TCP 179 no puede conectar. Verifica en orden:

  1. Firewall: ¿Puedes alcanzar el peer en TCP 179?
    sudo nft list ruleset | grep 179
    
  2. IP del peer: ¿La IP del vecino es correcta? Los errores tipograficos son la causa mas comun.
    sudo vtysh -c "show bgp neighbors PEER_IPV4" | grep "BGP state"
    
  3. MD5 no coincide: Si usas TCP MD5, ambos lados deben tener exactamente la misma cadena de contrasena. No hay un mensaje de error claro para esto. La sesion simplemente no se establece.
  4. GTSM: Si ttl-security hops 1 esta configurado pero el peer esta a multiples saltos (a traves de NAT o tunel), la verificacion de TTL falla. Elimina ttl-security y usa ebgp-multihop en su lugar para sesiones multi-hop.

Prefijo no visible externamente

Tu sesion esta establecida pero el prefijo no aparece en los looking glasses.

  1. Verifica las rutas anunciadas:

    sudo vtysh -c "show bgp ipv4 unicast neighbors PEER_IPV4 advertised-routes"
    

    Si tu prefijo no esta listado, el filtro de salida lo esta bloqueando. Verifica que la prefix-list coincide con tu prefijo exacto.

  2. Verifica la ruta en el kernel:

    ip route show YOUR_PREFIX_V4
    

    Si no aparece, la interfaz dummy esta caida o mal configurada.

  3. Verifica la validez ROA: Si tu ROA no existe o es incorrecto, las redes que validan RPKI descartaran tu anuncio. Verifica en RIPE RPKI Validator.

Lectura de logs

FRR envia logs a syslog por defecto. Para seguir eventos especificos de BGP:

journalctl -u frr -f --grep="bgpd"

Para una salida mas detallada, activa debug temporalmente en vtysh:

debug bgp updates
debug bgp keepalives

Desactivalo cuando termines (es muy verboso):

no debug bgp updates
no debug bgp keepalives

Proximos pasos

  • Agregar validacion RPKI: Configura el soporte RPKI integrado de FRR para validar rutas entrantes contra datos ROA. Consulta .
  • Filtrado avanzado: Construye route-maps mas granulares con coincidencia de communities, filtros AS-path y ajuste de local-preference. Consulta .
  • Monitoreo: Configura monitoreo de sesiones BGP con herramientas como Prometheus + bgp_exporter o Zabbix SNMP traps para recibir alertas cuando una sesion cae.

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
Configuracion BGP con FRRouting en un VPS Linux