mirror of
				https://git.proxmox.com/git/mirror_frr
				synced 2025-11-04 11:34:27 +00:00 
			
		
		
		
	doc: add VRRP documentation
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
This commit is contained in:
		
							parent
							
								
									2fff50ec01
								
							
						
					
					
						commit
						b58ab00f72
					
				@ -80,6 +80,9 @@ IP
 | 
			
		||||
iptables
 | 
			
		||||
ipv
 | 
			
		||||
IPv
 | 
			
		||||
IPvX
 | 
			
		||||
IPv4
 | 
			
		||||
IPv6
 | 
			
		||||
isis
 | 
			
		||||
isisd
 | 
			
		||||
lan
 | 
			
		||||
@ -99,6 +102,8 @@ LSAs
 | 
			
		||||
Masaki
 | 
			
		||||
Mbit
 | 
			
		||||
Mbits
 | 
			
		||||
macvlan
 | 
			
		||||
macvlans
 | 
			
		||||
mib
 | 
			
		||||
motd
 | 
			
		||||
mpls
 | 
			
		||||
@ -227,6 +232,7 @@ VN
 | 
			
		||||
VNC
 | 
			
		||||
vrf
 | 
			
		||||
vrfs
 | 
			
		||||
vrrp
 | 
			
		||||
vty
 | 
			
		||||
Vty
 | 
			
		||||
vtysh
 | 
			
		||||
 | 
			
		||||
@ -56,6 +56,7 @@ Protocols
 | 
			
		||||
   sharp
 | 
			
		||||
   static
 | 
			
		||||
   vnc
 | 
			
		||||
   vrrp
 | 
			
		||||
 | 
			
		||||
########
 | 
			
		||||
Appendix
 | 
			
		||||
 | 
			
		||||
@ -37,6 +37,7 @@ user_RSTFILES = \
 | 
			
		||||
	doc/user/snmptrap.rst \
 | 
			
		||||
	doc/user/static.rst \
 | 
			
		||||
	doc/user/vnc.rst \
 | 
			
		||||
	doc/user/vrrp.rst \
 | 
			
		||||
	doc/user/vtysh.rst \
 | 
			
		||||
	doc/user/zebra.rst \
 | 
			
		||||
	doc/user/bfd.rst \
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										506
									
								
								doc/user/vrrp.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										506
									
								
								doc/user/vrrp.rst
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,506 @@
 | 
			
		||||
.. _vrrp:
 | 
			
		||||
 | 
			
		||||
****
 | 
			
		||||
VRRP
 | 
			
		||||
****
 | 
			
		||||
 | 
			
		||||
:abbr:`VRRP` stands for Virtual Router Redundancy Protocol. This protocol is
 | 
			
		||||
used to allow multiple backup routers on the same segment to take over
 | 
			
		||||
operation of each others' IP addresses if the primary router fails. This is
 | 
			
		||||
typically used to provide fault-tolerant gateways to hosts on the segment.
 | 
			
		||||
 | 
			
		||||
FRR implements VRRPv2 (:rfc:`3768`) and VRRPv3 (:rfc:`5798`). For VRRPv2, no
 | 
			
		||||
authentication methods are supported; these are deprecated in the VRRPv2
 | 
			
		||||
specification as they do not provide any additional security over the base
 | 
			
		||||
protocol.
 | 
			
		||||
 | 
			
		||||
.. note::
 | 
			
		||||
 | 
			
		||||
   - VRRP is supported on Linux 5.1+
 | 
			
		||||
   - VRRP does not implement Accept_Mode
 | 
			
		||||
 | 
			
		||||
.. _vrrp-starting:
 | 
			
		||||
 | 
			
		||||
Starting VRRP
 | 
			
		||||
=============
 | 
			
		||||
 | 
			
		||||
The configuration file for *vrrpd* is :file:`vrrpd.conf`. The typical location
 | 
			
		||||
of :file:`vrrpd.conf` is |INSTALL_PREFIX_ETC|/vrrpd.conf.
 | 
			
		||||
 | 
			
		||||
If using integrated config, then :file:`vrrpd.conf` need not be present and
 | 
			
		||||
:file:`frr.conf` is read instead.
 | 
			
		||||
 | 
			
		||||
.. program:: vrrpd
 | 
			
		||||
 | 
			
		||||
:abbr:`VRRP` supports all the common FRR daemon start options which are
 | 
			
		||||
documented elsewhere.
 | 
			
		||||
 | 
			
		||||
.. _vrrp-protocol-overview:
 | 
			
		||||
 | 
			
		||||
Protocol Overview
 | 
			
		||||
=================
 | 
			
		||||
 | 
			
		||||
From :rfc:`5798`:
 | 
			
		||||
 | 
			
		||||
   VRRP specifies an election protocol that dynamically assigns responsibility
 | 
			
		||||
   for a virtual router to one of the VRRP routers on a LAN. The VRRP router
 | 
			
		||||
   controlling the IPv4 or IPv6 address(es) associated with a virtual router is
 | 
			
		||||
   called the Master, and it forwards packets sent to these IPv4 or IPv6
 | 
			
		||||
   addresses. VRRP Master routers are configured with virtual IPv4 or IPv6
 | 
			
		||||
   addresses, and VRRP Backup routers infer the address family of the virtual
 | 
			
		||||
   addresses being carried based on the transport protocol. Within a VRRP
 | 
			
		||||
   router, the virtual routers in each of the IPv4 and IPv6 address families
 | 
			
		||||
   are a domain unto themselves and do not overlap. The election process
 | 
			
		||||
   provides dynamic failover in the forwarding responsibility should the Master
 | 
			
		||||
   become unavailable. For IPv4, the advantage gained from using VRRP is a
 | 
			
		||||
   higher-availability default path without requiring configuration of dynamic
 | 
			
		||||
   routing or router discovery protocols on every end-host. For IPv6, the
 | 
			
		||||
   advantage gained from using VRRP for IPv6 is a quicker switchover to Backup
 | 
			
		||||
   routers than can be obtained with standard IPv6 Neighbor Discovery
 | 
			
		||||
   mechanisms.
 | 
			
		||||
 | 
			
		||||
VRRP accomplishes these goals primarily by using a virtual MAC address shared
 | 
			
		||||
between the physical routers participating in a VRRP virtual router. This
 | 
			
		||||
reduces churn in the neighbor tables of hosts and downstream switches and makes
 | 
			
		||||
router failover theoretically transparent to these devices.
 | 
			
		||||
 | 
			
		||||
FRR implements the election protocol and handles changing the operating system
 | 
			
		||||
interface configuration in response to protocol state changes.
 | 
			
		||||
 | 
			
		||||
As a consequence of the shared virtual MAC requirement, VRRP is currently
 | 
			
		||||
supported only on Linux, as Linux is the only operating system that provides
 | 
			
		||||
the necessary features in its network stack to make implementing this protocol
 | 
			
		||||
feasible.
 | 
			
		||||
 | 
			
		||||
When a VRRP router is acting as the Master router, FRR allows the interface(s)
 | 
			
		||||
with the backed-up IP addresses to remain up and functional. When the router
 | 
			
		||||
transitions to Backup state, these interfaces are set into ``protodown`` mode.
 | 
			
		||||
This is an interface mode that is functionally equivalent to ``NO-CARRIER``.
 | 
			
		||||
Physical drivers typically use this state indication to drop traffic on an
 | 
			
		||||
interface. In the case of VRRP, the interfaces in question are macvlan devices,
 | 
			
		||||
which are virtual interfaces. Since the IP addresses managed by VRRP are on
 | 
			
		||||
these interfaces, this has the same effect as removing these addresses from the
 | 
			
		||||
interface, but is implemented as a state flag.
 | 
			
		||||
 | 
			
		||||
.. _vrrp-configuration:
 | 
			
		||||
 | 
			
		||||
Configuring VRRP
 | 
			
		||||
================
 | 
			
		||||
 | 
			
		||||
VRRP is configured on a per-interface basis, with some global defaults
 | 
			
		||||
accessible outside the interface context.
 | 
			
		||||
 | 
			
		||||
.. _vrrp-system-configuration:
 | 
			
		||||
 | 
			
		||||
System Configuration
 | 
			
		||||
--------------------
 | 
			
		||||
 | 
			
		||||
FRR's VRRP implementation uses Linux macvlan devices to to implement the shared
 | 
			
		||||
virtual MAC feature of the protocol. Currently, it does not create those system
 | 
			
		||||
interfaces - they must be configured outside of FRR before VRRP can be enabled
 | 
			
		||||
on them.
 | 
			
		||||
 | 
			
		||||
Each interface on which VRRP will be enabled must have at least one macvlan
 | 
			
		||||
device configured with the virtual MAC and placed in the proper operation mode.
 | 
			
		||||
The addresses backed up by VRRP are assigned to these interfaces.
 | 
			
		||||
 | 
			
		||||
Suppose you have an interface ``eth0`` with the following configuration:
 | 
			
		||||
 | 
			
		||||
.. code-block:: console
 | 
			
		||||
 | 
			
		||||
   $ ip link show eth0
 | 
			
		||||
   2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
 | 
			
		||||
       link/ether 02:17:45:00:aa:aa brd ff:ff:ff:ff:ff:ff
 | 
			
		||||
       inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic eth0
 | 
			
		||||
          valid_lft 72532sec preferred_lft 72532sec
 | 
			
		||||
       inet 10.0.2.16/24 brd 10.0.2.255 scope global dynamic eth0
 | 
			
		||||
          valid_lft 72532sec preferred_lft 72532sec
 | 
			
		||||
       inet6 fe80::17:45ff:fe00:aaaa/64 scope link
 | 
			
		||||
          valid_lft forever preferred_lft forever
 | 
			
		||||
 | 
			
		||||
Suppose the address you want to back up is ``10.0.2.16``, and will be managed
 | 
			
		||||
by the virtual router with id ``5``. A macvlan device with the appropriate MAC
 | 
			
		||||
address must be created before VRRP can begin to operate.
 | 
			
		||||
 | 
			
		||||
If you are using ``ifupdown2``, the configuration is as follows:
 | 
			
		||||
 | 
			
		||||
.. code-block:: console
 | 
			
		||||
 | 
			
		||||
   iface eth0
 | 
			
		||||
    ...
 | 
			
		||||
    vrrp 5 10.0.2.16/24 2001:0db8::0370:7334/64
 | 
			
		||||
 | 
			
		||||
Applying this configuration with ``ifreload -a`` will create the appropriate
 | 
			
		||||
macvlan device. If you are using ``iproute2``, the equivalent configuration is:
 | 
			
		||||
 | 
			
		||||
.. code-block:: console
 | 
			
		||||
 | 
			
		||||
   ip link add vrrp4-2-1 link eth0 addrgenmode random type macvlan mode bridge
 | 
			
		||||
   ip link set dev vrrp4-2-1 address 00:00:5e:00:01:05
 | 
			
		||||
   ip addr add 10.0.2.16/24 dev vrrp4-2-1
 | 
			
		||||
   ip link set dev vrrp4-2-1 up
 | 
			
		||||
 | 
			
		||||
   ip link add vrrp6-2-1 link eth0 addrgenmode random type macvlan mode bridge
 | 
			
		||||
   ip link set dev vrrp4-2-1 address 00:00:5e:00:02:05
 | 
			
		||||
   ip addr add 2001:db8::370:7334/64 dev vrrp6-2-1
 | 
			
		||||
   ip link set dev vrrp6-2-1 up
 | 
			
		||||
 | 
			
		||||
In either case, the created interfaces will look like this:
 | 
			
		||||
 | 
			
		||||
.. code-block:: console
 | 
			
		||||
 | 
			
		||||
   $ ip addr show vrrp4-2-1
 | 
			
		||||
   5: vrrp4-2-1@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
 | 
			
		||||
       link/ether 00:00:5e:00:01:05 brd ff:ff:ff:ff:ff:ff
 | 
			
		||||
       inet 10.0.2.16/24 scope global vrrp4-2-1
 | 
			
		||||
          valid_lft forever preferred_lft forever
 | 
			
		||||
       inet6 fe80::dc56:d11a:e69d:ea72/64 scope link stable-privacy
 | 
			
		||||
          valid_lft forever preferred_lft forever
 | 
			
		||||
 | 
			
		||||
   $ ip addr show vrrp6-2-1
 | 
			
		||||
   8: vrrp6-2-1@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
 | 
			
		||||
    link/ether 00:00:5e:00:02:05 brd ff:ff:ff:ff:ff:ff
 | 
			
		||||
    inet6 2001:db8::370:7334/64 scope global
 | 
			
		||||
       valid_lft forever preferred_lft forever
 | 
			
		||||
    inet6 fe80::f8b7:c9dd:a1e8:9844/64 scope link stable-privacy
 | 
			
		||||
       valid_lft forever preferred_lft forever
 | 
			
		||||
 | 
			
		||||
Using ``vrrp4-2-1`` as an example, a few things to note about this interface:
 | 
			
		||||
 | 
			
		||||
- It is slaved to ``eth0``; any packets transmitted on this interface will
 | 
			
		||||
  egress via ``eth0``
 | 
			
		||||
- Its MAC address is set to the VRRP IPv4 virtual MAC specified by the RFC for
 | 
			
		||||
  :abbr:`VRID (Virtual Router ID)` ``5``
 | 
			
		||||
- The link local address on the interface is not derived from the interface
 | 
			
		||||
  MAC
 | 
			
		||||
 | 
			
		||||
First to note is that packets transmitted on this interface will egress via
 | 
			
		||||
``eth0``, but with their Ethernet source MAC set to the VRRP virtual MAC. This
 | 
			
		||||
is how FRR's VRRP implementation accomplishes the virtual MAC requirement on
 | 
			
		||||
real hardware.
 | 
			
		||||
 | 
			
		||||
Ingress traffic is a more complicated matter. Macvlan devices have multiple
 | 
			
		||||
operating modes that change how ingress traffic is handled. Of relevance to
 | 
			
		||||
FRR's implementation are the ``bridge`` and ``private`` modes. In ``private``
 | 
			
		||||
mode, any ingress traffic on ``eth0`` (in our example) with a source MAC
 | 
			
		||||
address equal to the MAC address on any of ``eth0``'s macvlan devices will be
 | 
			
		||||
placed *only* on that macvlan device. This curious behavior is undesirable,
 | 
			
		||||
since FRR's implementation of VRRP needs to be able to receive advertisements
 | 
			
		||||
from neighbors while in Backup mode - i.e., while its macvlan devices are in
 | 
			
		||||
``protodown on``. If the macvlan devices are instead set to ``bridge`` mode,
 | 
			
		||||
all ingress traffic shows up on all interfaces - including ``eth0`` -
 | 
			
		||||
regardless of source MAC or any other factor. Consequently, macvlans used by
 | 
			
		||||
FRR for VRRP must be set to ``bridge`` mode or the protocol will not function
 | 
			
		||||
correctly.
 | 
			
		||||
 | 
			
		||||
As for the MAC address assigned to this interface, the last byte of the address
 | 
			
		||||
holds the :abbr:`VRID (Virtual Router Identifier)`, in this case ``0x05``. The
 | 
			
		||||
second to last byte is ``0x01``, as specified by the RFC for IPv4 operation.
 | 
			
		||||
The IPv6 MAC address is be identical except that the second to last byte is
 | 
			
		||||
defined to be ``0x02``. Two things to note from this arrangement:
 | 
			
		||||
 | 
			
		||||
1. There can only be up to 255 unique Virtual Routers on an interface (only 1
 | 
			
		||||
   byte is available for the VRID)
 | 
			
		||||
2. IPv4 and IPv6 addresses must be assigned to different macvlan devices,
 | 
			
		||||
   because they have different MAC addresses
 | 
			
		||||
 | 
			
		||||
Finally, take note of the generated IPv6 link local address on the interface.
 | 
			
		||||
For interfaces on which VRRP will operate in IPv6 mode, this link local
 | 
			
		||||
*cannot* be derived using the usual EUI-64 method. This is because VRRP
 | 
			
		||||
advertisements are sent from the link local address of this interface, and VRRP
 | 
			
		||||
uses the source address of received advertisements as part of its election
 | 
			
		||||
algorithm. If the IPv6 link local of a router is equivalent to the IPv6 link
 | 
			
		||||
local in a received advertisement, this can cause both routers to assume the
 | 
			
		||||
Master role (very bad). ``ifupdown`` knows to set the ``addrgenmode`` of the
 | 
			
		||||
interface properly, but when using ``iproute2`` to create the macvlan devices,
 | 
			
		||||
you must be careful to manually specify ``addrgenmode random``.
 | 
			
		||||
 | 
			
		||||
A brief note on the Backup state
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
It is worth noting here that an alternate choice for the implementation of the
 | 
			
		||||
Backup state, such as removing all the IP addresses assigned to the macvlan
 | 
			
		||||
device or deleting their local routes instead of setting the device into
 | 
			
		||||
``protodown on``, would allow the protocol to function regardless of whether
 | 
			
		||||
the macvlan device(s) are set to ``private`` or ``bridge`` mode. Indeed, the
 | 
			
		||||
strange behavior of the kernel macvlan driver in ``private`` mode, whereby it
 | 
			
		||||
performs what may be thought of as a sort of interface-level layer 2 "NAT"
 | 
			
		||||
based on source MAC, can be traced back to a patch clearly designed to
 | 
			
		||||
accommodate a VRRP implementation from a different vendor. However, the
 | 
			
		||||
``protodown`` based implementation allows for a configuration model in which
 | 
			
		||||
FRR does not dynamically manage the addresses assigned on a system, but instead
 | 
			
		||||
just manages interface state. Such a scenario was in mind when this protocol
 | 
			
		||||
implementation was initially built, which is why the other choices are not
 | 
			
		||||
currently present. Since support for placing macvlan devices into ``protodown``
 | 
			
		||||
was not added to Linux until version 5.1, this also explains the relatively
 | 
			
		||||
restrictive kernel versioning requirement.
 | 
			
		||||
 | 
			
		||||
In the future other methods of implementing Backup state may be added along
 | 
			
		||||
with a configuration knob to choose between them.
 | 
			
		||||
 | 
			
		||||
.. _vrrp-interface-configuration:
 | 
			
		||||
 | 
			
		||||
Interface Configuration
 | 
			
		||||
-----------------------
 | 
			
		||||
 | 
			
		||||
Continuing with the example from the previous section, we assume the macvlan
 | 
			
		||||
interfaces have been properly configured with the proper MAC addresses and the
 | 
			
		||||
IPvX addresses assigned.
 | 
			
		||||
 | 
			
		||||
In FRR, a possible VRRPv3 configuration for this interface is:
 | 
			
		||||
 | 
			
		||||
.. code-block:: frr
 | 
			
		||||
 | 
			
		||||
   interface eth0
 | 
			
		||||
    vrrp 5 version 3
 | 
			
		||||
    vrrp 5 priority 200
 | 
			
		||||
    vrrp 5 advertisement-interval 1500
 | 
			
		||||
    vrrp 5 ip 10.0.2.16
 | 
			
		||||
    vrrp 5 ipv6 2001:0db8::0370:7334
 | 
			
		||||
 | 
			
		||||
VRRP will activate as soon as the first IPvX address configuration line is
 | 
			
		||||
encountered. If you do not want this behavior, use the :clicmd:`vrrp (1-255)
 | 
			
		||||
shutdown` command, and apply the ``no`` form when you are ready to activate
 | 
			
		||||
VRRP.
 | 
			
		||||
 | 
			
		||||
At this point executing ``show vrrp`` will display the following:
 | 
			
		||||
 | 
			
		||||
.. code-block:: console
 | 
			
		||||
 | 
			
		||||
   ubuntu-bionic# show vrrp
 | 
			
		||||
 | 
			
		||||
    Virtual Router ID                    5
 | 
			
		||||
    Protocol Version                     3
 | 
			
		||||
    Autoconfigured                       Yes
 | 
			
		||||
    Shutdown                             No
 | 
			
		||||
    Interface                            eth0
 | 
			
		||||
    VRRP interface (v4)                  vrrp4-2-5
 | 
			
		||||
    VRRP interface (v6)                  vrrp6-2-5
 | 
			
		||||
    Primary IP (v4)                      10.0.2.15
 | 
			
		||||
    Primary IP (v6)                      fe80::9b91:7155:bf6a:d386
 | 
			
		||||
    Virtual MAC (v4)                     00:00:5e:00:01:05
 | 
			
		||||
    Virtual MAC (v6)                     00:00:5e:00:02:05
 | 
			
		||||
    Status (v4)                          Master
 | 
			
		||||
    Status (v6)                          Master
 | 
			
		||||
    Priority                             200
 | 
			
		||||
    Effective Priority (v4)              200
 | 
			
		||||
    Effective Priority (v6)              200
 | 
			
		||||
    Preempt Mode                         Yes
 | 
			
		||||
    Accept Mode                          Yes
 | 
			
		||||
    Advertisement Interval               1500 ms
 | 
			
		||||
    Master Advertisement Interval (v4)   1000 ms
 | 
			
		||||
    Master Advertisement Interval (v6)   1000 ms
 | 
			
		||||
    Advertisements Tx (v4)               14
 | 
			
		||||
    Advertisements Tx (v6)               14
 | 
			
		||||
    Advertisements Rx (v4)               0
 | 
			
		||||
    Advertisements Rx (v6)               0
 | 
			
		||||
    Gratuitous ARP Tx (v4)               1
 | 
			
		||||
    Neigh. Adverts Tx (v6)               1
 | 
			
		||||
    State transitions (v4)               2
 | 
			
		||||
    State transitions (v6)               2
 | 
			
		||||
    Skew Time (v4)                       210 ms
 | 
			
		||||
    Skew Time (v6)                       210 ms
 | 
			
		||||
    Master Down Interval (v4)            3210 ms
 | 
			
		||||
    Master Down Interval (v6)            3210 ms
 | 
			
		||||
    IPv4 Addresses                       1
 | 
			
		||||
    ..................................   10.0.2.16
 | 
			
		||||
    IPv6 Addresses                       1
 | 
			
		||||
    ..................................   2001:db8::370:7334
 | 
			
		||||
 | 
			
		||||
At this point, VRRP has sent gratuitous ARP requests for the IPv4 address,
 | 
			
		||||
Unsolicited Neighbor Advertisements for the IPv6 address, and has asked Zebra
 | 
			
		||||
to send Router Advertisements on its behalf. It is also transmitting VRRPv3
 | 
			
		||||
advertisements on the macvlan interfaces.
 | 
			
		||||
 | 
			
		||||
The Primary IP fields are of some interest, as the behavior may be
 | 
			
		||||
counterintuitive. These fields show the source address used for VRRP
 | 
			
		||||
advertisements. Although VRRPv3 advertisements are always transmitted on the
 | 
			
		||||
macvlan interfaces, in the IPv4 case the source address is set to the primary
 | 
			
		||||
IPv4 address on the base interface, ``eth0`` in this case. This is a protocol
 | 
			
		||||
requirement, and IPv4 VRRP will not function unless the base interface has an
 | 
			
		||||
IPv4 address assigned. In the IPv6 case the link local of the macvlan interface
 | 
			
		||||
is used.
 | 
			
		||||
 | 
			
		||||
If any misconfiguration errors are detected, VRRP for the misconfigured address
 | 
			
		||||
family will not come up and the configuration issue will be logged to FRR's
 | 
			
		||||
configured logging destination.
 | 
			
		||||
 | 
			
		||||
Per the RFC, IPv4 and IPv6 virtual routers are independent of each other. For
 | 
			
		||||
instance, it is possible for the IPv4 router to be in Backup state while the
 | 
			
		||||
IPv6 router is in Master state; or for either to be completely inoperative
 | 
			
		||||
while the other is operative, etc. Instances sharing the same base interface
 | 
			
		||||
and VRID are shown together in the show output for conceptual convenience.
 | 
			
		||||
 | 
			
		||||
To complete your VRRP deployment, configure other routers on the segment with
 | 
			
		||||
the exact same system and FRR configuration as shown above. Provided each
 | 
			
		||||
router receives the others' VRRP advertisements, the Master election protocol
 | 
			
		||||
will run, one Master will be elected, and the other routers will place their
 | 
			
		||||
macvlan interfaces into ``protodown on`` until Master fails or priority values
 | 
			
		||||
are changed to favor another router.
 | 
			
		||||
 | 
			
		||||
Switching the protocol version to VRRPv2 is accomplished simply by changing
 | 
			
		||||
``version 3`` to ``version 2`` in the VRID configuration line. Note that VRRPv2
 | 
			
		||||
does not support IPv6, so any IPv6 configuration will be rejected by FRR when
 | 
			
		||||
using VRRPv2.
 | 
			
		||||
 | 
			
		||||
.. note::
 | 
			
		||||
 | 
			
		||||
   All VRRP routers initially start in Backup state, and wait for the
 | 
			
		||||
   calculated Master Down Interval to pass before they assume Master status.
 | 
			
		||||
   This prevents downstream neighbor table churn if another router is already
 | 
			
		||||
   Master with higher priority, meaning this box will ultimately assume Backup
 | 
			
		||||
   status once the first advertisement is received. However, if the calculated
 | 
			
		||||
   Master Down Interval is high and this router is configured such that it will
 | 
			
		||||
   ultimately assume Master status, then it will take a while for this to
 | 
			
		||||
   happen.  This is a known issue.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
All interface configuration commands are documented below.
 | 
			
		||||
 | 
			
		||||
.. index:: [no] vrrp (1-255) [version (2-3)]
 | 
			
		||||
.. clicmd:: [no] vrrp (1-255) [version (2-3)]
 | 
			
		||||
 | 
			
		||||
   Create a VRRP router with the specified VRID on the interface. Optionally
 | 
			
		||||
   specify the protocol version. If the protocol version is not specified, the
 | 
			
		||||
   default is VRRPv3.
 | 
			
		||||
 | 
			
		||||
.. index:: [no] vrrp (1-255) advertisement-interval (10-40950)
 | 
			
		||||
.. clicmd:: [no] vrrp (1-255) advertisement-interval (10-40950)
 | 
			
		||||
 | 
			
		||||
   Set the advertisement interval. This is the interval at which VRRP
 | 
			
		||||
   advertisements will be sent. Values are given in milliseconds, but must be
 | 
			
		||||
   multiples of 10, as VRRP itself uses centiseconds.
 | 
			
		||||
 | 
			
		||||
.. index:: [no] vrrp (1-255) ip A.B.C.D
 | 
			
		||||
.. clicmd:: [no] vrrp (1-255) ip A.B.C.D
 | 
			
		||||
 | 
			
		||||
   Add an IPv4 address to the router. This address must already be configured
 | 
			
		||||
   on the appropriate macvlan device. Adding an IP address to the router will
 | 
			
		||||
   implicitly activate the router; see :clicmd:`[no] vrrp (1-255) shutdown` to
 | 
			
		||||
   override this behavior.
 | 
			
		||||
 | 
			
		||||
.. index:: [no] vrrp (1-255) ipv6 X:X::X:X
 | 
			
		||||
.. clicmd:: [no] vrrp (1-255) ipv6 X:X::X:X
 | 
			
		||||
 | 
			
		||||
   Add an IPv6 address to the router. This address must already be configured
 | 
			
		||||
   on the appropriate macvlan device. Adding an IP address to the router will
 | 
			
		||||
   implicitly activate the router; see :clicmd:`[no] vrrp (1-255) shutdown` to
 | 
			
		||||
   override this behavior.
 | 
			
		||||
 | 
			
		||||
   This command will fail if the protocol version is set to VRRPv2, as VRRPv2
 | 
			
		||||
   does not support IPv6.
 | 
			
		||||
 | 
			
		||||
.. index:: [no] vrrp (1-255) preempt
 | 
			
		||||
.. clicmd:: [no] vrrp (1-255) preempt
 | 
			
		||||
 | 
			
		||||
   Toggle preempt mode. When enabled, preemption allows Backup routers with
 | 
			
		||||
   higher priority to take over Master status from the existing Master. Enabled
 | 
			
		||||
   by default.
 | 
			
		||||
 | 
			
		||||
.. index:: [no] vrrp (1-255) priority (1-254)
 | 
			
		||||
.. clicmd:: [no] vrrp (1-255) priority (1-254)
 | 
			
		||||
 | 
			
		||||
   Set the router priority. The router with the highest priority is elected as
 | 
			
		||||
   the Master. If all routers in the VRRP virtual router are configured with
 | 
			
		||||
   the same priority, the router with the highest primary IP address is elected
 | 
			
		||||
   as the Master. Priority value 255 is reserved for the acting Master router.
 | 
			
		||||
 | 
			
		||||
.. index:: [no] vrrp (1-255) shutdown
 | 
			
		||||
.. clicmd:: [no] vrrp (1-255) shutdown
 | 
			
		||||
 | 
			
		||||
   Place the router into administrative shutdown. VRRP will not activate for
 | 
			
		||||
   this router until this command is removed with the ``no`` form.
 | 
			
		||||
 | 
			
		||||
.. _vrrp-global-configuration:
 | 
			
		||||
 | 
			
		||||
Global Configuration
 | 
			
		||||
--------------------
 | 
			
		||||
 | 
			
		||||
Show commands, global defaults and debugging configuration commands.
 | 
			
		||||
 | 
			
		||||
.. index:: show vrrp [interface INTERFACE] [(1-255)] [json]
 | 
			
		||||
.. clicmd:: show vrrp [interface INTERFACE] [(1-255)] [json]
 | 
			
		||||
 | 
			
		||||
   Shows VRRP status for some or all configured VRRP routers. Specifying an
 | 
			
		||||
   interface will only show routers configured on that interface. Specifying a
 | 
			
		||||
   VRID will only show routers with that VRID. Specifying ``json`` will dump
 | 
			
		||||
   each router state in a JSON array.
 | 
			
		||||
 | 
			
		||||
.. index:: debug vrrp [{protocol|autoconfigure|packets|sockets|ndisc|arp|zebra}]
 | 
			
		||||
.. clicmd:: debug vrrp [{protocol|autoconfigure|packets|sockets|ndisc|arp|zebra}]
 | 
			
		||||
 | 
			
		||||
   Toggle debugging logs for some or all components of VRRP.
 | 
			
		||||
 | 
			
		||||
   protocol
 | 
			
		||||
      Logs state changes, election protocol decisions, and interface status
 | 
			
		||||
      changes.
 | 
			
		||||
 | 
			
		||||
   autoconfigure
 | 
			
		||||
      Logs actions taken by the autoconfiguration procedures. See
 | 
			
		||||
      :ref:`vrrp-autoconfiguration`.
 | 
			
		||||
 | 
			
		||||
   packets
 | 
			
		||||
      Logs details of ingress and egress packets. Includes packet decodes and
 | 
			
		||||
      hex dumps.
 | 
			
		||||
 | 
			
		||||
   sockets
 | 
			
		||||
      Logs details of socket configuration and initialization.
 | 
			
		||||
 | 
			
		||||
   ndisc
 | 
			
		||||
      Logs actions taken by the Neighbor Discovery component of VRRP.
 | 
			
		||||
 | 
			
		||||
   arp
 | 
			
		||||
      Logs actions taken by the ARP component of VRRP.
 | 
			
		||||
 | 
			
		||||
   zebra
 | 
			
		||||
      Logs communications with Zebra.
 | 
			
		||||
 | 
			
		||||
.. index:: [no] vrrp default <advertisement-interval (1-4096)|preempt|priority (1-254)|shutdown>
 | 
			
		||||
.. clicmd:: [no] vrrp default <advertisement-interval (1-4096)|preempt|priority (1-254)|shutdown>
 | 
			
		||||
 | 
			
		||||
   Configure defaults for new VRRP routers. These values will not affect
 | 
			
		||||
   already configured VRRP routers, but will be applied to newly configured
 | 
			
		||||
   ones.
 | 
			
		||||
 | 
			
		||||
.. _vrrp-autoconfiguration:
 | 
			
		||||
 | 
			
		||||
Autoconfiguration
 | 
			
		||||
-----------------
 | 
			
		||||
 | 
			
		||||
In light of the complicated configuration required on the base system before
 | 
			
		||||
VRRP can be enabled, FRR has the ability to automatically configure VRRP
 | 
			
		||||
sessions by inspecting the interfaces present on the system. Since it is quite
 | 
			
		||||
unlikely that macvlan devices with VRRP virtual MACs will exist on systems not
 | 
			
		||||
using VRRP, this can be a convenient shortcut to automatically generate FRR
 | 
			
		||||
configuration.
 | 
			
		||||
 | 
			
		||||
After configuring the interfaces as described in
 | 
			
		||||
:ref:`vrrp-system-configuration`, and configuring any defaults you may want,
 | 
			
		||||
execute the following command:
 | 
			
		||||
 | 
			
		||||
.. index:: [no] vrrp autoconfigure [version (2-3)]
 | 
			
		||||
.. clicmd:: [no] vrrp autoconfigure [version (2-3)]
 | 
			
		||||
 | 
			
		||||
   Generates VRRP configuration based on the interface configuration on the
 | 
			
		||||
   base system. Any existing interfaces that are configured properly for VRRP -
 | 
			
		||||
   i.e. have the correct MAC address, link local address (when required), IPv4
 | 
			
		||||
   and IPv6 addresses - are used to create a VRRP router on their parent
 | 
			
		||||
   interfaces, with VRRP IPvX addresses taken from the addresses assigned to
 | 
			
		||||
   the macvlan devices. The generated configuration appears in the output of
 | 
			
		||||
   ``show run``, which can then be modified as needed and written to the config
 | 
			
		||||
   file. The ``version`` parameter controls the protocol version; if using
 | 
			
		||||
   VRRPv2, keep in mind that IPv6 is not supported and will not be configured.
 | 
			
		||||
 | 
			
		||||
The following configuration is then generated for you:
 | 
			
		||||
 | 
			
		||||
.. code-block:: frr
 | 
			
		||||
 | 
			
		||||
   interface eth0
 | 
			
		||||
    vrrp 5
 | 
			
		||||
    vrrp 5 ip 10.0.2.16
 | 
			
		||||
    vrrp 5 ipv6 2001:db8::370:7334
 | 
			
		||||
 | 
			
		||||
VRRP is automatically activated. Global defaults, if set, are applied.
 | 
			
		||||
 | 
			
		||||
You can then edit this configuration with **vtysh** as needed, and commit it by
 | 
			
		||||
writing to the configuration file.
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user