Common Address Redundancy Protocol
The Common Address Redundancy Protocol or CARP is a protocol which allows multiple hosts on the same local network to share a set of IP addresses. Its primary purpose is to provide failover redundancy, especially when used with firewalls and routers. In some configurations CARP can also provide load balancing functionality. CARP provides functionality similar to both VRRP and HSRP. The protocol is implemented on several BSD based operating systems, and has been ported to Linux. Its authors claim that it does not infringe on U.S. Patent 5,473,599, which applies to HSRP.
If there is a single computer running a packet filter, and it goes down, the networks on either side of the packet filter can no longer communicate with each other, or they communicate without any packet filtering. If, however, there are two computers running a packet filter, running CARP, then if one fails, the other will take over, and computers on either side of the packet filter will not be aware of the failure, so operation will continue as normal. In order to make sure the new master operates the same as the old one, pfsyncd is used to synchronize packet filter states.
Principle of redundancy
A group of hosts using CARP is called a "group of redundancy". The group of redundancy allocates itself an IP address which is shared or divided among the members of the group. Within this group, a host is designated as "Master". The other members are called "slaves". The main host is that which "takes" the IP address. It answers any traffic or ARP request brought to the attention of this address. Each host can belong to several groups of redundancy. Each host must have a second unique IP address.
A common use of CARP is the creation of a group of redundant firewalls. The virtual IP address allotted to the group of redundancy is indicated as the address of the default router on the computers behind this group of firewalls. If the main firewall breaks down or is disconnected from the network, the virtual IP address will be taken by one of the firewall slaves and the service availability will not be interrupted.
||The neutrality of this section is disputed. (October 2013)|
In the late 1990s IETF began working on a solution to the problem of shared IPs. In 1997, Cisco informed them that this was already covered by Cisco patents. In 1998, Cisco told them it was covered by their patent of HSRP (Hot Standby Router Protocol). Nonetheless, IETF continued work on VRRP (Virtual Router Redundancy Protocol). After some debate, the IETF VRRP working group decided it was appropriate to allow patented material in a standard, as long as it was made available to third parties under RAND (Reasonable and Non-Discriminatory) Licensing terms. Because VRRP fixed problems with the HSRP protocol, Cisco began using VRRP instead, while still claiming it as its own.
Cisco informed the OpenBSD developers they would enforce their patent of HSRP. This may have been related to their lawsuit with Alcatel. Thus, a free implementation of VRRP could not be made. OpenBSD developers started CARP as an alternative to the patented VRRP, as the "reasonable and non-discriminatory" licensing terms necessarily excluded open-source implementations. To avoid infringing the HSRP patent, they ensured their idea for CARP was fundamentally different. Because of OpenBSD's focus on security, CARP was designed with security in mind, and is designed to use cryptography. It became available, completely for free, in October 2003. It was integrated into FreeBSD and released initially with FreeBSD 5.4 in May 2005. It has since been integrated into NetBSD.
No official Internet protocol number
As a final note of course, when we petitioned IANA, the IETF body regulating "official" internet protocol numbers, to give us numbers for CARP and pfsync our request was denied. Apparently we had failed to go through an official standards organization. Consequently we were forced to choose a protocol number which would not conflict with anything else of value, and decided to place CARP at IP protocol 112. We also placed pfsync at an open and unused number. We informed IANA of these decisions, but they declined to reply.
At the time when this request was made, IP protocol numbers were allocated by IANA according to the rules in RFC 2780, i.e., under the "IESG Approval" or "Standards Action" process (with "Expert Review" being a third option that was not applicable to this request). Both of these processes required a textual specification describing the protocol for which a protocol number is requested, which did not exist for CARP. No technical specification was submitted for CARP, and IANA declined the request for a unique protocol number assignment.
Incompatibility with IANA standards
CARP uses a range of ethernet MAC addresses which had previously been assigned by IANA to the VRRP protocol. It is not possible to run VRRP and CARP on the same network with the same VRRP group ID as CARP virtual host ID due to MAC address conflicts.
- Gateway Load Balancing Protocol (GLBP)
- IP network multipathing (IPMP)
- IETF source
- FreeBSD 5.4 i386 release notes, retrieved 2010-01-06
- "CARP License". OpenBSD Release Songs. 2004-05-01.
- RFC 2338
- OpenBSD's carp(4) man page
- FreeBSD's carp(4) man page
- Firewall Failover with pfsync and CARP
- UCARP: userland CARP implementation
- NetBSD port of CARP
- The OpenBSD song 3.5: "CARP License" and "Redundancy must be free"