计算机网络原理(TCP/IP协议六):系统配置DHCP和自动配置

  • IP地址动态主机配置协议
  • 无状态地址自动配置
  • DHCP和DNS交互、以太网上的PPP
  • 与系统配置相关的攻击

为 了使用TCP/IP协议族,每台主机和路由器需要一定的配置信息。配置信息用于位系统指定本地名称,以及为接口指定标识符(例如IP地址)。它还用于提供 或使用各种网络服务,例如域名系统(DNS)和移动IP家乡代理。从过往的实际操作中来看配置这些信息可以采用3种方法:手动获得信息、通过一个系统获得 使用的网络服务、算法自动确定。

这里主要关注在Internet客户端主机中用于建立基本要素的协议和程序:动态主机配置协议(DHCP)以及IPv4和IPv6中的无状态地址自动配置。然后还会讨论ISP如何使用PPP结合以太网来配置客户端系统。

服务器和路由器通过手动配置,通常将相关信息输入一个文件或图形用户界面。这种区别处于以下几个原因:

①客户端主机通常比服务器和路由器更容易移动,这意味着应提供灵活的重新分配其配置信息的机制;

②服务器主机和路由器都希望“永远可用”和相对自治,因此他们的配置信息不依赖于其他网络服务,能为它们提供更好的可靠性;

③与服务器或路由器相比,客户机属于某个组织是更常见的情况,通过一种集中服务来动态分配客户端主机的配置信息,这样建辉更简单也跟不同意出错;

④客户机操作者比服务器和路由器管理者拥有更少的系统管理经验,因此有一个有经验的管理者多数客户机进行集中管理更不容易出错。

主机和路由器的配置信息可能还需要很多其他要素,这取决于它使用或提供的服务类型,它们可能包括:家乡代理、组播路由器、VPN网关和会话发起协议(SIP)/VoIP网关的位置。

 一、IP地址动态主机配置协议

DHCP[RFC2131] 是一种流行的客户机/服务器协议,它用于为主机(有时也为路由器)指定配置信息。由于DHCP的最初设想是提供IPv4使用,因此本章中讨论它以及其于 IP的关系时都是IPv4版本。IPv6使用的DHCP版本是DHCPv6[RFC3315],IPv6还支持自己的自动程序来确定配置信息,在一种混合 配置模式中,IPv6自动配置和DHCPv6可结合使用。

几乎所有常用的客户端操作系统和大量的嵌入式设备都支持DHCP客户机,这些设备通常使用DHCP获取IP地址、子网掩码、路由器的IP地址、DNS服务器的IP地址,其他服务的相关信息例如使用VoIP的SIP服务器也可以通过DHCP传输。

DHCP 的涉及基于一种早期协议,称为Internet引导程序协议(BOOTP)[RFC0951][RFC1542],它目前已经过时。BOOTP为客户提供 有限的配置信息,并且没有提供一种机制来支持改变已提供的信息。DHCP使用租用的概念来扩展BOOTP模型[GC89],并且可提供主机操作所需要的信 息。租用允许客户机使用一种商定的时间来配置信息。客户机可向DHCP服务器请求续订租约,并继续操作。在这个意义上,BOOTP和DHCP是向后兼容 的,纯BOOTP和DHCP客户端可使用DHCP服务器,DHCP客户端也可以使用纯BOOTP服务器,因此BOOTP和DHCP同样使用UDP/IP。 客户机使用端口68,服务器使用端口67。

DHCP有两个主要部分组成:地址管理和配置数据交付。地址管理用于IP地址的动态分配,并为客户机提供地址租用。配置数据交付包括DHCP协议的消息格式和状态机。

DHCP服务器提供可配置的三种地址分配:自动分配、动态分配、手动分配。三者之间的差异是地址分配是否基于客户机的身份,以及该地址是否可撤销或变更。

动态分配模式:客户机从服务器配置的地址池(通常为一个预定的范围)中获得一个可撤销得IP地址,自动分配使用的是相同方法,但地址不可撤销。

手动配置模式:DHCP协议用于传输地址,但地址对于请求得客户机是不变的(即它不是由服务器维护的可分配池得一部分)。

自动分配模式:DHCP得作用如同BOOTP。

1.1地址池和租用

在动态分配中,DHCP客户机请求分配一个IP地址。服务器从可用得地址池中选择一个地址作为响应,在通常情况下,这个池是专门为DHCP用途而分配得一个连续得IP地址范围。

租用期: 分配给客户机得地址只在一段时间内有效,这段时间为租用期。客户机可使用这个地址直到租用期到期,尽管它能提出延长租用期得要求并理论上可以“无限”长时 间,但不推荐这样做。租用期是DHCP服务器得一个重要配置参数,租用期范围从几分钟倒几天或更长时间。确定租用期得最佳数值需要对预期客户数、地址池大 小、地址稳定性等因素加以权衡。

较长得租用期通常会较快耗尽可用的地址池,但能提供更稳定得地址和减小网络开销。较短得租用期可为其他客户提供可用性更好得地址池,随之而来的是稳定性较小和网络流量负荷增大。

当服务器向客户及提供租用期时,服务器将租用信息保存在持久性存储器中。如果DHCP服务器重新启动并且运行良好,租约将保持完好。

1.1.1DHCP和DHCP消息格式

当 发送DHCP请求时,客户机需要向服务器提供信息,这些信息可包括:客户机名称、请求得租用期、已使用或最后使用过得地址副本及一些其他参数。当服务器接 收到这个请求时,它可利用客户机提供得信息(包括MAC地址请求),结合其他从外部获取得信息(例如时间、接收请求得接口),决定在响应中提供得地址和配 置信息。

DHCP和BOOTP消息格式及字段解析

DHCP扩展了BOOTP,DHCP 消息格式得定义采用扩展BOOTP的方式,以保持两种协议之间的兼容性,这样即使在没有安装DHCP服务器的网络中BOOTP客户机仍可使用DHCP服务 器和BOOTP中继代理支持DHCP服务器。DHCP消息包括一个固定长度的初始部分和一个可变长度的尾部,下面时消息格式格式:

BOOTP 消息格式,包括来自[RFC0951]、[RFC1542]、[RFC2131]的字段,BOOTP消息格式采用适当的分配方案保存DHCP消息。通过这 种方式BOOTP中继代理可处理DHCP消息,BOOTP客户机可使用DHCP服务器。服务器名和引导文件名字段可携带DHCP选项。

Op(操作):标识消息是请求(1)还是应答(2);

HW类型:分配基于ARP使用的值,并定义在相应的INAN ARP参数页中[IARP],最常见的值是1(以太网);

HW长度(hlen):字段用于存放硬件(MAC)地址,对于类似以太网的网络,该值通常为6;

跳步数:用于保存消息传输过程中的中继次数,消息发送方将该值设置为0,并在每次中继时递增;

事务ID:由客户机选择一个(随机)数,服务器需要将它复制到响应中,它用于将应答和请求的匹配;

秒数(Secs):由客户机设置,它是第一次尝试申请或重新申请地址经过的秒数;

标志:当前只包含一个经过定义的位,称为广播标志。客户机可能在请求中设置该位,表示它们不能或不愿意处理单播IP数据报,但可以处理广播数据报。通过该设置位通知服务器和中继代理,广播地址可用于响应中;

客户机IP地址(ciaddr):如果客户机已知IP地址的情况下该字段就是客户机的IP地址,否则为0;

“你的”IP地址(yiaddr):由服务器填写,以便向请求者提供服务器地址;

下一个服务器IP地址(siaddr):给出下一个服务器的地址,它用于客户机的引导过程(例如,如果客户机需要下载一个可能需要由DHCP服务器之外的另一台服务器完成的操作系统镜像);

网关(中继)IP地址:由DHCP或BOOTP中继器填写,它们在转发DHCP(BOOTP)消息时返回自己的地址;

客户机硬件地址(chaddr):保存客户机的唯一标识符,并可由服务器以不同方式来使用,包括当某个客户机每次发送地址请求时为其分配相同IP地址。这个字段通常保存客户机的MAC地址,它被用作一个标识符。

服务器名(sname)与引导文件名(file):这两个字段不是每次都需要填写,它们分别包含64字节或128字节ASCII字符,表示服务器名或启动文件路径。这些字符串以null结尾,如同在C编程语言中那样。如果空间紧张他们可用于保存DHCP选项。

选项(vend):这个字段最初在BOOTP中称为供应商扩展字段,其长度固定,现在称为选项字段,但长度已经改成了可变。

1.1.2DHCP和BOOTP选项

DHCP 是对BOOTP的扩展,DHCP需要的有些字段BOOTP设计之初是不存在的,这些字段可通过选项来携带。选项采用标准格式,开始以8位标签表示选项类 型。对于有些选项来说,跟在标签后面的固定数量的字节包含选项值。标签构成的所有其他部分之后跟着的1字节包含选项值长度(不包括标签和长度),紧接着是 包含选项值自身的可变数量的字节。

大量选项对于DHCP是有效的,其中一些选项也被BOOTP支持。当前列表由BOOTP/DHCP参数页[IBDP]提供,前77个选项包括最常见的选项,它们由[RFC2132]定义。常见选项包括:

填 充(0)、子码掩码(1)、路由地址(3)、域名服务器(6)、域名(15)、请求的IP地址(50)、地址租用期(51)、DHCP消息类型(53)、 服务器标识符(54)、参数请求列表(55)、DHCP错误消息(56)、租约更新时间(58)、租约重新绑定事件(59)、客户机标识符(61)、域搜 索列表(119)、结束(255)。

DHCP消息类型选项(53)是1字节长的选项,DHCP消息一定会使用它,它有以下这些可能值:

DHCPDISCOVER(1)、 DHCPOFFER(2)、DHCPREQUEST(3)、DHCPDECLINE(4)、DHCPACK(5)、DHCPNAK(6)、 DHCPRELEASE(7)、DHCPINFORM(8)、DHCPFORCE-RENEW(9)[RFC3203]、 DHCPLEASEQUERY(10)、DHCPLEASEUNASSIGNED(11)、DHCPLEASEUNKNOWN(12)、 DHCPLEASEACTIVE(13)[RFC4388]。

选项超载: 选项可由DHCP消息中的选项字段携带,也可以用前面提到的服务器名和引导文件名携带,但选项携带在后面两个位置时,称为选项超载。将包含超在选项 (52)来表明哪些字段适合携带选项。对于长度超过255字节的选项,[RFC3396]定义了一种特殊的长选项机制。实际上,如果同一选项在同一消息中 重复出现多次,它们的内容按出现在消息中的顺序组合,并将结果作为一个选项来处理。如果一个长选项用于表示选项超载,这是的处理顺序是从后向前:选项字 段、引导文件名字段、服务器名字段。

选项通常提供相对简单的配置信息,或支持一些其他协商协议。例如[RFC2132]定义了大多数传统配 置信息的选项,传统配置信息指的是TCP/IP节点所需的信息:地址信息、服务器地址、初始值TTL值、布尔值指定的配置信息,例如启用IP转发。下列规 范分别描述了NetWare简单配置信息[RFC2241][RFC2242]、用户类[RFC3004]、FQDN[RFC4702]、 Internet存储名称服务器(iSNS,用于存储网络)[RFC4174]、广播和组播服务控制器(BCMCS,用于3G蜂窝网络) [RFC4280]、时区[RFC4833]、自动配置[RFC2563]、子网选择[RFC3011]、域名服务选择[RFC2937]、网络接入认证 信息承载协议(PANA)服务器[RFC5192]。

1.2DHCP协议操作

DHCP消 息是带有一组特殊选项的BOOTP消息,当一台新的客户连接到网络时,它首先发现可用的DHCP服务器,以及它们能够提供的地址。然后,它决定使用哪台服 务器和哪个地址,并向提供地址的服务器发送请求。除非服务器在此期间已将该地址分配出去,否则它通过将地址分配给请求的客户机。

上 面是一次典型的DHCP交换过程,客户机通过广播消息发现一组服务器和可提供的地址,它请求自己想获得的地址,并接收到选定服务器的确认。交易 ID(xid)用于将请求和响应匹配,服务器ID指出哪台服务器提供地址,并承诺将它与客户机绑定。如果客户机知道它想获得的地址,协议可简化为仅使用 REQUEST和ACK消息。

下面来详细了解这个过程:

1.客户机连接网络,向网络广播一个DHCPDISCOVER消息(从地址0.0.0.0端口68发送到受限广播地址255.255.255.255端口67);

2.DHCP服务器接收到消息,响应一个DHCPOFFER消息(从服务器IP地址和端口67发送到本地IP广播地址和端口68),并在“你的”IP地址字段填写提供的IP地址,且提供租用时间(T)、更新时间(T/2)、重新绑定时间(7T/8)等信息;

3.客户机接收到来自一台或多台DHCP服务器的响应,确定自己想要哪个DHCPOFFER,并广播一个包含服务器标识符选项的DHCPREQUEST消息,请求的IP地址选项设置为客户机选择使用的IP地址;

4. 多台DHCP服务器可能受到广播DHCPREQUEST消息,但只有DHCPREQUEST消息标识的服务器同意将该地址进行绑定,其他服务器则清除与该 请求相关的状态,然后标识的服务器响应给客户机:1).发送一个DHCPACK消息,可使用该地址;2).无法分配该地址,发送一个DHCPNAK消息;

5.客户端接到DHCPACK消息后进行配置,并探测网络来确定地址未被使用。如果探测到无冲突,则直接使用;如果探测到冲突,客户机舍弃该地址,向服务器发送一个DHCPDECLINE消息来通知该地址不能使用,经过10秒延迟后客户机重新从第1步开始操作;

关于DHCP的实验和具体配置操作在后期的Linux服务搭建和网络技术相关博客中介绍,这篇博客暂时只介绍协议细节。

1.3DHCP状态机

DHCP协议在客户机和服务器中运行一个状态机。状态用于指出协议下一个处理的消息类型,状态之间的转换源于消息的接收和发送或超时,下面是状态机的转换逻辑过程示图:

根据上面的示图来解析DHCP状态机的状态转换过程:

1.客户机开始于INIT(初始)状态,这时没有消息,并广播DHCPDISCOVER消息。

2.在选择状态时,它接收DHCPOFFER消息,直到决定自己使用哪个地址和服务器。当它做出选择时,通过一个DHCPREQUEST消息来响应,并进入请求状态。

3.在请求状态下,它可能会接收到拒绝ACK、也可能是因为没有自己需要的地址发送一个DHCPDECLINE消息、或者因为接收到一个NACK,这三种情况客户机转换到INIT状态。

4.在请求状态下,它接收到一个自己需要的地址的DHCPACK消息,接收它,获得超时值T1和T2,并进入绑定状态,这时就能使用这个地址直至到期。

5. 当第一个第一个计时器(T1)到期时,客户机进入更新状态并尝试重新建立租约。如果它接收到一个新的DHCPACK,表示重新建立租约成功。如果不成 功,T2最终到期,并导致客户机尝试从任意服务器重新获得一个地址。如果租用期最终到期,客户机必须放弃所租用的地址,如果没有可选的地址或可用的网络连 接,这时它将断开网络连接。

1.4HDCPv6

虽然IPv4和IPv6的DHCP协议希望实现类似目标,但它们各自的协议设计和部署选项不同。DHCPv6针对IPv6编址方案设计,支持对客户端分配IPv6前缀、IPv6地址和其他网络配置参数,并记录这些信息,便于网络管理。DHCPv6实现地址分配有三种方案:

DHCPv6有状态自动配置:DHCPv6服务器自动配置IPv6地址/前缀及其他网络配置参数(DNS、NIS、SNTP服务器地址等参数);

DHCPv6无状态自动配置:主机IPv6地址仍然通过路由通告方式自动生成,DHCPv6服务器只分配除IPv6地址以外的配置参数,包括DNS服务器等参数;

DHCPv6 PD(Prefix Delegation,前缀代理)自动配置: 下层网络路由器不需要再手工指定用户侧链路的IPv6地址前缀,它只需要向上层网络路由器提出前缀分配申请,上层网络路由器便可以分配合适的地址前缀给下 层路由器,下层路由器把获得的前缀(前缀一般长度小于64)进一步自动细分64位前缀长度的子网网段,把细分的地址前缀再通过路由器通过(RA)至与 IPv6主机直连的用户链路上,实现主机的地址的自动配置,从而完成整个IPv6网络的层次化布局。

1.4.1IPv6地址生命周期

IPv6主机的每个接口通常拥有多个地址,并且每个地址都拥有一组计时器,以指出相应地址可使用多长时间和用于什么目的。在IPv6中,地址分配包含一个首选生命周期和一个有效生命周期。这些生命周期用于判断超时,将地址在自己的状态机中从一种状态转换为另一种状态。

IPv6地址的生命周期:临时地址仅用于DAD,直至被验证为唯一。此后,它们成为首选地址,并可无限地使用,直至超时将其状态更改为废弃。废弃地址不能用于初始化新连接,并且可能在有效时期满后不能使用。

根据上面的IPv6地址生命周期转换过程示图,来解析转换过程的机制和各个生命周期下的特性:

临时状态:仅用于IPv6邻居发现,这时它不可用作任何其他目的的源或目的地址。同时该状态的地址要检测重复,看看同一网络中的其他节点是否已使用该地址。这个过程叫做重复地址检测(DAD);

乐观状态: 常规DAD的称为乐观DAD[RFC4429],通过它选择的地址可用于一组有限的用途,直至DAD完成。一个乐观状态的地址实际上仅针对DAD的一组特 殊规则,它不是真正完整的状态。乐观地址大多数目的而言是废弃的。特别是,一个地址可能同时是乐观的和废弃的,这取决于和有效生命周期。

首选状态:当地址处于首选状态时,它可用于一般用途,并可作为源或目的IPv6地址。

废弃状态:当首选状态的超时到达时,相应的首选地址将废弃。当地址处于废弃状态时,它仍可用于现有传输(例如TCP)连接,但不能用于启动新的连接。

无效状态:当地址的有效超时到达时,相应的地址将无效。

 DAD的执行步骤

一个节点首先加入临时地址的所有节点组播地址和请求节点组播地址;

为了检查使用的地址是否重复,一个节点发送一个或多个ICMPv6邻居请求消息;

这些消息的源和目的IPv6地址分别是未指定地址和被检查目的地址的请求节点地址,目的地址字段设置为被检查的地址(临时地址)。

如果在响应中接收到一个邻居通告消息则说明DAD失败,并放弃检查地址。

1.4.2DHCPv6消息格式

DHCPv6消息封装为UDP/IPv6数据报,它使用客户机端口546和服务器端口547。消息发送到中继代理或服务器,它使用一台主机的链路范围的源地址。这里存在两种消息格式,一种用于客户机与服务器之间,另一种用于中继代理。

上图是DHCPv6封装为UDP/IPv6数据报,它使用客户机端口546和服务器端口547。下面分别来介绍客户机/服务器消息格式、中继代理消息格式:

客户机/服务器消息格式:其消息类型包括DHCP消息(REQUEST、REPLY等),在DHCPv6中最有意义的信息携带在选项中。

中继代理消息格式: 其消息类型包括RELAY-FORW和RELAY-REPL,分别表示从中继代理转发和目的地是中继代理的消息。它属于DHCPv6的扩展版本,其中包括 链路地址和对等方地址字段。用于DHCPv6中继代理和DHCPv6服务器之间。链路地址字段给出全局IPv6地址,服务器用它表示客户机所处的链路。对 等方地址字段包含中继代理地址和客户机地址(需要中继的消息来自客户机)。需要注意的是,中继过程可能是链状的,某个中继可能转发来自其他中继的消息。中 继代理消息选项包含中继转发的完整消息,其他选项也包含在其中。

DHCPv4和DHCPv6之间的区别之一是DHCPv6使用 IPv6组播地址的方式。客户机将请求发送到所有DHCP中继代理和服务器的组播地址(ff02::1:2)。源地址在链路本地范围。在IPv6中,没有 保留BOOTP消息格式。但是,这个消息的语义类似。下面是DHCPv6的消息类型、取值、定义它的RFC、相对应的DHCPv4的消息类型:

 DHCPv6消息  DHCPv6值  参考文献 DHCPv4消息 参考文献
SOLICIT 1 【RFC3315】 DISCOVER 【RFC2132】
ADVERTISE 2 【RFC3315】  OFFER 【RFC2132】
REQUEST 3 【RFC3315】 REQUEST 【RFC2132】
CONFIRM 4 【RFC3315】 REQUEST 【RFC2132】
RENEW 5 【RFC3315】 REQUEST 【RFC2132】
REBIND 6 【RFC3315】 DISCOVER 【RFC2132】
REPLY 7 【RFC3315】 ACK/NAK 【RFC2132】
RELEASE 8 【RFC3315】 RELEASE 【RFC2132】
DECLINE 9 【RFC3315】 DECLINE 【RFC2132】
RECONFIGURE 10 【RFC3315】 FORCERENEW 【RFC3203】
INFORMATION-REQUEST 11 【RFC3315】 INFORM 【RFC2132】
RELAY-FORW 12 【RFC3315】 N/A  
RELAY-REPL 13 【RFC3315】 N/A  
LEASEQUERY 14 【RFC5007】 LEASEQUERY 【RFC4388】
LEASEQUERY-REPLY 15 【RFC5007】 LEASE{UNASSIGNED,UNKNOWN,ACTIVE} 【RFC4388】
LEASEQUERY-DONE 16 【RFC5460】 LEASEQUERYDONE [ID4LQ]
LEASEQUERY-DATA 17 【RFC5460】 N/A N/A
N/A N/A N/A BULKLEASEQUERY [ID4LQ]

在DHCPv6中,最有意义的信息携带在选项中,包括地址、租用时间、服务位置,以及客户端标识和服务器标识符。这些选项使用两个重要的概念是身份关联(IA)和DHCP唯一标识符(DUID),下面分别来讨论:

身份关联(IA): 在DHCP客户机和服务器之间的一个标识符,用于指向一个地址集。每个IA包括一个IA标识符(IAID)和相关配置信息。每个请求DHCPv6分配地址 的客户机接口至少需要一个IA。每个IA可以仅与一个接口相关联。客户机选择的IAID唯一地标识每个IA,并将这个值与服务器共享。

IA相关的配置信息有:一个或多个地址、地址相关的租约信息(T1,T2,总的租用时间)。

IA 的每个地址都有一个首选和一个有效的生命周期[RFC4862],它定义了地址的整个生命周期。请求地址类型可以是常规地址或临时地址 [RFC4941]。临时地址由随机数的一部分派生而来,用于协助改善IPv6主机地址跟踪的隐私问题。临时地址通常与非临时地址同时分配,但需要频繁使 用不同的随机数重新生成。

当服务器响应一个请求时,它为客户机的IA分配一个或多个地址,分配时基于服务器管理员确定的一组地址分配策略。在通常情况下,这些策略依赖于请求所到达的链路、客户机的标准信息,以及DHCP选项中由客户机提供的其他信息。下面是非临时地址和临时地址的IA选项格式:

DHCP唯一标识符

DHCP 唯一标识符(DUID)用于标识一台DHCPv6客户机或服务器,并被设计为可持续一段时间。服务器用它标识所选地址(作为IA的一部分)对应的客户机和 配置信息,客户机用它标识感兴趣的服务器。DUID长度是可变的,对于大多数用途来说,客户机和服务器将它看作一个不透明的值。

DUID是全球唯一的,但它很容易生成。为了同时满足这些关系,[RFC3315]定义了三种可能的DUID类型,但也不是只能创建这三种类型,三种DUID类型如下:

1.DUID-LLT:基于链路层地址和时间的UUID;

2.DUID-EN:基于企业编号和供应商分配的DUID;

3.DUID-LL:仅基于链路层地址的DUID;

一 个标准格式的DUID编码开始于一个2字节的标识符,用于指出那种类型的DUID。在DUID-LLT和DUID-LL中,紧跟着是一个来自 [RFC0826]的16位的硬件类型,当前列表由IANA维护[ID6PARAM];在DUID-EN中,则是一个32位的专用企业编号。专用企业编号 (PEN)是一个32位的值,它由IANA分配给一个企业,它通常与SNMP协议共同用于网络管理目的,到2011年中期,已分配大约38000个编号, 当前列表可从IANA获得[IEPARAM]。

DUID-LLT是推荐格式,在硬件类型之后,它包括一个32位的时间戳,其中的秒数开始于 2000年1月1日午夜(UTC)(mod 232)。它将在2136年归零。最后部分是一个可变长度的额链路层地址,链路层地址可由任何主机接口选择,并使网络接口从该DUID中移除。因此,它需 要主机系统固定存储相关信息。DUID-LL格式非常相似,但推荐给缺少固定储存的系统。RFC指出DUID-LL不能用于某客户机或服务器,它们不能确 定自己使用的链路层地址是否与一个可删除的接口有关。

1.4.3DHCPv6协议的操作

DHCPv6 协议操作与DHCPv4的对应部分非常相似,一台客户机是否启用DHCP,取决于这台主机接收的ICMPv6路由器通告消息中的配置选项。路由器通告包括 两个重要的位字段。M位是可管理地址配置标志,表示IPv6地址可使用DHCPv6获得。O位是其他配置标志,表示IPv6地址之外的其他信息可使用 DHCPv6获得。这两个字段和其他字段定义在[RFC5175]中。

M和O位字段可以任意组合,但M启用和O关闭可能是最不实用的组合。

如果两者都关闭,则不使用DHCPv6,并在分配地址时使用无状态地址自动分配。

M关闭和O启用表示客户机使用无状态DHCPv6,并使用无状态地址自动配置获得地址。

DHCPv6协议操作使用前面DHCPv6的消息类型表定义的消息实现,下面是具体的操作流程示图:

 

DHCPv6的基本操作,客户机通过ICMPv6路由器通告中的信息决定是否使用DHCPv6。如果使用,DHCPv6操作与DHCPv6相似,但在细节上有显著不同。下面简单的来介绍其操作流程:

有状态自动配置四步交互过程: 在通常情况下,一台客户机首先确定使用的链路本地地址,然后执行ICMPv6路由器发现操作,以确定所在网络中是否存在一台路由器。路由器通告包括前面提 到的M和O位字段。如果正在使用DHCPv6,这至少设置M位字段,并且由客户机来组播DHCPSOLICIT消息,以便发现DHCPv6服务器。如果存 在一个或多个DHCPADVERTISE响应消息,表示至少存在一台DHCPv6服务器。这些消息由2次称为四消息交换的DHCPv6操作构成。

有状态自动配置两步交互过程: 在已知一台DHCPv6服务器位置,或不需要分配地址的情况下,“四消息交换”可简化为“两消息交换”,在这种情况下只是用请求和应答消息。DHCPv6 服务器确认DUID、IA类型(临时、非临时、前缀)、IAID结合而成的绑定。IAID是由客户机选择的一个32位数字,每个绑定可以有一个或多个租 约,一个或多个绑定可通过一个HDCPv6事务来处理。

1.4.4DHCPv6前缀委托(DHCPv6-PD和6rd)

关 于DHCPv6 PD在前面的DHCPv6三种地址分配方案简介中已经有简单的描述,相比上面介绍的有状态的自动配置方案与DHCPv6 PD的区别是,主机的DHCPv6请求不用发送给DHCPv6服务器,而是发送给上层路由器,这个路由管理的地址空间是由其上层DHCPv6服务器或路由 器向其委托一个地址空间范围来实现的,这个地址范围可描述为一个IPv6地址前缀,这个前缀在[RFC3633]定义的DHCP前缀选项中。

当一个路由器被用于委托的情况,它就可以像DHCPv6服务器那样工作,而不需要前缀网络的详细拓扑信息。DHCPv6前缀委托方案常被用于ISP给一个潜在客户分配地址或地址范围,ISP可能使用DHCPv6-PD向客户设备委托一个前缀来实现。

前缀委托定义了一种新格式的IA,称为IA_PD,每个IP_PD由一个IAID和相关的配置信息构成,他在地址上与前面讨论的IA相似。DHCPv6-PD不止对固定路由器的前缀委托有用,它也可用于移动路由器。

DHCPv6-PD的特殊格式——6rd[RFC5569]: 这种格式是为了支持服务提供商快速不是IPv6。在OPTION_6RD(212)选项中保存IPv6 6rd前缀,它用于根据客户已分配的IPv4地址为客户网站分配IPv6地址。IPv6地址是通过算法来分配的,它将服务提供商提供的6rd前缀作为前n 位(推荐n小于32),客户分配的单播IPv4地址作为后面的32位(或更少)位,这种IPv6 6rd委托前缀同样可用DHCPv6-PD处理,并推荐64位或更短长度用于自动地址配置。

DHCPv6_6RD选项长度可变,包括以下几个值:IPv4掩码长度、6rd前缀长度、6rd前缀、6rd中继地址列表(提供6rd中继的IPv4地址)。

1.5使用DHCP中继

在复杂的网络中,可通过一个或多个DHCP中继代理来中继DHCP流量。比如当服务器和客户端不在一个网段时,需要使用DHCPv6中继来完成IPv6地址/前缀和其他网络配置参数的获取。

中 继代理用于将DHCP操作扩展到跨越多个网段,网段A和网段B的中继会转发DHCP消息,并通过选项或填充空白字段使用额外信息来标识信息。需要注意的是 在一般情况下,中继不会参与客户机和服务器之间的所有DHCP流量交换,相反它仅中继广播消息(或IPv6组播消息),这种消息通常在客户机首次获得自己 的地址时交换,当一个客户机获得了一个IP地址,并且服务器的IP地址使用服务器标识选项时,它可与服务器进行单播通信而不经过中继。

下面时一个简单的DHCP中继的工作流程

1.DHCPv6客户端向所有DHCPv6服务器和DHCPv6中继的组播地址FF02::1:2发送请求报文;

2.DHCPv6中继收到客户端的报文后,将其 封装在Relay-Forward报文的中继消息选项中,并将Relay-Forward报文发送给DHCPv6服务器或下一跳中继;

3.DHCPv6服务器从Relay-Forward报文解析出DHCPv6客户端的请求,为DHCPv6客户端选取IPv6地址和其他配置参数,并将Realy-Reply报文发送给DHCPv6中继;

4.DHCPv6中继从Relay-Reply报文中解析出DHCPv6服务器的应答,转发给DHCPv6客户端;

 DHCP中继代理信息选项

RAIO: 用于处理DHCPv4的中继代理选项,由[RFC3046]提供了使IPv4网络实现DHCP中继相关功能的方法。DHCPv4的RAIO定义在 [RFC3046]中,它实际是一个多元选项,包括集中被ISP用于标识一个请求来自哪个用户、链路、网络的选项。RAIO这些信息用于解决ISP不完全 信任用户等问题,由于中继和服务器之间的传输的一些信息对安全至关重要,因此在[RFC4030]中定义了RAIO的DHCP认证子项,它提供了一种确保 中继和服务器之间消息交换完整性的方法,这种方法与DHCP延期认证方法非常相似,只不过它用SHA-1算法代替了MD5算法。

远程ID子选项和IPv6远程ID选项: 它提供一种标识发送请求的DHCP客户机的方法,即采用一系列本地解析的命名方法(例如呼叫方ID、用户名、调制解调器ID、一条点到点链路的远程IP地 址)。DHCPv6中继代理远程ID选项[RFC4649]提供了相同的功能,它还包括一个额外的字段,以表明与供应商相关的识别信息。这种远程ID信息 格式后来以一种企业编号的特定供应商方式定义。一种常用的方法是将DUID用于远程ID。

服务器标识覆盖: 在某些情况下,中继可能希望干预DHCP客户机和服务器之间的操作,这颗采用一个特殊的服务器标识符覆盖子选项来实现[RFC5107],这个子选项是前 面提到的RAIO的一个选项。允许中继为不同类型的消息提供不同的选项,这种选项包括一个4字节的值,以指定服务器生成的DHCPREPLY消息中的服务 器标识符选项中使用的IPv4地址。服这个RAID的子选项是一组标志,它们可携带从中继到服务器的信息。

租约查询

在 某些情况下,允许第三方系统学习一个特定DHCP客户机的地址绑定是有用的,这个功能由DHCP租约查询(针对DHCPv4的[RFC4388] [RFC6148],或针对DHCPv6的[RFC5007])来提供。在DHCPv6中,它也可以委托前缀提供租约信息。中继代理可能从经过的DHCP 分组中“收集”信息,以影响哪些提供给DHCP服务器的信息。这些信息可能由中继保存,但也可能在中继失败时丢弃。DHCPLEASEQUERY消息允许 一个代理根据需要重新获得这种信息,它通常发生在一个终极流量已失去绑定的情况。对于DHCPv4,DHCPLEASEQUERY消息支持4种查 询:IPv4地址、MAC地址、客户机标识符、远程ID。对于DHCPv6支持两种查询:IPv6地址、客户机标识符(DUID)。

DHCPv4服务器可能用于以下几种消息响应租约查询:

DHCPLEASEUNASSIGNED:该消息用于指出查询值得响应服务器是授权得,但目前没有分配相应租约;

DHCPLEASEACTIVE或DHCPLEASEUNKNOWN:表示一个租约是有效得,并提供租约参数(包括T1和T2),这个消息没有特定用途得建议,无论出于何种目的,都希望提供给请求者。

DHCPv6服务器使用一个LEASEQUERY-REPLY消息来响应租约查询:其中包含一个客户机数据选项。这个选项依次包括以下选项:客户机ID、IPv6地址、IPv6前缀、客户机的最后事务时间。最后事务时间是指服务器最后一次询问客户机的时间(以秒为单位)。

LEASEQUERY-REPLY消息也可以包含以下两个选项:中继数据和客户机链路。中继数据包括中继最后一次发送的相关查询的数据;客户机链路指出特定客户机拥有一个或多个地址绑定的链路。

大批量租约查询

租 约查询的扩展称为大批量租约查询(BL)[RFC5460][ID4LQ],它可以同时查询多个绑定关系,使用TCP/IP(用于IPv6的端口547和 用于IPv4的端口67)而不是UDP/IP,并支持更大范围的查询类型。BL被设计为一种获得绑定信息的特定服务,它实际上不是传统DHCP的一部分。 因此,客户机可能希望不使用BL而获得常规配置信息。BL的一个特殊用途表现在DHCP用于前缀委托时,这种情况下,最常见的是一台路由器作为一个 DHCP-PD客户机使用。它获得一个前缀,并从该前缀代表的一个地址范围中获得一个地址,以分配给传统DHCP客户机。但是,如果一台路由器出现故障重 新启动,他可能会丢失这个前缀信息,并在一段时间内难以恢复,这时因为传统的租约查询机制需要绑定一个用于查询的标识符。通过扩展一组可能的查询类 型,BL有助于缓解这种以及其他情况。

BL提供了对基本租约查询的几个扩展,这种查询使一次查询可获得大量查询信息,这在检索大量委托前缀时是必要的。BL也提供了一个中继标识符选项,允许查询者更容易地识别查询,BL查询可基于中继标识符、链路地址(网段)或中继ID。

DHCPv6 中继ID选项和DHCPv4中继ID子选项[ID4RI]可能包括一个用于标识中继代理的DUID,中继可在自己转发的消息中插入这个选项,服务器可用它 关联自己接收的由特定中继提供的绑定。BL支持基于地址和DUID的查询(定义在[RFC5007]和[RFC4388]中),也支持基于中继ID、链路 地址、远程ID的查询。这些查询只被基于TCP/IP并支持BL的服务器所支持。相反,BL服务器仅支持LEASEQUERY消息,而不是整套的普通 DHCP消息。BL通过LEASEQUERY-DATA和LEASEQUERY-DONE消息扩展基本的租约查询机制。当一个查询被成功响应时,一台服务 器首先返回一个LEASEQUERY-REPLY消息。如果附加信息可用的,那么它包括一组LEASEQUERY-DATA消息,每个消息对应一个绑定, 并通过一个LEASEQUERY-DONE消息来完成设置。术语相同绑定组的所有消息共享相同的事务ID,每个相同值由初始的LEASEQUERY REQUEST消息提供。

第二层中继代理

在一些网络环境中,第2层设备更靠近端系统, 它们会中继和处理DHCP请求。这些第2层设备没有完整的TCP/IP协议栈,并且不使用IP进行寻址。因此,它们不能作为传统的中继代理。为了解决这个 问题,[IDL2RA]和[RFC6221]分别针对IPv4和IPv6规定了第2层“轻量级”DHCP中继代理(LDR)如何工作。当针对中继行为更接 近DHCP服务器,可信的接口哪些假设到达的分组不存在欺骗的接口。

IPv4 LDRA的首要问题是如何处理DHCP的giaddr字段,以及在LDRA本身没有IP层信息时插入一个RAIO。[IDL2RA]推荐的方法 是:LDRA在客户机接收的DHCP请求中插入RAIO,但不填写giaddr字段。DHCP消息以广播方式发送给一个或多个DHCP服务器,以及其他处 于接收状态的LDRA。这种消息已知被泛洪,直到被一个不可信的接口接收。当LDRA接收到一个包含RAIO的这种消息,它不会添加其他的同类选项,但会 继续执行泛洪。通过广播发送的响应可能被LDRA拦截,这时需要剥离RAIO并使用其中的信息,以便将响应发送给发出请求的客户机。很多LDRA也拦截单 播的DHCP流量,在这种情况下,创建或剥离RAIO也是必要的。注意,兼容的DHCP服务器必须支持处理和返回这样的DHCP消息:无论是用单播发送还 是广播发送,其包含的RAIO中没有有效的giaddr字段。

IPv6的LDRA通过创建RELAY-FORW和RELAY-REPL消息 处理DHCPv6流量,面向客户的接口将会丢弃接收到的ADVERTISE、REPLY、RECONFIGURE和RELAY-REPL消息。另外,不可 信的面向客户的接口也会处于安全原因丢弃接收到的RELAY-FORW消息。RELAY-FORW消息包含标识面向客户接口的选项(即链路地址字段、对等 方地址字段、接口ID选项)。链路地址字段设置为0,对等方地址字段设置为客户机IP地址,接口ID选项设置为LDRA中配置的值,并将其发送到接口ID 选项指定的客户机接口。面向客户的接口修改接收的RELAY-FORW消息的跳步数,面向网络的接口将会丢弃接收的除RELAY-REPL之外的消息。

1.6DHCP认证

如 果DHCP的运行被干扰,主机很可能配置为错误的信息,并可能导致严重的服务终端。而DHCP并没有提供安全保障,因此可能建立一些未授权的DHCP客户 机或服务器,无论是有意还是无意的,这可能严重破坏一个网络的其他功能。为了 缓解这个问题,[RFC3118]规定了一种认证DHCP消息的方法,它定义了一个DHCP选项,即认证选项,采用如下图所示的格式:

认 证选项的目的是确定DHCP消息是否来自一个授权的发送方,代码字段设置为90,长度字段给出选项中的字节数(不包括代码或长度字段)。如果协议和算法字 段值为0,认证信息字段保存一个简单的共享配置令牌。只要客户机和服务器的配置令牌匹配,相应的消息可接收。例如,它可用于保存一个密码或类似的文本文字 字符串,但这种流量可能被攻击者截获,因此这种方法并不很安全。但是,它可能有助于抵御偶然的DHCP问题。

一种比较安全的方法称为延期认 证,具体按协议和算法字段是否设置为1.这种情况下,客户机DHCPDISCOVER或DHCPINFORM消息中包含一个认证选项,并且服务器在 DHCPOFFER和DHCPACK消息中包含响应的认证信息。这个认证信息中包括一个消息认证码(MAC),它提供对发送方的认证和消息内容完整性的检 验。假设服务器和客户机有一个共享密钥,MAC可确保客户机被服务器信任,反之亦然。它也用于确保客户机和服务器之间交换的DHCP消息没有被修改,或是 由早期DHCP消息重放而来。重放检测方法(RDM)由RDM字段值来确定,如果RDM设置为0,重放检测字段包含一个单向递增的值(例如时间戳),检测 接收的消息以确保该值总是增加,如果这个值没有增加,很可能是对一个早期DHCP消息的重放(捕获、存储并在此后重新发送)。我们可以想象,在数据包重新 发送的情况下,重放检测字段中的值不会增加,但是,在一个局域网(DHCP普遍用于其中)中也可能无法说明问题,这是因为DHCP客户机和服务器之间通常 只经过一跳路由。

DHCP认证没有广泛使用有两个原因:第一,这种方法需要在DHCP服务器和每个需要认证的客户机之间分发共享密钥。第二,认证选项的定义出现在DHCP已广泛使用之后。尽管如此,[RFC4030]建立在这个规范之上,以帮助DHCP消息通过中继代理安全转发。

1.7重新配置扩展

在 普通操作中,DHCP客户机启动对地址绑定的更新。[RFC3230]定义了重新配置扩展和相关的DHCPFORCERENEW消息,这个扩展允许服务器 引发一个客户机改变更新状态,并通过别的普通操作尝试更新租约。一台不希望更新租约的服务器可能响应一个DHCPNAK,导致客户机重新启动为INIT状 态。这台客户机稍后使用一个DHCPDISCOVER消息重新开始。

这个扩展的目的是当网络中出现一些明显的状态改变时,使客户端能重新建 立一个地址或丢弃自己的地址。例如,如果网络在管理中关闭或重新编号,这种情况很可能会发生。由于这种消息经常被DoS攻击所利用,因此它必须通过 DHCP认证加以验证。由于DHCP认证没有得到广泛使用,因此重新配置扩展同样没有流行起来。

1.8快速确认

DHCP 快速确认选项[RFC4039]允许一台DHCP服务器通过一个DHCPACK来响应DHCPDISCOVER消息,从而有效跳过DHCPREQUEST 消息,并最终使用两消息交换来代理四消息交换。这个选项的设计目的使快速匹配可能频繁改变其网络接入点的主机(例如移动主机)。当仅有一台可用的DHCP 服务器并且地址充足时,我们可以不关注这个选项。

要使用快速确认,客户机可在DHCPDISCOVER消息中包含该选项,但在任何其他消息 中不能包含该选项。同样,服务器仅在DHCPACK消息中使用该选项。当一台服务器使用该选项来响应时,接收消息的客户机知道该返回地址可立即使用。如果 后来确认该地址已用于另一个系统(例如通过ARP),客户机发送一个DHCPDECLINE消息,并放弃该地址。客户机也可能通过一个 DHCPRELEASE消息自愿放弃收到的地址。

1.9位置信息

在某些情况下,将主机配 置为知道自己的位置是有用的,这样的信息可编码使用,例如纬度、经度、海拔高度。IETF的一个总所有周知的成功是Geoconf("地理配置") [RFC6225],[RFC6225]规定了如何使用GeoConf(123)和GeoLoc(144)的DHCP选项,为客户机提供这种地理空间位置 配置信息(LCI)。地理空间LCI不仅包括纬度、经度、高度坐标,也为每个信息提供分辨率指标。

除了LCI地理空间位置,还有市政位置信 息也可通过DHCP以物理位置采用的方式提供,[RFC4776]定义了携带市政位置的GEOCONF_CIVIC(99)选项,但这种格式的LCI比地 理空间信息更麻烦,因为各个国家的行政地理命名的方法不同,除了需要DHCP常用的英语、ASCII语言和字符集以外,可能话需要其他语言和字符集的支 持,这会带来额外的复杂性。一个可供选择的高层协议称为启用HTTP的位置投递(HELD)协议[RFC5985],它可用于提供位置信息,代理DHCP 消息中直接编码LCI,而采用DHCP选项OPTION_V4_ACCESS_DOMAIN(213)和 OPTION_V6_ACCESS_DOMAIN(57)分别为IPv4和IPv6提供一台HELD服务器的FQDN[RFC5986]。

当 一台主机知道自己的位置时,它可能需要使用该位置信息的相关服务,IETF的位置到服务转换(LoST)框架[RFC5222]通过一个使用位置相关 URI访问的应用层协议来实现上述功能。DHCP选项OPTION_V4_LOST(137)和OPTION_V6_LOST(51)为一个FQDN提供 可变长度的编码,FQDN分别为DHCPv4和DHCPv6指定一台LoST服务器的名称[RFC5223],这个编码与DNS的域名编码采用相同格式。

1.10移动和切换信息

随 着移动计算机和智能手机通过蜂窝技术访问Internet的用户逐渐增多,定义了有关蜂窝配置和不同无线网络之间切换的框架和相关DHCP选项。目前,存 在两套有关该信息的DHCP选项:IEEE802.21移动服务(MoS)发现,以及接入网发现和选择功能(ANDSF)。ANDSF已被3GPP标准 化。这就就提一下相关技术的文档,具体以后在相关移动网络内容中介绍:[RFC5678]、[RFC6153]、[RFC3315]。

1.11DHCP嗅探

DHCP “嗅探”是某些交换机厂商在其产品中提供的一种功能,用于检查DHCP消息内容,以确保只有访问控制列表中列出的地址才可交换DHCP流量。这样有助于防 止两个潜在问题:1.将一个“欺骗性”DHCP服务器的危害限制在一定范围内,这时因为其他主机无法接收到它提供的DHCP地址;2.这项技术可以限制一 组特定MAC地址的分配,虽然该技术提供了一些保护,但通过操作系统提供的命令,在一个系统中很容易改变MAC地址,因此这种技术只能提供有限的保护。

 二、无状态地址自动配置

大多数路由器通过手动配置地址,主机既可手动配置地址,也可使用一种如DHCP的分配协议或某种算法来自动配置地址。这里存在两种形式的自动配置:

2.1IPv4链路本地地址的动态配置

主 机通过该机制可自动从链路本地范围169.254.1.1至1693254.254.254使用16位子网掩码255.255.0.0生成自己的IPv4 地址。这种方法称为链路本地地址的动态配置或自动专用IP寻址(APIPA)。从本质上来说,就是一台主机从一个范围中随机选择一个地址,并检查该地址是 否已在本子网中被其他系统使用,这种检查通过IPv4 ACD来实现。

2.2链路本地地址的IPv6 SLAAC

IPv6 SLLAC的目标是允许节点自动(和自主)分配链路本地IPv6地址,[RFC4862]中描述了IPv6 SLAAC。它包含三个主要步骤:获得一个链路本地地址,使用无状态自动配置获取全球地址,检测链路本地地址是否已在链路中使用。

当路由器存在时,有一个路由器通告的前缀和本地产生的信息组合成一个全球地址,SLAAC也可结合DHCPv6(或手动分配地址)使用,以允许一台主机获得除自己地址外的其他信息(称为“无状态”DHCPv6)。

当网络采用有状态或无状态DHCPv6配置时,执行SLAAC的主机可用于同一网络中,在通常情况下,有状态DHCPv6用于需要为主机更精确分配地址时,但无状态DHCPv6和SLAAC结合是最常见的部署。

2.2.1IPv6重复地址检测(DAD)

IPv6 DAD使用ICMPv6邻居请求和邻居通告消息,以确定一个特定(临时或乐观)IPv6地址是否已在连接链路上使用。本次讨论只针对临时地址,但DAD也 适用于乐观地址。[RFC4862]中定义了DAD,并建议在为一个接口分配IPv6地址时使用,无论手动分配还是自动配置或DHCPv6分配。如果发现 地址重复,将不适用该地址。如果DAD成功,临时地址转换为优先状态,并不受限制地使用。

DAD按以下步骤执行: 一个节点首先加入临时地址的所有节点组播地址,为了检查使用的地址是否重复,一个节点发送一个或多个ICMPv6邻居请求消息。这些消息的源和目的 IPv6地址分别是未指定地址和被检查目的地址的请求节点地址。目的地址字段设置为被检查的地址(临时地址)。如果在响应中接收到一个邻居通告消息,说明 DAD失败,并放弃被检查的地址。

如果DAD失败,通告接收用给来自其他节点的邻居请求或一个到达目的地址的邻居通告,说明这个地址未分配 给一个接口,并且不会成为一个首选地址。如果这个地址是一个基于由本地MAC地址导出的接口标识符配置的链路本地地址,不可能通过相同过程生成一个不冲突 的地址,这时应放弃该地址并要求管理员输入地址。如果这个地址是基于不同形式的接口标识符,IPv6操作可能尝试使用基于别的临时的其他地址。

2.2.2全球地址的IPv6 SLAAC

在 一个节点已获得一个链路本地地址后,它可能需要一个或多个全球地址。全球地址的形成过程类似链路本地SLAAC,但需要使用一个由路由器提供的前缀。这种 前缀携带在一个路由器通告的前缀选项中,并且由一个标志来表示这个前缀是否用于与SLAAC共同形成全球地址。如果是,这个前缀与接口标识符(如果不采用 隐私扩展方式,它与形成链路本地地址相似)组合形成一个全球地址。这种地址的首选和有效生命周期也是由前缀选项表示的信息来确定。

2.2.3无状态DHCP

前 面提到DHCP可用于一种“无状态”模式,在这种模式下,DHCPv6服务器不指定地址(或保留任何一台客户机的状态),但提供其他配置信息。无状态 DHCPv6定义在[RFC3736]中,并将SLAAC和DHCPv6相结合,网络管理员在部署DHCPv4时不必直接关心地址池。

在无状态DHCPv6部署方案中,假设节点采用DHCPv6之外的方法获得自己的地址。因此,DHCPv6服务器不需要处理定义在表6-1中的地址管理消息,另外,它不需要处理IA绑定所需要的选项。这简化了服务器软件和配置工作,中继代理的操作没有改变。

无 状态DHCPv6客户机使用DHCPv6的INFORMATION-REQUEST消息请求信息,该信息由服务器发送的REPLY消息提供。 INFORMATION-REQUEST消息包含一个选项请求选项,给出客户机想了解的更多信息的选项。INFORMATION-REQUEST可能包含 一个客户机标识符选项,它允许为特定的客户机定制答案。

为了实现标准的无状态DHCPv6服务器,相应系统必须实现以下这些消 息:INFORMATION-REQUEST、REPLY、RELAY-FORW、RELAY-REPL。它还必须实现以下这些选项:选项请求、状态代 码、服务器标识符、客户机消息、服务器消息、接口ID。其中最后三个选项(客户机消息、服务器消息、接口ID)作为中继代理时使用。作为一台可用的无状态 DHCPv6服务器,其他几个选项可能是必须的:DNS服务器、DNS搜索列表、可能的SIP服务器。其他可能有用但不是必须的选项主要包括:优先级、经 历的时间、用户类别、供应商类别、供应商特定信息、客户机标识符、认证。

2.2.4地址自动配置的用途

IP 地址自动配置的用途通常是有限的,这是由于路由器可能需要为同一网络中的客户机配置特定范围的IP地址,而这台客户机自动配置的地址与该范围不一致。它在 IPv4(APIPA)环境中是好用的,这是因为专用链路本地前缀169.254/16不能用于路由器中。因此,自己分配IP地址的结果是本地子网访问可 能正常,但Internet路由和名称服务器(DNS)很可能不正常。当DNS不正常时,大部分常见Internet“体验”无法实现。因此,一台客户机 无法获得一个IP地址,相对于获得一个IP实际不能有效使用IP地址,前者通常更有用。

 三、DHCP和DNS交互、以太网上的PPP

3.1DHCP和DNS交互

 当一台DHCP客户机获得一个IP地址时,它接收的配置信息的重要部分是一台DNS服务器的IP地址。它允许客户机系统将DNS名称转换为IPv4和/或IPv6地址,该地址是进行传输层连接时协议实现所需要的。

由于本地专用网络的DNS映射通常采用繁琐的手工管理,因此,将指定DHCP地址与相应地址的DNS映射更新方法结合起来将会带来方便。这可通过组合DHCP/DNS服务器或动态DNS来实现。

组 合DNS/DHCP服务器(如Linux dnsmasq包)是一个服务器程序,它可配置为提供IP地址租约以及其他信息,也可读取一个DHCPREQUEST中的客户机标识符或域名,并在使用 DHCPACK进行响应之前,通告"名称到地址"的绑定更新内部DNS数据库。这样,由DHCP客户机或与相同DNS服务器交互的其他系统发起的任何后续 DNS请求,能够在客户机名称和新分配的IP地址之间转换。

3.2以太网上的PPP

对于 大多数局域网和一些广域网连接,DHCP提供了最常用的客户机系统配置方法,对于广域网连接(例如DSL),常用另一种基于PPP的方法替代它。这种方法 涉及在以太网中携带PPP,因此称为以太网上的PPP(PPPoE)。PPPoE用于广域网连接设备(例如DSL调制解调器)作为一个交换机或网桥而不是 使用路由器的情况下,PPP作为某些ISP建立连接的首选,这是因为它可提供比其他配置选项(例如DHCP)更细致的配置控制和审计日志。为了提供 Internet连接,有些设备(例如PC)必须实现IP路由和寻址功能。例如下图就是典型的使用情况(为客户提供使用PPPoE的DSL服务的简化示 图):

DSL 提供一条点到点的数字链路,它可与一条传统的模拟电话线(称为普通老式电话业务或POTS)同时工作。对物理电话线的同时使用是通过频分复用来实现 的,DSL信息在比POTS更高的频率上传输。当连接到传统的电话听筒时,需要用一个过滤器来避免更高的DSL频率干扰。DSL调制解调器为PPP端口提 供桥接服务,该端口位于ISP的接入集中器(AC)中,连接客户的调制解调器线和ISP的网络设备。调制解调器和AC也支持PPPoE协议,在这个例子 中,该用户选择将一台家用PC连接到DSL调制解调器,并使用一个点到点的以太网。

在DSL调制解调器与ISP成功建立一条低层链路后,PC可以开始进行PPPoE交换,它被定义在信息文档[RFC2516]中。下面是PPPoE会话的消息交换过程:

这个过程包括一个发现阶段和一个PPP会话阶段,发现阶段涉及交换几个PPPoE主动发现(PAD)消息:PADI(初识化)、PADO(提供)、 PADR(请求)、PADS(会话确认)。在这个交换完成后,由以太网封装的一次PPP会话开始,并最终有任何一方发送PADT(终止)消息来终止。如果 低层连接终端,这个会话也会终止。PPP消息使用的格式如下:

PPPoE 版本和类型字段的长度都是4位,并包含当前PPPoE版本的值0x1,代码字段中包含PPPoE版本消息类型的提示。会话ID字段包含值0x0000表示 PADI、PADO、PADR,并在后续消息中包含一个唯一的16位数字,在PPP会话阶段会保持相同的值。PAD消息包含一个或多个标签,它们按TLV 方式排列为一个16位的TAG_TYPE字段,随后是一个16位的TAG_LENGTH字段和一个数据可变的标签值。下面事PPPoE的TAG_TYPE 字段的值、名称、用途:

0x0000:End-of-List:表示没有更多标签尊在,TAG_LENGTH必须为0;

0x0101:Service-Name:包含一个UTF-8编码的服务名称(供ISP使用);

0x0102:AC-Name:包含一个UTF-8编码的字符串,用于表示访问集中器;

0x0103:Host-Uniq:由客户机使用的二进制数据,用于匹配消息;不能被AC解释;

0x0104:AC-Cookie:由AC使用的二进制数据,用于防止DoS,由客户机回显;

0x0105:Vendor-Specific:不推荐;

0x0110:Relay-Session-ID:中继增加该值以转发PAD流量;

0x0201:Service-Name-Error:请求的Service-Name标签不能被AC认可;

0x0202:AC-System-Error:AC在执行请求的操作时出现一个错误;

0x0203:Generic-Error:包含一个UTF-8编码的字符串,用于描述一个不可恢复的错误;

后期在相关网络实验博客中再详细的描述这个过程的细节。

 四、与系统配置相关的攻击

针对系统和网络配置的攻击多种多样,从未授权客户机或未授权服务器对DHCP的干扰,到耗尽资源的各种形式的DoS攻击,例如申请一台服务器可能提供的所有可能的IP地址。这些问题很常见,这是由于地址配置基于旧的IPv4协议,其设计出发点是假设网络可信,而到目前为止新的协议还很少部署。因此,无法通过典型DHCP部署来防御这些攻击,虽然链路层认证(例如,WiFi网络使用的WPA2)有助于限制连接到一个特定网络的未授权客户机数量。

IETF致力于为IPv6邻居发现提供安全性,哪个邻居、什么时间或是否已部署SLAAC,这些因素将直接影响网络运行的安全性。[RFC3756]概括了2004年以来的信任及威胁假设,[RFC3971]定义了安全邻居发现(SEND)协议。SEND将IPsec用于邻居发现数据包,并结合使用加密生成的地址(CGA)[RFC3972]。这种地址由密钥散列函数而获得,所以它们只能由系统保存的适当关键信息生成。

posted @ 2022-12-07 08:51  他乡踏雪  阅读(894)  评论(0编辑  收藏  举报