
# 动态获取IPv6地址
#### 操作场景
IPv6的使用，可以有效弥补IPv4网络地址资源有限的问题。如果当前边缘实例使用IPv4，那么启用IPv6后，边缘实例可在双栈模式下运行，即边缘实例可以拥有两个不同版本的IP地址：IPv4地址和IPv6地址，这两个IP地址都可以进行内网/公网访问。
按照[约束与限制]中的网络环境要求创建的边缘实例，有些不能动态获取到IPv6地址，需要进行相关配置才行。如果边缘实例使用的是公共镜像，则支持情况如下：
- Linux公共镜像开启动态获取IPv6功能时，需要先判断是否支持IPv6协议栈，再判断是否已开启动态获取IPv6。目前，所有Linux公共镜像均已支持IPv6协议栈，并且Ubuntu 16操作系统已默认开启动态获取IPv6。即Ubuntu 16操作系统无需配置，其他Linux公共镜像需要执行开启动态获取IPv6的操作。 另外，本文提供了自动和手动配置的方法，分别为：[Linux操作系统（自动配置启用IPv6）]、[Linux操作系统（手动配置启用IPv6）]，推荐您使用自动配置方法。
  
 
 #### 约束与限制
- 请确保边缘实例所在的子网已开启IPv6功能。 子网开启IPv6功能请参考[为子网开启IPv6](https://support.huaweicloud.com/usermanual-iec/iec_02_0604.html#iec_02_0604__section151401929114713)。
  
- 边缘实例启动之后动态插拔的网卡不支持IPv6地址动态获取功能。
- 同一个网卡上，只能绑定一个IPv6地址。
- 对于支持IPv6但是未开启IPv6的边缘实例，支持动态获取IPv6地址，若获取失败，重启即可。若重启仍无法获取，请参考[Linux操作系统（手动配置启用IPv6）]进行操作。
 
 #### Linux操作系统（自动配置启用IPv6）
ipv6-setup-xxx工具能为开启IPv6协议栈的Linux操作系统自动配置动态获取IPv6地址。其中，xxx表示工具系列：rhel或debian。
您也可以参考[Linux操作系统（手动配置启用IPv6）]手动配置启用IPv6。
![](https://support.huaweicloud.com/usermanual-iec/public_sys-resources/caution_3.0-zh-cn.png)
- ipv6-setup-xxx工具运行时会自动重启网络服务，导致网络短暂不可用。
- CentOS 6.x和Debian操作系统的边缘实例内部配置IPv6自动获取功能之后，将该边缘实例制作为私有镜像，使用该镜像在非IPv6网络环境中创建边缘实例时，由于等待获取IPv6地址超时，导致边缘实例启动较慢，您可以参考[设置边缘实例获取IPv6地址超时时间]设置获取IPv6地址超时时间为30s，然后再重新制作私有镜像。
 
1. 执行如下命令，查看当前边缘实例是否启用IPv6。 
   **ip addr**
   - 如果没有开启IPv6协议栈，则只能看到IPv4地址，如下图所示，请参考[2]先开启IPv6协议栈。
     图1边缘实例未开启IPv6协议栈   
     ![](https://support.huaweicloud.com/usermanual-iec/zh-cn_image_0000001073312475.jpg "点击放大") 
   
   - 如果已开启IPv6协议栈，则可以看到LLA地址（fe80开头）。
     图2边缘实例已开启IPv6协议栈   
     ![](https://support.huaweicloud.com/usermanual-iec/zh-cn_image_0000001074230806.jpg "点击放大") 
   
   - 如果已开启IPv6协议栈并且已获取到IPv6地址，则会看到如下地址：
     图3边缘实例已开启IPv6协议栈并且已获取到IPv6地址   
     ![](https://support.huaweicloud.com/usermanual-iec/zh-cn_image_0000001074550378.jpg "点击放大") 
   
   
   ![](https://support.huaweicloud.com/usermanual-iec/public_sys-resources/note_3.0-zh-cn.png)
   Linux公共镜像均已开启IPv6协议栈（即[情况二]）；Ubuntu 16公共镜像不仅已开启IPv6协议栈，而且可以获取到IPv6地址（即[情况三]），无需特殊配置。
   
   
2. 开启Linux边缘实例IPv6协议栈。
   
   1. 执行如下命令，确认内核是否支持IPv6协议栈。 **sysctl -a \| grep ipv6**
      - 如果有输出信息，表示内核支持IPv6协议栈。
      
      - 如果没有任何输出，说明内核不支持IPv6协议栈，需要执行[2.b]加载IPv6模块。
       
   
   2. 执行以下命令，加载IPv6模块。
      **modprobe ipv6**
      
   
   3. 修改"/etc/sysctl.conf"配置文件，增加如下配置： **net.ipv6.conf.all.disable_ipv6=0**
      
   
   4. 保存配置并退出，然后执行如下命令，加载配置。 **sysctl -p**
      
   
   
   
   
3. 自动配置启用IPv6。 
   1. 下载对应系统版本的工具ipv6-setup-rhel或ipv6-setup-debian，并上传至待操作的边缘实例。 ipv6-setup-xxx工具会添加或者修改网卡设备的配置文件，添加IPv6动态获取的配置信息，然后重启网卡或者网络服务。ipv6-setup-rhel和ipv6-setup-debian的工具下载地址如[表1]所示。
       表1工具下载地址 
      | 系列     | 发行版                                                                                                                                                                                                                                                                                                                                                                                                                                     | 下载地址                                                                                  |
      |:---|:---|:---|
      | RHEL   | - CentOS 6/7  - EulerOS 2.2/2.3  - Fedora 25   | <https://ecs-instance-driver.obs.cn-north-1.myhuaweicloud.com/ipv6/ipv6-setup-rhel>   |
      | Debian | - Ubuntu 16/18  - Debian 8/9                                                                                                                           | <https://ecs-instance-driver.obs.cn-north-1.myhuaweicloud.com/ipv6/ipv6-setup-debian> |
         
      
   
   2. 执行以下命令，添加执行权限。 **chmod** **+x** **ipv6-setup-xxx**
      
   
   3. 执行以下命令，指定一个网卡设备，配置动态获取IPv6地址。 **./ipv6-setup-xxx --dev \[dev\]**
      示例：
      **./ipv6-setup-xxx --dev eth0**
      ![](https://support.huaweicloud.com/usermanual-iec/public_sys-resources/note_3.0-zh-cn.png)
      - 如需对所有网卡配置动态获取IPv6地址，命令为**./** **ipv6-setup-** *xxx*，即不带参数。
      
      - 如需查询工具的用法，请执行命令**./** **ipv6-setup-** *xxx* **--help**。
        
   
   
   
   
 #### Linux操作系统（手动配置启用IPv6）
![](https://support.huaweicloud.com/usermanual-iec/public_sys-resources/caution_3.0-zh-cn.png)
CentOS 6.x和Debian操作系统的边缘实例内部配置IPv6自动获取功能之后，将该边缘实例制作为私有镜像，使用该镜像在非IPv6网络环境中创建边缘实例时，由于等待获取IPv6地址超时，导致边缘实例启动较慢，您可以参考[设置边缘实例获取IPv6地址超时时间]设置获取IPv6地址超时时间为30s，然后再重新制作私有镜像。
1. 执行如下命令，查看当前边缘实例是否启用IPv6。
   
   **ip addr**
   - 如果没有开启IPv6协议栈，则只能看到IPv4地址，如下图所示，请参考[2]先开启IPv6协议栈。
     图4未开启IPv6协议栈   
     ![](https://support.huaweicloud.com/usermanual-iec/zh-cn_image_0000001073582183.jpg "点击放大") 
   
   - 如果已开启IPv6协议栈，则可以看到LLA地址（fe80开头）。
     图5已开启IPv6协议栈   
     ![](https://support.huaweicloud.com/usermanual-iec/zh-cn_image_0000001073110431.jpg "点击放大") 
   
   - 如果已开启IPv6协议栈并且已获取到IPv6地址，则会看到如下地址：
     图6已开启IPv6协议栈并且已获取到IPv6地址   
     ![](https://support.huaweicloud.com/usermanual-iec/zh-cn_image_0000001073004487.jpg "点击放大") 
   
   
   ![](https://support.huaweicloud.com/usermanual-iec/public_sys-resources/note_3.0-zh-cn.png)
   Linux公共镜像均已开启IPv6协议栈（即[情况二]）；Ubuntu 16公共镜像不仅已开启IPv6协议栈，而且可以获取到IPv6地址（即[情况三]），无需特殊配置。
   
   
2. 开启Linux边缘实例IPv6协议栈。
   
   1. 执行如下命令，确认内核是否支持IPv6协议栈。 **sysctl -a \| grep ipv6**
      - 如果有输出信息，表示内核支持IPv6协议栈。
      
      - 如果没有任何输出，说明内核不支持IPv6协议栈，需要执行[2.b]加载IPv6模块。
       
   
   2. 执行以下命令，加载IPv6模块。
      **modprobe ipv6**
      
   
   3. 修改"/etc/sysctl.conf"配置文件，增加如下配置： **net.ipv6.conf.all.disable_ipv6=0**
      
   
   4. 保存配置并退出，然后执行如下命令，加载配置。 **sysctl -p**
      
   
   
   
   
3. 手动配置启用IPv6。操作系统不同，步骤有所差别。 
   - Ubuntu操作系统边缘实例配置动态获取IPv6。
     ![](https://support.huaweicloud.com/usermanual-iec/public_sys-resources/note_3.0-zh-cn.png)
     Ubuntu 18.04请执行以下操作步骤；Ubuntu 16.04操作系统已默认启用IPv6，不需要做任何配置操作。
     1. 修改"/etc/network/interface"配置文件，在"iface eth0 inet dhcp"下增加一行配置：
        ```
        iface eth0 inet6 dhcp
        ```
        
     
     2. （可选配置）配置网卡IPv6 LLA地址的生成方式为EUI64。
        ```
        nmcli con modify "Wired connection 1" ipv6.addr-gen-mode eui64
        ```
        
     
     3. 执行以下命令，重启网络服务。 **ifdown eth0**
        **ifup eth0**
        
      
   
   - Debian操作系统边缘实例配置动态获取IPv6。
     1. 编辑"/etc/network/interfaces"文件，使之包含以下内容：
        ```
        auto lo 
        iface lo inet loopback 
        auto eth0
        iface eth0 inet dhcp
        iface eth0 inet6 dhcp 
             pre-up sleep 3
        ```
        
     
     2. 如果有多个网卡，则在"/etc/network/interfaces"文件中，增加对应网卡的配置，以eth1为例，需要增加：
        ```
        auto eth1
        iface eth1 inet dhcp
        iface eth1 inet6 dhcp 
             pre-up sleep 3
        ```
        
     
     3. 执行如下命令重启网络服务。 **service networking restart**
        ![](https://support.huaweicloud.com/usermanual-iec/public_sys-resources/note_3.0-zh-cn.png)
        如果将网卡进行down/up操作之后无法获取IPv6地址，也可以通过此命令重启网络服务。
        
     
     4. 执行步骤[1]检查是否已开启动态IPv6。
      
   
   - CentOS/EulerOS/Fedora操作系统边缘实例配置动态获取IPv6。
     1. 编辑主网卡配置文件"/etc/sysconfig/network-scripts/ifcfg-eth0"。
        补充如下配置项：
        ```
        IPV6INIT=yes
        DHCPV6C=yes
        ```
        
     
     2. 编辑"/etc/sysconfig/network"，按如下所示添加或修改以下行。
        ```
        NETWORKING_IPV6=yes
        ```
        
     
     3. CentOS 6系列从网卡需要编辑对应的配置文件，以eth1为例，编辑"/etc/sysconfig/network-scripts/ifcfg-eth1"。
        补充如下配置项：
        ```
        IPV6INIT=yes
        DHCPV6C=yes
        ```
        CentOS 6.3系统中默认ip6tables会过滤dhcpv6-client请求，所以CentOS 6.3除了需要编辑"ifcfg-eth\*"文件外，还需要额外添加一条允许dhcpv6-client 请求的ip6tables规则。操作如下：
        1. 执行以下命令，添加ip6tables规则。 **ip6tables -A INPUT -m state --state NEW -m udp -p udp --dport 546 -d fe80::/64 -j ACCEPT**
           
        
        2. 执行以下命令，保存ip6tables规则。 **service ip6tables save**
           图7命令示例   
           ![](https://support.huaweicloud.com/usermanual-iec/zh-cn_image_0000001073192595.png "点击放大") 
         
     
     4. （可选配置）CentOS 7系列需要将扩展网卡的IPv6 LLA地址模式修改为EUI64。
        1. 执行如下命令查看网卡信息。 **nmcli con**
           图8查看网卡信息   
           ![](https://support.huaweicloud.com/usermanual-iec/zh-cn_image_0000001073912588.jpg "点击放大") 
        
        2. 将eth1的IPv6 LLA地址模式按以下命令修改为EUI64： **nmcli con modify "Wired connection 1" ipv6.addr-gen-mode eui64**
           
        
        3. 通过ifconfig命令将eth1进行down/up操作。 **ifdown eth1**
           **ifup eth1**
           
         
     
     5. 重启网络服务。
        1. CentOS 6系列执行以下命令，重启网络服务。 **service network restart**
           
        
        2. CentOS 7/EulerOS/Fedora系列执行以下命令，重启网络服务。 **systemctl restart NetworkManager**
           
         
     
     6. 执行步骤[1]检查是否已开启动态IPv6。
      
   
   - SUSE/openSUSE/CoreOS操作系统边缘实例配置动态获取IPv6。 SUSE 11 SP4不支持IPv6自动获取。
     SUSE 12 SP1、SUSE 12 SP2无需特殊配置。
     openSUSE 13.2、openSUSE 42.2无需特殊配置。
     CoreOS 10.10.5无需特殊配置。
     
   
   
   
   
 
 #### 设置边缘实例获取IPv6地址超时时间
CentOS 6.x和Debian操作系统的边缘实例内部配置IPv6自动获取功能之后，将该边缘实例制作为私有镜像，使用该镜像在非IPv6网络环境中创建边缘实例时，由于等待获取IPv6地址超时，导致边缘实例启动较慢，您可以参考本节操作设置获取IPv6地址超时时间为30s，然后再重新制作私有镜像。
- CentOS 6.x：
  1. 执行以下命令编辑"dhclient.conf"文件。 **vi /etc/dhcp/dhclient.conf**
     
  
  2. 按"i"进入编辑模式，在文件中增加timeout属性。
     ```
     timeout  30;
     ```
     
  
  3. 输入**:wq**保存后退出。
   
- Debian 7.5：
  1. 执行以下命令编辑"networking"文件。 **vi /etc/init.d/networking**
     
  
  
  
  2. 按"i"进入编辑模式，增加延迟命令timeout，修改点如下图所示。
     图9修改点1   
     ![](https://support.huaweicloud.com/usermanual-iec/zh-cn_image_0000001073782342.png "点击放大")
     图10修改点2   
     ![](https://support.huaweicloud.com/usermanual-iec/zh-cn_image_0000001074072490.png "点击放大") 
   
- Debian 8.2.0/8.8.0
  1. 执行以下命令编辑"network-pre.conf"文件。 **vi **/lib/systemd/system/networking.service.d/network-pre.conf****
     
  
  2. 按"i"进入编辑模式，在文件中增加timeout属性。
     ```
     [Service]
     TimeoutStartSec=30
     ```
     
   
- Debian 9.0
  1. 执行以下命令编辑"networking.service"文件。 **vi /etc/system/system/network-online.target.wants/networking.service**
     
  
  2. 按"i"进入编辑模式，将TimeoutStartSec=5min改为TimeoutStartSec=30。
   
 
