RFC 8475
Using Conditional Router Advertisements for Enterprise Multihoming
RFC 8475 β¨ Using Conditional Router Advertisements for Enterprise Multihoming π
okay bestie, this is part 1 of 4!! π The title block says this one is an Informational doc (so not a Standards Track spec π¦), by J. Linkova (Google) and M. Stucchi (RIPE NCC), dated October 2018. It's an ISSN 2070-1721 RFC, and it doesn't obsolete or update anything. πΈ It's all about how an enterprise can hook up to multiple ISPs using address space those ISPs handed out.
Abstract
so the big picture π§ This doc looks at the most common ways an enterprise network connects to several ISPs using address space assigned by an ISP, and how the approach from "Enterprise Multihoming using Provider-Assigned Addresses without Network Prefix Translation: Requirements and Solution" could be used in those setups. π Here's the tea: enterprise multihoming without any kind of address translation is still unsolved, because two things have to happen. The network has to pick the right egress ISP based on the packet's source address, and hosts have to pick the right source address for the egress ISP they want. π
The other doc fixes the uplink problem by adding a new routing feature called Source Address Dependent Routing, and it uses Router Advertisements to nudge hosts toward the right source address. π₯ This one doesn't try to solve everything. It takes that approach and applies it to a limited set of common use cases, mainly an enterprise with two Internet uplinks running either primary/backup or both at once, where the hosts might not fully support multihoming yet (see RFC 8028). π«Ά
Status of This Memo
boring but important β¨ This is not an Internet Standards Track spec. It's published for information only. π¦
It's a product of the Internet Engineering Task Force (IETF) and reflects the consensus of the IETF community. It went through public review and got approved by the Internet Engineering Steering Group (IESG). Not every IESG-approved doc is a candidate for any level of Internet Standard, so check Section 2 of RFC 7841 for that. π
For the current status, errata, and feedback, go to https://www.rfc-editor.org/info/rfc8475. π
Copyright Notice
Copyright (c) 2018 IETF Trust and the persons identified as the document authors. All rights reserved. π
This doc is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) as they stood on the publication date. Please read them closely, because they spell out your rights and restrictions for this doc. Code Components pulled out of this doc must include the Simplified BSD License text described in Section 4.e of the Trust Legal Provisions, and they come with no warranty, as the Simplified BSD License describes. π
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1. Requirements Language . . . . . . . . . . . . . . . . . . 4
2. Common Enterprise Multihoming Scenarios . . . . . . . . . . . 4
2.1. Two ISP Uplinks, Primary and Backup . . . . . . . . . . . 4
2.2. Two ISP Uplinks, Used for Load-Balancing . . . . . . . . 5
3. Conditional Router Advertisements . . . . . . . . . . . . . . 5
3.1. Solution Overview . . . . . . . . . . . . . . . . . . . . 5
3.1.1. Uplink Selection . . . . . . . . . . . . . . . . . . 5
3.1.2. Source Address Selection and Conditional RAs . . . . 5
3.2. Example Scenarios . . . . . . . . . . . . . . . . . . . . 8
3.2.1. Single Router, Primary/Backup Uplinks . . . . . . . . 8
3.2.2. Two Routers, Primary/Backup Uplinks . . . . . . . . . 9
3.2.3. Single Router, Load-Balancing between Uplinks . . . . 12
3.2.4. Two Routers, Load-Balancing between Uplinks . . . . . 12
3.2.5. Topologies with Dedicated Border Routers . . . . . . 13
3.2.6. Intrasite Communication during Simultaneous Uplinks
Outage . . . . . . . . . . . . . . . . . . . . . . . 15
3.2.7. Uplink Damping . . . . . . . . . . . . . . . . . . . 15
3.2.8. Routing Packets When the Corresponding Uplink Is
Unavailable . . . . . . . . . . . . . . . . . . . . . 16
3.3. Solution Limitations . . . . . . . . . . . . . . . . . . 16
3.3.1. Connections Preservation . . . . . . . . . . . . . . 17
4. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 17
5. Security Considerations . . . . . . . . . . . . . . . . . . . 18
5.1. Privacy Considerations . . . . . . . . . . . . . . . . . 18
6. References . . . . . . . . . . . . . . . . . . . . . . . . . 18
6.1. Normative References . . . . . . . . . . . . . . . . . . 18
6.2. Informative References . . . . . . . . . . . . . . . . . 20
Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . 20
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 21
1. Introduction πΈ
this is the setup bestie π Multihoming is basically a must-have for lots of enterprise networks if they want solid reliability. π But once you're using more than one ISP (and the address space those ISPs gave you), you run into the problem of how to assign IP addresses to hosts. In IPv4 you don't really have a choice: you use private address space [RFC1918] and NAT [RFC3022] at the network edge [RFC4116]. π¦
Provider Independent (PI) address space isn't always an option either, because it means running BGP between the enterprise and the ISPs. Getting and managing PI space can also be a lot of admin work. π
IPv6 hosts can, by design, have multiple global-scope addresses [RFC4291], so multihoming with provider addresses looks even easier for IPv6. β¨ Each ISP hands out an IPv6 block (usually a /48), and hosts in the enterprise get addresses from each ISP's block. π Okay but there's a catch π. Using IPv6 provider-assigned (PA) blocks for multihoming brings some challenges, and this isn't the full list:
- Picking the right uplink based on the packet's source address.
- Telling hosts that some source addresses should or shouldn't be used (for example, when an uplink to the ISP goes down or comes back). π₯
[PROVIDER-ASSIGNED] digs into these challenges, and others, in detail for the general enterprise multihoming case. π§ It leans hard on Rule 5.5 of the default address selection algorithm [RFC6724]. Rule 5.5 makes hosts prefer source addresses in a prefix advertised by the next hop, which is super useful when different routers advertise different prefixes. π
Here's the thing: [RFC6724] calls Rule 5.5 optional, but the more recent [RFC8028] says multihomed hosts SHOULD support it. π Unfortunately, it hasn't been widely implemented yet at the time of writing. So enterprise admins can't assume every device on their network supports Rule 5.5, especially with the very common BYOD ("Bring Your Own Device") situation. π It doesn't seem feasible to solve every multihoming scenario without Rule 5.5, but it is possible to give IPv6 multihoming with PA space for the most common use cases. π This doc shows how the general approach in [PROVIDER-ASSIGNED] can handle multihoming when:
- The enterprise has two or more ISP uplinks.
- Those uplinks are used for Internet access in active/backup or load-sharing mode, with no fancy traffic engineering needs.
- Each ISP assigns the network a subnet from its own PA address space.
- Hosts in the enterprise aren't expected to support Rule 5.5 of the default address selection algorithm [RFC6724].
1.1. Requirements Language π
the rules of the game π The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here. β¨
2. Common Enterprise Multihoming Scenarios π¦
2.1. Two ISP Uplinks, Primary and Backup π
scenario one: the classic failover πΈ This scenario has these key characteristics:
- The enterprise uses uplinks to two (or more) ISPs for Internet access.
- Each ISP assigns IPv6 PA address space to the network.
- One ISP's uplink(s) is the primary (preferred) one. All the other uplinks are backup, and they aren't expected to be used while the primary is up. π
- If the primary uplink is operational, all Internet traffic should flow through it. π
- When the primary uplink fails, Internet traffic needs to flow through the backup uplinks. π
- Recovery of the primary uplink needs to trigger a traffic switchover from the backup uplinks back to the primary. π₯
- Hosts in the enterprise aren't expected to support Rule 5.5 of the default address selection algorithm [RFC6724].
2.2. Two ISP Uplinks, Used for Load-Balancing π
scenario two: everybody works π This scenario has these key characteristics:
- The enterprise uses uplinks to two (or more) ISPs for Internet access.
- Each ISP assigns an IPv6 PA address space.
- All the uplinks may be used at the same time, with traffic flows randomly (not necessarily equally) spread across them. π§
- Hosts in the enterprise aren't expected to support Rule 5.5 of the default address selection algorithm [RFC6724].
3. Conditional Router Advertisements β¨
3.1. Solution Overview π
3.1.1. Uplink Selection π
the core problem bestie π As [PROVIDER-ASSIGNED] points out, one of the two main problems in enterprise multihoming is picking the next-hop (uplink) based on the packet's source address. π₯ For example, say the enterprise has two uplinks, to ISP_A and ISP_B, and hosts have addresses from subnet_A and subnet_B (belonging to ISP_A and ISP_B). Then packets sourced from subnet_A must go to the ISP_A uplink, and packets sourced from subnet_B must go to the ISP_B uplink. π
Careful here π: sending packets with one ISP's source addresses out through a different ISP can get them dropped, if those ISPs or their uplinks do antispoofing ingress filtering [RFC2827][RFC3704].
Some work is happening in Source Address Dependent Routing (SADR), such as [DESTINATION]. But the simplest way to get this behavior right now is to apply a policy that picks a next hop or egress interface based on the packet's source address. πΈ Most SMB/Enterprise-grade routers already have that functionality available. π
that's all for part 1, bestie!! ππ Part 2 is coming next π¦
3.1.2. Source Address Selection and Conditional RAs π
okay so the next problem in multihoming is picking the source address on hosts π . when everything is up and running, hosts have several global unique addresses and can just rely on the default address selection algorithm [RFC6724] to pick one. then the network handles choosing the right uplink based on whichever source address the host picked, as described in Section 3.1.1. π¦ but when the network topology changes (like an uplink going up or down), the global reachability for packets from certain prefixes can get affected π. so those changes have to be signaled back to the hosts. for example:
- An uplink to ISP_A went down. Hosts should not use addresses from an ISP_A prefix;
- A primary uplink to ISP_A that was not operational has come back up. Hosts should start using the source addresses from an ISP_A prefix.
[PROVIDER-ASSIGNED] explains in detail why Stateless Address Autoconfiguration (SLAAC) [RFC4862] and Router Advertisements (RAs) [RFC4861] are the most suitable mechanisms for signaling network topology changes to hosts, which is how they end up influencing source address selection β¨. sending an RA to change the preferred lifetime for a given prefix gives you the following functionality:
- Deprecating addresses by sending an RA with preferred_lifetime set to 0 in the corresponding Prefix Information option (PIO) [RFC4861]. This indicates to hosts that addresses from that prefix should not be used;
- Making a previously unused (deprecated) prefix usable again by sending an RA containing a PIO with nonzero preferred lifetime. This indicates to hosts that addresses from that prefix can be used again.
it's worth noting that only the preferred lifetime for the affected prefix needs to be changed π§. the goal is to influence the source address selection algorithm on hosts, not to stop them from forming addresses from a specific prefix, so the valid lifetime should not be changed. actually, changing the valid lifetime wouldn't even be possible for unauthenticated RAs (which is the most common deployment scenario), because Section 5.5.3 of [RFC4862] stops hosts from setting the valid lifetime for addresses to zero unless RAs are authenticated. the way that rule works is kinda iconic π.
to make this work, first-hop routers are required to:
- Send RAs triggered by defined event policies in response to an uplink status change event; and
- While sending periodic or solicited RAs, set the value in the given RA field (e.g., PIO preferred lifetime) based on the uplink status.
the exact definition of "uplink status" depends on the network topology and may include conditions like:
- Uplink interface status change;
- Presence of a particular route in the routing table;
- Presence of a particular route with a particular attribute (next hop, tag, etc.) in the routing table;
- Protocol adjacency change.
in some scenarios, when two routers provide first-hop redundancy via Virtual Router Redundancy Protocol (VRRP) [RFC5798], the master-backup status can be treated as a condition for sending RAs and changing the preferred lifetime value. see Section 3.2.2 for more details πΈ.
if hosts get the IPv6 addresses of ISP DNS servers via a Recursive DNS Server (RDNSS) (see "IPv6 Router Advertisement Options for DNS Configuration" [RFC8106]), it might be desirable for the conditional RAs to update the Lifetime field of the RDNSS option as well π.
the trigger isn't only about forcing the router to send an unsolicited RA to spread the topology changes to all hosts. the values of the RA fields (like PIO Preferred Lifetime or DNS Server Lifetime) that the particular trigger changed need to stay the same until another event causes them to be updated. for example, if an ISP_A uplink failure causes the prefix to be deprecated, all solicited and unsolicited RAs sent by the router need to have the preferred lifetime for that PIO set to 0 until the uplink comes back up. π¨
the proposed solution is honestly quite similar to the existing requirement L-13 for IPv6 Customer Edge Routers [RFC7084] and the documented behavior of homenet devices [RFC7788] π. it uses the same mechanism of deprecating a prefix when the corresponding uplink isn't operational, just applied to an enterprise network scenario. main character energy, fr fr π β¨
3.2. Example Scenarios π¦
this section shows how the conditional RAs solution can be applied to the most common enterprise multihoming scenarios, described in Section 2. let's gooo π
3.2.1. Single Router, Primary/Backup Uplinks π
--------
,-------, / \
+----+ 2001:db8:1::/48 ,' ', : :
| |-----------------+ ISP_A +--+: :
2001:db8:1:1::/64 | | ', ,' : :
| | '-------' : :
H1-----------------| R1 | : INTERNET :
| | ,-------, : :
2001:db8:2:1::/64 | | 2001:db8:2::/48 ,' ', : :
| |-----------------+ ISP_B +--+: :
+----+ ', ,' : :
'-------' \ /
--------
Figure 1: Single Router, Primary/Backup Uplinks
okay so picture this: a single router acts as a border router terminating two ISP uplinks, and it's also the first-hop router for hosts π§. each ISP assigns a /48 to the network. ISP_A is the primary uplink, used for all Internet traffic, while ISP_B is a backup, only used when the primary uplink isn't operational π.
to make sure packets with source addresses from ISP_A and ISP_B only get routed to the ISP_A and ISP_B uplinks respectively, the network administrator needs to configure a policy on R1:
IF (packet_source_address is in 2001:db8:1::/48)
and
(packet_destination_address is not in
(2001:db8:1::/48 or 2001:db8:2::/48))
THEN
default next hop is ISP_A_uplink
IF (packet_source_address is in 2001:db8:2::/48)
and
(packet_destination_address is not in
(2001:db8:1::/48 or 2001:db8:2::/48))
THEN
default next hop is ISP_B_uplink
under normal circumstances, it's desirable that all traffic goes out via the ISP_A uplink, so hosts (the host H1 in the example topology figure) should be using source addresses from 2001:db8:1:1::/64 π. when or if the ISP_A uplink fails, hosts should stop using the 2001:db8:1:1::/64 prefix and start using 2001:db8:2:1::/64 until the ISP_A uplink comes back up. to achieve this, the RA configuration on the R1 device for the interface facing H1 needs the following policy:
prefix 2001:db8:1:1::/64 {
IF (ISP_A_uplink is up)
THEN
preferred_lifetime = 604800
ELSE
preferred_lifetime = 0
}
prefix 2001:db8:2:1::/64 {
IF (ISP_A_Uplink is up)
THEN
preferred_lifetime = 0
ELSE
preferred_lifetime = 604800
}
and a similar policy needs to be applied to the RDNSS lifetime if the ISP_A and ISP_B DNS servers are used π«Άπ
3.2.2. Two Routers, Primary/Backup Uplinks π¦
okay so bestie, let's level up π₯. This time we've got two border routers, each terminating one ISP uplink, and they're both acting as redundant first-hop routers for the hosts. Peep Figure 2 π
--------
,-------, / \
2001:db8:1:1::/64 +----+ 2001:db8:1::/48 ,' ', : :
_| |----------------+ ISP_A +--+: :
| | R1 | ', ,' : :
| +----+ '-------' : :
H1----------------| : INTERNET :
| +----+ ,-------, : :
|_| | 2001:db8:2::/48 ,' ', : :
| R2 |----------------+ ISP_B +--+: :
2001:db8:2:1::/64 +----+ ', ,' : :
'-------' \ /
--------
Figure 2: Two Routers, Primary/Backup Uplinks
In this setup, R1 sends RAs with a PIO for 2001:db8:1:1::/64 (ISP_A address space), and R2 sends RAs with a PIO for 2001:db8:2:1::/64 (ISP_B address space). Each router needs a forwarding policy configured for packets received on its hosts-facing interface β¨
IF (packet_source_address is in 2001:db8:1::/48)
and
(packet_destination_address is not in
(2001:db8:1::/48 or 2001:db8:2::/48))
THEN
default next hop is ISP_A_uplink
IF (packet_source_address is in 2001:db8:2::/48)
and
(packet_destination_address is not in
(2001:db8:1::/48 or 2001:db8:2::/48))
THEN
default next hop is ISP_B_uplink
So there's more than one way to make sure hosts pick the correct source address based on uplink status π . If VRRP is used for first-hop redundancy and the master router is the one with the active uplink, the simplest move is to use the VRRP mastership as the condition for RA. So if ISP_A is the primary uplink, R1 and R2 get set up like this:
R1 is the VRRP master by default (when the ISP_A uplink is up). If the ISP_A uplink goes down, R1 becomes a backup. (VRRP interface-status tracking is expected to be used to automatically modify the VRRP priorities and trigger the mastership switchover.) The RA on R1's interface facing H1 needs this policy applied:
prefix 2001:db8:1:1::/64 {
IF (vrrp_master)
THEN
preferred_lifetime = 604800
ELSE
preferred_lifetime = 0
}
R2 is VRRP backup by default. The RA on R2's interface facing H1 needs this policy applied:
prefix 2001:db8:2:1::/64 {
IF(vrrp_master)
THEN
preferred_lifetime = 604800
ELSE
preferred_lifetime = 0
}
Now, if VRRP isn't used, or interface status tracking isn't used for mastership switchover, then each router needs to be able to detect the uplink failure/recovery on the neighboring router. That's how RAs with updated preferred lifetime values get triggered π§ Depending on the network setup, different triggers can work, like a route to the uplink interface subnet or a default route received from the uplink. The obvious drawback of using the routing table to trigger the conditional RAs is that some extra configuration is required. For example, if a route to the prefix assigned to the ISP uplink is used as the trigger, the conditional RA policy looks like this:
R1:
prefix 2001:db8:1:1::/64 {
IF (ISP_A_uplink is up)
THEN
preferred_lifetime = 604800
ELSE
preferred_lifetime = 0
}
R2:
prefix 2001:db8:2:1::/64 {
IF (ISP_A_uplink_route is present)
THEN
preferred_lifetime = 0
ELSE
preferred_lifetime = 604800
}
3.2.3. Single Router, Load-Balancing between Uplinks π
Let's check out the example topology from Figure 1, but this time both uplinks are used at the same time π In this case, R1 would send RAs containing PIOs for both prefixes, 2001:db8:1:1::/64 and 2001:db8:2:1::/64, and it changes the preferred lifetime based on which uplink is available. If interface status is used as the uplink availability indicator, the policy logic looks like this:
prefix 2001:db8:1:1::/64 {
IF (ISP_A_uplink is up)
THEN
preferred_lifetime = 604800
ELSE
preferred_lifetime = 0
}
prefix 2001:db8:2:1::/64 {
IF (ISP_B_uplink is up)
THEN
preferred_lifetime = 604800
ELSE
preferred_lifetime = 0
}
R1 needs a forwarding policy to send packets out the correct uplink based on the source address, similar to the policy described in Section 3.2.1.
3.2.4. Two Routers, Load-Balancing between Uplinks π
In this scenario, the example topology is similar to the one in Figure 2, but both uplinks can be used at the same time. That means R1 and R2 both need the matching forwarding policy so packets get forwarded based on their source addresses π«Ά
Each router sends RAs with a PIO for its corresponding prefix. It sets preferred_lifetime to a nonzero value when its ISP uplink is up, and deprecates the prefix by setting preferred_lifetime to 0 when the uplink fails. Uplink recovery triggers another RA with a nonzero preferred lifetime, which makes the addresses from that prefix preferred again. The example RA policy on R1 and R2 looks like this:
R1:
prefix 2001:db8:1:1::/64 {
IF (ISP_A_uplink is up)
THEN
preferred_lifetime = 604800
ELSE
preferred_lifetime = 0
}
R2:
prefix 2001:db8:2:1::/64 {
IF (ISP_B_uplink is up)
THEN
preferred_lifetime = 604800
ELSE
preferred_lifetime = 0
}
3.2.5. Topologies with Dedicated Border Routers π
For simplicity, every topology above shows the ISP uplinks terminated on the first-hop routers. Obviously the approach can be used in more complex topologies where dedicated devices terminate the ISP uplinks. In that case, VRRP mastership or interface status can't be used as a trigger for conditional RAs. Route presence, as described in Section 3.2.2, should be used instead.
Let's look at the example topology in Figure 3:
2001:db8:1::/48 --------
2001:db8:1:1::/64 ,-------, ,' ',
+----+ +---+ +----+ ,' ', : :
_| |--| |--| R3 |----+ ISP_A +---+: :
| | R1 | | | +----+ ', ,' : :
| +----+ | | '-------' : :
H1--------| |LAN| : INTERNET :
| +----+ | | ,-------, : :
|_| | | | +----+ ,' ', : :
| R2 |--| |--| R4 |----+ ISP_B +---+: :
+----+ +---+ +----+ ', ,' : :
2001:db8:2:1::/64 '-------' ', ,'
2001:db8:2::/48 --------
Figure 3: Dedicated Border Routers
For example, if ISP_A is the primary uplink and ISP_B is the backup, the following policy might be used to get the desired behavior. H1 uses ISP_A address space, 2001:db8:1:1::/64, while the ISP_A uplink is up, and only uses the ISP_B 2001:db8:2:1::/64 prefix if that uplink is non-operational:
R1 and R2 policy:
prefix 2001:db8:1:1::/64 {
IF (ISP_A_uplink_route is present)
THEN
preferred_lifetime = 604800
ELSE
preferred_lifetime = 0
}
prefix 2001:db8:2:1::/64 {
IF (ISP_A_uplink_route is present)
THEN
preferred_lifetime = 0
ELSE
preferred_lifetime = 604800
}
For the load-balancing case, the policy looks a bit different: each prefix only has a nonzero preferred_lifetime if its matching ISP uplink route is present π
prefix 2001:db8:1:1::/64 {
IF (ISP_A_uplink_route is present)
THEN
preferred_lifetime = 604800
ELSE
preferred_lifetime = 0
}
prefix 2001:db8:2:1::/64 {
IF (ISP_B_uplink_route is present)
THEN
preferred_lifetime = 604800
ELSE
preferred_lifetime = 0
}
3.2.6. Intrasite Communication during Simultaneous Uplinks Outage π
Okay, this one's a little scary ngl. Prefix deprecation from an uplink status change can lead to a situation where all global prefixes are deprecated, meaning every ISP uplink is non-operational for some reason π Even when there's no Internet connectivity, it might still be desirable to have intrasite IPv6 connectivity, especially when the network is an IPv6-only one. However, while an address is in a deprecated state, its use is discouraged, but not strictly forbidden [RFC4862]. In that scenario, all IPv6 source addresses in the candidate set [RFC6724] are deprecated. That means they can still be used, since there are no preferred addresses available, and the source address selection algorithm can pick one of them, allowing intrasite communication. Some operating systems might just fall back to IPv4 if the network interface has no preferred IPv6 global addresses, though π So if intrasite connectivity is vital during simultaneous outages of multiple uplinks, administrators might consider using Unique Local Addresses (ULAs) [RFC4193] or provisioning additional backup uplinks to protect the network from double-failure cases.
3.2.7. Uplink Damping πΈ
If an actively used uplink (a primary one, or one used in a load-balancing scenario) starts flapping, it can cause the undesirable situation of flapping addresses on hosts. Every time the uplink goes up, hosts receive an RA with a nonzero preferred PIO lifetime, and every time it goes down, all addresses in the affected prefix become deprecated. This would, undoubtedly, hurt the user experience π©, not to mention the spikes of duplicate address detection traffic every time an uplink comes back up. Therefore, it's recommended that router vendors implement some form of damping policy for conditional RAs. They can either postpone sending an RA with a nonzero lifetime for a PIO when the uplink comes up for a number of seconds, or (even) introduce accumulated penalties/exponential backoff algorithm for such delays. (In the case of multiple simultaneous uplink failure, when all but one of the uplinks are down and the last remaining one is flapping, it might result in all addresses being deprecated for a while after the flapping uplink recovers.) π
3.2.8. Routing Packets When the Corresponding Uplink Is Unavailable π¦
okay so setting a preferred lifetime to 0 to deprecate an IPv6 address is more of a strong suggestion than a hard ban π Deprecated addresses can still be used for existing connections [RFC4862], which means they're not totally banned from new stuff either, just discouraged π So when an ISP uplink goes down, the border router might still get packets with source addresses from that ISP's space, even though there's no working uplink to send them out on π
What the router does with those packets depends on how uplink selection works. If some form of SADR is in use, those packets get dropped because there's no route to the destination π« If policy-based routing sets a next hop instead, the behavior is implementation dependent, so it can be anything from dropping the packets to forwarding them based on the routing table entries π€·ββοΈ Also, there's no return path back to the packet source, since the ISP uplink isn't operational π So even if the outgoing packets get sent out through another ISP, the return traffic might never make it back to you π
3.3. Solution Limitations π§©
not gonna lie, this approach is NOT a "silver bullet" for every multihoming situation β¨ It works really well for networks with relatively simple topologies and straightforward routing policies π The more complicated the topology and routing policies get, the more configuration you'll need to make it work π
Another limitation is load-balancing between uplinks π When both uplinks are active, hosts pick their source prefix with the Default Address Selection algorithm [RFC6724], so the load between the two uplinks most likely won't be split evenly π (BUT, the mechanism does allow a creative trick for controlling uplink load in software-defined networks π§ A controller can selectively deprecate prefixes on some hosts but not others, which moves egress traffic between uplinks π) Also, prefix selection doesn't consider any other properties of the uplinks, like latency, so egress traffic might not go out the nearest uplink just because its prefix got picked as the source π In general, if not all uplinks are equal and some are supposed to be preferred over others, the network administrator should make sure prefixes from the non-preferred ISP(s) stay deprecated, so you end up with a primary/backup setup π
3.3.1. Connections Preservation π
The proposed solution is not designed to preserve connection state after an uplink failure π If all uplinks to an ISP go down, every session to or from addresses in that ISP's space gets interrupted, because there's no egress path for those packets and no return path from the Internet to that prefix π It's kinda like IPv4 multihoming with NAT, where an uplink failure and failover means a public IPv4 address changes and all existing connections get cut π₯²
BUT, an uplink recovery doesn't necessarily interrupt connections π¦ In the load-sharing/balancing scenario, an uplink recovery doesn't affect any existing connections at all β¨ In the active/backup topology, when the primary uplink recovers and the backup prefix is deprecated, existing sessions (the ones established to or from the backup ISP addresses) can be preserved, as long as the routers are configured as described in Section 3.2.1 and keep sending packets with the backup ISP source addresses out the backup uplink, even while the primary one is up π«Ά So after the primary recovers, the backup ISP addresses are discouraged but still usable, which is iconic behavior π
It should be noted that in IPv4 multihoming with NAT, when the egress interface is picked without looking at the packet's source address (since internal hosts usually have addresses from [RFC1918] space), sessions might not survive an uplink recovery unless packet forwarding is integrated with the existing NAT session tracking π
4. IANA Considerations πΈ
This document has no IANA actions. β¨
5. Security Considerations π
This memo introduces no new security considerations, but it does rely on RAs [RFC4861] and the SLAAC [RFC4862] mechanism, so it inherits their security properties π«£ If an attacker is able to send a rogue RA, they could deprecate IPv6 addresses on hosts or influence the source-address-selection processes on hosts π± Yikes!!
The potential attack vectors include, but are not limited to:
- An attacker sends a rogue RA deprecating IPv6 addresses on hosts; π¨
- An attacker sends a rogue RA making addresses preferred while the corresponding ISP uplink is not operational; π¨
- An attacker sends a rogue RA making addresses preferred for a backup ISP, steering traffic to an undesirable (e.g., more expensive) uplink. πΈπ¨
Therefore, the network administrators SHOULD secure RAs, e.g., by deploying an RA guard [RFC6105]. π‘οΈπ
5.1. Privacy Considerations π«§
This memo introduces no new privacy considerations. π
6. References π
6.1. Normative References
[RFC1918]Rekhter, Y., Moskowitz, B., Karrenberg, D., de Groot, G., and E. Lear, "Address Allocation for Private Internets", BCP 5, RFC 1918, DOI 10.17487/RFC1918, February 1996,<https://www.rfc-editor.org/info/rfc1918>.[RFC2119]Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997,<https://www.rfc-editor.org/info/rfc2119>.[RFC2827]Ferguson, P. and D. Senie, "Network Ingress Filtering: Defeating Denial of Service Attacks which employ IP Source Address Spoofing", BCP 38, RFC 2827, DOI 10.17487/RFC2827, May 2000,<https://www.rfc-editor.org/info/rfc2827>.[RFC3022]Srisuresh, P. and K. Egevang, "Traditional IP Network Address Translator (Traditional NAT)", RFC 3022, DOI 10.17487/RFC3022, January 2001,<https://www.rfc-editor.org/info/rfc3022>.[RFC3704]Baker, F. and P. Savola, "Ingress Filtering for Multihomed Networks", BCP 84, RFC 3704, DOI 10.17487/RFC3704, March 2004,<https://www.rfc-editor.org/info/rfc3704>.[RFC4116]Abley, J., Lindqvist, K., Davies, E., Black, B., and V. Gill, "IPv4 Multihoming Practices and Limitations", RFC 4116, DOI 10.17487/RFC4116, July 2005,<https://www.rfc-editor.org/info/rfc4116>.[RFC4193]Hinden, R. and B. Haberman, "Unique Local IPv6 Unicast Addresses", RFC 4193, DOI 10.17487/RFC4193, October 2005,<https://www.rfc-editor.org/info/rfc4193>.[RFC4291]Hinden, R. and S. Deering, "IP Version 6 Addressing Architecture", RFC 4291, DOI 10.17487/RFC4291, February 2006,<https://www.rfc-editor.org/info/rfc4291>.[RFC4862]Thomson, S., Narten, T., and T. Jinmei, "IPv6 Stateless Address Autoconfiguration", RFC 4862, DOI 10.17487/RFC4862, September 2007,<https://www.rfc-editor.org/info/rfc4862>.[RFC6105]Levy-Abegnoli, E., Van de Velde, G., Popoviciu, C., and J. Mohacsi, "IPv6 Router Advertisement Guard", RFC 6105, DOI 10.17487/RFC6105, February 2011,<https://www.rfc-editor.org/info/rfc6105>.[RFC6724]Thaler, D., Ed., Draves, R., Matsumoto, A., and T. Chown, "Default Address Selection for Internet Protocol Version 6 (IPv6)", RFC 6724, DOI 10.17487/RFC6724, September 2012,<https://www.rfc-editor.org/info/rfc6724>.[RFC8028]Baker, F. and B. Carpenter, "First-Hop Router Selection by Hosts in a Multi-Prefix Network", RFC 8028, DOI 10.17487/RFC8028, November 2016,<https://www.rfc-editor.org/info/rfc8028>.[RFC8106]Jeong, J., Park, S., Beloeil, L., and S. Madanapalli, "IPv6 Router Advertisement Options for DNS Configuration", RFC 8106, DOI 10.17487/RFC8106, March 2017,<https://www.rfc-editor.org/info/rfc8106>.[RFC8174]Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, May 2017,<https://www.rfc-editor.org/info/rfc8174>.
6.2. Informative References
[DESTINATION]Lamparter, D. and A. Smirnov, "Destination/Source Routing", Work in Progress, draft-ietf-rtgwg-dst-src-routing-06, October 2017.[PROVIDER-ASSIGNED]Baker, F., Bowers, C., and J. Linkova, "Enterprise Multihoming using Provider-Assigned Addresses without Network Prefix Translation: Requirements and Solution", Work in Progress, draft-ietf-rtgwg-enterprise-pa-multihoming-07, June 2018.[RFC4861]Narten, T., Nordmark, E., Simpson, W., and H. Soliman, "Neighbor Discovery for IP version 6 (IPv6)", RFC 4861, DOI 10.17487/RFC4861, September 2007,<https://www.rfc-editor.org/info/rfc4861>.[RFC5798]Nadas, S., Ed., "Virtual Router Redundancy Protocol (VRRP) Version 3 for IPv4 and IPv6", RFC 5798, DOI 10.17487/RFC5798, March 2010,<https://www.rfc-editor.org/info/rfc5798>.[RFC7084]Singh, H., Beebee, W., Donley, C., and B. Stark, "Basic Requirements for IPv6 Customer Edge Routers", RFC 7084, DOI 10.17487/RFC7084, November 2013,<https://www.rfc-editor.org/info/rfc7084>.[RFC7788]Stenberg, M., Barth, S., and P. Pfister, "Home Networking Control Protocol", RFC 7788, DOI 10.17487/RFC7788, April 2016,<https://www.rfc-editor.org/info/rfc7788>.
Acknowledgements π
Thanks to the following people (in alphabetical order) for their review and feedback: Mikael Abrahamsson, Lorenzo Colitti, Marcus Keane, Erik Kline, David Lamparter, Dusan Mudric, Erik Nordmark, and Dave Thaler. π«Άπ
Authors' Addresses π
Jen Linkova
Google
Mountain View, California 94043
United States of America
Email: furry@google.com
Massimiliano Stucchi
RIPE NCC
Stationsplein, 11
Amsterdam 1012 AB
The Netherlands
Email: mstucchi@ripe.net
π¦ where this page comes from
- ietf: rfc8475 2018-10
- π girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms