CARP (CARP)

Перейти к навигации Перейти к поиску
CARP
Название Common Address Redundancy Protocol
Уровень (по модели OSI) 3 (сетевой)
Семейство TCP/IP
Создан в 2003
Назначение протокола распределение IP-адреса по нескольким хостам
Разработчик OpenBSD[1]

CARP (от англ. Common Address Redundancy Protocol — протокол дупликации общего адреса) — сетевой протокол, основной задачей которого является использование одного IP-адреса несколькими хостами в пределах сегмента сети.

CARP является свободной, безопасной (в той степени, в какой вообще можно говорить о безопасности протокола ARP) альтернативой протоколам VRRP и HSRP. CARP позволяет выделить группу хостов в сегменте сети и назначить ей один IP-адрес. Такая группа называется «redundancy group» (группа избыточности). В пределах этой группы один из хостов становится «главным», а остальные обозначаются как «резервные». В каждый момент времени мастер-хост отвечает на ARP-запросы к назначенному IP-адресу и обрабатывает трафик, идущий к этому адресу. Каждый хост одновременно может принадлежать к нескольким группам.

Одним распространённым случаем использования CARP является создание избыточности на брандмауэрах. Виртуальный IP-адрес, который назначен на группу избыточности, указан на клиентских машинах в качестве шлюза по умолчанию. В случае отказа брандмауэра, выполняющего роль мастера, резервный брандмауэр возьмёт этот IP-адрес и продолжит обслуживание клиентов. Дизайн CARP требует, чтобы члены одной группы физически находились в одной подсети с одним статическим IP-адресом, хотя с введением директивы carpdev нет необходимости назначать адрес на физический интерфейс. Сервисы, требующие постоянного соединения с сервером (такие, как SSH и IRC) не могут быть прозрачно переброшены в случае отказа и потребуют переподключения. CARP не может синхронизировать данные между приложениями. Для решения этой проблемы могут использоваться дополнительные механизмы, осуществляющие синхронизацию состояния брандмауэров, например, pfsync.

CARP также поддерживает распределение нагрузки посредством балансировки ARP. Когда хосты, объединённые в CARP-группу, принимают ARP-запрос, то исходящий IP-адрес используется для определения, какой из хостов будет отвечать. В этом случае хост, выбранный главным для виртуальной группы, ответит, а остальные проигнорируют запрос. Связанные серверы примут различные ARP-ответы и последующий трафик будет балансироваться между серверами. В случае отказа одного из хостов в CARP-группе один из оставшихся перехватит виртуальный MAC-адрес и будет отвечать на ARP-запросы. Балансировка ARP работает только в локальном сегменте. Она невозможна при использовании промежуточного маршрутизатора, так как маршрутизатор будет направлять данные на один и тот же хост.

История создания

[править | править код]

В конце 90-х IETF начал работать над созданием протокола для резервирования маршрутизаторов. В 1997 году компания Cisco сообщила, что подобный протокол (HSRP) уже запатентован ими. Тем не менее, IETF продолжал работу над протоколом VRRP. Поскольку VRRP решил проблемы протокола HSRP, Cisco стала использовать VRRP, утверждая, что он является их собственностью.

Из-за патента на HSRP было невозможно разработать свободную реализацию VRRP, поэтому программисты команды OpenBSD начали разрабатывать CARP как альтернативу патентованному VRRP. Чтобы избежать судебного иска из-за патента HSRP, разработчики гарантировали, что CARP существенно отличается от HSRP. Разработка протокола была завершена командой проекта OpenBSD в октябре 2003 года, и первой операционной системой с поддержкой CARP стала OpenBSD 3.5[2]. Позже поддержка протокола появилась во FreeBSD (под именем "ucarp") и NetBSD, а затем и в DragonFlyBSD.

Примечания

[править | править код]
  1. carp — Common Address Redundancy Protocol
  2. What's new in OpenBSD 3.5 Архивная копия от 29 июня 2011 на Wayback Machine (англ.)