draft-ietf-dhc-dhcpv4-relay-encapsulation-01.txt | draft-porfiri-dhc-dhcpv4-raio-nesting.txt | |||
---|---|---|---|---|
dhc T. Lemon | DHC C. Porfiri | |||
Internet-Draft Nominum, Inc. | Internet-Draft J. Arkko | |||
Intended status: Standards Track H. Deng | Intended status: Standards Track M. Kühlewind | |||
Expires: January 12, 2012 L. Huang | Expires: 24 April 2024 Ericsson | |||
China Mobile | 22 October 2023 | |||
July 11, 2011 | ||||
Relay Agent Encapsulation for DHCPv4 | DHCPv4 Relay Agent Information Option Passing Extensions | |||
draft-ietf-dhc-dhcpv4-relay-encapsulation-01 | draft-porfiri-dhc-dhcpv4-raio-nesting-latest | |||
Abstract | Abstract | |||
This document describes a general mechanism whereby DHCP relay agents | This document describes a general mechanism whereby DHCP relay agents | |||
can encapsulate DHCP packets that they are forwarding in the | can encapsulate DHCP packets that they are forwarding in the | |||
direction of DHCP servers, and decapsulate packets that they are | direction of DHCP servers, and decapsulate packets that they they are | |||
forwarding toward DHCP clients, so that more than one relay agent can | forwarding toward DHCP clients, so that more than one relay agent can | |||
insert relay agent suboptions into the forwarding chain. | insert relay agent suboptions into the forwarding chain. | |||
Status of this Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on January 12, 2012. | This Internet-Draft will expire on 24 April 2024. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2011 IETF Trust and the persons identified as the | Copyright (c) 2023 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents (https://trustee.ietf.org/ | |||
(http://trustee.ietf.org/license-info) in effect on the date of | license-info) in effect on the date of publication of this document. | |||
publication of this document. Please review these documents | Please review these documents carefully, as they describe your rights | |||
carefully, as they describe your rights and restrictions with respect | and restrictions with respect to this document. Code Components | |||
to this document. Code Components extracted from this document must | extracted from this document must include Revised BSD License text as | |||
include Simplified BSD License text as described in Section 4.e of | described in Section 4.e of the Trust Legal Provisions and are | |||
the Trust Legal Provisions and are provided without warranty as | provided without warranty as described in the Revised BSD License. | |||
described in the Simplified BSD License. | ||||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
1.1. Requirements Language . . . . . . . . . . . . . . . . . . 4 | 1.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
1.2. Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 | 2. Protocol Summary . . . . . . . . . . . . . . . . . . . . . . 5 | |||
2. Protocol Summary . . . . . . . . . . . . . . . . . . . . . . . 6 | 2.1. RELAYFORWARD Message . . . . . . . . . . . . . . . . . . 6 | |||
2.1. RELAYFORWARD Message . . . . . . . . . . . . . . . . . . . 6 | 2.2. RELAYREPLY Message . . . . . . . . . . . . . . . . . . . 6 | |||
2.2. RELAYREPLY Message . . . . . . . . . . . . . . . . . . . . 6 | 2.3. Layer Two Address suboption . . . . . . . . . . . . . . . 6 | |||
2.3. Layer Two Address suboption . . . . . . . . . . . . . . . 6 | 3. Encoding . . . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
3. Encoding . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 | 3.1. The fixed-length header . . . . . . . . . . . . . . . . . 8 | |||
3.1. The fixed-length header . . . . . . . . . . . . . . . . . 8 | 3.2. Relay Segment . . . . . . . . . . . . . . . . . . . . . . 9 | |||
3.2. Relay Segment . . . . . . . . . . . . . . . . . . . . . . 9 | 3.3. Encapsulation Segment . . . . . . . . . . . . . . . . . . 9 | |||
3.3. Encapsulation Segment . . . . . . . . . . . . . . . . . . 9 | 4. DHCP Relay Agent Behavior . . . . . . . . . . . . . . . . . . 10 | |||
4. DHCP Relay Agent Behavior . . . . . . . . . . . . . . . . . . 9 | 4.1. Packet processing . . . . . . . . . . . . . . . . . . . . 10 | |||
4.1. Packet processing . . . . . . . . . . . . . . . . . . . . 10 | 4.1.1. Packets traveling toward DHCP servers . . . . . . . . 11 | |||
4.1.1. Packets traveling toward DHCP servers . . . . . . . . 11 | 4.1.2. Packets traveling toward DHCP clients . . . . . . . . 11 | |||
4.1.2. Packets traveling toward DHCP clients . . . . . . . . 11 | 4.1.3. Anti-spoofing . . . . . . . . . . . . . . . . . . . . 11 | |||
4.1.3. Anti-spoofing . . . . . . . . . . . . . . . . . . . . 11 | 4.2. Constructing RELAYFORWARD messages . . . . . . . . . . . 12 | |||
4.2. Constructing RELAYFORWARD messages . . . . . . . . . . . . 11 | 4.2.1. Initializing the fixed-length header . . . . . . . . 12 | |||
4.2.1. Initializing the fixed-length header . . . . . . . . . 11 | 4.2.2. Initializing the relay segment . . . . . . . . . . . 12 | |||
4.2.2. Initializing the relay segment . . . . . . . . . . . . 12 | 4.2.3. Fixed header settings for RELAYFORWARD messages . . . 13 | |||
4.2.3. Fixed header settings for RELAYFORWARD messages . . . 12 | 4.2.4. Fixed header settings for BOOTREQUEST messages . . . 13 | |||
4.2.4. Fixed header settings for BOOTREQUEST messages . . . . 13 | 4.2.5. Initializing the encapsulation segment . . . . . . . 13 | |||
4.2.5. Initializing the encapsulation segment . . . . . . . . 13 | 4.3. Decapsulating RELAYREPLY messages . . . . . . . . . . . . 14 | |||
4.3. Decapsulating RELAYREPLY messages . . . . . . . . . . . . 13 | 4.3.1. Processing relay agent suboptions . . . . . . . . . . 14 | |||
4.3.1. Processing relay agent suboptions . . . . . . . . . . 13 | 4.3.2. Constructing the decapsulated message . . . . . . . . 14 | |||
4.3.2. Constructing the decapsulated message . . . . . . . . 14 | 4.4. Retransmitting modified messages . . . . . . . . . . . . 14 | |||
4.4. Retransmitting modified messages . . . . . . . . . . . . . 14 | 4.5. Layer two relay agents . . . . . . . . . . . . . . . . . 14 | |||
4.4.1. Layer two relay agents . . . . . . . . . . . . . . . . 14 | 4.5.1. Constructing the headers . . . . . . . . . . . . . . 15 | |||
4.4.1.1. Constructing the headers . . . . . . . . . . . . . 14 | 4.5.2. Forwarding the modified packet . . . . . . . . . . . 15 | |||
4.4.1.2. Forwarding the modified packet . . . . . . . . . . 15 | 4.6. Layer Three Relay Agents . . . . . . . . . . . . . . . . 16 | |||
4.4.2. Layer three relay agents . . . . . . . . . . . . . . . 15 | 4.6.1. Transmitting a decapsulated RELAYREPLY message . . . 16 | |||
4.4.2.1. Transmitting a decapsulated RELAYREPLY message . . 15 | 4.6.2. Transmitting a decapsulated BOOTREPLY message . . . . 16 | |||
4.4.2.2. Transmitting a decapsulated BOOTREPLY message . . 16 | 4.6.3. Transmitting other messages . . . . . . . . . . . . . 16 | |||
4.4.2.3. Transmitting other messages . . . . . . . . . . . 16 | 5. DHCP Server Behavior . . . . . . . . . . . . . . . . . . . . 16 | |||
5. DHCP Server Behavior . . . . . . . . . . . . . . . . . . . . . 16 | 5.1. Receiving RELAYFORWARD messages . . . . . . . . . . . . . 16 | |||
5.1. Receiving RELAYFORWARD messages . . . . . . . . . . . . . 16 | 5.1.1. Decapsulation . . . . . . . . . . . . . . . . . . . . 17 | |||
5.1.1. Decapsulation . . . . . . . . . . . . . . . . . . . . 16 | 5.1.2. Processing of decapsulated suboptions . . . . . . . . 17 | |||
5.1.2. Processing of decapsulated suboptions . . . . . . . . 16 | 5.1.3. Address allocation . . . . . . . . . . . . . . . . . 18 | |||
5.1.3. Address allocation . . . . . . . . . . . . . . . . . . 17 | 5.1.4. Default link selection algorithm . . . . . . . . . . 18 | |||
5.1.3.1. Default link selection algorithm . . . . . . . . . 17 | 5.1.5. Other link selection algorithms . . . . . . . . . . . 19 | |||
5.1.3.2. Other link selection algorithms . . . . . . . . . 18 | 5.2. Responding to RELAYFORWARD messages . . . . . . . . . . . 19 | |||
5.2. Responding to RELAYFORWARD messages . . . . . . . . . . . 18 | 5.2.1. Constructing a RELAYREPLY encapsulation . . . . . . . 19 | |||
5.2.1. Constructing a RELAYREPLY encapsulation . . . . . . . 18 | 5.2.2. Transmission of RELAYREPLY messages . . . . . . . . . 20 | |||
5.2.1.1. Constructing the relay segments . . . . . . . . . 19 | 5.3. Responding to messages other than RELAYFORWARD . . . . . 21 | |||
5.2.1.2. Constructing the fixed-length header . . . . . . . 19 | 6. DHCP Client Behavior . . . . . . . . . . . . . . . . . . . . 21 | |||
5.2.2. Transmission of RELAYREPLY messages . . . . . . . . . 19 | 7. Layer 2 Relay Agent Information . . . . . . . . . . . . . . . 21 | |||
5.3. Responding to messages other than RELAYFORWARD . . . . . . 20 | 7.1. Need of Layer 2 Relay Agent . . . . . . . . . . . . . . . 21 | |||
6. DHCP Client Behavior . . . . . . . . . . . . . . . . . . . . . 20 | 7.2. Layer 2 Relay Agent in various network scenarios . . . . 22 | |||
7. Security Considerations . . . . . . . . . . . . . . . . . . . 20 | 7.2.1. DHCP server and client on same subnet . . . . . . . . 22 | |||
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 21 | 7.2.2. Multiple DHCP server and Client on same subnet . . . 25 | |||
9. References . . . . . . . . . . . . . . . . . . . . . . . . . . 21 | 7.2.3. DHCP server on another subnet with one Layer 3 Relay | |||
9.1. Normative References . . . . . . . . . . . . . . . . . . . 21 | Agent . . . . . . . . . . . . . . . . . . . . . . . . 27 | |||
9.2. Informative References . . . . . . . . . . . . . . . . . . 22 | 7.2.4. DHCP server on another subnet with multiple Layer 3 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 22 | Relay Agents . . . . . . . . . . . . . . . . . . . . 29 | |||
8. Conventions and Definitions . . . . . . . . . . . . . . . . . 30 | ||||
9. Security Considerations . . . . . . . . . . . . . . . . . . . 31 | ||||
10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 31 | ||||
11. References . . . . . . . . . . . . . . . . . . . . . . . . . 31 | ||||
11.1. Normative References . . . . . . . . . . . . . . . . . . 31 | ||||
11.2. Informative References . . . . . . . . . . . . . . . . . 32 | ||||
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 33 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 33 | ||||
1. Introduction | 1. Introduction | |||
In some networking environments, it is useful to be able to configure | In some networking environments, it is useful to be able to configure | |||
relay agents in a hierarchy, so that information from a relay agent | relay agents in a hierarchy, so that information from a relay agent | |||
close to the client can be combined with information from one or more | close to the client can be combined with information from one or more | |||
relay agents closer to the server, particularly in cases where the | relay agents closer to the server, particularly in cases where the | |||
relay agents may be in separate administrative domains. | relay agents may be in separate administrative domains. | |||
The current Relay Agent Information Option (RAIO) specification | The current Relay Agent Information Option (RAIO) specification | |||
(Patrick, M., "DHCP Relay Agent Information Option," January 2001.) | ||||
[RFC3046] specifies that when a relay agent receives a packet | [RFC3046] specifies that when a relay agent receives a packet | |||
containing an RAIO, it must not add an RAIO. This prevents chaining | containing an RAIO, it must not add an RAIO. This prevents chaining | |||
of RAIOs, and hence prohibits the hierarchical use case. | of RAIOs, and hence prohibits the hierarchical use case. | |||
DHCP version 6 [RFC3315] provides a much cleaner technique for | DHCP version 6 (Droms, R., Bound, J., Volz, B., Lemon, T., Perkins, | |||
providing RAIO suboptions to the DHCP server. Rather than appending | C., and M. Carney, "Dynamic Host Configuration Protocol for IPv6 | |||
an information option to the DHCP client's message, the relay agent | (DHCPv6)," July 2003.) [RFC3315] provides a much cleaner technique | |||
encapsulates the DHCP client message in a new DHCP message which it | for providing RAIO suboptions to the DHCP server. Rather than | |||
sends to the DHCP server along with any options it chooses to add to | appending an information option to the DHCP client's message, the | |||
provide information to the DHCP server. | relay agent encapsulates the DHCP client message in a new DHCP | |||
message which it sends to the DHCP server along with any options it | ||||
chooses to add to provide information to the DHCP server. | ||||
This document specifies a mechanism for providing the same | This document specifies a mechanism for providing the same | |||
functionality in DHCPv4. | functionality in DHCPv4. it is a republication and fine-tuning of | |||
ideas discussed earlier in the IETF which did not lead to a standard | ||||
specification, see [I-D.ietf-dhc-dhcpv4-relay-encapsulation] | ||||
[I-D.ietf-dhc-l2ra]. The topic is brought up now due to new | ||||
situations where this kind of functionality is needed (see | ||||
{Need_of_L2RA}). | ||||
1.1. Requirements Language | 1.1. Terminology | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The following terms and acronyms are used in this document: | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | ||||
document are to be interpreted as described in RFC 2119 [RFC2119]. | ||||
1.2. Terminology | * BOOTREPLY message | |||
The following terms and acronyms are used in this document: | Any DHCP or BOOTP message in which the 'op' field is set to | |||
BOOTREPLY. | ||||
BOOTREPLY message Any DHCP or BOOTP message in which the 'op' | * BOOTREQUEST message | |||
field is set to BOOTREPLY. | ||||
BOOTREQUEST message Any DHCP or BOOTP message in which the 'op' | Any DHCP or BOOTP message in which the 'op' field is set to | |||
field is set to BOOTREQUEST. | BOOTREQUEST. | |||
DHCP Dynamic Host Configuration Protocol Version 4 | * DHCP | |||
[RFC2131] | ||||
decapsulate the act of de-encapsulating DHCP packets being | Dynamic Host Configuration Protocol Version 4 [RFC2131] (Droms, | |||
relayed from DHCP servers or relay agents in | R., "Dynamic Host Configuration Protocol," March 1997.) | |||
the direction of DHCP clients, according to | ||||
this specification. | ||||
encapsulate the act of encapsulating DHCP packets that are | * decapsulate | |||
being relayed from DHCP clients or relay agents | ||||
toward DHCP servers, according to the method | ||||
described in this specification. | ||||
encapsulating relay agent a relay agent that implements this | The act of de-encapsulating DHCP packets being relayed from DHCP | |||
specification and is configured to encapsulate. | servers or relay agents in the direction of DHCP clients, | |||
according to this specification. | ||||
L2RA Layer 2 Relay Agent--a relay agent that doesn't | * encapsulate | |||
have an IP address reachable by the DHCP | ||||
server. | ||||
L3RA Layer 3 Relay Agent--a relay agent that has an | The act of encapsulating DHCP packets that are being relayed from | |||
IP address reachable by the DHCP server. | DHCP clients or relay agents toward DHCP servers, according to the | |||
method described in this specification. | ||||
option buffer the portion of the DHCP packet following the | * encapsulating relay agent | |||
magic cookie in the 'vend' field of the DHCP | ||||
Packet. | ||||
RAIO Relay Agent Information Option [RFC3046]. Also | A relay agent that implements this specification and is configured | |||
commonly referred to as "Option 82." | to encapsulate. | |||
RAIO suboption a DHCP suboption that has been defined for | * L2RA | |||
encapsulation in the Relay Agent Information | ||||
Option | ||||
relay message a RELAYFORWARD or RELAYREPLY message. | Layer 2 Relay Agent -- a relay agent that doesn't have an IP | |||
address reachable by the DHCP server. | ||||
RELAYFORWARD message Any DHCP or BOOTP message in which the 'op' | * L3RA | |||
field is set to RELAYFORWARD. | ||||
RELAYREPLY message Any DHCP or BOOTP message in which the 'op' | Layer 3 Relay Agent -- a relay agent that has an IP address | |||
field is set to RELAYREPLY. | reachable by the DHCP server. | |||
silently discard in many places in this specification, the | * option buffer | |||
implementation is required to silently discard | The portion of the DHCP packet following the magic cookie in the | |||
erroneous messages. What is meant by 'silently | 'vend' field of the DHCP Packet. | |||
discard' is that the implementation MUST NOT | ||||
send any ICMP message indicating that the | * RAIO | |||
delivery was in error. It may be desirable for | ||||
the implementation to keep a count of messages | Relay Agent Information Option (Patrick, M., "DHCP Relay Agent | |||
that have been discarded, either by message | Information Option," January 2001.) [RFC3046]. Also commonly | |||
type or by reason for discarding, or some | referred to as "Option 82." | |||
combination. Nothing in this specification | ||||
should be construed to forbid such data | * RAIO suboption | |||
collection. | ||||
A DHCP suboption that has been defined for encapsulation in the | ||||
Relay Agent Information Option | ||||
* relay message | ||||
A RELAYFORWARD or RELAYREPLY message. | ||||
* RELAYFORWARD message: | ||||
Any DHCP or BOOTP message in which the 'op' field is set to | ||||
RELAYFORWARD. | ||||
* RELAYREPLY message: | ||||
Any DHCP or BOOTP message in which the 'op' field is set to | ||||
RELAYREPLY. | ||||
* silently discard: In many places in this specification, the | ||||
implementation is required to silently discard erroneous messages. | ||||
What is meant by 'silently discard' is that the implementation | ||||
MUST NOT send any ICMP message indicating that the delivery was in | ||||
error. It may be desirable for the implementation to keep a count | ||||
of messages that have been discarded, either by message type or by | ||||
reason for discarding, or some combination. Nothing in this | ||||
specification should be construed to forbid such data collection. | ||||
2. Protocol Summary | 2. Protocol Summary | |||
This document specifies two new BOOTP message types: the RELAYFORWARD | This document specifies two new BOOTP message types: the RELAYFORWARD | |||
message, and the RELAYREPLY message. These messages are analogous to | message, and the RELAYREPLY message. These messages are analogous to | |||
the Relay Forward and Relay Reply messages in DHCPv6 [RFC3315]. | the Relay Forward and Relay Reply messages in DHCPv6 (Droms, R., | |||
Bound, J., Volz, B., Lemon, T., Perkins, C., and M. Carney, "Dynamic | ||||
Host Configuration Protocol for IPv6 (DHCPv6)," July 2003.) | ||||
[RFC3315]. | ||||
Although this specification is generally aimed at DHCP | Although this specification is generally aimed at DHCP | |||
implementations, it is not specifically restricted to DHCP, and is | implementations, it is not specifically restricted to DHCP, and is | |||
applicable to BOOTP in cases where the BOOTP server is a DHCP server | applicable to BOOTP in cases where the BOOTP server is a DHCP server | |||
that implements this specification, or the less likely case that the | that implements this specification, or the less likely case that the | |||
BOOTP server only supports the BOOTP protocol, but still implements | BOOTP server only supports the BOOTP protocol, but still implements | |||
this specification. | this specification. | |||
In general, when the term "DHCP" appears in this specification, the | In general, when the term "DHCP" appears in this specification, the | |||
reader should not read this as intending to exclude BOOTP. | reader should not read this as intending to exclude BOOTP. | |||
skipping to change at page 6, line 49 | skipping to change at page 6, line 43 | |||
where there is an L3RA on the path to the client, the DHCP server | where there is an L3RA on the path to the client, the DHCP server | |||
will encode the link layer address that would normally go in the | will encode the link layer address that would normally go in the | |||
chaddr field of the DHCP packet into a Layer Two Address suboption. | chaddr field of the DHCP packet into a Layer Two Address suboption. | |||
0 1 2 3 | 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 | 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 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| SUBOPT_L2AS | length | htype | chaddr ... | | SUBOPT_L2AS | length | htype | chaddr ... | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
Figure 1: Layer 2 Address Suboption | ||||
The Layer Two Address suboption has four fields: | The Layer Two Address suboption has four fields: | |||
SUBOPT_L2AS One octet: the suboption code for the Layer Two Address | * SUBOPT_L2AS | |||
suboption (TBD). | ||||
length One octet: the length of the Layer Two Address suboption. | One octet - suboption code for the Layer Two Address suboption | |||
(TBD). | ||||
htype One octet: the type of the Layer Two Address suboption-- | * length | |||
corresponds to the 'htype' field in a non-relay DHCP or BOOTP | One octet - length of the Layer Two Address suboption. | |||
message. | ||||
chaddr One or more octets: the layer two address of the client, from | * htype | |||
the 'chaddr' field of the DHCP or BOOTP message. | ||||
One octet - type of the Layer Two Address suboption -- corresponds | ||||
to the 'htype' field in a non-relay DHCP or BOOTP message. | ||||
* chaddr | ||||
One or more octets - layer two address of the client, from the | ||||
'chaddr' field of the DHCP or BOOTP message. | ||||
3. Encoding | 3. Encoding | |||
RELAYFORWARD and RELAYREPLY messages are distinguished through the | RELAYFORWARD and RELAYREPLY messages are distinguished through the | |||
use of the 'op' field of the DHCP packet. | use of the 'op' field of the DHCP packet. | |||
In non-relay DHCP packets, the 'op' field either contains | In non-relay DHCP packets, the 'op' field either contains | |||
BOOTREQUEST, for any DHCP message from the client to the server, or | BOOTREQUEST, for any DHCP message from the client to the server, or | |||
BOOTREPLY, for any DHCP message from the server to the client. | BOOTREPLY, for any DHCP message from the server to the client. | |||
This document defines two additional codes, RELAYFORWARD and | This document defines two additional codes, RELAYFORWARD and | |||
RELAYREPLY. Conforming DHCP servers and DHCP relay agents MUST | RELAYREPLY. Conforming DHCP servers and DHCP relay agents MUST | |||
support these two new values for the 'op' field. DHCP clients should | support these two new values for the 'op' field. DHCP clients should | |||
never see either value. | never see either value. | |||
+------+--------------+ | |-----:|:--------------| | |||
| code | meaning | | | code | meaning | | |||
+------+--------------+ | |-----:|:--------------| | |||
| 1 | BOOTREQUEST | | | 1 | BOOTREQUEST | | |||
| 2 | BOOTREPLY | | | 2 | BOOTREPLY | | |||
| 3 | RELAYFORWARD | | | 3 | RELAYFORWARD | | |||
| 4 | RELAYREPLY | | | 4 | RELAYREPLY | | |||
+------+--------------+ | |-----:|:--------------| | |||
Values for the 'op' field | Figure 2 | |||
RELAYFORWARD and RELAYREPLY messages share only the 'op' field in | RELAYFORWARD and RELAYREPLY messages share only the 'op' field in | |||
common with other DHCP and BOOTP messages. The remainder of the | common with other DHCP and BOOTP messages. The remainder of the | |||
message consists of a series of fixed-length fields followed by two | message consists of a series of fixed-length fields followed by two | |||
variable-length fields: the relay segment, and the encapsulated | variable-length fields: the relay segment, and the encapsulated | |||
message. | message. | |||
+-----+-----+-----+-----+ | +-----+-----+-----+-----+ | |||
| op | ep | padlen | | | op | ep | padlen | | |||
+-----+-----+-----+-----+ | +-----+-----+-----+-----+ | |||
| rslen | caplen | | | rslen | caplen | | |||
+-----+-----+-----+-----+ | +-----+-----+-----+-----+ | |||
| aiaddr | | | aiaddr | | |||
+-----+-----+-----+-----+ | +-----+-----+-----+-----+ | |||
. . | . . | |||
. relay segment . | . relay segment . | |||
. . | . . | |||
+-----------------------+ | +-----------------------+ | |||
. . | . . | |||
. encapsulated message . | . encapsulated message . | |||
. . | . . | |||
+-----------------------+ | +-----------------------+ | |||
Figure 3: Structure of RELAYFORWARD and RELAYREPLY messages | ||||
3.1. The fixed-length header | 3.1. The fixed-length header | |||
The fixed-length header of the relay message contains a series of | The fixed-length header of the relay message contains a series of | |||
fields that perform two purposes: to provide enough information that | fields that perform two purposes: to provide enough information that | |||
the DHCP server can reconstruct the original packet sent by the DHCP | the DHCP server can reconstruct the original packet sent by the DHCP | |||
client, and to establish the lengths of the two variable-length | client, and to establish the lengths of the two variable-length | |||
segments. | segments. | |||
To satisfy the first of these requirements, two fields in the fixed- | To satisfy the first of these requirements, two fields in the fixed- | |||
length header report the amount of padding stripped from the client | length header report the amount of padding stripped from the client | |||
message, if any, and whether or not an end option was stripped from | message, if any, and whether or not an end option was stripped from | |||
the client message. Except for a relay message that immediately | the client message. Except for a relay message that immediately | |||
encapsulates a message from a DHCP client, these fields are always | encapsulates a message from a DHCP client, these fields are always | |||
zero. Using these two fields, the DHCP server can reconstruct the | zero. Using these two fields, the DHCP server can reconstruct the | |||
client packet exactly, and this allows the DHCP server to validate | client packet exactly, and this allows the DHCP server to validate | |||
any signature [RFC3118] that may be present. | any signature (Droms, R. and W. Arbaugh, "Authentication for DHCP | |||
Messages," June 2001.) [RFC3118] that may be present. | ||||
The fixed-length header consists of five fields: | The fixed-length header consists of five fields: | |||
op The BOOTP 'op' field, which, for a relay message, MUST contain the | * op | |||
The BOOTP 'op' field, which, for a relay message, MUST contain the | ||||
RELAYFORWARD or RELAYREPLY code. | RELAYFORWARD or RELAYREPLY code. | |||
ep If an End option was present in the option buffer prior to | * ep | |||
If an End option was present in the option buffer prior to | ||||
encapsulation, this field is set to 1; otherwise, it is set to 0. | encapsulation, this field is set to 1; otherwise, it is set to 0. | |||
This field is a single byte. | This field is a single byte. | |||
padlen The length of any padding that was removed from the option | * padlen | |||
buffer prior to encapsulation: two bytes in network byte order. | ||||
rslen The length of the relay segment: two byte in network byte | The length of any padding that was removed from the option buffer | |||
prior to encapsulation: two bytes in network byte order. | ||||
* rslen | ||||
The length of the relay segment: two byte in network byte order. | ||||
* caplen | ||||
The length of the encapsulation segment: two byte in network byte | ||||
order. | order. | |||
caplen The length of the encapsulation segment: two byte in network | * aiaddr | |||
byte order. | ||||
aiaddr Relay agent IP address. | Relay agent IP address. | |||
3.2. Relay Segment | 3.2. Relay Segment | |||
The relay segment contains any RAIO suboptions that the encapsulating | The relay segment contains any RAIO suboptions that the encapsulating | |||
agent (the relay agent or the DHCP server) wishes to send. End and | agent (the relay agent or the DHCP server) wishes to send. End and | |||
Pad options MUST NOT appear in the relay segment. | Pad options MUST NOT appear within the relay segment. | |||
3.3. Encapsulation Segment | 3.3. Encapsulation Segment | |||
The encapsulation segment contains the entire DHCP message being | The encapsulation segment contains the entire DHCP message being | |||
encapsulated, with four exceptions: | encapsulated, with four exceptions: | |||
o The encapsulating agent MUST omit the IP and UDP headers, as well | * The encapsulating agent MUST omit the IP and UDP headers, as well | |||
as any layer two header, from the encapsulated message. | as any layer two header, from the encapsulated message. | |||
o The encapsulating agent MUST omit any options following the first | * The encapsulating agent MUST omit any options following the first | |||
End option in the option buffer. These options are assumed to be | End option in the option buffer. These options are assumed to be | |||
garbage, and are not covered by any signature [RFC3118]. | garbage, and are not covered by any signature (Droms, R. and W. | |||
Arbaugh, "Authentication for DHCP Messages," June 2001.) | ||||
[RFC3118]. | ||||
o The encapsulating MUST omit any Pad options present either at the | * The encapsulating MUST omit any Pad options present either at the | |||
end of the option buffer, or prior to the first End option, that | end of the option buffer, or prior to the first End packet, that | |||
are followed only by other Pad options or a single End option. | are followed only by other Pad options or a single End option. | |||
The encapsulating agent MUST record number of Pad options that | The encapsulating agent MUST record number of Pad options that | |||
were omitted in the 'padlen' field of the message header. | were omitted in the 'padlen' field of the message header. | |||
o The encapsulating agent MUST omit the End option, if present. The | * The encapsulating agent MUST omit the End option, if present. The | |||
encapsulating agent MUST set the 'ep' field in the message header | encapsulating agent MUST set the 'ep' field in the message header | |||
to 1 if an End option was present in the option buffer, and to | to 1 if an End option was present in the option buffer, and to | |||
zero if no End option was present. | zero if no End option was present. | |||
These exceptions apply only to the option buffer. The encapsulating | These exceptions apply only to the option buffer. The encapsulating | |||
agent MUST NOT modify the contents of the 'file' and 'sname' fields. | agent MUST NOT modify the contents of the 'file' and 'sname' fields. | |||
The encapsulating agent MUST NOT count End or Pad options that appear | The encapsulating agent MUST NOT count End or Pad options that appear | |||
in these fields. | in these fields. | |||
4. DHCP Relay Agent Behavior | 4. DHCP Relay Agent Behavior | |||
DHCP Relay agents implementing this specification MUST have a | DHCP Relay agents implementing this specification MUST have a | |||
configuration parameter controlling relay encapsulation. By default, | configuration parameter controlling relay encapsulation. By default, | |||
relay encapsulation MUST be disabled. | relay encapsulation MUST be disabled. | |||
Relay agents with encapsulation disabled MUST NOT encapsulate. Relay | Relay agents with encapsulation disabled MUST NOT encapsulate. Relay | |||
agents with encapsulation disabled MUST NOT decapsulate. | agents with encapsulation disabled MUST NOT decapsulate. | |||
In any case where a relay agent implementing this specification does | In any case where a relay agent implementing this specification does | |||
not encapsulate or decapsulate, it MUST behave exactly as a relay | not encapsulate or decapsulate, it MUST behave exactly as a relay | |||
agent that does not implement this specification at all. | agent would that did not implement this specification at all. | |||
DHCP relay agents that are configured with encapsulation enabled, but | DHCP relay agents that are configured with encapsulation enabled, but | |||
which have no agent-specific options to send to the DHCP server, MUST | which have no agent-specific options to send to the DHCP server, MUST | |||
encapsulate. Relay agents that are configured with encapsulation | encapsulate. Relay agents that are configured with encapsulation | |||
enabled MUST decapsulate. | enabled MUST decapsulate. | |||
Layer two relay agents MUST silently discard any messages that | Layer two relay agents MUST silently discard any messages that | |||
contains an IPsec authentication header [RFC4302]. This is because | contains an IPsec authentication header (Kent, S., "IP Authentication | |||
they cannot modify such messages, but also cannot detect that a | Header," December 2005.) [RFC4302]. This is because they cannot | |||
message from the DHCP server is in response such messages, since the | modify such packets, but also cannot detect that a message from the | |||
response message might not contain an IPsec authentication header. | DHCP server is in response such a message, since it might not contain | |||
an IPsec authentication header. | ||||
If a relay message would exceed the MTU of the outgoing interface, it | ||||
MUST be discarded, and an error condition SHOULD be logged. | ||||
4.1. Packet processing | 4.1. Packet processing | |||
Relay agents implementing this specification may receive packets | Relay agents implementing this specification may receive packets | |||
directed toward DHCP servers with a source port of 67 (BOOTPS). | directed toward DHCP servers with a source port of 67 (BOOTPS). | |||
Therefore, the source port cannot be used to determine whether the | Therefore, the source port cannot be used to determine whether the | |||
packet is traveling toward a DHCP server or toward a DHCP client. | packet is traveling toward a DHCP server or toward a DHCP client. | |||
In order to determine whether a message is traveling toward a DHCP | In order to determine whether a message is traveling toward a DHCP | |||
client or toward a DHCP server, the relay agent must check the 'op' | client or toward a DHCP server, the relay agent must check the 'op' | |||
skipping to change at page 11, line 51 | skipping to change at page 12, line 14 | |||
4.2. Constructing RELAYFORWARD messages | 4.2. Constructing RELAYFORWARD messages | |||
4.2.1. Initializing the fixed-length header | 4.2.1. Initializing the fixed-length header | |||
The relay agent constructs the RELAYFORWARD message by constructing | The relay agent constructs the RELAYFORWARD message by constructing | |||
the fixed-length header as specified in the earlier section titled | the fixed-length header as specified in the earlier section titled | |||
'Encoding'. The relay agent MUST set the 'op' field to a value of | 'Encoding'. The relay agent MUST set the 'op' field to a value of | |||
RELAYFORWARD. | RELAYFORWARD. | |||
If the relay agent is not a layer two relay agent | If the relay agent is not a layer two relay agent [I-D.ietf-dhc-l2ra] | |||
(see Section 7), it MUST store one of its own IP addresses in the | ||||
[I-D.ietf-dhc-l2ra], it MUST store one of its own IP addresses in the | ||||
'aiaddr' field. This address MUST be a valid IP address that is | 'aiaddr' field. This address MUST be a valid IP address that is | |||
reachable by the next hop relay(s) or DHCP server(s) to which the | reachable by the next hop relay(s) or DHCP server(s) to which the | |||
relay agent is configured to forward. | relay agent is configured to forward. | |||
DHCP servers normally use the relay agent IP address to determine on | DHCP servers normally use the relay agent IP address to determine on | |||
what link the DHCP client's IP address should be allocated. In some | what link the DHCP client's IP address should be allocated. In some | |||
cases, the value stored in the 'aiaddr' field will not be a valid IP | cases, the value stored in the 'aiaddr' field will not be a valid IP | |||
address on the link on which the source message was received. In | address on the link on which the source message was received. In | |||
this case, the relay agent MUST include a link selection suboption | this case, the relay agent MUST include a link selection suboption | |||
[RFC3527] that identifies that link in the relay segment. | (Kinnear, K., Stapp, M., Johnson, R., and J. Kumarasamy, "Link | |||
Selection sub-option for the Relay Agent Information Option for | ||||
DHCPv4," April 2003.) [RFC3527] that identifies that link in the | ||||
relay segment. | ||||
If the relay agent is a layer two relay agent, it MAY include a link | If the relay agent is a layer two relay agent, it MAY include a link | |||
selection suboption in the relay segment. | selection suboption in the relay segment. | |||
If the message being encapsulated is a BOOTREQUEST, L2RAs MUST store | If the message being encapsulated is a BOOTREQUEST, L2RAs MUST store | |||
a value of zero in the 'aiaddr' field. Otherwise, the L2RA MUST copy | a value of zero in the 'aiaddr' field. Otherwise, the L2RA MUST copy | |||
the value of the 'aiaddr' field in the RELAYFORWARD message being | the value of the 'aiaddr' field in the RELAYFORWARD message being | |||
encapsulated into the 'aiaddr' field of the RELAYFORWARD message that | encapsulated into the 'aiaddr' field of the RELAYFORWARD message that | |||
it generates. | it generates. | |||
skipping to change at page 12, line 38 | skipping to change at page 13, line 5 | |||
initialized differently depending on whether the message being | initialized differently depending on whether the message being | |||
encapsulated is a BOOTREQUEST or a RELAYFORWARD message. | encapsulated is a BOOTREQUEST or a RELAYFORWARD message. | |||
4.2.2. Initializing the relay segment | 4.2.2. Initializing the relay segment | |||
Following the fixed header, the relay agent MUST append any RAIO | Following the fixed header, the relay agent MUST append any RAIO | |||
suboptions it wishes to send to the DHCP server; this is the 'relay | suboptions it wishes to send to the DHCP server; this is the 'relay | |||
segment'. It MUST store the length of the relay segment in the | segment'. It MUST store the length of the relay segment in the | |||
'rslen' field of the fixed header. | 'rslen' field of the fixed header. | |||
The relay agent SHOULD include a Relay Agent ID suboption | The relay agent SHOULD include a Relay Agent ID suboption (Stapp, M., | |||
[I-D.ietf-dhc-relay-id-suboption] in the relay segment to identify | "The DHCPv4 Relay Agent Identifier Suboption," July 2009.) [RFC6925] | |||
itself to the DHCP server. | in the relay segment to identify itself to the DHCP server. | |||
4.2.3. Fixed header settings for RELAYFORWARD messages | 4.2.3. Fixed header settings for RELAYFORWARD messages | |||
If the message being encapsulated is a RELAYFORWARD message, the | If the message being encapsulated is a RELAYFORWARD message, the | |||
relay agent MUST initialize the 'caplen' field of the fixed header to | relay agent MUST initialize the 'caplen' field of the fixed header to | |||
the length of the source message, excluding any layer 2, IP and UDP | the length of the source message, excluding any layer 2, IP and UDP | |||
headers. It MUST append the contents of the message, again excluding | headers. It MUST append the contents of the message, again excluding | |||
any layer 2, IP or UDP headers, to the new message. It MUST | any layer 2, IP or UDP headers, to the new message. It MUST | |||
initialize the 'ep' and 'padlen' fields in the fixed header of the | initialize the 'ep' and 'padlen' fields in the fixed header of the | |||
new message to zero. | new message to zero. | |||
skipping to change at page 13, line 47 | skipping to change at page 14, line 16 | |||
To decapsulate a RELAYREPLY message, the relay agent creates a | To decapsulate a RELAYREPLY message, the relay agent creates a | |||
decapsulated message, processes any RAIO suboptions it recognizes in | decapsulated message, processes any RAIO suboptions it recognizes in | |||
the relay segment, and forwards the decapsulated message to its | the relay segment, and forwards the decapsulated message to its | |||
destination. | destination. | |||
4.3.1. Processing relay agent suboptions | 4.3.1. Processing relay agent suboptions | |||
The suboptions parsed from the relay segment are processed by the | The suboptions parsed from the relay segment are processed by the | |||
relay agent as specified in the Relay Agent Information Option | relay agent as specified in the Relay Agent Information Option | |||
specification [RFC3046], as well as in any documents that define | specification (Patrick, M., "DHCP Relay Agent Information Option," | |||
January 2001.) [RFC3046], as well as in any documents that define | ||||
suboptions to the Relay Agent Information Option. A current list of | suboptions to the Relay Agent Information Option. A current list of | |||
DHCP Relay Agent suboptions and the documents that define them can be | DHCP Relay Agent suboptions and the documents that define them can be | |||
located in the IANA protocol registry for Bootp and DHCP parameters, | located in the IANA protocol registry for Bootp and DHCP parameters, | |||
in the section titled "DHCP Relay Agent Sub-Option Codes." | in the section titled "DHCP Relay Agent Sub-Option Codes." | |||
4.3.2. Constructing the decapsulated message | 4.3.2. Constructing the decapsulated message | |||
To construct a decapsulated message, the relay agent copies the | To construct a decapsulated message, the relay agent copies the | |||
portion of the RELAYREPLY message following the relay segment, with a | portion of the RELAYREPLY message following the relay segment, with a | |||
length specified in the 'caplen' field of the fixed-length header, | length specified in the 'caplen' field of the fixed-length header, | |||
into the new message. | into the new message. | |||
4.4. Retransmitting modified messages | 4.4. Retransmitting modified messages | |||
If the relay agent did not modify the message either by encapsulating | If the relay agent did not modify the message either by encapsulating | |||
or decapsulating it, it retransmits the message according to existing | or decapsulating it, it retransmits the message according to existing | |||
practice. | practice. | |||
Otherwise, how the modified message is transmitted to its next | Otherwise, how the modified message is transmitted to its next | |||
destination depends on two factors. First, is the relay agent that | destination depends on two factors. First, is the relay agent that | |||
modified the message a layer two [I-D.ietf-dhc-l2ra] relay agent or a | modified the message a layer two (Joshi, B. and P. Kurapati, "Layer | |||
layer three [RFC1542] relay agent? Second, is the modified message a | 2 Relay Agent Information," April 2009.) [I-D.ietf-dhc-l2ra] relay | |||
agent (see Section 4.5) or a layer three (Wimer, W., "Clarifications | ||||
and Extensions for the Bootstrap Protocol," October 1993.) [RFC1542] | ||||
relay agent (see Section 4.6)? Second, is the modified message a | ||||
BOOTREPLY message, a RELAYREPLY message, or some other message? | BOOTREPLY message, a RELAYREPLY message, or some other message? | |||
4.4.1. Layer two relay agents | 4.5. Layer two relay agents | |||
There are two special aspects to the handling of relayed packets in | There are two special aspects to the handling of relayed packets in | |||
Layer Two Relay Agents (L2RAs). The first is the construction of the | Layer Two Relay Agents (L2RAs). The first is the construction of the | |||
layer two, IP and UDP headers on the packet. The second is how the | layer two, IP and UDP headers on the packet. The second is how the | |||
L2RA makes the forwarding decision. | L2RA makes the forwarding decision. | |||
4.4.1.1. Constructing the headers | 4.5.1. Constructing the headers | |||
The L2RA constructs the headers on the relayed packet by copying and, | The L2RA constructs the headers on the relayed packet by copying and, | |||
as necessary, modifying the headers from the original packet. | as necessary, modifying the headers from the original packet. | |||
If there is a layer two header, the L2RA MUST copy this header in | If there is a layer two header, the L2RA MUST copy this header in | |||
accordance with the needs of the particular layer two implementation | accordance with the needs of the particular layer two implementation | |||
it is using. If the header contains a packet length field, the L2RA | it is using. If the header contains a packet length field, the L2RA | |||
MUST adjust the value in the packet length field. If the header | MUST adjust the value in the packet length field. If the header | |||
contains a non-secure integrity check such as a CRC or checksum that | contains a non-secure integrity check such as a CRC or checksum that | |||
covers the entire packet, the L2RA MUST recompute this value. | covers the entire packet, the L2RA MUST recompute this value. | |||
L2RA encapsulation in cases where the layer two contains a secure | L2RA encapsulation in cases where the layer two contains a secure | |||
integrity check must either construct a new integrity signature, or | integrity check must either construct a new integrity signature, or | |||
else remove the integrity signature. If neither of these is | else remove the integrity signature. If neither of these is | |||
possible, the L2RA MUST silently discard the packet. | possible, the L2RA MUST silently discard the packet. | |||
The L2RA MUST copy the IP header without modification except length | If the IP header contains any sort of secure integrity check on the | |||
and checksum field which should be recomputed. If the IP header | packet, the L2RA MUST silently discard the packet. The L2RA MUST | |||
contains any sort of secure integrity check on the packet, the L2RA | adjust Total Length field in the IP header. In other respects, L2RA | |||
MUST silently discard the packet. | MUST copy the IP header without modification. | |||
The L2RA MUST copy the UDP header and adjust the 'Length' field | The L2RA MUST copy the UDP header and adjust the 'Length' field | |||
[RFC0768]. If the contents of the 'Checksum' field are not zero, the | carried within it (Postel, J., "User Datagram Protocol," August | |||
L2RA MUST compute a new checksum according to the algorithm specified | 1980.) [RFC0768]. If the contents of the 'Checksum' field are not | |||
in User Datagram Protocol. [RFC0768] | zero, the L2RA MUST compute a new checksum according to the algorithm | |||
specified in User Datagram Protocol. (Postel, J., "User Datagram | ||||
Protocol," August 1980.) [RFC0768] | ||||
4.4.1.2. Forwarding the modified packet | 4.5.2. Forwarding the modified packet | |||
Ordinarily when a layer two device forwards a packet, it simply | Ordinarily when a layer two device forwards a packet, it simply | |||
copies that packet from the interface on which it was received and | copies that packet from the interface on which it was received and | |||
transmits it, unchanged, on one or more interfaces other than that | transmits it, unchanged, on one or more interfaces other than that | |||
interface. The mechanism used to choose which interfaces it forwards | interface. The mechanism used to choose which interfaces it forwards | |||
the packet to is beyond the scope of this document. | the packet to is beyond the scope of this document. | |||
Once a DHCP packet has been modified by the L2RA either as an | Once a DHCP packet has been modified by the L2RA either as an | |||
encapsulation or a decapsulation, the L2RA must forward it either | encapsulation or a decapsulation, the L2RA must forward it either | |||
toward the DHCP server or the DHCP client. The implementation has | toward the DHCP server or the DHCP client. The implementation has | |||
skipping to change at page 15, line 38 | skipping to change at page 16, line 15 | |||
When processing a RELAYREPLY message, the L2RA MAY use information in | When processing a RELAYREPLY message, the L2RA MAY use information in | |||
the relay segment of the RELAYREPLY to determine on which network | the relay segment of the RELAYREPLY to determine on which network | |||
interface the RELAYREPLY should be forwarded. | interface the RELAYREPLY should be forwarded. | |||
When processing any other message, the L2RA MAY use configuration | When processing any other message, the L2RA MAY use configuration | |||
information to direct the packet out a specific port or ports that | information to direct the packet out a specific port or ports that | |||
have been marked as reaching DHCP servers. The L2RA MUST NOT forward | have been marked as reaching DHCP servers. The L2RA MUST NOT forward | |||
any packet on the interface on which it was received, even if that | any packet on the interface on which it was received, even if that | |||
interface is so marked. | interface is so marked. | |||
4.4.2. Layer three relay agents | 4.6. Layer Three Relay Agents | |||
4.4.2.1. Transmitting a decapsulated RELAYREPLY message | 4.6.1. Transmitting a decapsulated RELAYREPLY message | |||
When the decapsulated message is itself a RELAYREPLY message, the | When the decapsulated message is itself a RELAYREPLY message, the | |||
relay agent MUST forward the decapsulated message to the IP address | relay agent MUST forward the decapsulated message to the IP address | |||
specified in the 'aiaddr' field of the fixed-length header. | specified in the 'aiaddr' field of the fixed-length header. | |||
If the relay segment of the packet that was decapsulated contains a | If the relay segment of the packet that was decapsulated contains a | |||
Link Layer Address suboption, the relay agent MUST transmit the | Link Layer Address suboption, the relay agent MUST transmit the | |||
packet to that link layer address without attempting to use Address | packet to that link layer address without attempting to use Address | |||
Resolution Protocol (ARP) to translate the address contained in | Resolution Protocol (ARP) to translate the address contained in | |||
'aiaddr' to a layer two address. | 'aiaddr' to a layer two address. | |||
4.4.2.2. Transmitting a decapsulated BOOTREPLY message | 4.6.2. Transmitting a decapsulated BOOTREPLY message | |||
When transmitting a decapsulated BOOTREPLY message, the relay agent | When transmitting a decapsulated BOOTREPLY message, the relay agent | |||
transmits the message as specified in Bootstrap Protocol, Section 4 | transmits the message as specified in Bootstrap Protocol, Section 4 | |||
(Croft, B. and J. Gilmore, "Bootstrap Protocol," September 1985.) | ||||
[RFC0951]. | [RFC0951]. | |||
4.4.2.3. Transmitting other messages | 4.6.3. Transmitting other messages | |||
When transmitting RELAYFORWARD and BOOTREQUEST messages, the relay | When transmitting RELAYFORWARD and BOOTREQUEST messages, the relay | |||
agent simply sends the message to the IP address or addresses | agent simply sends the message to the IP address or addresses | |||
configured as DHCP servers for that relay agent. | configured as DHCP servers for that relay agent. | |||
5. DHCP Server Behavior | 5. DHCP Server Behavior | |||
A DHCP server which receives a RELAYREPLY message MUST silently | A DHCP server which receives a RELAYREPLY message MUST silently | |||
discard that message. | discard that message. | |||
skipping to change at page 17, line 9 | skipping to change at page 17, line 35 | |||
5.1.2. Processing of decapsulated suboptions | 5.1.2. Processing of decapsulated suboptions | |||
This section specifies requirements for the processing of | This section specifies requirements for the processing of | |||
decapsulated relay suboptions in the default case, where no custom | decapsulated relay suboptions in the default case, where no custom | |||
processing has been specified. This should not be construed to | processing has been specified. This should not be construed to | |||
forbid implementations for providing mechanisms for customizing the | forbid implementations for providing mechanisms for customizing the | |||
processing of these suboptions. | processing of these suboptions. | |||
This document does not specify special handling for DHCP options. | This document does not specify special handling for DHCP options. | |||
Only the inner encapsulation--the encapsulation of the original | Only the inner encapsulation - the encapsulation of the original | |||
message sent from the client, which is done by the first | message sent from the client, which is done by the first | |||
encapsulating relay--can ever contain DHCP Options; hence, whatever | encapsulating relay - can ever contain DHCP Options; hence, whatever | |||
normal mechanisms a DHCP server provides for processing these options | normal mechanisms a DHCP server provides for processing these options | |||
should suffice. | should suffice. | |||
Some relay agent suboptions, such as the Relay Agent Subnet Selection | Some relay agent suboptions, such as the Relay Agent Subnet Selection | |||
suboption [RFC3527], are intended to be processed by DHCP servers. | suboption (Kinnear, K., Stapp, M., Johnson, R., and J. Kumarasamy, | |||
Others, like the Circuit ID and Remote ID [RFC3046] suboptions, were | "Link Selection sub-option for the Relay Agent Information Option for | |||
not intended to be processed by the DHCP server, but are often used | DHCPv4," April 2003.) [RFC3527], are intended to be processed by | |||
by the DHCP server for identification purposes. | DHCP servers. Others, like the Circuit ID and Remote ID (Patrick, | |||
M., "DHCP Relay Agent Information Option," January 2001.) [RFC3046] | ||||
suboptions, were not intended to be processed by the DHCP server, but | ||||
are often used by the DHCP server for identification purposes. | ||||
In cases where more than one relay agent sends the same suboption, | In cases where more than one relay agent sends the same suboption, | |||
the DHCP server must either factor all such suboptions into its | the DHCP server must either factor all such suboptions into its | |||
processing, or choose one such suboption and use that exclusively for | processing, or choose one such suboption and use that exclusively for | |||
processing. | processing. | |||
By default, DHCP servers MUST use the outermost suboption (the one | By default, DHCP servers MUST use the outermost suboption (the one | |||
added by the relay agent closest to the DHCP server) for every | added by the relay agent closest to the DHCP server) for every | |||
suboption that was sent by more than one relay agent. | suboption that was sent by more than one relay agent. | |||
skipping to change at page 17, line 46 | skipping to change at page 18, line 30 | |||
is connected to the link on which the message was received. | is connected to the link on which the message was received. | |||
One datum used by DHCP servers in locating the client is the value of | One datum used by DHCP servers in locating the client is the value of | |||
the 'giaddr' field of the BOOTP header. This specification | the 'giaddr' field of the BOOTP header. This specification | |||
eliminates the use of giaddr; hence, it cannot be used in the address | eliminates the use of giaddr; hence, it cannot be used in the address | |||
allocation decision. | allocation decision. | |||
The functionality provided by giaddr is replaced in this | The functionality provided by giaddr is replaced in this | |||
specification by the 'aiaddr' field in the fixed-length relay header. | specification by the 'aiaddr' field in the fixed-length relay header. | |||
5.1.3.1. Default link selection algorithm | 5.1.4. Default link selection algorithm | |||
DHCP servers MUST implement a default algorithm for determining the | DHCP servers MUST implement a default algorithm for determining the | |||
link to which the client is attached. This algorithm is to first | link to which the client is attached. This algorithm is to first | |||
search the client message for a subnet selection option [RFC3011]. | search the client message for a subnet selection option (Waters, G., | |||
"The IPv4 Subnet Selection Option for DHCP," November 2000.) | ||||
[RFC3011]. | ||||
The server next searches for link-identifying data in each | The server next searches for link-identifying data in each | |||
RELAYFORWARD encapsulation, starting from the inner most and ending | RELAYFORWARD encapsulation, starting from the inner most and ending | |||
at the outermost, until a RELAYFORWARD is found that identifies the | at the outermost, until a RELAYFORWARD is found that identifies the | |||
client's location. | client's location. | |||
A RELAYFORWARD encapsulation contains link-identifying data if the | A RELAYFORWARD encapsulation contains link-identifying data if the | |||
value of the 'aiaddr' field of the fixed-length header is not zero, | value of the 'aiaddr' field of the fixed-length header is not zero, | |||
or if the relay segment contains a Link Selection suboption | or if the relay segment contains a Link Selection suboption (Kinnear, | |||
[RFC3527]. | K., Stapp, M., Johnson, R., and J. Kumarasamy, "Link Selection sub- | |||
option for the Relay Agent Information Option for DHCPv4," April | ||||
2003.) [RFC3527]. | ||||
If a Link Selection suboption is present in the innermost | If a Link Selection suboption is present in the innermost | |||
RELAYFORWARD message containing link-identifying data, the DHCP | RELAYFORWARD message containing link-identifying data, the DHCP | |||
server MUST use the contents of that option to identify the link to | server MUST use the contents of that option to identify the link to | |||
which the client is connected. | which the client is connected. | |||
Otherwise, if a Subnet Selection option was found in the client | Otherwise, if a Subnet Selection option was found in the client | |||
message, the DHCP server MUST use the contents of that option to | message, the DHCP server MUST use the contents of that option to | |||
identify the link to which the client is connected. | identify the link to which the client is connected. | |||
Otherwise, the DHCP server MUST use the contents of the 'aiaddr' | Otherwise, the DHCP server MUST use the contents of the 'aiaddr' | |||
field in the RELAYFORWARD encapsulation that was identified as being | field in the RELAYFORWARD encapsulation that was identified as being | |||
the innermost RELAYFORWARD containing link-identifying data. | the innermost RELAYFORWARD containing link-identifying data. | |||
5.1.3.2. Other link selection algorithms | 5.1.5. Other link selection algorithms | |||
DHCP servers implementing this specification MAY implement link | DHCP servers implementing this specification MAY implement link | |||
selection algorithms other than the one described in the preceding | selection algorithms other than the one described in the preceding | |||
section. DHCP servers MUST NOT use any link selection algorithm | section. DHCP servers MUST NOT use any link selection algorithm | |||
other than the one described in the preceding section unless | other than the one described in the preceding section unless | |||
specially configured to do so. | specially configured to do so. | |||
5.2. Responding to RELAYFORWARD messages | 5.2. Responding to RELAYFORWARD messages | |||
Once the DHCP server has processed the encapsulated message from the | Once the DHCP server has processed the encapsulated message from the | |||
DHCP client and constructed a response to the DHCP client, it | DHCP client and constructed a response to the DHCP client, it | |||
constructs a RELAYREPLY message and sends it toward the client. | constructs a RELAYREPLY message and sends it to the next hop on the | |||
way to the client. | ||||
5.2.1. Constructing a RELAYREPLY encapsulation | 5.2.1. Constructing a RELAYREPLY encapsulation | |||
The server MUST encapsulate any response to a client message | The server MUST encapsulate any response to a client message | |||
contained in one or more RELAYFORWARD encapsulations in a set of | contained in one or more RELAYFORWARD encapsulations in a set of | |||
corresponding RELAYREPLY encapsulations. Each RELAYREPLY is nested | corresponding RELAYREPLY encapsulations. Each RELAYREPLY is nested | |||
in the same way that the corresponding RELAYFORWARD was nested, so | in the same way that the corresponding RELAYFORWARD was nested, so | |||
that the innermost RELAYREPLY corresponds to the innermost | that the innermost RELAYREPLY corresponds to the innermost | |||
RELAYFORWARD, and the outermost RELAYREPLY corresponds to the | RELAYFORWARD, and the outermost RELAYREPLY corresponds to the | |||
outermost RELAYFORWARD. | outermost RELAYFORWARD. | |||
skipping to change at page 20, line 5 | skipping to change at page 20, line 46 | |||
5.2.2. Transmission of RELAYREPLY messages | 5.2.2. Transmission of RELAYREPLY messages | |||
If the value of 'aiaddr' in the outermost RELAYFORWARD encapsulation | If the value of 'aiaddr' in the outermost RELAYFORWARD encapsulation | |||
to which the RELAYREPLY is a response is nonzero, the DHCP server | to which the RELAYREPLY is a response is nonzero, the DHCP server | |||
MUST transmit the RELAYREPLY to that IP address. | MUST transmit the RELAYREPLY to that IP address. | |||
Otherwise, if 'ciaddr' and 'yiaddr' are both zero, or the BROADCAST | Otherwise, if 'ciaddr' and 'yiaddr' are both zero, or the BROADCAST | |||
bit in the 'flags' field is set to 1, or the DHCP server | bit in the 'flags' field is set to 1, or the DHCP server | |||
implementation is not able to perform the ARP-cache preloading trick | implementation is not able to perform the ARP-cache preloading trick | |||
described in Bootstrap Protocol, Section 4 [RFC0951], the DHCP server | described in Bootstrap Protocol, Section 4 (Croft, B. and J. | |||
MUST broadcast the RELAYREPLY message to the 255.255.255.255 | Gilmore, "Bootstrap Protocol," September 1985.) [RFC0951], the DHCP | |||
server MUST broadcast the RELAYREPLY message to the 255.255.255.255 | ||||
broadcast address. | broadcast address. | |||
Otherwise, the DHCP server MUST use the value of 'ciaddr', if | Otherwise, the DHCP server MUST use the value of 'ciaddr', if | |||
nonzero, or 'yiaddr', otherwise, as the destination address for the | nonzero, or 'yiaddr', otherwise, as the destination address for the | |||
message, and MUST preload its ARP cache (or otherwise arrange to | message, and MUST preload its ARP cache (or otherwise arrange to | |||
transmit the message without using ARP) to the layer two address | transmit the message without using ARP) to the layer two address | |||
provided by the client in 'htype' and 'chaddr' and 'hlen'. | provided by the client in 'htype' and 'chaddr' and 'hlen'. | |||
5.3. Responding to messages other than RELAYFORWARD | 5.3. Responding to messages other than RELAYFORWARD | |||
When a DHCP server constructs a response to a DHCP client message | When a DHCP server constructs a response to a DHCP client message | |||
that did not arrive encapsulated in a RELAYFORWARD message, the DHCP | that did not arrive encapsulated in a RELAYFORWARD message, the DHCP | |||
server MUST NOT encapsulate the response in a RELAYREPLY message. | server MUST NOT encapsulate the response in a RELAYREPLY message. | |||
DHCP server implementors should be careful that their servers do not | DHCP server implementors should be careful that their servers do not | |||
respond to an incoming packet with RAIO from a non-conforming relay | respond to an incoming RAIO from a non-conforming relay agent with a | |||
agent with a RELAYREPLY message. | RELAYREPLY message. | |||
6. DHCP Client Behavior | 6. DHCP Client Behavior | |||
A DHCP client that receives either a RELAYFORWARD message or a | A DHCP client that receives either a RELAYFORWARD message or a | |||
RELAYREPLY message MUST silently discard that message. | RELAYREPLY message MUST silently discard that message. | |||
7. Security Considerations | 7. Layer 2 Relay Agent Information | |||
DHCP Relay Information Option [RFC3046] limits relay agent | In some network configurations, there is a need for Layer 2 devices | |||
to append the Relay Agent Information option as they are closer to | ||||
the end hosts. These Layer 2 devices are typically operating only as | ||||
bridges for the network and may not have an IPv4 address on the | ||||
network in question. Lacking a valid IPv4 source address, they | ||||
cannot relay packets directly to a DHCP server located on another | ||||
network. These Layer 2 devices append the Relay Agent Information | ||||
option and broadcast the DHCP message. A Layer 3 Relay Agent relays | ||||
it to the DHCP server. | ||||
This section provides information about where a Layer 2 Relay Agent | ||||
fits in and how it is used. This section also looks at various | ||||
network scenarios with Layer 2 Relay Agents and discusses various | ||||
issues caused by the introduction of Layer 2 Relay Agents. | ||||
7.1. Need of Layer 2 Relay Agent | ||||
A Layer 2 device intercepts DHCP messages for the following reasons: | ||||
1. In some network deployments like xDSL, the subscriber aggregation | ||||
devices (also known as Access Concentrator or a DSLAM in case of | ||||
DSL) are configured to act as bridges. As these devices are | ||||
closest to the subscriber, they are in the best position to | ||||
provide a unique Relay Agent Information option to enforce | ||||
policies in the DHCP server. | ||||
2. In some network deployments, a Layer 2 device can append Relay | ||||
Agent Information in DHCP messages so that it can use this | ||||
information to forward the DHCP Replies to the specific port on | ||||
which the request was received. | ||||
3. In some networks, the Layer 2 Switch which is closest to the end | ||||
users, snoops the DHCP messages. These switches extract DHCP | ||||
Lease Information and use this information to install packet | ||||
filters. This helps in preventing Layer 2 and Layer 3 spoofing | ||||
attempts by the subscribers. A point to note here is that in | ||||
cases where switches maintain the Lease Information, they have to | ||||
intercept unicast DHCP messages as well to keep this information | ||||
up to date. | ||||
4. In some network deployments like Fronthaul in mobile networks, | ||||
the aggregation of Radio Unit devices (also known as Switched | ||||
Fronthaul) hides the relationship between the Radio Unit | ||||
themselves and the physical ports where they are connected (see | ||||
Section 7.2.4). In order to properly setup the Switched | ||||
Fronthaul network aggregation, the DHCP server must know the | ||||
network topology. This is accomplished by implementing in each | ||||
and all the Layer 2 switches a L2RA functionality. | ||||
7.2. Layer 2 Relay Agent in various network scenarios | ||||
This section describes the various network scenarios where a Layer 2 | ||||
Relay Agent fits in. It also describes how it handles different DHCP | ||||
messages. | ||||
7.2.1. DHCP server and client on same subnet | ||||
In certain network configurations, a DHCP server may reside on the | ||||
same subnet as the DHCP clients. A Layer 2 aggregation device | ||||
resides between the DHCP clients and DHCP server. The following | ||||
points describe how this Layer 2 device handles various DHCP messages | ||||
if it acts as a Layer 2 Relay Agent. Figure 4 shows a typical | ||||
network setup. | ||||
+--------+ | ||||
| End | +--------+ | | ||||
| Host#1 +-----------| | | +-----------+ | ||||
+--------+ | Layer +-----| | | | ||||
| 2 | +-----| DHCP | | ||||
+--------+ | device | | | Server#1 | | ||||
| End +-----------| #1 | | +-----------+ | ||||
| Host#2 | +--------+ | | ||||
+--------+ | | ||||
| | ||||
+--------+ | | ||||
| End | +--------+ | | ||||
| Host#3 +-----------| | | | ||||
+--------+ | Layer +-----| | ||||
| 2 | | | ||||
+--------+ | device | | | ||||
| End +-----------| #2 | | ||||
| Host#n | +--------+ | ||||
+--------+ | ||||
Figure 4: DHCP server and client on same subnet | ||||
7.2.1.1. Client-server interaction | ||||
The following summary of protocol message exchanges between clients | ||||
and DHCP servers describes how they are handled in a Layer 2 Relay | ||||
Agent. | ||||
1. The client (End Host #1) broadcasts a DHCPDISCOVER message on its | ||||
local physical subnet. Layer 2 Relay Agent #1 intercepts this | ||||
message, appends the Relay Agent Information option and | ||||
broadcasts it to all the ports except the one on which it was | ||||
received. The Relay Agent Information option could be created as | ||||
suggested in [RFC3046]. The Layer 2 Relay Agent does not set the | ||||
'giaddr' field. | ||||
2. Layer 2 device #2 would also receive this DHCPDISCOVER message | ||||
from Layer 2 device #1. If it is configured as Layer 2 Relay | ||||
Agent, it intercepts this message but does not append another | ||||
Relay Agent Information option to the message. It may discard | ||||
this message if it is coming from an untrusted entity. | ||||
Otherwise, it will broadcast this on all the ports except the one | ||||
on which the message was received. | ||||
3. The DHCP server responds with a DHCPOFFER message after applying | ||||
its local policies. It echoes back the Relay Agent Information | ||||
option in the DHCPOFFER message. The DHCP server can either | ||||
unicast the reply to the MAC address of End Host #1 or broadcast | ||||
the reply. If the reply is broadcast, the Layer 2 Relay Agent | ||||
intercepts this message and removes the Relay Agent Information | ||||
option. It identifies the outgoing port using the Relay Agent | ||||
Information option and forwards the message to the identified | ||||
interface. A Layer 2 Relay Agent may be configured to intercept | ||||
unicast DHCP messages. In such a case, the Layer 2 Relay Agent | ||||
intercepts unicast DHCP messages and handles them similar to | ||||
broadcast messages. | ||||
4. The same DHCPOFFER message will be received by Layer 2 Device #2. | ||||
If it is configured as Layer 2 Relay Agent, it broadcasts this | ||||
message normally without removing the Relay Agent option since it | ||||
had not added the same. A Layer 2 Relay Agent uses the Relay | ||||
Agent Information option to find out if it had appended it to the | ||||
request message. | ||||
5. The client receives this DHCPOFFER message and it broadcasts a | ||||
DHCPREQUEST message. Layer 2 Relay Agent #1 handles this message | ||||
similar to how it handles a DHCPDISCOVER message. | ||||
6. The server receives the DHCPREQUEST message from the client and | ||||
responds with a DHCPACK/DHCPNAK message. If DHCP server | ||||
broadcasts the DHCPACK message, Layer 2 Relay Agent processes it | ||||
similar to a DHCPOFFER message. If DHCP server unicasts the | ||||
DHCPACK message to the client, Layer 2 Relay agent intercepts the | ||||
same and processes the message similar to the broadcasted DHCPACK | ||||
message. | ||||
7. The Layer 2 Relay Agent processes a DHCPNAK messages similar to a | ||||
DHCPACK message. | ||||
8. The Layer 2 Relay Agent processes a DHCPDECLINE message similar | ||||
to a DHCPDISCOVER message. | ||||
9. The DHCP client can unicast some of the DHCP messages. The Layer | ||||
2 Relay Agent may or may not intercept these messages based on | ||||
internal configuration. If Layer 2 Relay Agents intercept these | ||||
messages, they append a Relay Agent Information option and | ||||
forward the message towards the DHCP server. They also intercept | ||||
the reply messages and remove the Relay Agent Information option | ||||
before forwarding them. | ||||
7.2.1.2. Issues due to introduction of Layer 2 Relay Agent | ||||
1. A DHCP server should be able to handle a DHCP message that | ||||
contains the Relay Agent Information option without 'giaddr' | ||||
field set in the message. Some existing DHCP server | ||||
implementations do not echo back the Relay Agent Information | ||||
option if giaddr is not set. This may lead to issues at Layer 2 | ||||
Relay Agents as they will not be able to identify the outgoing | ||||
port correctly and would broadcast it to all ports. Some Layer 2 | ||||
Relay Agents discard the reply messages if they do not find a | ||||
Relay Agent Information option in a DHCP reply. | ||||
2. There is a case when the DHCP client receives a unicast reply | ||||
message like DHCPACK with a Relay Agent Information option. This | ||||
can happen only when the DHCP server unicasts the DHCPACK message | ||||
and the Layer 2 Relay Agent is not configured to intercept | ||||
unicast messages. Most of the Layer 2 Relay Agents, that are | ||||
deployed today, are configured to intercept the unicast DHCP | ||||
messages and hence this behaviour may not be seen in the real | ||||
world deployments. | ||||
3. A DHCP server should be able to handle a unicast DHCP message | ||||
containing a Relay Agent Information option. Some existing DHCP | ||||
server implementations do not echo back the Relay Agent | ||||
Information option in responses to unicast messages. | ||||
7.2.2. Multiple DHCP server and Client on same subnet | ||||
In certain network scenarios, there could be multiple DHCP servers on | ||||
the same subnet. Figure 5 shows a typical network setup. | ||||
+--------+ | ||||
| End | +--------+ | | ||||
| Host#1 +-----------| | | +-----------+ | ||||
+--------+ | Layer +-----| | | | ||||
| 2 | +-----| DHCP | | ||||
+--------+ | device | | | Server#1 | | ||||
| End +-----------| #1 | | +-----------+ | ||||
| Host#2 | +--------+ | | ||||
+--------+ | | ||||
| +-----------+ | ||||
+--------+ | | DHCP | | ||||
| End | +--------+ |-----| Server #2 | | ||||
| Host#3 +-----------| | | | | | ||||
+--------+ | Layer +-----| +-----------+ | ||||
| 2 | | | ||||
+--------+ | device | | ||||
| End +-----------| #2 | | ||||
| Host#n | +--------+ | ||||
+--------+ | ||||
Figure 5: Multiple DHCP server and client on same subnet | ||||
7.2.2.1. Client-server interaction | ||||
The message exchanges are the same as explained in Section 7.2.1.1 | ||||
However, due to the introduction of multiple DHCP servers the below | ||||
additional message exchange may happen. | ||||
1. When Host #1 sends DHCPDISCOVER, it will be received by both DHCP | ||||
Servers connected to Layer 2 Relay Agent #1 and both servers will | ||||
respond with a DHCPOFFER. So instead of one DHCPOFFER message, | ||||
the Layer 2 Relay Agent would receive two messages. The | ||||
processing of DHCP messages in the Layer 2 Relay Agents remains | ||||
the same. | ||||
7.2.2.2. Issues due to introduction of Layer 2 Relay Agent | ||||
1. Layer 2 relay agents which maintain persistent state, such as | ||||
updating filters or client registration, must be prepared to | ||||
handle potentially conflicting responses from different DHCP | ||||
Servers. Some Layer 2 relay agents may use "the most recent DHCP | ||||
packet" to update this persistent state but this may not | ||||
necessarily reflect the actual state of the client. The above is | ||||
possible when two DHCP servers acknowledge the request of a DHCP | ||||
client with the same address but different lease times. In this | ||||
case, if the relay agent selects the server reply with the | ||||
shorter lease time, it would expire its state possibly before the | ||||
client even has a chance to renew it. Therefore, Layer 2 relay | ||||
agents SHOULD select the longest lease time of two conflicting | ||||
but similar replies, by discarding replies that shorten the lease | ||||
time. | ||||
2. Other issues are the same as described in section Section 7.2.1.2 | ||||
7.2.3. DHCP server on another subnet with one Layer 3 Relay Agent | ||||
In certain network scenarios, there could be a Layer 3 Relay Agent | ||||
which relays the DHCP messages from one subnet to a DHCP server on | ||||
another subnet and vice versa. In typical deployments, the Access | ||||
Concentrator acts as Layer 2 Relay Agent and the IP edge device (BRAS | ||||
or IP Services Switch) acts as Layer 3 Relay Agent. | ||||
+--------+ | ||||
| End | +--------+ | | | ||||
| Host#1 +--------| | | +-----------+ | | ||||
+--------+ | Layer +-----| | | | | ||||
| 2 | +--| Layer 3 |----| | ||||
+--------+ | device | | | Relay | | | ||||
| End +--------| #1 | | | Agent #1 | | | ||||
| Host#2 | +--------+ | +-----------+ | +---------+ | ||||
+--------+ | | | | | ||||
| +--| DHCP | | ||||
+--------+ | | | Server | | ||||
| End | +--------+ | | | #1 | | ||||
| Host#3 +--------| | | +---------+ | ||||
+--------+ | Layer +-----| | ||||
| 2 | | | ||||
+--------+ | device | | | ||||
| End +--------| #2 + | ||||
| Host#n | +--------+ | ||||
+--------+ | ||||
Figure 6: DHCP server on a different subnet with a Layer 3 Relay | ||||
Agent | ||||
7.2.3.1. Client-server interaction | ||||
As far as DHCP message processing is concerned, the presence of Layer | ||||
3 Relay Agents is transparent to Layer 2 Relay Agents. So all the | ||||
messages are handled in the same way as defined in section | ||||
Section 7.2.1.1 for the Layer 2 Relay Agent. | ||||
The Layer 3 Relay Agents are configured to trust/untrust an entity | ||||
based on specific criteria (For example : VLAN/interface on which the | ||||
message was received). If the DHCP message coming from the client | ||||
has a relay agent option present, the Layer 3 Relay Agent checks if | ||||
it is coming in on a trusted interface. If it is coming from a | ||||
trusted interface, it will set the 'giaddr' field to one of the local | ||||
interface addresses and unicasts it to the configured server(s). If | ||||
the message is coming from an untrusted interface, the Layer 3 Relay | ||||
Agent discards the message. | ||||
Typical message processing in this scenario is given below. | ||||
1. When the client sends a DHCPDISCOVER message, the Layer 2 Relay | ||||
Agent forwards it as described in section Section 7.2.1.1. The | ||||
Layer 3 Relay Agent receives this message and finds that it | ||||
contains a Relay Agent Information option. It verifies whether | ||||
the message is from a trusted entity or not. If it is from a | ||||
trusted entity, the Layer 2 Relay Agent populates the 'giaddr' | ||||
field as it deems appropriate and relays the message to the DHCP | ||||
server. | ||||
2. The DHCP Server processes the message in the same way as | ||||
described in section Section 7.2.1 and unicasts the DHCPOFFER to | ||||
the Layer 3 Relay Agent on the address specified in the 'giaddr' | ||||
field. | ||||
3. The Layer 3 Relay Agent processes the DHCPOFFER and identifies | ||||
the outgoing interface. It resets the 'giaddr' field and | ||||
broadcasts the message on the identified outgoing interface. | ||||
4. The client receives the DHCPOFFER and generates a DHCPREQUEST | ||||
message. The Layer 2 Relay Agent processes it as described in | ||||
section Section 7.2.1.1. The Layer 3 Relay Agent receives the | ||||
DHCPREQUEST message and processes it similar to the DHCPDISCOVER | ||||
message described in step #1. | ||||
5. The DHCP Server processes the DHCPREQUEST and unicasts the DHCP | ||||
ACK message to the layer 3 Relay Agent if the 'broadcast' flag is | ||||
set, or directly to the client if the 'broadcast' flag is not | ||||
set. If the Layer 3 Relay Agent receives this message, it | ||||
processes it similar to the DHCPOFFER as described in step #3. | ||||
6. In the case of unicast messages (For example: DHCPREQUEST in case | ||||
of DHCPRENEW), a Layer 3 Relay Agent may or may not intercept the | ||||
message. If it intercepts a unicast DHCP request message, it | ||||
populates the 'giaddr' field and relays the message to the DHCP | ||||
server. When the DHCP server sends a reply for this request | ||||
message, it resets the 'giaddr' field, identifies the outgoing | ||||
interface, and forwards the reply on the identified interface. | ||||
7.2.3.2. Issues due to introduction of Layer 2 Relay Agent | ||||
Though the processing of DHCP messages remains the same in Layer 2 | ||||
Relay Agents, we see some more issues when a Layer 3 Relay Agent is | ||||
present to relay the DHCP messages to the DHCP server. | ||||
1. When a Layer 2 Relay Agent is configured to intercept unicast | ||||
messages as well, it appends a Relay Agent Information option | ||||
before forwarding the request message. A Layer 3 Relay Agent may | ||||
not intercept these unicast messages. Due to this, a DHCP server | ||||
may not echo back the Relay Agent Information option because the | ||||
'giaddr' field is not populated. | ||||
2. Existing Layer 3 Relay Agents populate the 'giaddr' field with | ||||
the IP address of the interface on which the request was | ||||
received. This helps the Layer 3 Relay Agent to identify the | ||||
outgoing interface for the DHCP replies. In some cases, a Layer | ||||
3 Relay Agent may use unnumbered interfaces. In this case, it | ||||
has to use a system wide IP address to populate the 'giaddr' | ||||
field. Due to this, it becomes difficult to identify the correct | ||||
outgoing interface for the messages received from the DHCP | ||||
server. In these cases, some existing Layer 3 Relay Agent | ||||
implementations maintain an internal state for each DHCP message | ||||
and use this state to identify the outgoing interface. | ||||
3. The DHCP server uses certain parameters to differentiate the | ||||
RENEW and REBIND state of a client. A DHCPREQUEST without | ||||
'giaddr' and the Relay Agent Information option is treated as | ||||
RENEW request while DHCPREQUEST with 'giaddr' and Relay Agent | ||||
Information option is treated as REBIND request. In a network | ||||
configuration where both Layer 2 Relay Agent and Layer 3 Relay | ||||
Agent are configured to intercept the unicast DHCP messages, the | ||||
DHCP server will receive RENEW request with Relay Agent | ||||
Information option and 'giaddr' field set. Since REBIND request | ||||
will also have Relay Agent Information option and 'giaddr' field | ||||
set, it becomes difficult for the DHCP server to differentiate | ||||
between RENEW and REBIND requests. | ||||
7.2.4. DHCP server on another subnet with multiple Layer 3 Relay Agents | ||||
In certain network scenarios, there could be more Layer 3 Relay | ||||
Agents which relays the DHCP messages from one subnet to a DHCP | ||||
server on another subnet and vice versa. In typical deployments, the | ||||
Fronthaul Switch acts as Layer 2 Relay Agent and the Baseband Unit or | ||||
a Router acts as Layer 3 Relay Agent. | ||||
+--------+ | ||||
| End | +--------+ | | | ||||
| Host#1 +--------| | | +-----------+ | | ||||
+--------+ | Layer +-----| | | | | ||||
| 2 | +--| Layer 3 |----| | ||||
+--------+ | device | | | Relay | | | ||||
| End +--------| #1 | | | Agent #1 | | | ||||
| Host#2 | +--------+ | +-----------+ | +---------+ | ||||
+--------+ | | | | | ||||
| +--| DHCP | | ||||
+--------+ | | | Server | | ||||
| End | +--------+ | | | #1 | | ||||
| Host#3 +--------| | | +-----------+ | +---------+ | ||||
+--------+ | Layer +-----| | | | | ||||
| 2 | +--| Layer 3 |----| | ||||
+--------+ | device | | | Relay | | | ||||
| End +--------| #2 + | | Agent #2 | | | ||||
| Host#n | +--------+ | +-----------+ | ||||
+--------+ | | ||||
Figure 7: DHCP server on a different subnet with more Layer 3 | ||||
Relay Agent | ||||
7.2.4.1. Client-server interaction | ||||
Same as described in Section 7.2.3.1 | ||||
7.2.4.2. Issues due to introduction of Layer 2 Relay Agent | ||||
Same as described in Section 7.2.3.2 | ||||
In a scenario where multiple Layer 3 relay agents exist the DHCP | ||||
Server must consider the possibility that mutple requests for the | ||||
same End Host will arrive via different Layer 3 Agents and take a | ||||
decision to which one is to be used. It is expected that the DHCP | ||||
Server can cope with that situation. | ||||
8. Conventions and Definitions | ||||
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. | ||||
9. Security Considerations | ||||
DHCP Relay Information Option (Patrick, M., "DHCP Relay Agent | ||||
Information Option," January 2001.) [RFC3046] limits relay agent | ||||
information to a single relay agent, and provides some minimal anti- | information to a single relay agent, and provides some minimal anti- | |||
spoofing. By supporting relay agent chaining, it is now possible for | spoofing. By supporting relay agent chaining, it is now possible for | |||
a relay agent downstream of the trusted portion of a provider network | a relay agent downstream of the trusted portion of a provider network | |||
to communicate relay agent information options to a DHCP server. | to communicate relay agent information options to a DHCP server. | |||
This specification defines a much more robust spoofing rejection | This specification defines a much more robust spoofing rejection | |||
mechanism, by allowing the administrator to configure the relay to | mechanism, by allowing the administrator to configure the relay to | |||
discard RELAYFORWARD messages originating from outside of the trusted | discard RELAYFORWARD messages originating from outside of the trusted | |||
portion of the network. Administrators of networks that rely on this | portion of the network. Administrators of networks that rely on this | |||
trusted/untrusted configuration are encouraged to configure edge | trusted/untrusted configuration are encouraged to configure edge | |||
relays to discard RELAYFORWARD messages. | relays to discard RELAYFORWARD messages. | |||
In networks where trusted relay agents may be separated from the DHCP | In networks where trusted relay agents may be separated from the DHCP | |||
server by transit networks that are not trusted, it is possible to | server by transit networks that are not trusted, it is possible to | |||
modify the message in transit. This possibility exists with normal | modify the message in transit. This possibility exists with normal | |||
DHCP relays as well. Administrators of such networks should consider | DHCP relays as well. Administrators of such networks should consider | |||
using relay agent authentication [RFC4030] to prevent modification of | using relay agent authentication (Stapp, M. and T. Lemon, "The | |||
relay agent communications in transit. | Authentication Suboption for the Dynamic Host Configuration Protocol | |||
(DHCP) Relay Agent Option," March 2005.) [RFC4030] to prevent | ||||
modification of relay agent communications in transit. | ||||
8. IANA Considerations | 10. IANA Considerations | |||
We request that IANA assign one new suboption code from the registry | We request that IANA assign one new suboption code from the registry | |||
of DHCP Agent Sub-Option Codes maintained in | of DHCP Agent Sub-Option Codes maintained in | |||
http://www.iana.org/assignments/bootp-dhcp-parameters. This | http://www.iana.org/assignments/bootp-dhcp-parameters. This | |||
suboption code will be assigned to the Layer Two Address Suboption. | suboption code will be assigned to the Layer Two Address Suboption. | |||
9. References | 11. References | |||
9.1. Normative References | ||||
[I-D.ietf-dhc-relay-id-suboption] | 11.1. Normative References | |||
Stapp, M., "The DHCPv4 Relay Agent Identifier Suboption", | ||||
draft-ietf-dhc-relay-id-suboption-07 (work in progress), | ||||
July 2009. | ||||
[RFC0768] Postel, J., "User Datagram Protocol", STD 6, RFC 768, | [RFC0768] Postel, J., "User Datagram Protocol", STD 6, RFC 768, | |||
August 1980. | DOI 10.17487/RFC0768, August 1980, | |||
<https://www.rfc-editor.org/rfc/rfc768>. | ||||
[RFC0951] Croft, B. and J. Gilmore, "Bootstrap Protocol", RFC 951, | [RFC0951] Croft, W. and J. Gilmore, "Bootstrap Protocol", RFC 951, | |||
September 1985. | DOI 10.17487/RFC0951, September 1985, | |||
<https://www.rfc-editor.org/rfc/rfc951>. | ||||
[RFC1542] Wimer, W., "Clarifications and Extensions for the | [RFC1542] Wimer, W., "Clarifications and Extensions for the | |||
Bootstrap Protocol", RFC 1542, October 1993. | Bootstrap Protocol", RFC 1542, DOI 10.17487/RFC1542, | |||
October 1993, <https://www.rfc-editor.org/rfc/rfc1542>. | ||||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, March 1997. | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | ||||
<https://www.rfc-editor.org/rfc/rfc2119>. | ||||
[RFC2131] Droms, R., "Dynamic Host Configuration Protocol", | [RFC2131] Droms, R., "Dynamic Host Configuration Protocol", | |||
RFC 2131, March 1997. | RFC 2131, DOI 10.17487/RFC2131, March 1997, | |||
<https://www.rfc-editor.org/rfc/rfc2131>. | ||||
[RFC3011] Waters, G., "The IPv4 Subnet Selection Option for DHCP", | [RFC3011] Waters, G., "The IPv4 Subnet Selection Option for DHCP", | |||
RFC 3011, November 2000. | RFC 3011, DOI 10.17487/RFC3011, November 2000, | |||
<https://www.rfc-editor.org/rfc/rfc3011>. | ||||
[RFC3046] Patrick, M., "DHCP Relay Agent Information Option", | [RFC3046] Patrick, M., "DHCP Relay Agent Information Option", | |||
RFC 3046, January 2001. | RFC 3046, DOI 10.17487/RFC3046, January 2001, | |||
<https://www.rfc-editor.org/rfc/rfc3046>. | ||||
[RFC3118] Droms, R. and W. Arbaugh, "Authentication for DHCP | [RFC3118] Droms, R., Ed. and W. Arbaugh, Ed., "Authentication for | |||
Messages", RFC 3118, June 2001. | DHCP Messages", RFC 3118, DOI 10.17487/RFC3118, June 2001, | |||
<https://www.rfc-editor.org/rfc/rfc3118>. | ||||
[RFC3527] Kinnear, K., Stapp, M., Johnson, R., and J. Kumarasamy, | [RFC3527] Kinnear, K., Stapp, M., Johnson, R., and J. Kumarasamy, | |||
"Link Selection sub-option for the Relay Agent Information | "Link Selection sub-option for the Relay Agent Information | |||
Option for DHCPv4", RFC 3527, April 2003. | Option for DHCPv4", RFC 3527, DOI 10.17487/RFC3527, April | |||
2003, <https://www.rfc-editor.org/rfc/rfc3527>. | ||||
[RFC4030] Stapp, M. and T. Lemon, "The Authentication Suboption for | [RFC4030] Stapp, M. and T. Lemon, "The Authentication Suboption for | |||
the Dynamic Host Configuration Protocol (DHCP) Relay Agent | the Dynamic Host Configuration Protocol (DHCP) Relay Agent | |||
Option", RFC 4030, March 2005. | Option", RFC 4030, DOI 10.17487/RFC4030, March 2005, | |||
<https://www.rfc-editor.org/rfc/rfc4030>. | ||||
[RFC4302] Kent, S., "IP Authentication Header", RFC 4302, | [RFC4302] Kent, S., "IP Authentication Header", RFC 4302, | |||
December 2005. | DOI 10.17487/RFC4302, December 2005, | |||
<https://www.rfc-editor.org/rfc/rfc4302>. | ||||
9.2. Informative References | [RFC6925] Joshi, B., Desetti, R., and M. Stapp, "The DHCPv4 Relay | |||
Agent Identifier Sub-Option", RFC 6925, | ||||
DOI 10.17487/RFC6925, April 2013, | ||||
<https://www.rfc-editor.org/rfc/rfc6925>. | ||||
[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/rfc/rfc8174>. | ||||
11.2. Informative References | ||||
[I-D.ietf-dhc-dhcpv4-relay-encapsulation] | ||||
Lemon, T., Deng, H., and L. Huang, "Relay Agent | ||||
Encapsulation for DHCPv4", Work in Progress, Internet- | ||||
Draft, draft-ietf-dhc-dhcpv4-relay-encapsulation-01, 11 | ||||
July 2011, <https://datatracker.ietf.org/doc/html/draft- | ||||
ietf-dhc-dhcpv4-relay-encapsulation-01>. | ||||
[I-D.ietf-dhc-l2ra] | [I-D.ietf-dhc-l2ra] | |||
Joshi, B. and P. Kurapati, "Layer 2 Relay Agent | Joshi, B. and P. Kurapati, "Layer 2 Relay Agent | |||
Information", draft-ietf-dhc-l2ra-04 (work in progress), | Information", Work in Progress, Internet-Draft, draft- | |||
April 2009. | ietf-dhc-l2ra-06, 25 January 2012, | |||
<https://datatracker.ietf.org/doc/html/draft-ietf-dhc- | ||||
l2ra-06>. | ||||
[RFC3315] Droms, R., Bound, J., Volz, B., Lemon, T., Perkins, C., | [RFC3315] Droms, R., Ed., Bound, J., Volz, B., Lemon, T., Perkins, | |||
and M. Carney, "Dynamic Host Configuration Protocol for | C., and M. Carney, "Dynamic Host Configuration Protocol | |||
IPv6 (DHCPv6)", RFC 3315, July 2003. | for IPv6 (DHCPv6)", RFC 3315, DOI 10.17487/RFC3315, July | |||
2003, <https://www.rfc-editor.org/rfc/rfc3315>. | ||||
Authors' Addresses | Acknowledgments | |||
Ted Lemon | The authors would like to acknowledge that much of the material in | |||
Nominum, Inc. | this document comes directly from | |||
2000 Seaport Blvd | [I-D.ietf-dhc-dhcpv4-relay-encapsulation] by Ted Lemon, Hui Deng, and | |||
Redwood City, CA 94063 | Lu Huang, and [I-D.ietf-dhc-l2ra] by Bharat Joshi and Pavan Kurapati. | |||
USA | These documents were the original ideas, which the current authors | |||
have only adopted and fine-tuned. | ||||
Phone: +1 650 381 6000 | The authors would also like to acknowledge interesting discussions in | |||
Email: mellon@nominum.com | this problem space with Sarah Gannon, Ines Ramadza, Siddharth Sharma, | |||
and Bernie Volz. | ||||
Hui Deng | Authors' Addresses | |||
China Mobile | ||||
53A, Xibianmennei Ave. | ||||
Beijing, Xuanwu District 100053 | ||||
China | ||||
Email: denghui@chinamobile.com | Claudio Porfiri | |||
Ericsson | ||||
Email: claudio.porfiri@ericsson.com | ||||
Lu Huang | Jari Arkko | |||
China Mobile | Ericsson | |||
53A, Xibianmennei Ave. | Email: jari.arkko@ericsson.com | |||
Xunwu District, Beijing 100053 | ||||
China | ||||
Email: huanglu@chinamobile.com | Mirja Kühlewind | |||
Ericsson | ||||
Email: mirja.kuhlewind@ericsson.com | ||||
End of changes. 107 change blocks. | ||||
280 lines changed or deleted | 797 lines changed or added | |||
This html diff was produced by rfcdiff 1.42. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |