К одной удаленной точке, которая была доступна только по WiFi, появился 100 Мбит/с канал. Решили сделать так, чтобы при падении 100 Мбит/с канала связь переруливалась на WiFi, а при восстановлении — все переруливалось обратно (т. к. пользователям той удаленной точки мы предоставляем интернет). С обеих сторон стоят циски, есть небольшой пул «белых» IP-адресов.
Первым делом задал два default-маршрута с разной метрикой:
ip route 0.0.0.0 0.0.0.0 A.B.C.73
ip route 0.0.0.0 0.0.0.0 A.B.C.81 10
И, о чудо, при отключении 100 Мбит/с канала, в лабораторных условиях, естественно :-), трафик пошел через A.B.C.81 10. Вот только при восстановлении 100 Мбит/с канала назад ничего не перерулилось.
Решил реализовать все при помощи BGP.
Со стороны удаленной точки:
router bgp 65534 bgp log-neighbor-changes network A.B.C.76 mask 255.255.255.252 neighbor A.B.C.73 remote-as 65533 neighbor A.B.C.73 send-community neighbor A.B.C.73 soft-reconfiguration inbound neighbor A.B.C.73 route-map FiberUplink-IN in neighbor A.B.C.73 route-map FiberUplink-out out neighbor A.B.C.81 remote-as 65533 neighbor A.B.C.81 send-community neighbor A.B.C.81 soft-reconfiguration inbound neighbor A.B.C.81 route-map RadioUplink-IN in neighbor A.B.C.81 route-map RadioUplink-out out ! access-list 1 permit 0.0.0.0 access-list 1 deny any ip prefix-list RemotePrefixes seq 10 permit A.B.C.76/30 route-map RadioUplink-out permit 10 match ip address prefix-list RemotePrefixes ! route-map FiberUplink-out permit 10 match ip address prefix-list RemotePrefixes ! route-map FiberUplink-IN permit 10 match ip address 1 set weight 1000 ! route-map RadioUplink-IN permit 10 match ip address 1 set weight 10 !
Немного опишу:
network A.B.C.76 mask 255.255.255.252 — объявляю, что хочу аплинку проанонсировать эту подсеть.
access-list 1 permit 0.0.0.0
access-list 1 deny any — хочу принимать только default-префикс (full-view мне там не нужен, да и памяти на удаленной циске маловато)
route-map FiberUplink-IN permit 10
set weight 1000 — ставлю бОльший приоритет на скоростной аплинк
Теперь конфиг с главного узла:
router bgp 65533 neighbor A.B.C.74 remote-as 65534 neighbor A.B.C.74 send-community neighbor A.B.C.74 default-originate neighbor A.B.C.74 soft-reconfiguration inbound neighbor A.B.C.74 route-map RemoteFiberUplink-IN in neighbor A.B.C.74 route-map RemoteFiberUplink out neighbor A.B.C.82 remote-as 65534 neighbor A.B.C.82 send-community neighbor A.B.C.82 default-originate neighbor A.B.C.82 soft-reconfiguration inbound neighbor A.B.C.82 route-map RemoteRadioUplink-IN in neighbor A.B.C.82 route-map RemoteRadioUplink out ! ip prefix-list RemotePrefixes seq 10 permit A.B.C.76/30 access-list 10 permit 0.0.0.0 access-list 10 deny any route-map RemoteFiberUplink-IN permit 10 match ip address prefix-list RemotePrefixes set weight 1000 ! route-map RemoteRadioUplink-IN permit 10 match ip address prefix-list RemotePrefixes set weight 10 ! route-map RemoteRadioUplink permit 10 match ip address 10 ! route-map RemoteFiberUplink permit 10 match ip address 10 !
Вот с такими настройками заработало именно так, как мне надо было. При падении основного канала нужно минуты, примерно, три на то, чтобы циски заметили падение, и секунду-две для восстановление основного маршрута при появлении основного аплинка.