Con este escenario, puede darse algún caso concreto, en el que los routers BGP estén activos, pero la sesion eBGP caida. Con este escenario concreto estaríamos publicando todavía la ruta default hacia dentro, pero en realidad no tenemos salida. Para solucionar esto me he tenido que currar un pequeño script que detecte el estado del peer BGP, y si está activo, que levante la ruta default.
Lo primero es decirle a OSPF que distribuya la ruta default solo en caso de tenerla instalada y activa.
/routing ospf instance
set distribute-default=if-installed-as-type-1 numbers=0
Después creamos la ruta default (estática), con un comentario (route_default), que es el que usará el script para activar o desactivar la ruta.
/ip route add dst-address=0.0.0.0/0 gateway=X.X.X.X comment="route_default" disabled=no
X.X.X.X Será la dirección de nuestro gateway. Normalmente la misma que la de nuestro peer BGP (excepto en peers Multihop).
Debemos configurar el peering eBGP con nuestro peer. Al nombre del peer le daremos el nombre "peerBGP1" . Nos aseguraremos de que conecte bien.
Con todo esto hecho, creamos un script como este:
/system script add name="Check_BGP" owner="admin" policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive last-started=jun/28/2015 21:45:47 run-count=378 source=
#Declare Variable. Nom del PEER BGP
:global PeerName "peerBGP1";
#Declare Variable. Nom de l'ultim estat conegut del peer BGP.
:global BgpLastState
#Declare Variable. Estat acutal del PeerBGP.
:global BgpCurrentState [/routing bgp peer get [:pick [find name=$PeerName] 0] state];
#Declare variable. Comentari que ha de tindre la ruta default.
:global RouteComment "route_default";
#Comprobe que el peer no estiga deshabilitat.
:if ([:len $BgpCurrentState] = 0 ) do={:global BgpCurrentState "peer_disabled"};
#Comprobe si hi han canvis d'estat i aplique configuracions.
:if \
($BgpLastState != $BgpCurrentState) do=\
{\
:if ($BgpCurrentState = "established")\
do=\
{\
[ip route enable [find comment=$RouteComment]];\
[:set BgpLastState $BgpCurrentState];\
[:log info "peering BGP established";];\
[:log warning "ruta 0.0.0.0/0 habilitada";];\
}\
else=\
{\
[ip route disable [find comment=$RouteComment]];\
[:set BgpLastState $BgpCurrentState];\
[:log warning "peering BGP caigut";];\
[:log error "ruta 0.0.0.0/0 deshabilitada";];\
}
}
Con el script funcionando solo nos queda añadirlo al Scheduler para que se ejecute cada 10 segundos.
/system scheduler add interval=10s on-event=Check_BGP name= schedule_bgp_script.
Todas las configuraciones las hago en los dos routers que hacen el eBGP.
De momento tengo el script en el escenario de pruebas, y funciona a la perfección. En breve pasará al entorno de producción. Se aceptan mejoras (y hasta críticas).