RFC 6977

Triggering DHCPv6 Reconfiguration from Relay Agents

πŸ“… published July 2013, from ietf

RFC 6977: Triggering DHCPv6 Reconfiguration from Relay Agents πŸ¦‹

Okay bestie, this one is from the IETF (Internet Engineering Task Force 🌸), and it's written by M. Boucadair and X. Pougnard from France Telecom. It came out in July 2013 and it's a Standards Track document, so it's a real Internet standard and not just vibes πŸ’…. Its ISSN is 2070-1721. The whole point is a fix for a DHCPv6 gap that nobody had handled yet 😭.

Abstract ✨

Okay so this doc adds two brand-new DHCPv6 messages, Reconfigure-Request and Reconfigure-Reply πŸ’–. A DHCPv6 relay agent sends the Reconfigure-Request to tell a DHCPv6 server that some configuration info has changed. That way the server can send a Reconfigure message back to the clients. The server uses the Reconfigure-Reply to confirm it got the Reconfigure-Request. Iconic πŸ™Œ.

Status of This Memo πŸ“œ

This is an Internet Standards Track document.

This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It went through public review and got approved for publication by the Internet Engineering Steering Group (IESG). If you want more info on Internet Standards, check out Section 2 of RFC 5741 πŸŽ€.

For info about the current status of this document, any errata, and how to send feedback, go to http://www.rfc-editor.org/info/rfc6977 πŸ”—.

Copyright (c) 2013 IETF Trust and the persons identified as the document authors. All rights reserved.

This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) as they stood on the date this document was published. Please read these docs carefully, because they explain your rights and restrictions for this document. Code Components pulled out of this document must include Simplified BSD License text as 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  . . . . . . . . . . . . . . . . . . . . . . . .   2
2.  Requirements Language . . . . . . . . . . . . . . . . . . . .   3
3.  Problem Statement . . . . . . . . . . . . . . . . . . . . . .   3
4.  Solution Overview . . . . . . . . . . . . . . . . . . . . . .   4
5.  Link Address Option . . . . . . . . . . . . . . . . . . . . .   6
6.  Detailed Specification  . . . . . . . . . . . . . . . . . . .   6
  6.1.  Messages Format . . . . . . . . . . . . . . . . . . . . .   6
  6.2.  Messages Validation . . . . . . . . . . . . . . . . . . .   7
    6.2.1.  Reconfigure-Request . . . . . . . . . . . . . . . . .   7
    6.2.2.  Reconfigure-Reply . . . . . . . . . . . . . . . . . .   7
  6.3.  Creation and Transmission of a Reconfigure-Request  . . .   7
  6.4.  Intermediate Relay Agents Behavior  . . . . . . . . . . .   9
  6.5.  Server Behavior . . . . . . . . . . . . . . . . . . . . .   9
  6.6.  Receipt of a Reconfigure-Reply  . . . . . . . . . . . . .  10
7.  Rate-Limiting Considerations  . . . . . . . . . . . . . . . .  10
8.  IANA Considerations . . . . . . . . . . . . . . . . . . . . .  11
9.  Security Considerations . . . . . . . . . . . . . . . . . . .  11
10. Acknowledgements  . . . . . . . . . . . . . . . . . . . . . .  12
11. References  . . . . . . . . . . . . . . . . . . . . . . . . .  12
  11.1.  Normative References . . . . . . . . . . . . . . . . . .  12
  11.2.  Informative References . . . . . . . . . . . . . . . . .  12

1. Introduction πŸŽ€

This document specifies two new DHCPv6 messages [RFC3315]: Reconfigure-Request and Reconfigure-Reply.

Section 3 walks through a typical problem scenario that makes the DHCPv6 server issue a Reconfigure message when the configuration data comes from the relay agent. This problem can show up in other contexts too. Listing every single one of those cases is out of scope for this document πŸ™ˆ.

Section 4 describes the proposed solution, which relies on Reconfigure-Request and Reconfigure-Reply messages. The Reconfigure-Request is sent by a DHCPv6 relay agent to tell a DHCPv6 server about a configuration-information change, so the server can send a Reconfigure message accordingly. The Reconfigure-Reply is how the server acknowledges that it received the Reconfigure-Request.

Section 5 specifies the Link Address Option. The relay agent uses it to tell the server which link the client is on 🧚.

Section 6 gives the detailed spec for how DHCPv6 relay agents trigger Reconfigure messages πŸ’….

2. Requirements Language πŸ’œ

Okay this part is the important one, so read it twice πŸ‘‘. The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119].

3. Problem Statement 🧚

Here's the situation. When a DHCPv6 relay agent has some info that would be useful to the DHCPv6 client, [RFC6422] gives it a way to pass that info to the DHCPv6 server. The server can then forward it on to the DHCP client. This happens through RSOO (Relay-Supplied Options option), which carries configuration data to the DHCPv6 server. Whatever goes in an RSOO gets sent back by the DHCPv6 server to the requesting DHCPv6 client. Lowkey genius 🀌.

Figure 1 shows an example of RSOO in action. Only a subset of the DHCPv6 and RADIUS messages is shown here πŸ¦‹. It's a broadband network scenario where the Network Access Server (NAS) has a DHCPv6 relay agent built in.

      +-------+                   +-------+                    +-------+
      |DHCPv6 |                   |  NAS  |                    |Radius |
      |Client |                   |(DHCPv6|                    |Server |
      |       |                   | Relay)|                    |       |
      +-------+                   +-------+                    +-------+
          |                           |                            |
          |---Solicit---------------->|                            |
          |                           |---Access-Request---------->|
                                      |<--Access-Accept------------|
                                      | (e.g., DS-Lite-Tunnel-Name)|
                                    ....
                                      |                        +-------+
                                      |                        |DHCPv6 |
                                      |                        |Server |
                                      |                        |       |
                                      |                        +-------+
                                      |                            |
                                      |---Relay-Forward----------->|
                                      |  (RSOO(OPTION_AFTR_NAME))  |
                                      |                            |
          |                           |<--Relay-Reply--------------|
          |<--Advertise---------------|  (e.g., OPTION_AFTR_NAME)  |
          |  (e.g., OPTION_AFTR_NAME) |
                                     ....

                  Figure 1: An Example of the RSOO Usage

A config change can lead to an exchange of CoA (Change-of-Authorization) [RFC5176] messages between the NAS/DHCPv6 relay agent and the Dynamic Authorization Client (DAC) server. Figure 2 shows that. In this example, the NAS sends back a CoA-Ack to tell the DAC that the CoA-Request was handled successfully ✨.

Also, a change to the relay agent's configuration can be triggered by any other out-of-band mechanism. Keep that in mind πŸ™ˆ.

      +-------+                   +-------+                    +-------+
      |DHCPv6 |                   |  NAS  |                    |Radius |
      |Client |                   |(DHCPv6|                    |Server/|
      |       |                   | Relay)|                    |  DAC  |
      +-------+                   +-------+                    +-------+
          |                           |                            |
                                      |<-----CoA-Request-----------|
                                      |(e.g., DS-Lite-Tunnel-Name) |
                                      |------CoA-Ack-------------->|
                                    ....

                     Figure 2: Change of Configuration

Here's the catch 😭. Whenever the configuration info that the DHCPv6 relay agent sends to the DHCPv6 server changes, the server has no way of detecting that change. So it can't send a Reconfigure message to the client about it. Section 4 sketches out a fix for this.

4. Solution Overview ✨

okay so to fix the mess from Section 3 πŸŽ€, this doc proposes a brand new DHCP message called Reconfigure-Request πŸ’Œ. In the example in Figure 3, the DHCPv6 relay agent sends a Reconfigure-Request to a DHCPv6 server as soon as the config data in an RSOO changes. When the server gets it, and if it's set up to support this mode, it must build Reconfigure-Reply and Reconfigure messages. Reconfigure-Reply is basically the server saying "got it" 🫢 to the Reconfigure-Request. The Reconfigure message gets wrapped inside a Relay-Reply and sent to the DHCPv6 relay, which passes it along to the right DHCPv6 client.

This setup assumes the relay has a record of the client, so it has enough info to send the Reconfigure-Request to the server. How the relay stores that state is out of scope for this doc πŸ™ˆ. For better resilience, ways to recover state after a failure (like stable storage, or DHCPv6 Bulk Leasequery [RFC5460]) need to be supported. Those state recovery solutions aren't discussed in this document.

   +-------+                   +-------+                    +-------+
   |DHCPv6 |                   |  NAS  |                    |Radius |
   |Client |                   |(DHCPv6|                    |Server/|
   |       |                   | Relay)|                    | DAC   |
   +-------+                   +-------+                    +-------+
       |                           |                            |
                                   |<-----CoA-Request-----------|
                                   |(e.g., DS-Lite-Tunnel-Name) |
                                   |                            |
                                   |------CoA-Ack-------------->|
                                 ....
                                   |                        +-------+
                                   |                        |DHCPv6 |
                                   |                        |Server |
                                   |                        |       |
                                   |                        +-------+
                                   |                            |
                                   |---Reconfigure-Request----->|
                                   |<--Reconfigure-Reply--------|
                                   |                            |
       |                           |<--Relay-Reply -------------|
       |<--Reconfigure-------------|   (Reconfigure)            |
       |                           |                            |
                                 ....

           Figure 3: Flow Example with Reconfigure-Request

The support of Reconfigure-Reply messages makes the relay's retransmission procedure simpler, since it gives an explicit answer from the server (see Section 6.3 for more details) πŸ¦‹. There's another way: the relay can watch the Reconfigure messages coming back from the server and guess whether the Reconfigure-Request worked. But ngl, that implicit approach can fall short. For example, the server might accept the request but hold off on generating the Reconfigure messages because of its rate-limiting policies, or the request might partly fail for some clients, etc. πŸ’€ To avoid pointless reconfigure cycles (say, from lost Reconfigure-Reply messages), this doc lets the relay fix up the content of a retransmitted Reconfigure-Request based on things it observes (like the client already grabbing the updated config). And if the relay has no clients left to reconfigure, it stops sending Reconfigure-Request messages.

The Reconfigure-Request message can also be used in scenarios that don't use RSOO. Describing all of those is out of scope for this document.


Here's the format of the Link Address Option, shown in Figure 4 πŸ’….

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |       OPTION_LINK_ADDRESS     |         option-len            |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                                                               |
    |                  link-address (IPv6 address)                  |
    |                                                               |
    |                                                               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

           Figure 4: Message Format of Link Address Option

Here's what each field means:

  • option-code: OPTION_LINK_ADDRESS (80)
  • option-len: 16 (octets)
  • link-address: An IPv6 address used by the server to identify the link on which the client is located.

The Link Address Option is how the relay agent tells the server which link the client is on πŸ—ΊοΈ. The relay agent MUST use a link-address value that is equivalent to the value it used when relaying messages from the client to the server. Two link-address values are equivalent if both are IPv6 addresses that are on-link for the network link the client is connected to.

To guard against poor implementations that don't evaluate equivalence correctly, the relay agent SHOULD use the same value that was sent to the DHCPv6 server when relaying messages from the client to the server, as in Section 20.1.1 of [RFC3315] ✨.

6. Detailed Specification πŸ“œ

6.1. Messages Format

Two new message type codes are defined:

  • RECONFIGURE-REQUEST (18)
  • RECONFIGURE-REPLY (19)

Reconfigure-Request and Reconfigure-Reply use the same format as defined in Section 6 of [RFC3315] πŸŽ€.

6.2. Messages Validation

6.2.1. Reconfigure-Request

Clients MUST silently discard any received Reconfigure-Request messages πŸ™…β€β™€οΈ.

Servers MUST discard any received Reconfigure-Request messages that meet any of the following conditions:

  • the message does not include a Client Identifier Option [RFC3315].
  • the message does not include a Link Address Option (Section 5).
  • the message includes a Server Identifier Option [RFC3315] but the contents of the Server Identifier Option do not match the server's identifier.

6.2.2. Reconfigure-Reply

Clients and servers MUST silently discard any received Reconfigure-Reply messages 🫠.

The relay MUST silently discard any received Reconfigure-Reply messages that meet any of the following conditions:

  • the "transaction-id" field in the message does not match the value used in the original message.
  • the message does not include a Server Identifier Option.
  • the message does not include a Status Code Option [RFC3315].

6.3. Creation and Transmission of a Reconfigure-Request

For any event that requires the server to issue a Reconfigure message (like a change to the configuration information), the relay agent figures out which client(s) are affected and then builds a Reconfigure-Request message πŸ› οΈ. It sets the "msg-type" field to RECONFIGURE-REQUEST, generates a transaction ID, and puts it in the "transaction-id" field.

The relay agent MUST include one or more Client Identifier Options [RFC3315] and a Link Address Option (Section 5), so the DHCPv6 server can identify the right client and the link it's on πŸ”.

The relay agent MAY include a Relay Identifier Option [RFC5460].

The relay agent MAY supply the updated configuration in the RSOO [RFC6422]. The relay agent MAY supply a Reconfigure Message Option to indicate which form of Reconfigure to use. The relay agent MAY include any option (for example, Interface Identifier [RFC3315]) that it might insert when relaying a message received from a client.

When several clients on the same link are affected by a configuration change, the relay MUST include several Client Identifier Options, and each one identifies a specific client πŸ‘―β€β™€οΈ. If including the Client Identifier Options of all impacted clients would exceed the maximum message size (see Section 7), the relay MUST generate several Reconfigure-Request messages so that all the Client Identifier Options get carried. Rate-limit considerations are discussed in Section 7.

The relay sets the destination address of the Reconfigure-Request message to the IP address it would have sent a Relay-Forward message to (see Section 20 of [RFC3315]) πŸ“¬.

If several servers are configured on the relay agent, several Reconfigure-Request messages need to be built. How the relay agent tells the responses apart when multiple servers are configured is implementation specific. For example, one implementation might generate a distinct "transaction-id" per server, while another might use the content of the "transaction-id" field together with the Server Identifier Option to tell the responses apart 🧩.

The relay transmits Reconfigure-Request messages according to Section 14 of [RFC3315], using these parameters:

  IRT (Initial retransmission time):      1 sec
  MRT (Maximum retransmission time):     10 secs
  MRC (Maximum retransmission count):     5
  MRD (Maximum retransmission duration):  0

The relay MAY remove clients from the client identifier list in subsequent retransmissions, but MUST NOT add clients to the client identifier list. This decision is local to the relay. For example, it may be based on observed events, like one or more clients being reconfigured on their own 🫧.

The relay may receive Reconfigure encapsulated in Relay-Reply before it gets Reconfigure-Reply. The relay SHOULD NOT interpret that as the Reconfigure-Request being successfully handled by the server πŸ™ƒ. The relay SHOULD use Reconfigure-Reply, not the Reconfigure message, to determine if the request was successful (see the discussion in Section 4).

6.4. Intermediate Relay Agents Behavior

The relay agent MUST be configurable to accept or reject Reconfigure-Request messages received from other relay agents. If no indication is explicitly configured on the relay, the default behavior is to accept Reconfigure-Request messages 🚦.

If the relay is configured not to allow Reconfigure-Request messages, the relay MUST silently discard any Reconfigure-Request message it receives. If the relay is configured to accept Reconfigure-Request messages, those messages are relayed as specified in Section 20.1.1 of [RFC3315] πŸ’–.

6.5. Server Behavior πŸ‘‘

The server is the one making the big decisions here, so it MUST be configurable to accept or reject Reconfigure-Request messages πŸ›‘οΈ. If nothing is explicitly configured, the default is to reject them πŸ™…β€β™€οΈ.

When a valid Reconfigure-Request comes in from a DHCPv6 relay agent (see Section 6.2) πŸ“¬, the server works out which client(s) a Reconfigure message needs to go to.

The server builds a Reconfigure-Reply by setting the msg-type field to RECONFIGURE-REPLY and copying the transaction ID from the Reconfigure-Request into the transaction-id field. It also drops its server identifier into a Server Identifier Option. And it MUST include a Status Code Option [RFC3315] that says whether the request was successfully processed, failed, or partially failed πŸŽ€.

  • If the server fails to process the request, it MUST set the Status Code Option to the appropriate status code (e.g., UnspecFail, NotAllowed, etc.). In particular:
    • UnspecFail MUST be returned if the Reconfigure-Request message is malformed.
    • NotAllowed MUST be returned if the server is not configured to allow Reconfigure-Request.
    • NotConfigured MUST be returned if the server has no record of the link [RFC5007].
  • If the Reconfigure-Request is successfully validated, the server MUST return a Status Code Option indicating "Success" ✨. On top of that, it MUST include a list of all the Client Identifier Options of the clients that Reconfigure messages will not be sent to (e.g., the server has no record of the client, or the client didn't negotiate for Reconfigure support). Note that this means "Success" will be returned even if Reconfigure messages won't go to any of the clients πŸ™ˆ.

If RSOO is supplied, the server might use its content to double check whether a Reconfigure is required to be sent to the client. This assumes the server stored the content of RSOO it used to generate the configuration data sent to requesting clients 🧠.

The server might also use the content of the Reconfigure Message Option supplied by the relay agent to decide which form of Reconfigure to use πŸ¦‹.

Then the server MUST follow the procedure defined in Section 19.1 of [RFC3315] to construct a Reconfigure message πŸ’….

Rate-limit considerations are discussed in Section 7 🚦.

6.6. Receipt of a Reconfigure-Reply πŸ’Œ

Depending on the status code in a received Reconfigure-Reply, the relay may decide to terminate the request (e.g., NotAllowed, NotConfigured, and Success) or try a different corrected Reconfigure-Request (e.g., UnspecFail) πŸ”„.

When multiple servers are configured, the relay should expect to receive several Reconfigure-Reply messages. As mentioned in Section 6.3, the relay should be able to disambiguate these responses and associate them with a given server 🧩. The relay agent assumes the request is successfully handled for a client if there is at least one Reconfigure-Reply message in which the corresponding Client Identifier Option does not appear πŸ₯³.


7. Rate-Limiting Considerations 🚦

The relay MUST rate-limit Reconfigure-Request messages sent to the server ⏱️. The relay MUST be configured with required rate-limit parameters. The maximum Reconfigure-Request packet size SHOULD be configurable, and the default value MUST be 1280 octets πŸ“.

The server MUST rate-limit Reconfigure messages triggered by Reconfigure-Request messages. The server MUST be configured with required rate-limit parameters πŸ’œ.

8. IANA Considerations πŸ“š

IANA has assigned the following new DHCPv6 Message types in the registry maintained in http://www.iana.org/assignments/dhcpv6-parameters:

  • RECONFIGURE-REQUEST
  • RECONFIGURE-REPLY

IANA has also assigned the following new DHCPv6 Option Codes in the registry maintained in http://www.iana.org/assignments/dhcpv6-parameters:

  • OPTION_LINK_ADDRESS

9. Security Considerations πŸ”

Okay bestie, this section is SERIOUS. Please read every word. 😭

Security considerations elaborated in [RFC3315] (in particular Section 21.1) and [RFC6422] must be taken into account. On top of that, DHCPv6 servers MAY be configured to reject relayed Reconfigure-Request messages or restrict relay chaining (see [RFC5007] for more discussion about the rationale of this recommended behavior). Section 6.5 specifies the error code to return when the server is configured to reject Reconfigure-Request messages 🚫.

Relay agents SHOULD implement appropriate means to prevent using Reconfigure-Request messages as a denial-of-service attack on the DHCPv6 servers πŸ’€.

Because the Reconfigure-Request message provides a mechanism for triggering the DHCPv6 Reconfigure message, and the DHCPv6 Reconfigure message can raise security threats (e.g., to control the timing of a DHCPv6 renewal), the DHCPv6 server MUST have some mechanism for determining that the relay agent is a trusted entity πŸ•΅οΈβ€β™€οΈ. DHCPv6 servers and relay agents MUST implement relay message authentication as described in Section 21.1 of [RFC3315]. DHCPv6 servers MAY also implement a control policy based on the content of a received Relay Identifier Option [RFC5460]. Administrators are strongly advised to configure one of these security mechanisms 🫢.

In an environment where the network connecting the relay agent to the DHCPv6 server is physically secure and does not contain devices not controlled by the server administrator, it may be sufficient to trust the Relay Agent Identifier provided by the relay agent. In networks where the security of the machines with access to the data path is not under the control of the server administrator, IPsec [RFC4301] is necessary to prevent spoofing of Reconfigure-Request messages. DHCPv6 servers MUST silently discard Reconfigure-Request messages originating from unknown relay agents πŸšͺ.

10. Acknowledgements 🫢

Many thanks to R. Maglione, A. Kostur, G. Halwasia, C. Jacquenet, B. Leiba, R. Sparks, A. Farrel, B. Claise, J. Jaeggli, and P. Resnick for the comments and review 🌸.

Special thanks to T. Lemon, B. Volz, and T. Mrugalski, who provided a detailed review πŸ‘‘.

11. References πŸ“–

11.1. Normative References

  • [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.
  • [RFC3315] Droms, R., Bound, J., Volz, B., Lemon, T., Perkins, C., and M. Carney, "Dynamic Host Configuration Protocol for IPv6 (DHCPv6)", RFC 3315, July 2003.
  • [RFC6422] Lemon, T. and Q. Wu, "Relay-Supplied DHCP Options", RFC 6422, December 2011.

11.2. Informative References

  • [RFC4301] Kent, S. and K. Seo, "Security Architecture for the Internet Protocol", RFC 4301, December 2005.
  • [RFC5007] Brzozowski, J., Kinnear, K., Volz, B., and S. Zeng, "DHCPv6 Leasequery", RFC 5007, September 2007.
  • [RFC5176] Chiba, M., Dommety, G., Eklund, M., Mitton, D., and B. Aboba, "Dynamic Authorization Extensions to Remote Authentication Dial In User Service (RADIUS)", RFC 5176, January 2008.
  • [RFC5460] Stapp, M., "DHCPv6 Bulk Leasequery", RFC 5460, February 2009.

Authors' Addresses ✍️

Mohamed Boucadair
France Telecom
Rennes  35000
France

EMail: mohamed.boucadair@orange.com


Xavier Pougnard
France Telecom
Lannion
France

EMail: xavier.pougnard@orange.com
πŸ“¦ where this page comes from