有状态自动配置IPv6地址

概述

IPv6与IPv4都可以通过DHCP的方式获得IP地址。IPv6地址有两种配置方式:无状态自动配置和有状态自动配置。

  • 无状态自动配置

    不需要DHCP服务进行管理,设备根据网络RA(路由公告)获得网络前缀,或者link-local地址为固定fe80::。而接口ID则根据ifcfg配置IPV6_ADDR_GEN_MODE的具体设置来进行自动获得:

    1. IPv6_ADDR_GEN_MODE=”stable-privacy” 则根据设备及网络环境来确定一个随机接口ID。
    2. IPv6_ADDR_GEN_MODE=”EUI64” 则根据设备MAC地址来确定接口ID。
  • 有状态自动配置:需要DHCP服务器进行管理分配,服从DHCPv6协议来从DHCPv6服务器端租赁IPv6地址。

    在有状态自动配置IPv6地址时,DHCPv6服务端可以通过客户端设置的vendor class将客户端进行分类,不同类别分配不同地址段的IPv6地址。在IPv4场景中,客户端可以直接用dhclient的-V选项来设置vendor-class-identifier,DHCP服务端在配置文件中根据vendor-class-identifier来对客户端进行分类处理。而IPv6场景中,如果使用同样的方法对客户端分类,则分类并不会生效。

    1. dhclient -6 <interface> -V <vendor-class-identifier string> <interface>

    这是由于DHCPv6和DHCP协议存在较大差异,DHCPv6的可选项中使用vendor-class-option替代了DHCP中的vendor-class-identifier。而dhclient的-V选项并不能设置vendor-class-option。

有状态自动配置IPv6地址时dhclient设置vendor class方法

  • 在客户端使用配置文件方式添加对vendor class的设置,使用方法如下:

    客户端配置文件(/etc/dhcp/dhclient6.conf),文件位置可以自定义,在使用时需要通过dhclient -cf选项来指定配置文件:

    1. option dhcp6.vendor-class code 16 = {integer 32, integer 16, string};
    2. interface "enp3s0" {
    3. send dhcp6.vendor-class <Enterprise-ID number> <vendor class string length> <vendor class string>;
    4. }

    有状态自动配置IPv6地址 - 图1 说明:

    • ,32位整型数字,企业标识号,企业通过IANA注册。
    • ,16位整型数字,vendor class字符串长度。
    • ,要设置的vendor class字符串,例如:“HWHW”。

    客户端使用方法:

    1. dhclient -6 <interface> -cf /etc/dhcp/dhclient6.conf
  • DHCPv6服务端配置文件(/etc/dhcp/dhcpd6.conf),需要dhcpd -cf选项来指定该配置文件:

    1. option dhcp6.vendor-class code 16 = {integer 32, integer 16, string};
    2. subnet6 fc00:4:12:ffff::/64 {
    3. class "hw" {
    4. match if substring ( option dhcp6.vendor-class, 6, 10 ) = "HWHW";
    5. }
    6. pool6 {
    7. allow members of "hw";
    8. range6 fc00:4:12:ffff::ff10 fc00:4:12:ffff::ff20;
    9. }
    10. pool6 {
    11. allow unknown clients;
    12. range6 fc00:4:12:ffff::100 fc00:4:12:ffff::120;
    13. }
    14. }

    有状态自动配置IPv6地址 - 图2 说明:
    substring ( option dhcp6.vendor-class, 6, 10 ) 其中子字符串的开始位置为6,因为前面包含4个字节的和2个字节的。而子字符串的结束位置位:6+。这里vendor class string为“HWHW”,字符串的长度为4,所以子字符串的结束位置为6+4=10。用户可以根据实际需要来确定及相应的

    服务端使用方法:

    1. dhcpd -6 -cf /etc/dhcp/dhcpd6.conf <interface>