CARP кластер – настройка отказоустойчивости в pfSense

Задача:
---------------------------------------------------------------Настроить отказоустойчивый кластер CARP High Availability в файрволе pfSense
Отказоустойчивая конфигурация в pfSense базируется на сетевом протоколе дупликации общего адреса CARP(Common Address Redundancy Protocol) и механизме для сихронизации состояния pfsync.
CARP позволяет использовать один IP-адрес с виртуальным MAC, нескольким хостам в одном сегменте сети.
В идеале, для связи между маршрутизаторами (pfSense), необходимо иметь отдельную физическую сетевую карту. При отсутствии такой возможности, настраивайте VLAN.
В данной статье мы будем рассматривать именно вариант с наличием отдельной сетевой карты.
Активировать новый сетевой интерфейс можно в меню: Interfaces > Interface Assignments.

Для удобства дадим интерфейсу имя “HA”, для этого нажимаем на только что созданный интерфейс

При настройке интерфейсов учитывайте, что необходимо использовать частные диапазоны IP-адресов.
- 10.0.0.0 — 10.255.255.255 (маска подсети для бесклассовой (CIDR) адресации: 255.0.0.0 или /8)
- 100.64.0.0 — 100.127.255.255 (маска подсети 255.192.0.0 или /10) – Данная подсеть рекомендована согласно RFC 6598 для использования в качестве адресов для CGN (Carrier-Grade NAT).
- 172.16.0.0 — 172.31.255.255 (маска подсети: 255.240.0.0 или /12)
- 192.168.0.0 — 192.168.255.255 (маска подсети: 255.255.0.0 или /16)
Для синхронизации будем использоваться сеть с маской 30 (255.255.255.252). Получаем сеть с такими параметрами:
- Netmask -255.255.255.252
- Bitmask – 30
- Network – 172.31.255.0
- Broadcast – 172.31.255.3
- Hostmin – 172.31.255.1
- Hostmax – 172.31.255.2
Настраиваем первый маршрутизатор он же MASTER

Аналогично настраиваем второй маршрутизатор, только с другим ip-адресом.

Для тестирования сети создаём правило в котором разрешаем любой трафик, хотя для теста достаточно разрешить пакеты ICMP. Создавать нужно на обоих файрволах

В принципе можно для этого интерфейса разрешить любой трафик и оставить так для рабочего варианта.

Или в зависимости от условий можно минимизировать правила.

Если будете минимизировать правила, на втором маршрутизаторе они будет выглядеть аналогично

Переходим в меню “Диагностика” и проверяем доступность хостов

Теперь на мастере необходимо добавить нового пользователя. Пользоваться своим пользователем, можно, но не нужно 🙂

Заполняем согласно картинки

Сохраняем и наживаем редактирования

Редактируем “Group membership” (тут вы должны быть в группу администраторов, смело жмём “Move to Members of list”) и “Effective Privileges“

Разработчики pfSense реализовали возможность синхронизировать все настройки сервера. Для этого в Configuration Synchronization Settings (XMLRPC Sync) указываем указать логин и пароль админа второго роутера и отмечаем флажками данные, которые необходимо отправлять. Для этого будет лучшим завести отдельного пользователя с правами описанными на картинке выше.

Я отметил все имеющиеся варианты, вы можете выделить только то что необходимо.

После сохранения, практически сразу можно проверять второй маршрутизатор на наличие пользователя “HA”. Список пользователей должен быть аналогичным как на первом маршрутизаторе. Если что то пошло не так, смотрим логи.

Создадим виртуальные IP Адреса

Создаём виртуальный WAN IP

Создаём виртуальный LAN IP

Ну и наконец то, переходим к настройке отказоустойчивости.

указываем интерфейс и адрес второго маршрутизатора

В меню “Status > CARP (failover)” можно проверить статус работы CARP.

На втором маршрутизаторе должна быть аналогичная картина, с единственным отличием, должно быть написано “Backup”

Переходим в настройки DHCP сервера главного маршрутизатора

Указываем в качестве “Gateway” виртуальный адрес LAN, а в качестве “Failover peer IP” адрес резервного маршрутизатора. Также не забываем и подправить другие сервисы, если вы используете ещё что то.

Указываем виртуальный IP адрес в качестве DNS сервера

Следующим шагом необходимо настроить исходящий NAT для CARP, чтобы клиенты в локальной сети использовали общий внешний IP-адрес. Для этого:
- В меню Firewall> NAT , открываем вкладка Outbound.
- Выбираем “Manual Outbound NAT rule generation. (AON – Advanced Outbound NAT)“
- Нажимаем “Save“

Подтверждаем изменения: “Apply Changes”

Появившиеся правила необходимо перенастроить для работы с IP-адресом CARP. Нажимаем на карандашик и меняем в разделе “Translation” адрес на внешний виртуальны IP

Приводим все к виду

Стоит упомянуть что про добавлении нового интерфейса для локальной сети, придется добавлять правила
Блин! ну почему ни кто не пишет об привязке к интерфейсам, а к не Описанию?
Что нужно смотреть что и как привязано к интерфейсу не по имени описания, а именно к opt(X)
CARP работает также как и VRRP в CISCO. Привязка к физическому(виртуальному) интерфейсу.
Будете долго мучатся и не понимать почему идут ошибки, не находятся сети, ругается на различие firware
Новичкам разобраться в CARP тяжело!
вот что пишется в официальной документации, правда opnsense