CARP (Common Address Redundacy Protocol) — сетевой протокол, предназначенный для организации работы отказоустойчивых маршрутизаторов и брандмауэров, путём назначения группе хостов общего для группы IP-адреса.
CARP позволяет сделать так, чтобы у нескольких хостов в одной сети (широковещательном домене) был общий IP-адрес. Эта группа хостов называется группой избыточности (redundancy group). Группе назначается один IP-адрес, которые используется совместно (но не одновременно!) всеми членами этой группы. Внутри группы есть один основной хост (master) и остальные — запасные (backups). IP-адрес в один момент времени есть только у основного хоста (master host), он отвечает на все ARP-запросы по этому адресу. Каждый хост в одно и то же время может входить в несколько различных групп.
IP-адрес в один момент времени есть только у основного хоста (master host), он отвечает на все ARP-запросы по этому адресу. В случае отказа сервера, выполняющего роль мастера, среди резервных серверов будет выбран новый мастер, который примет виртуальный IP-адрес и продолжит обслуживание клиентов.
Наиболее частое примение CARP – группы избыточных брандмауэров. Такой группе назначается единый IP-адрес, который указывается на клиентских машинах как шлюз по умолчанию. В случае, когда основной брандмауэр выходит из строя (или становится недоступным), IP-адрес передаётся на запасной брандмауэр, и работа не останавливается.
При использовании CARP снижаются требования к аппаратному обеспечению отказоустойчивых систем. Дорогое оборудование окажется бессильным к выдернутому шнуру питания или перед администратором, случайно отправившим сервер в перезагрузку. CARP также облегчает процесс обновления программного обеспечения, так цикл обновления и перезагрузки прозрачен для пользователей, становится проще и процесс тестирования программного или аппаратного обеспечения – вы всегда можете положиться на резерв, пока не устраните проблему.
Однако, есть ситуации, когда CARP не может помочь. Дизайн CARP требует, чтобы члены одной группы физически находились в одной подсети с одним статическим IP адресом, хотя с введением директивы carpdev необходимости назначать адрес на физический интерфейс нет. Сервисы, требующие постоянного соединения с сервером (такие как SSH и IRC) не могут быть прозрачно переброшены в случае отказа и потребуют переподключения. CARP не может синхронизировать данные между приложениями.
CARP поддерживает IPv4 и IPv6.
Протокол CARP был разработан и предложен командой OpenBSD как свободная замена протокола VRRP, имеющего некоторые сложности с патентами, поскольку он основывается на проприетарном и запатентованном протоколе HSRP.
Он появился впервые в дереве OpenBSD в октябре 2004, а в мае 2005 уже был включен в релиз, OpenBSD 3.5.
Реализация CARP на уровне ядра есть в
Существует реализация UCARP в виде программы, работающей в пространстве пользователя (userland).
Чаще всего CARP используется в сочетании с PF и pfsync для организации отказоустойчивых брандмауэров. Обычно средой доступа для этого протокола является ethernet, но, в принципе, возможны и другие варианты.