[IPv6]使用DHCPv6提供有状态IPv6地址配置服务

发布于 2018-06-25  136 次阅读


IPv6的地址分配方式有两种,有状态和无状态,下面介绍怎么使用DHCPv6提供有状态IPv6地址配置服务。如果需要配置无状态IPv6地址配置,请参考

[IPv6]使用RADVD提供无状态IPv6地址配置服务

环境假设

需要运行地址配置服务的网卡为eth1
待分配的地址块为dddd:1234:5678::/48
其中dddd:1234:5678::10-ddddd:1234:5678::ffff用于地址分配
dddd:1234:5678:1::/64用于临时地址分配
dddd:1234:5678:100::/64-ddddd:1234:5678:ffff::/64
DNS为谷歌DNS和OpenDNS

安装

CentOS7下安装DHCPD6非常简单,只需一个命令。

yum install dhcp -y

配置

配置网卡IP

通过一种方式,在服务运行前,给待运行DHCPv6的网卡配置待分配块内的地址

ifconfig eth1 inet6 add dddd:1234:5678::1/48

服务配置

它的配置更简单,修改配置文件即可

vi /etc/dhcp/dhcpd6.conf

配置文件解释

default-lease-time 2592000;
preferred-lifetime 604800;
option dhcp-renewal-time 3600;
option dhcp-rebinding-time 7200;
allow leasequery;
option dhcp6.name-servers 2001:4860:4860::8888,2620:0:ccc::2;
option dhcp6.domain-search "example.com";
option dhcp6.info-refresh-time 21600;
dhcpv6-lease-file-name "/var/lib/dhcpd/dhcpd6.leases";
subnet6  dddd:1234:5678::/48 {
        # Two addresses available to clients
        #  (the third client should get NoAddrsAvail)
        range6 dddd:1234:5678::10 dddd:1234:5678::ffff;

        # Use the whole /64 prefix for temporary addresses
        #  (i.e., direct application of RFC 4941)
        range6 dddd:1234:5678:1:: temporary;

        # Some /64 prefixes available for Prefix Delegation (RFC 3633)
        prefix6 dddd:1234:5678:100:: dddd:1234:5678:ffff:: /64;
}
  • option dhcp6.name-servers为DNS服务器配置项,后面的DNS服务器用逗号分隔
  • 每个地址块用subnet6 dddd:1234:5678::/48 {xxx}声明,多个的话在后面以同样形式添加。当然"dddd:1234:5678::"也可以是全局单播地址块或其他地址
  • 临时地址和地址块分配不是必须的,可以删除
  • 每个配置项的作用还是看文件中的说明和文档吧
  • {xxx}内第一个range6声明的是DHCPv6的地址空间,第一个地址为开始地址,第二个地址为结束地址(前缀长度应该是追随subnet声明的长度,在这个例子中应该是/48);
  • {xxx}内第二个range6声明的是临时地址段,前缀长度为/64(非必须)
  • {xxx}内第三个声明的是用于块分配的地址空间和长度,第一个地址为地址块开始前缀,第二个地址为地址块结束前缀(非必须),(地址块的长度好像必须是/64,未经过测试验证)
  • 注意:如果没有网卡设置待分配地址块中的地址,该地址块配置会被忽略。

服务自启动与启动

CentOS7下,通过yum安装的服务可以通过systemd管理

#打开服务自启动
systemctl enable dhcpd6
#启动服务
systemctl start dhcpd6

一些疑问

  • 与RADVD服务一同配置一个IPv6地址块的时候不知道是否会发生冲突,没有进行过测试。
  • 地址分配配置文件中,用于地址分配的地址长度没有提到前缀长度的问题,不知道分配到的地址长度是/64?/48?是跟随总地址块的大小跟还是自动计算出来的?(感觉是跟随subnet声明的前缀长度,多个地址块分配应该使用多个块声明,但没经过测试验证)
  • 临时分配的地址长度一定是/64 但我的地址块总大小是/64 ,是否还能使用?临时地址块的作用是什么?(都说了 Use the whole /64 prefix ,而且临时的和待分配的空间是同一个不会冲突么?应该不行,但同样没测试过)
  • 地址块分配中,好像最小的前缀长度是/64 ,如果我的地址块总大小是/64,能否分配给客户更小的地址块,如果地址块总范围很大,能否分配客户端/48甚至更大的地址块?(可能不能,好像违反RFC3633,但是同样没有验证过,那么后面/64是否多此一举?)
    如果有测试过的,请告诉我结果,我会在这里进行更新