IPV6之DHCPv6服务器和中继代理和前缀代理服务器客户端
一、DHCPv6 原理
DHCPv6 是动态主机配置协议(DHCP)的 IPv6 版本,DHCPv6 服务端可以向DHCPv6客户端分配IPv6地址以及DNS地址和域名等配置参数。相对 于IPv6 无状态地址自动配置协议,DHCPv6属于一种有状态地址自动配置协议。在有状态地 址配置过程中,DHCPv6服务器分配一个完整的IPv6地址给主机,并提供DNS地址和域名等 其他配置信息,这中间可能通过中继代理转交DHCPv6报文,而且最终服务器能把分配的IPv6 地址和客户端的绑定关系记录在案,从而增强了网络的可管理性;DHCPv6服务器也能提供 无状态DHCPv6 服务,即不分配IPv6地址,仅需向主机提供DNS地址和域名等其他配置信 息,从而补足了IPv6无状态地址自动配置的缺陷;DHCPv6协议还提供了DHCPv6前缀代理 的扩展功能,上游路由器可以自动为下游路由器分派地址前缀,从而实现了层次化网络环境 中IPv6 地址的自动规划,解决互联网提供商(ISP)的IPv6网络部署问题。
DHCPv6 报文用于客户端、中继代理与服务器三者之间的通信,以完成DHCPv6 的协议 行为。DHCPv6 报文承载于UDP协议之上。DHCPv6客户端使用UDP端口547向DHCPv6服 务器或中继代理发送请求报文,DHCPv6服务器和中继代理使用UDP端口546向DHCPv6客 户端发送应答报文。DHCPv6客户端使用所有DHCP中继代理和服务器多播地址(FF02::1:2)发 送服务器发现(Solicit)或请求(Request)报文。
DHCPv6 协议交互过程
当DHCPv6客户端向位于同一链路的DHCPv6服务器请求分配IPv6地址以及其它配置参 数时,客户端首先要定位和选择合适的服务器,然后才能向服务器请求分配地址和其它配置 参数。
动态分配主机配置的协议过程:
- 在定位服务器时,客户端向所有DHCP中继代理和服务器多播地址 (FF02::1:2)发出 SOLICIT 消息希望发现合适的DHCPv6服务器。
- 任何能够满足该请求的服务器都会发送一个ADVERTISE消息给客户端,其中包含可 分配的配置信息以及服务器的身份标识(DUID)和该服务器的优先值信息。
- 客户端可能接收到多个这样的通告消息,依据某种策略(如选择服务器优先值选项中优先值最高的服务器)选择其中一个服务器,然后向选定服务器发送REQUEST消 息请求服务器分配通告的IPv6地址和其它配置参数。
- 被选择的服务器回应以REPLY 消息,其中包含确认的IPv6 地址和其它配置参数, 客户端收到REPLY消息提取地址和配置参数完成DHCPv6配置任务。
如果 DHCPv6 服务器和 DHCPv6 客户机不相邻时,服务器是无法收到客户机发出的DHCPv6 多播报文,因此服务器 也不会给客户机发送任何DHCPv6报文,这时需要DHCPv6中继代理来转发这些DHCPv6报 文,完成DHCPv6客户机和服务器之间的DHCPv6报文交互过程。
交换机实现了DHCPv6服务器、DHCPv6中继的功能和DHCPv6前缀代理客户端功能。中 继代理节点收到来自客户端的DHCPv6消息,重新封装成Relay-forward报文转发给DHCPv6 服务器或下一个中继代理,服务器回应的DHCPv6消息被封装成Relay-reply报文交给DHCPv6 中继代理节点,中继代理节点解除最外一层中继封装后再转发给DHCPv6客户端或下一个中 继代理,从而完成客户端与服务器之间的通信。
DHCPv6 前缀代理(Prefix Delegation)机制中,上游网络路由器(PE)启动DHCPv6服务器, 下游网络路由器(CPE)启动DHCPv6前缀代理客户端。此时下游网络路由器不需要再手工指定 用户侧链路的 IPv6 地址前缀,它只需要向上游网络路由器提出前缀分配申请,上游网络路 由器便可以分配合适的地址前缀给下游路由器。二者之间的报文交互与DHCPv6地址分配的 过程类似。然后下游路由器把获得的前缀(一般前缀长度小于64)进一步自动细分成64前缀 长度的子网网段,把细分的地址前缀再通过路由公告(RA)至与主机直连的用户链路上,实现 主机的地址自动配置,从而完成整个系统层次的地址布局。
二、DHCPv6 配置举例
- 案例1: 在部署全IPv6校园网时,若使用专门的服务器进行IPv6地址的统一分配和管理,则可 以使用路由交换设备的DHCPv6服务器功能进行IPv6地址分派。DHCPv6服务器同时支持有 状态与无状态DHCPv6。
网络拓扑: 接入层使用二层接入设备 Switch1,连接宿舍楼栋的用户;一级汇聚层使用汇聚设备 Switch2 做 DHCPv6 中继代理;二级汇聚层使用汇聚设备Switch3做DHCPv6服务器,并与骨 干网或更高的汇聚层设备相连;用户PC端一般装有Windows Vista操作系统,具有DHCPv6 客户端。
Switch3 配置:
Switch3>enable
Switch3#config
Switch3(config)#service dhcpv6
Switch3(config)#ipv6 dhcp pool EastDormPool
Switch3(dhcpv6-EastDormPool-config)#network-address 2001:da8:100:1::1 2001:da8:100:1::100 配置地址池可分配的IPv6地址范围。
Switch3(dhcpv6-EastDormPool-config)#excluded-address 2001:da8:100:1::1
Switch3(dhcpv6-EastDormPool-config)#dns-server 2001:da8::20
Switch3(dhcpv6-EastDormPool-config)#dns-server 2001:da8::21
Switch3(dhcpv6-EastDormPool-config)#domain-name dhcpv6.com
Switch3(dhcpv6-EastDormPool-config)#lifetime 1000 600 配置DHCPv6地址池动态分配地址或前缀的生存期。
Switch3(dhcpv6-EastDormPool-config)#exit
Switch3(config)#interface vlan 1
Switch3(Config-if-Vlan1)#ipv6 address 2001:da8:1:1::1/64
Switch3(Config-if-Vlan1)#exit
Switch3(config)#interface vlan 10
Switch3(Config-if-Vlan10)#ipv6 address 2001:da8:10:1::1/64
Switch3(Config-if-Vlan10)#ipv6 dhcp server EastDormPool preference 80
Switch3(Config-if-Vlan10)#exit
Switch3(config)#
Switch2 配置:
Switch2>enable
Switch2#config
Switch2(config)#service dhcpv6
Switch2(config)#interface vlan 1
Switch2(Config-if-Vlan1)#ipv6 address 2001:da8:1:1::2/64
Switch2(Config-if-Vlan1)#exit
Switch2(config)#interface vlan 10
Switch2(Config-if-Vlan10)#ipv6 address 2001:da8:10:1::2/64
Switch2(Config-if-Vlan10)#exit
Switch2(config)#interface vlan 100
Switch2(Config-if-Vlan100)#ipv6 address 2001:da8:100:1::1/64
Switch2(Config-if-Vlan100)#no ipv6 nd suppress-ra
Switch2(Config-if-Vlan100)#ipv6 nd managed-config-flag
Switch2(Config-if-Vlan100)#ipv6 nd other-config-flag
Switch2(Config-if-Vlan100)#ipv6 dhcp relay destination 2001:da8:10:1::1 指定DHCPv6 中继转发的目的地址
Switch2(Config-if-Vlan100)#exit
Switch2(config)#
- 案例2: 运营商在部署层次化的IPv6网络时,不再需要为网络下游的路由交换设备手工配置IPv6 地址,可以通过前缀代理机制,实现层次化IPv6网络的自动配置:
- 1. 配置上游路由交换设备为DHCPv6前缀代理服务器,维护一个保存已分配前缀与下 游设备DUID关联信息的本地数据库;
- 2. 配置下游路由交换设备为前缀代理客户端,通过与前缀代理服务器进行类似 DHCPv6 地址分配相似的交互,获得长度小于64的IPv6地址前缀;
- 3.获得前缀的下游接入设备与用户PC 处于同一链路的接口通过路由公告(RA)告知接 入用户所在链路的前缀信息,用户的 PC 机进一步通过无状态地址自动配置获取 IPv6 地址;同时,该接口配置无状态DHCPv6服务器,为DHCPv6 client提供DNS、 Domain name 信息。
网络拓扑: 下游路由交换设备使用接入设备 Switch1,与上游路由交换设备相连的接口配置前缀代 理客户端,与用户PC处于同一链路的接口配置无状态DHCPv6服务器,为PC提供无状态信 息(如DNS、domain name等),并开启无状态地址自动配置的路由公告;上游路由交换设 备使用汇聚设备 Switch2,配置前缀代理服务器,开启有状态地址自动配置的路由公告;用 户PC端一般装有Windows Vista操作系统,具有DHCPv6客户端。
Switch2 配置 :
Switch2>enable
Switch2#config
Switch2(config)#interface vlan 2
Switch2(Config-if-Vlan2)#ipv6 address 2001:da8:1100::1/64
Switch2(Config-if-Vlan2)#exit
Switch2(config)#service dhcpv6 启动DHCPv6服务
Switch2(config)#ipv6 local pool client-prefix-pool 2001:da8:1800::/40 48 配置代理前缀池。指定 IPv6 前缀与某个前缀请求客户端静态绑定。
Switch2(config)#ipv6 dhcp pool dhcp-pool
Switch2(dhcpv6-dhcp-pool-config)#prefix-delegation pool client-prefix-pool 1800 600 指定IDHCPv6地址池使用的代理前缀池,从该前缀池中分配可用的前缀给客户端。
Switch2(dhcpv6-dhcp-pool-config)#exit
Switch2(config)#interface vlan 2
Switch2(Config-if-Vlan2)#ipv6 dhcp server dhcp-pool
Switch2(Config-if-Vlan2)#exit
Switch1 配置 :
Switch1>enable
Switch1#config
Switch1(config)#service dhcpv6
Switch1(config)#interface vlan 2
Switch1(Config-if-Vlan2)#ipv6 dhcp client pd prefix-from-provider 在指定接口上启动客户端前缀代理请求功能,获取的前缀与设置的通用前缀名关联。
Switch1(Config-if-Vlan2)#exit
Switch1(config)#interface vlan 3
Switch1(Config-if-Vlan3)#ipv6 address prefix-from-provider 0:0:0:1::1/64
Switch1(Config-if-Vlan3)#exit
Switch1(config)#ipv6 dhcp pool foo
Switch1(dhcpv6-foo-config)#dns-server 2001:4::1 为DHCPv6 客户机配置DNS服务器地址。
Switch1(dhcpv6-foo-config)#domain-name www.ipv6.org 为DHCPv6 客户机配置域名。
Switch1(dhcpv6-foo-config)#exit
Switch1(config)#interface vlan 3
Switch1(Config-if-Vlan3)#ipv6 dhcp server foo 在指定接口上启动DHCPv6服务器功能
Switch1(Config-if-Vlan3)#ipv6 nd other-config-flag
Switch1(Config-if-Vlan3)#no ipv6 nd suppress-ra
Switch1(Config-if-Vlan3)#exit
注意:
- 启动全局DHCPv6服务与相关 接口上的DHCPv6功能;
- 若DHCPv6客户机和服务器不在同一个物理网络中,检查中间负责转发DHCPv6报文的 路由器是否具备DHCPv6中继功能。若中间路由器不具备DHCPv6中继功能,建议替换 掉中间的路由器或更新版本,使其具备DHCPv6中继功能;
- 用户比较容易遇到的现象是DHCPv6客户机连接在启动了DHCPv6服务器功能的交换机 上,却获得不到IPv6 地址。遇到这种情况请
- 首先确定 DHCPv6 客户机是否直连在启动 DHCPv6 服务器的接口上,
- 若是直连,则判断该接口VLAN的IPv6地址是否与本接口上 启动的DHCPv6服务器地址池在同一个网段,如没有则请添加该网段至地址池;
- 若不是 直连,而且通过了其它启动了DHCPv6中继代理的三层交换机接入到DHCPv6服务器, 则请判断DHCPv6客户机所在链路的交换机接口是否配置了IPv6地址,
- 若没有配置IPv6 地址,建议配置该接口IPv6地址。
- 若该接口配置了地址,则进一步判断接口的IPv6地 址是否在DHCPv6服务器地址池的网段之内,
- 如没有则请添加该网段至地址池。
- 首先确定 DHCPv6 客户机是否直连在启动 DHCPv6 服务器的接口上,