У вас есть несколько Linux-решений для резервирования первого прыжка из вашей локальной сети на два маршрутизатора (Quagga сама не поддерживает VRRP, но вы можете использовать Quagga вместе с любым из них без каких-либо проблем):
- keepalived (как вы уже упоминали)
- uCARP - Linux-порт OpenBSD CARP (Common Address Redundancy Protocol)
- vrrpd - редко документированный и в значительной степени непроверенный демон VRRP, но, тем не менее, опция
Обратите внимание, что ни один из них не имеет ничего общего с избыточностью BGP, что, я считаю, является реальной проблемой, которую вы пытаетесь решить. Однако должно быть вполне возможно запустить VRRP на стороне провайдера двух ваших хостов Quagga и настроить виртуальный IP-адрес VRRP как «вашу сторону» вашего назначенного провайдера / 30 и использовать его для взаимодействия с вашим провайдером. Время восстановления при сбое, вероятно, будет близко к тому же (если не на волосок быстрее) решению с Linux-HA ниже. С учетом сказанного я лично считаю, что решение Linux-HA будет чище и проще, но это также может зависеть от топологии.
Что касается ваших вариантов с BGP, существует проект IETF для «многосессионного BGP», который вводит новый код возможности BGP, целью которого является поддержка нескольких сеансов BGP с одним и тем же узлом по одному и тому же адресу, но в этом проекте предполагается, что оба сеанса будут быть на том же устройстве, однако проект является совершенно новым, и поддержка этого вряд ли будет в текущих версиях Quagga.
Еще один вариант - использовать Linux-HA для настройки кластера пульса между вашими двумя блоками и настроить его так, чтобы в случае сбоя основного маршрутизатора пульс распознал это и включил Quagga / BGPd / etc на резервном маршрутизаторе. когда это произойдет.