CARP
CARP (от англ. Common Address Redundancy Protocol — протокол дупликации общего адреса) — сетевой протокол, основной задачей которого является использование одного IP-адреса несколькими хостами в пределах сегмента сети.
CARP | |
---|---|
Название | Common Address Redundancy Protocol |
Уровень (по модели OSI) | 3 (сетевой) |
Семейство | TCP/IP |
Создан в | 2003 |
Назначение протокола | распределение IP-адреса по нескольким хостам |
Разработчик | OpenBSD[1] |
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.