Назад | Перейти на главную страницу

Переключение маршрутизатора при отказе не обнаруживает потерю связи с внешним интерфейсом

Предположим, у меня есть два маршрутизатора, настроенных в конфигурации главный / подчиненный.

Они выглядят примерно так (адреса не настоящие)

123.123.123.10  <===> [eth0] Router 1 (10.1.1.2) [eth1] ===> +----------+
                                                             | 10.1.1.1 | ===> LAN
172.123.123.10  <===> [eth0] Router 2 (10.1.1.3) [eth1] ===> +----------+

10.1.1.1 - это маршрут по умолчанию для сети (10.1.1.0). Что немного отличается в этой конфигурации от других, которые я видел, так это то, что у меня нет внешнего виртуального IP-адреса. Кроме того, адреса 10.1.1.1 в действительности являются общедоступными IP (здесь не показаны частные). Это скорее настройка маршрутизатора, чем настройка брандмауэра, поэтому я здесь не использую NAT.

Теперь проблема, с которой я столкнулся, заключается в том, что я не вижу способа настроить UCARP или VRRP для мониторинга как eth0, так и eth1 и переключения на резервный маршрутизатор, если любой из них выйдет из строя. Я вижу, что если Router1 является ведущим и я отключу eth0 от router1, он не переключится на маршрутизатор 2. Однако это произойдет, если вместо этого я отключу eth1 от маршрутизатора 1.
Я вижу, что в VRRP есть группа кластеров, но кажется, что для ее работы вам нужно иметь виртуальные экземпляры ip или vrrp, а не назначенные им реальные интерфейсы.

Надеюсь, мое объяснение понятно. Как мне обойти это?

Чтобы ответить на свой вопрос. В конце концов я нашел ответ в небольшом задокументированном файле конфигурации. (Жалко, что документация keepalived настолько устарела, но продукт все еще находится в разработке и работает очень хорошо)

vrrp_instance default {
  virtual_router_id 1
  interface eth2
  priority 50
  track_interface {
    eth0
    eth1
  }
  virtual_ip_address P
    10.1.1.1/24 brd 10.1.1.255 dev bond0 label bond0:vrrp
  }

  #... other config ...
}

Ключевым моментом здесь является track_interface. В нем говорится, что keepalived будет отслеживать состояние канала eth0 и eth1 при выборе отката. Это переведет узел в состояние отказа.