RFC 7341
DHCPv4-over-DHCPv6 (DHCP 4o6) Transport
RFC 7341: DHCPv4-over-DHCPv6 (DHCP 4o6) Transport ๐
Okay bestie, let's start with the ID card ๐ชชโจ This is RFC 7341, and it's called DHCPv4-over-DHCPv6 (DHCP 4o6) Transport. It came out in August 2014, and it's a Standards Track document, so it's the real deal ๐ The authors are Q. Sun and Y. Cui (Tsinghua University), M. Siodelski (ISC), S. Krishnan (Ericsson), and I. Farrer (Deutsche Telekom AG). Its ISSN is 2070-1721. The title block doesn't list anything it obsoletes or updates, so no drama there ๐
Abstract โจ
IPv4 is still needed while networks move over to IPv6, bestie ๐ธ Users need IPv4 configuration even when the uplink to their service provider is IPv6-only. This document describes a way to get IPv4 configuration information dynamically in IPv6 networks by carrying DHCPv4 messages over DHCPv6 transport. Two new DHCPv6 messages and two new DHCPv6 options are defined for this, and they're the whole main character plot ๐
Status of This Memo
This is an Internet Standards Track document. ๐ฆ
It's a product of the Internet Engineering Task Force (IETF), so it represents the consensus of the IETF community. It got public review and was approved for publication by the Internet Engineering Steering Group (IESG). For more on Internet Standards, check Section 2 of RFC 5741.
Info about the current status of this document, any errata, and how to give feedback on it lives at http://www.rfc-editor.org/info/rfc7341.
Copyright Notice
Copyright (c) 2014 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 in effect on the date of publication. Please read these carefully, because they describe your rights and restrictions for this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions, and they're provided without warranty as described in the Simplified BSD License.
Table of Contents ๐
1. Introduction ....................................................3
2. Requirements Language ...........................................3
3. Terminology .....................................................3
4. Applicability ...................................................4
5. Architecture Overview ...........................................4
6. New DHCPv6 Messages .............................................6
6.1. Message Types ..............................................6
6.2. Message Formats ............................................6
6.3. DHCPv4-query Message Flags .................................7
6.4. DHCPv4-response Message Flags ..............................7
7. New DHCPv6 Options ..............................................7
7.1. DHCPv4 Message Option Format ...............................7
7.2. DHCP 4o6 Server Address Option Format ......................8
8. Use of the DHCPv4-query Unicast Flag ............................9
9. DHCP 4o6 Client Behavior .......................................10
10. Relay Agent Behavior ..........................................12
11. DHCP 4o6 Server Behavior ......................................12
12. Security Considerations .......................................13
13. IANA Considerations ...........................................14
14. Contributors List .............................................14
15. References ....................................................14
15.1. Normative References .....................................14
15.2. Informative References ...................................15
1. Introduction โจ
Okay so as the move to IPv6 keeps going, IPv6-only networks are going to get more common ๐ In those networks, IPv4 connectivity keeps being offered as a service running over the IPv6-only network. On top of handing out IPv4 addresses to clients of that service, other IPv4 configuration parameters might be needed too (e.g., addresses of IPv4-only services) ๐ซถ
This document describes a transport mechanism that carries DHCPv4 messages using the DHCPv6 protocol. The point is dynamic provisioning of IPv4 addresses and other DHCPv4-specific configuration parameters across IPv6-only networks. It leverages the DHCPv4 infrastructure that already exists, like failover, DNS updates, DHCP Leasequery, etc. Efficient and iconic ๐
When IPv6 multicast is used to transport DHCP 4o6 messages, there's another perk: the operator can learn about the underlying IPv6 network that the DHCP 4o6 client is connected to, from the DHCPv6 relay agents the request went through. Info unlock ๐
2. Requirements Language ๐
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]. These are the official requirement words, so they're capital-letter serious ๐
3. Terminology ๐
This document makes use of the following terms:
CPE: Customer Premises Equipment (also known as Customer Provided Equipment). It gives devices on a Local Area Network (LAN), usually at the customer's site or home, access to the Internet Service Provider's (ISP's) network. Your router-at-home era ๐
DHCP 4o6 client (or client): A DHCP client that supports both the DHCPv6 protocol [RFC3315] and the DHCPv4 over DHCPv6 protocol described in this document. A client like this can request IPv6 configuration using DHCPv6, and IPv4 configuration using DHCPv4 over DHCPv6. Two-in-one, no notes ๐ฆ
DHCP 4o6 server (or server): A DHCP server that can process DHCPv4 packets encapsulated in the DHCPv4 Message option (defined below) ๐ง
DHCPv4 over DHCPv6: A protocol (described in this document) that carries DHCPv4 messages in the payload of DHCPv6 messages. Literally the whole concept in one line ๐ญ
4. Applicability ๐
Not gonna lie, this mechanism is not universally applicable ๐ It's a special-purpose mechanism meant for nodes that have to get IPv4 configuration information using DHCPv4 in specific environments where native DHCPv4 isn't available. Those nodes are expected to follow the advice in Section 9. Nodes that don't need this functionality are expected not to implement it, or not to turn it on by default. This mechanism may be enabled using an administrative control, or it may be enabled automatically to meet the needs of a dual-stack transition mechanism such as [LW4OVER6]. Those mechanisms are beyond the scope of this document, bestie.
5. Architecture Overview ๐๏ธ
This architecture covers a typical use case, where a DHCP client's uplink is IPv6 only and the Service Provider's network supports IPv6 plus limited IPv4 services. In this setup, the client can only use the IPv6 network to reach IPv4 services, so IPv4 services have to be configured using IPv6 as the underlying network protocol. It's giving tunnel vision ๐
The purpose of this document is to solve the problem of communication between the DHCPv4 client and the DHCPv4 server. But the mechanism doesn't restrict the transported message types to DHCPv4 only. Since the DHCPv4 message is a special type of BOOTP message, BOOTP messages [RFC951] MAY also be transported using the same mechanism. Bonus feature alert ๐
DHCP clients can run on CPE devices, end hosts, or any other device that supports the DHCP-client function. This document uses the CPE as its example for describing the mechanism, but that doesn't rule out any end host or other device that needs IPv4 configuration from implementing DHCPv4 over DHCPv6 in the future ๐ธ
Here's how it works: DHCPv4 messages get encapsulated inside the newly defined DHCPv6 messages. The DHCPv6-relay encapsulation is used only to deliver DHCPv4 packets to a DHCPv4-capable server. It doesn't allocate any IPv6 addresses, and it doesn't provide IPv6-configuration information to the client. Figure 1 below shows one possible deployment architecture of this mechanism. Diagram time ๐
The DHCP 4o6 client implements a new DHCPv6 message called DHCPv4-query, which carries a DHCPv4 message encapsulated in the new DHCPv4 Message option. The DHCPv6 message can be sent either through DHCPv6 Relay Agents or directly to the DHCP 4o6 server ๐
The server replies with a new DHCPv6 message called DHCPv4-response, which carries the DHCPv4 message from the server, encapsulated in the DHCPv4 Message option.
_____________ _____________
/ \ / \
| | | |
+--------+-+ IPv6 +-+-----------+-+ IPv6 +-+--------+
| DHCP 4o6 | Network | DHCPv6 | Network | DHCP 4o6 |
| Client +---------+ Relay Agent +---------+ Server |
| (on CPE) | | | | |
+--------+-+ +-+-----------+-+ +-+--------+
| | | |
\_____________/ \_____________/
Figure 1: Architecture Overview
Before the client can use DHCPv4 over DHCPv6, it MUST obtain the necessary IPv6 configuration. โ ๏ธ This part is non-negotiable. The client asks the server for the DHCP 4o6 Server Address option by sending the option code in an Option Request option, as described in [RFC3315]. If the server answers with the DHCP 4o6 Server Address option, that's the signal for the client to try DHCPv4 over DHCPv6 to get its IPv4 configuration. Otherwise, the client MUST NOT use DHCPv4 over DHCPv6 to request IPv4 configuration. Green light or red light, babe ๐ฆ
The client gets the address(es) of the DHCP 4o6 server(s) from the DHCP 4o6 Server Address option, and uses them to talk to the DHCP 4o6 servers as described in Section 9. If the DHCP 4o6 Server Address option contains no addresses (is empty), the client uses the well-known All_DHCP_Relay_Agents_and_Servers multicast address to communicate with the DHCP 4o6 server(s) ๐ก
Before applying for an IPv4 address with a DHCPv4-query message, the client must identify a suitable network interface for that address. Once the server acknowledges the request, the client can configure the address and other relevant parameters on this interface. How the client picks a suitable interface is out of scope for this document ๐
6. New DHCPv6 Messages ๐
Two new DHCPv6 messages carry DHCPv4 messages between the client and the server using the DHCPv6 protocol: DHCPv4-query and DHCPv4-response. This section describes the structure of these messages. Let's get into it ๐ง
6.1. Message Types ๐ฆ
Here are the two message types, bestie:
DHCPV4-QUERY (20): The DHCP 4o6 client sends a DHCPv4-query message to a DHCP 4o6 server. The DHCPv4 Message option carried by this message contains a DHCPv4 message that the DHCP 4o6 client uses to request IPv4 configuration parameters from the server. Request energy, fully unhinged ๐
DHCPV4-RESPONSE (21): A DHCP 4o6 server sends a DHCPv4-response message to a DHCP 4o6 client. It contains a DHCPv4 Message option carrying a DHCPv4 message, sent in response to the DHCPv4 message the server received in the DHCPv4 Message option of the DHCPv4-query message. The reply is giving โจ main character reply โจ
6.2. Message Formats โจ
Okay so both DHCPv6 messages in this doc share the exact same layout, bestie ๐ Here's the picture:
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| msg-type | flags |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
. options .
. (variable) .
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 2: The Format of DHCPv4-query and DHCPv4-response Messages
msg-type ๐ identifies the message type. It can be either DHCPV4-QUERY (20) or DHCPV4-RESPONSE (21), which match the DHCPv4-query or DHCPv4-response it's carrying, respectively.
flags ๐ฆ holds extra info the server needs to process the DHCPv4 message inside a DHCPv4-query, or that the client needs to process a DHCPv4 message inside a DHCPv4-response.
options ๐ are the options carried by the message. The DHCPv4 Message Option (described in Section 7.1) MUST be carried by the message. Only DHCPv6 options for IPv4 configuration may be included in this field. It MUST NOT contain DHCPv6 options related solely to IPv6, or IPv6-only service configuration. Hard no on the IPv6-only stuff, periodt ๐
6.3. DHCPv4-query Message Flags ๐ธ
The flags field of the DHCPv4-query carries extra info the server might use to process the encapsulated DHCPv4 message. Right now only one bit of it is used, and the rest are reserved for future use. Here's the format:
0 1 2
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|U| MBZ |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 3: DHCPv4-query Flags Format
U ๐ is the Unicast flag. If it's set to 1, that means the DHCPv4 message inside the DHCPv4-query would be sent to a unicast address if it went out over IPv4. If it's set to 0, the DHCPv4 message would have gone to the broadcast address over IPv4. How the flag gets used is covered in detail in Section 8.
MBZ ๐ง means the bits MUST be set to zero when sending and MUST be ignored when receiving.
6.4. DHCPv4-response Message Flags ๐ซถ
This document doesn't introduce any flags for the flags field of the DHCPv4-response. They're all reserved for future use. The DHCP 4o6 server MUST set all bits of this field to 0, and the DHCP 4o6 client MUST ignore whatever is in this field. ๐ฅ
7. New DHCPv6 Options โจ
7.1. DHCPv4 Message Option Format ๐
The DHCPv4 Message option carries a DHCPv4 message that's sent by the client or the server. These messages exclude any IP or UDP headers, so it's just the DHCPv4 part ๐ฆ
The format of the DHCPv4 Message option is:
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-code | option-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
. DHCPv4-message .
. .
. .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 4: DHCPv4 Message Option Format
option-code is OPTION_DHCPV4_MSG (87).
option-len is the length of the DHCPv4 message.
DHCPv4-message is the DHCPv4 message sent by the client or the server. In a DHCPv4-query message it holds a DHCPv4 message sent by a client. In a DHCPv4-response message it holds a DHCPv4 message the server sent back to a client. ๐
7.2. DHCP 4o6 Server Address Option Format ๐ง
The DHCP 4o6 Server Address option is sent by a server to a client that's requesting IPv6 configuration using DHCPv6 [RFC3315]. It carries a list of DHCP 4o6 servers' IPv6 addresses that the client should contact to get its IPv4 configuration. The list may include multicast and unicast addresses, and the client sends its requests to all the unique addresses in this option. ๐
This option can also carry no IPv6 addresses at all, which tells the client to use the All_DHCP_Relay_Agents_and_Servers multicast address as the destination address. Iconic ๐
The presence of this option in the server's response tells the client it should use DHCPv4 over DHCPv6 to get IPv4 configuration. If the option is absent, the client MUST NOT enable DHCPv4-over-DHCPv6 functionality. Not allowed, no cap ๐
The format of the DHCP 4o6 Server Address option is:
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-code | option-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
. IPv6 Address(es) .
. .
. .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 5: DHCP 4o6 Servers Address Option Format
option-code is OPTION_DHCP4_O_DHCP6_SERVER (88).
option-len is the length of the IPv6 address(es) carried by the option, which is a multiple of 16 octets. The minimal length of this option is 0.
IPv6 Address is zero or more IPv6 addresses of the DHCP 4o6 server(s).
8. Use of the DHCPv4-query Unicast Flag ๐ฆ
A DHCPv4 client conforming to [RFC2131] may send its DHCPREQUEST message to either a broadcast or a unicast address, depending on its state. For example, a client in the RENEWING state uses a unicast address to contact the DHCPv4 server and renew its lease. A client in the REBINDING state uses a broadcast address. Two different vibes, same message ๐
In DHCPv4 over DHCPv6, IPv6 is what delivers the DHCPv4 messages to the DHCP 4o6 server. There's no relation between the outer IPv6 address and the inner DHCPv4 message. So the server can't figure out whether the received DHCPv4 message should've been sent with broadcast or unicast in IPv4 just by looking at the IPv6 address. Plot twist ๐ญ
So to let the server figure out the client's state, the Unicast flag is carried in the DHCPv4-query message. The client MUST set this flag to 1 when the DHCPv4 message would have gone to the unicast address if it were using DHCPv4 over IPv4. This flag MUST be set to 0 if the DHCPv4 client would have sent the message to the broadcast address in IPv4. Whether a message goes to a broadcast or unicast address is decided based on [RFC2131] and its extensions. โจ
Note: The Unicast flag reflects how the DHCPv4 packet would have been sent, not how the DHCPv6 packet itself is sent. Keep that straight, bestie ๐ซถ
9. DHCP 4o6 Client Behavior ๐
okay bestie, first rule of the client's life: it MUST obtain its necessary IPv6 configuration from a DHCPv6 server before using DHCPv4 over DHCPv6 ๐ . The client asks for the DHCP 4o6 Server Address option through the Option Request option (ORO) in every Solicit, Request, Renew, Rebind, and Information-request message. If the DHCPv6 server includes the DHCP 4o6 Server Address option in its response, that's the green light ๐ฆ that the client can use DHCPv4 over DHCPv6 to get its IPv4 config, by sending DHCPv4 messages wrapped up inside DHCPv4-query messages โจ
The client MUST NOT use DHCPv4 over DHCPv6 to request IPv4 configuration if the DHCPv6 server does not include the DHCP 4o6 Server Address option ๐. If the IPv6 configuration that had the DHCP 4o6 Server Address option expires, or if the renewed IPv6 configuration doesn't have it, the client MUST stop using DHCPv4 over DHCPv6 to request or renew IPv4 configuration. Still, the client keeps asking for the DHCP 4o6 Server Address option in the messages it sends to the DHCPv6 server for as long as it wants to use DHCPv4 over DHCPv6 ๐ซถ
In a multihomed setup, it's possible to have more than one DHCPv6 configuration with a DHCP 4o6 Server Address Option active at the same time ๐. These configurations are treated as independent, so whenever any one of them is active, a DHCPv4-over-DHCPv6 function may be enabled for that configuration.
An implementation can also treat them as exclusive, so only one is active at a time ๐. In that case, the client keeps the same configuration active nonstop for as long as it's valid. If that one becomes invalid but one or more of the others are still valid, the client activates one of the remaining valid configurations.
Which strategy to pick is up to the implementation ๐. Keeping several configurations active at once can be useful redundancy in some apps, but it can also be needlessly complex in others.
If the client receives the DHCP 4o6 Server Address option and DHCPv4 [RFC2131] is used on the interface where that DHCPv6 option came in, the client MUST stop using the IPv4 configuration it got from DHCPv4 on that interface ๐ญ. The client MAY send a DHCPRELEASE to the DHCPv4 server to give up an existing lease, as described in Section 4.4.6 of [RFC2131]. The client MUST NOT use DHCPv4 on this interface for as long as it keeps receiving the DHCP 4o6 Server Address option in messages from the DHCPv6 server.
If the client receives a DHCP 4o6 Server Address option that contains no IP addresses (the option is empty), the client MUST send its requests to the All_DHCP_Relay_Agents_and_Servers multicast address ๐ฃ. If the option does contain a list of IP addresses, the client SHOULD send requests to each unique address carried by the option ๐.
If the client got its stateless IPv6 configuration by sending an Information-request message to the server, the client MUST follow the rules in [RFC4242] to periodically refresh the DHCPv4-over-DHCPv6 configuration (that is, the list of DHCP 4o6 servers) along with its other configuration data ๐. A client with stateful IPv6 configuration refreshes the status of its DHCPv4-over-DHCPv6 function whenever it extends the lifetime of its IPv6 address, which happens in Renew and Rebind messages.
The client MUST employ an IPv6 address of an appropriate scope to source the DHCPv4-query message from ๐ง. When the client sends a DHCPv4-query message to the multicast address, it MUST use a link-local address as the source address, as described in [RFC3315]. When the client sends a DHCPv4-query message using unicast, the source address MUST be an address of appropriate scope that was acquired in advance.
The client generates a DHCPv4 message and stores it verbatim in the DHCPv4 Message option carried by the DHCPv4-query message ๐ฆ. The client MUST put exactly one DHCPv4 Message option into a single DHCPv4-query message. The client MUST NOT request the DHCP 4o6 Server Address option in the DHCPv4-query message.
The client MUST follow the rules defined in Section 8 when it sets the Unicast flag based on the DHCPv4 destination ๐.
When the client receives a DHCPv4-response message, it MUST look for the DHCPv4 Message option inside it. If that option isn't found, the DHCPv4-response message is discarded ๐๏ธ. If the DHCPv4 Message option is there, the client pulls out the DHCPv4 message it contains and processes it as described in Section 4.4 of [RFC2131].
When dealing with IPv4 configuration, the client MUST follow the normal DHCPv4 retransmission requirements and strategy specified in Section 4.1 of [RFC2131]. There are no explicit transmission parameters tied to a DHCPv4-query message, because that's all governed by the DHCPv4 "state machine" [RFC2131] ๐ฆ.
The client MUST implement [RFC4361] so the device correctly identifies itself ๐ชช. It MUST send a 'client identifier' option when using DHCPv4 over DHCPv6.
10. Relay Agent Behavior ๐
When a DHCPv6 relay agent gets a DHCPv4-query message, it might not recognize it ๐คทโโ๏ธ. The unknown message MUST be forwarded as described in [RFC7283].
A DHCPv6 relay agent that can recognize DHCP 4o6 messages MAY allow a separate set of destination addresses to be configured for those messages, in addition to the destination addresses used for relaying other DHCPv6 messages โจ. To do this, the relay checks the received DHCPv6 message type and forwards according to the following logic:
- If the message type is DHCPV4-QUERY, the packet is relayed to the configured DHCP 4o6 Server's address(es) as a normal DHCPv6 packet (that is, DHCPv6/UDP/IPv6).
- For any other DHCPv6 message type, forward according to section 20 of [RFC3315].
This logic only allows for separate relay destinations configured on the relay agent closest to the client (a single relay hop) ๐. Multiple relaying hops aren't considered when it comes to separate relay destinations.
11. DHCP 4o6 Server Behavior ๐ฅ๏ธ
When the server gets a DHCPv4-query message from a client, it searches for the DHCPv4 Message option ๐. The server discards any packet that doesn't have this option. On top of that, the server MAY notify an administrator about receiving this malformed packet. The mechanism for that notification is out of scope for this document ๐ โโ๏ธ.
If the server finds a valid DHCPv4 Message option, it extracts the original DHCPv4 message. Since that DHCPv4 message was encapsulated inside the DHCPv6 message, it's missing info that a DHCPv4 server implementing [RFC2131] normally uses to make address-allocation decisions, like giaddr for relayed messages, or the IPv4 address of the interface the server uses to talk to a directly connected client ๐ต. So the DHCP 4o6 server allocates addresses according to the local address-assignment policies set by the server administrator. For example, if the DHCPv4-query message came in through a relay, the server MAY use the link-address field of the Relay-forward message as a lookup for the IPv4 subnet to assign a DHCPv4 address from. If the DHCPv4-query message came from a directly connected client, the server MAY use the IPv6 source address of the message to figure out which IPv4 subnet to use for DHCPv4 address assignment ๐บ๏ธ.
Alternatively, the server may act as a DHCPv4 relay agent and forward the DHCPv4 packet to a "normal" DHCPv4 server ๐. The working group hasn't considered the details of such a solution. Describing it is out of scope for this document, and it's left as future work should the need ever come up ๐ฎ.
The server SHOULD use the flags field of the DHCPv4-query message to create a response (a server-to-client DHCPv4 message) ๐ฉ. The use of this field is described in detail in Section 8.
When the server creates an appropriate DHCPv4 response, it places that response in the payload of a DHCPv4 Message option, which goes into the DHCPv4-response message ๐ฌ.
If the DHCPv4-query message was received directly by the server, the DHCPv4-response message MUST be unicast from the interface the original message came in on ๐ฏ.
If the DHCPv4-query message was received in a Relay-forward message, the server creates a Relay-reply message with the DHCPv4-response message in the payload of a Relay Message option, and responds as described in Section 20.3 of [RFC3315] ๐.
12. Security Considerations ๐๐
In this specification, DHCPv4 messages are encapsulated in the newly defined option and messages. This is similar to how current relay agent messages are handled ๐ง. To get past firewalls or network authentication gateways, a malicious attacker may leverage this feature to carry other messages over DHCPv6, that is, use DHCPv6 as a form of encapsulation ๐. Still, the potential risk from this is no more severe than what we already have with current DHCPv4 and DHCPv6 practice.
It's possible for a rogue server to reply with a DHCP 4o6 Server Address option that contains duplicated IPv6 addresses, which could cause an amplification attack ๐จ. To avoid this, the client MUST check for duplicate IPv6 addresses in a DHCP 4o6 Server Address option when it receives one. The client MUST ignore any instance of each address except the first one ๐.
When you're deciding whether to enable DHCPv4-over-DHCPv6, one important thing to keep in mind is that once it's enabled, the DHCPv6 server gets the power to shut off DHCPv4 traffic, and therefore IPv4 traffic, on the interface configured to do DHCPv4-over-DHCPv6 ๐ฑ. For this reason, DHCPv4-over-DHCPv6 should only be enabled in situations where there is a clear trust relationship that clears up this concern ๐ค. For instance, a CPE device can safely enable this on its WAN interface, because it's reasonable to assume an ISP won't accidentally configure DHCPv4 over DHCPv6 service on that link, and it would be impractical for an attacker to set up a rogue DHCPv6 server in the ISP's network ๐ฐ.
13. IANA Considerations ๐
IANA has allocated two DHCPv6 option codes for OPTION_DHCPV4_MSG (87) and OPTION_DHCP4_O_DHCP6_SERVER (88) from the "Option Codes" table ๐ข. IANA has also allocated two DHCPv6 message type codes for DHCPV4-QUERY (20) and DHCPV4-RESPONSE (21) from the "Message Types" table of the "Dynamic Host Configuration Protocol for IPv6 (DHCPv6)" registry ๐๏ธ. Both tables can be found at <http://www.iana.org/assignments/dhcpv6-parameters/> ๐ธ.
14. Contributors List ๐ซถ
Many thanks to Ted Lemon, Bernie Volz, Tomek Mrugalski, Cong Liu, and Yuchi Chen for their amazing contributions to the specification ๐โจ.
15. References ๐
15.1. Normative References
Okay so bestie, the normative references are the ones you actually need to read before you can implement this, no cap ๐โจ
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC2119] is the one that explains what MUST, SHOULD and friends actually mean. It's basically the cheat sheet for every requirement level in the whole doc ๐๐
[RFC2131] Droms, R., "Dynamic Host Configuration Protocol", RFC
2131, March 1997.
[RFC2131] is the original DHCPv4 spec, the foundation everything here builds on ๐
[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.
[RFC3315] is the DHCPv6 spec ๐ It's the IPv6 version of the same vibe, and it's giving main character energy ๐
[RFC4242] Venaas, S., Chown, T., and B. Volz, "Information Refresh
Time Option for Dynamic Host Configuration Protocol for
IPv6 (DHCPv6)", RFC 4242, November 2005.
[RFC4242] adds the Information Refresh Time option to DHCPv6, so clients know when to refresh their info ๐ธโฐ
[RFC4361] Lemon, T. and B. Sommerfeld, "Node-specific Client
Identifiers for Dynamic Host Configuration Protocol
Version Four (DHCPv4)", RFC 4361, February 2006.
[RFC4361] covers node-specific client identifiers for DHCPv4. It's the one that lets a client be recognised by its own identity rather than just its hardware address ๐ฆ
[RFC7283] Cui, Y., Sun, Q., and T. Lemon, "Handling Unknown DHCPv6
Messages", RFC 7283, July 2014.
[RFC7283] is about what to do when you get a DHCPv6 message you don't recognise, which is honestly iconic behaviour for a protocol to have ๐ง
15.2. Informative References
These ones are just for context, bestie. You don't have to read them, but they're lowkey helpful ๐ซถ
[LW4OVER6]
Cui, Y., Sun, Q., Boucadair, M., Tsou, T., Lee, Y., and I.
Farrer, "Lightweight 4over6: An Extension to the DS-Lite
Architecture", Work in Progress, June 2014.
[LW4OVER6] is the Lightweight 4over6 draft, which is still a work in progress. It's the architecture this whole doc is built around, so it's giving very relevant vibes ๐
[RFC951] Croft, B. and J. Gilmore, "Bootstrap Protocol", RFC 951,
September 1985.
[RFC951] is the Bootstrap Protocol spec, which is the great-great-ancestor of DHCP. Respect the OG ๐๐
Authors' Addresses
Qi Sun Tsinghua University Beijing 100084 P.R. China
Phone: +86-10-6278-5822 EMail: sunqi@csnet1.cs.tsinghua.edu.cn
Yong Cui Tsinghua University Beijing 100084 P.R. China
Phone: +86-10-6260-3059 EMail: yong@csnet1.cs.tsinghua.edu.cn
Marcin Siodelski Internet Systems Consortium 950 Charter Street Redwood City, CA 94063 USA
EMail: msiodelski@gmail.com
Suresh Krishnan Ericsson 8400 Blvd. Decarie Town of Mount Royal, Quebec Canada
EMail: suresh.krishnan@ericsson.com
Ian Farrer Deutsche Telekom AG CTO-ATI, Landgrabenweg 151 Bonn, NRW 53227 Germany
EMail: ian.farrer@telekom.de
๐ฆ where this page comes from
- ietf: rfc7341 2014-08
- ๐ girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms