BGP (Border Gateway Protocol) es el protocolo de enrutamiento utilizado para intercambiar información de rutas entre diferentes sistemas autónomos (AS) en Internet. Es el protocolo que permite que los grandes proveedores de servicios de Internet (ISP), centros de datos y redes empresariales decidan la mejor ruta para enviar datos a través de múltiples redes interconectadas.
BGP se clasifica como un protocolo de vector de rutas y es externo (eBGP) cuando opera entre diferentes AS, o interno (iBGP) cuando opera dentro del mismo AS. Su característica clave es que toma decisiones basadas en políticas configuradas manualmente, lo que le da gran flexibilidad y control.
En resumen, BGP es el «GPS» de Internet, guiando los datos a su destino a través del camino más eficiente según políticas establecidas.
Dicho esto, en este post vamos a configurar BGP en varios FortiGate todo en un entorno de laboratorio con GNS3 simulando un entorno real con «IPs públicas» y veremos cómo aprenden y anuncian las rutas correspondientes. El esquema de red con el que trabajaremos será tal que así:

Tenemos tres FortiGate conectados a internet. Entre el HUB y los SPOKE montaremos una VPN IPSEC dónde hablaremos BGP entre los equipos. Recuerda que los selectores de la fase 2 deben estar a 0/0 para que funcione correctamente:
- HUB Configuración VPN IPSEC: Fase 1
config vpn ipsec phase1-interface
edit "VPN_SPOKE_1"
set interface "port1"
set peertype any
set net-device disable
set proposal des-md5
set dhgrp 1
set nattraversal disable
set remote-gw 2.74.18.9
set psksecret ENC 5VpZJ9m7FFeOZYEgTNypZe1E0xH3VcRLNUkH4ClZ7Wlt+s3iU5vOKaCYTzHjK6Y55ewkHkkvVvycZ0IYq0X/qXqdQt1JOjdDTPx/AXRVam9qnA3XJrtXv9Hxspl7wkEW47MnEJ9COAanjI9BDVoUVbNyRW5G6kqZNl9DpJ7M+DHulEKRNMdXN3OAwxrx2XYYDfzoFllmMjY3dkVA
next
edit "VPN_SPOKE_2"
set interface "port1"
set peertype any
set net-device disable
set proposal des-md5
set dhgrp 1
set nattraversal disable
set remote-gw 92.159.64.77
set psksecret ENC DRsy0i1BFXAVCaLa3MxKHR3KtEiX0xEuYnJrRAObl0gCgK6GxiF7oZTZAzmav0x6tPBnKUV0MM7fsaNtdRaOjLDhqttMRZyPAGBpYQ5LFuKoUoHu9S3Bnem9DSeagcO4E/JkfH0ce8UDtT3fgZAe6cCBEk6nxlgAPw2/2i5SJFC9aAv/tTjDq9NeJ/VAepIlG9vkm1lmMjY3dkVA
next
end
- HUB Configuración VPN IPSEC: Fase 2
config vpn ipsec phase2-interface
edit "VPN_SPOKE_1"
set phase1name "VPN_SPOKE_1"
set proposal des-md5 des-sha1
set dhgrp 1
set auto-negotiate enable
next
edit "VPN_SPOKE_2"
set phase1name "VPN_SPOKE_2"
set proposal des-md5 des-sha1
set dhgrp 1
set auto-negotiate enable
next
end
- SPOKE_1 Configuración VPN IPSEC: Fase 1
config vpn ipsec phase1-interface
edit "VPN_HUB"
set interface "port1"
set peertype any
set net-device disable
set proposal des-md5
set dhgrp 1
set nattraversal disable
set remote-gw 195.78.69.25
set psksecret ENC kO7D1KO0B3WJ84295kXQGGBZU5yOeES2nCMZuHu9g9Lh4q0lsjfO7R5MfdELl8xN39Ne2bkfG1s8QtXWdFXJ15aiK43SQy5he3JOR0C4ssq/yrH3QFFuVhIi0fV1pXNu2jXzJdw0A95734JbRY6MB7Pr0rBrUcAhiIlphkWArRa1xKYTfakNagW15zId1/Xl+Xl+cFlmMjY3dkVA
next
end
- SPOKE_1 Configuración VPN IPSEC: Fase 2
config vpn ipsec phase2-interface
edit "VPN_HUB"
set phase1name "VPN_HUB"
set proposal des-md5 des-sha1
set dhgrp 1
set auto-negotiate enable
next
end
Como comentaba, vamos a establecer la comunicación BGP mediante las VPN IPSEC. Por ello, vamos a asignarle un direccionamiento a cada túnel para comunicarnos con cada SPOKE.
Por ejemplo, usaremos la red 10.254.254.252/30 para el primer túnel y la 10.254.254.248/30 para el segundo.
NOTA: Tenéis disponible una calculadora IP en el blog para que os ayude con estos cálculos de direccionamiento IPv4.

Lo mismo para los SPOKE:


Una vez realizado esto deberemos poder hacer ping a cada SPOKE desde el HUB:

Lo siguiente que haremos será configurar las Prefix List y los Route Maps. pero… ¿Qué son las PL y RM?
- Prefix List: Es una lista que dice qué redes (prefijos) se permiten o se bloquean. Piensa en ella como un filtro: «esta red sí pasa, esta no». Sirve para controlar qué rutas se aceptan o se anuncian en BGP.
- Route Map: Es como un conjunto de reglas condicionales. Usa las Prefix List (u otros filtros) para decir: «si la ruta cumple esto, entonces haz aquello». Por ejemplo: «si viene de esta red, no la aceptes», o «si la red es esta, cambia su prioridad».
Procedemos a configurar las PL y RM:
- FGT-HUB: PL IN: LFas redes que recibamos mediante BGP y queramos permitir para instalar en la tabla de rutas.

- FGT-HUB: PL OUT: Las redes que queramos anunciar desdFGT-e nuestro lado.

Las Prefix List por si mismas no actuarán, de modo que deberemos asociarlas a un Route Map IN y OUT. En este escenario únicamente vamos a asociarle la PL correspondiente a cada RM.
- FGT-HUB: RM IN

- FGT-HUB: RM OUT

A continuación, procederemos a hacer click en la sección de BGP en el menú izquierdo para seguir con la configuración del Local AS, Neighbor…
- Local AS: Es el número de tu red (AS – Sistema Autónomo). Es como tu DNI en el mundo BGP. Le dice a los demás routers: «Hola, yo soy el AS 65001», por ejemplo. En este caso, usaremos el mismo para todos los equipos, de manera que estareos configurando iBGP en lugar de eBGP.
- Router ID: Es el identificador único del router en BGP. Normalmente es una dirección IP (aunque no tiene por qué estar en uso). Sirve para que los routers BGP se reconozcan entre sí, como si fuera su «nombre de pila».
- Neighbor: Es el router con el que vas a hablar BGP. Tú le dices: «tú eres mi vecino BGP», le das su IP y su número AS, y así ambos pueden intercambiar rutas.

Al configurar los neighbor deberemos especificar su IP, el AS, la interfaz por dónde se comunicará el BGP, los Route MAP…

A continuación, se explica brevemente cada una de las opciones inferiores. Aplicarlas o no dependerá de los requisitos de tu escenario de red, pero te vendrá bien tener estos pequeños apuntes a mano:
Soft Reconfiguration
- Guarda las rutas aprendidas para aplicar filtros más tarde.
- Útil si activas o cambias un filtro y no quieres resetear la sesión BGP.
- Requiere más memoria porque mantiene una copia de las rutas antes del filtrado.
- Es como guardar una copia de seguridad de las rutas «por si acaso».
Capability: Route Refresh
- Permite pedirle al vecino que te reenvíe sus rutas BGP sin reiniciar la sesión.
- Mucho más limpio que usar soft reconfiguration.
- Es como decirle al vecino: «actualízame lo que tienes ahora, pero sin cortar la llamada».
Capability: Graceful Restart
- Si el FortiGate se reinicia rápidamente, las rutas no se borran de inmediato.
- Ideal en entornos donde no puedes permitir pérdida de rutas.
- Es como dejarle el sitio guardado a alguien en una sala cuando sale al baño.
Capability: Default Originate
- Este FortiGate anuncia la ruta 0.0.0.0/0 (default route) al vecino.
- Muy útil si quieres que el otro lado use este FortiGate para salir a Internet.
- Le estás diciendo: «si no sabes a dónde ir, ven por aquí».
Route Reflector Client
- Se usa en clústeres BGP (iBGP con route reflectors).
- Marca a este vecino como cliente del reflector.
- Ignóralo si solo tienes dos FortiGates hablando entre sí.
Next Hop Self
- Hace que el FortiGate diga: “yo soy el siguiente salto” al anunciar rutas.
- Útil si tienes redes internas que no conocen el camino real.
- Es como poner una dirección “de paso” para que todos pasen por ti.
AS Override
- Reemplaza el AS del vecino por el tuyo al reenviar rutas.
- Evita problemas de loop cuando el mismo AS aparece más de una vez.
- Muy útil cuando conectas sitios BGP usando el mismo ASN.
Remove Private AS
- Elimina los AS privados (ej. 64512–65535) antes de anunciar rutas al exterior.
- Evita problemas en redes globales.
- Es como limpiar la ruta antes de mostrársela a alguien de fuera.
Route Server Client
- Se usa en IXP o grandes intercambios BGP.
- No aplica en redes domésticas o empresariales comunes.
- Ignóralo si no estás en un punto neutro de tráfico.
Por último, después de configurar el neighbor podemos asociar el RM_OUT a las redes que queremos anunciar en el BGP:

>>>>>> NOTA: Todos estos pasos los hemos realizado en el HUB, habría que realizar lo mismo para cada SPOKE. <<<<<<
Una vez finalizado todo, si se ha configurado como es debido deberemos ver la sesión BGP activa:
- Por GUI:


- Por CLI:
get router info bgp summary

- Consultar las redes que estamos anunciando a un vecino:
get router info bgp neighbors 10.254.254.253 advertised-routes

- Consultar redes que recibimos de un vecino:
get router info bgp neighbors 10.254.254.253 received-routes

Os dejo también algunos comandos más que os serán útiles para trabajar con BGP en FortiGate:
--------------------------------------------
get router info routing-table bgp
get router info bgp network
get router info bgp summary
get router info bgp neighbors 10.254.254.253 advertised-route -> las rutas que les envias
get router info bgp neighbors 10.254.254.253 received-routes -> rutas que se reciben
--------------------------------------------
Para refrescar tabla BGP
exec router clear bgp ip 10.254.254.249 out
exec router clear bgp ip 10.254.254.249 in
--------------------------------------------
debug diagnose ip router bgp all enable
diagnose ip router bgp level info
diagnose debug enable
--------------------------------------------
Debug BGP puerto 179
diagnose debug flow filter port 179
diagnose debug flow show function-name enable
diagnose debug flow trace start 454545
diagnose debug flow show iprope enable
diagnose debug console timestamp enable
diagnose debug enable
--------------------------------------------
Y hasta aquí este repaso por las principales opciones de BGP en FortiGate. Como ves, con unos cuantos ajustes bien pensados puedes tener una red más estable, ordenada y lista para cualquier cambio. Ahora te toca a ti probar, romper (con cuidado) y sacarle todo el jugo a BGP. ¡Nos leemos en el próximo artículo!