Help Center> Image Management Service> FAQs> Image Optimization> How Do I Configure an ECS to Dynamically Acquire IPv6 Addresses?
Updated on 2024-03-12 GMT+08:00

How Do I Configure an ECS to Dynamically Acquire IPv6 Addresses?

Scenarios

IPv6 addresses are used to deal with IPv4 address exhaustion. If an ECS uses an IPv4 address, the ECS can run in dual-stack mode after IPv6 is enabled for it. Then, the ECS will have two IP addresses to access the intranet and Internet: an IPv4 address and an IPv6 address.

In some cases, an ECS cannot dynamically acquire an IPv6 address even if it meets all the requirements in Constraints. You need to configure the ECS to dynamically acquire IPv6 addresses. For public images:

  • By default, dynamic IPv6 address assignment is enabled for Windows public images. You do not need to configure it. The operations in Windows Server 2012 and Windows Server 2008 are for your reference only.
  • Before enabling dynamic IPv6 address assignment for a Linux public image, check whether IPv6 has been enabled and then whether dynamic IPv6 address assignment has been enabled. Currently, IPv6 is enabled for all Linux public images.

Constraints

  • Ensure that IPv6 has been enabled on the subnet where the ECS works.

    For details about how to enable IPv6 on a subnet, see Enabling IPv6 on the Subnet Where the ECS Works.

  • Ensure that the ECS flavor supports IPv6.
    The ECS flavors that support IPv6 vary depending on regions and AZs. Check whether an ECS flavor supports IPv6 after you select a region and AZ on the management console.
    Figure 1 Checking whether an ECS flavor supports IPv6

    If the value of IPv6 is Yes for an ECS flavor, the flavor supports IPv6.

    AZ and Flavor determine whether IPv6 is supported.

    After you select an AZ, if IPv6 is not displayed or the value of IPv6 is No, IPv6 is not supported by any or certain flavors in the AZ.

  • Ensure that Self-assigned IPv6 address is selected during ECS creation.
    Figure 2 Self-assigned IPv6 address
  • After the ECS is started, its hot-swappable NICs cannot automatically acquire IPv6 addresses.
  • Only ECSs can work in dual-stack mode and BMSs cannot.
  • Only one IPv6 address can be bound to a NIC.

Procedure

  • Windows: Windows Server 2012/2008 is used as an example to describe how to enable dynamic assignment of IPv6 addresses in Windows.
  • Linux: Dynamic assignment of IPv6 addresses can be enabled automatically (recommended) or manually.

    If a private image created from a CentOS 6.x or Debian ECS with automatic IPv6 address assignment enabled is used to create an ECS in an environment that does not support IPv6, the ECS may start slow because of IPv6 address assignment timeout. You can set the timeout duration for assigning IPv6 addresses by referring to Setting the Timeout Duration for IPv6 Address Assignment.

Table 1 Enabling dynamic assignment of IPv6 addresses for different OSs

OS

Automatically/Manually Enabling

Reference

Windows Server 2012

Automatically

Windows Server 2012

Windows Server 2008

Automatically

Windows Server 2008

Linux

Automatically (recommended)

Linux (Automatically Enabling Dynamic Assignment of IPv6 Addresses)

Linux

Manually

Linux (Manually Enabling Dynamic Assignment of IPv6 Addresses)

Enabling IPv6 on the Subnet Where the ECS Works

  1. Log in to the management console.
  1. Click in the upper left corner and select the desired region and project.
  2. Click . Under Compute, click Elastic Cloud Server.
  3. Click the target ECS to go to the detail page.
  4. In the ECS Information area, click the VPC name.
  5. Click the number in the Subnets column.

    The Subnets page is displayed.

  6. In the subnet list, locate the target subnet and click its name.

    The subnet details page is displayed.

  7. In the Subnet Information area, click Enable for IPv6 CIDR Block.
  8. Click Yes.

Windows Server 2012

  1. Check whether IPv6 is enabled for the ECS.

    Run the following command in the CMD window to check it:

    ipconfig

    • If an IPv6 address and a link-local IPv6 address are displayed, IPv6 is enabled and dynamic IPv6 assignment is also enabled.
      Figure 3 Querying the IPv6 address
    • If only a link-local IPv6 address is displayed, IPv6 is enabled but dynamic IPv6 assignment is not enabled. Go to 2.
      Figure 4 Link-local IPv6 address
    • If neither an IPv6 address nor link-local IPv6 address is displayed, IPv6 is disabled. Go to 3.
      Figure 5 IPv6 disabled

      By default, dynamic IPv6 address assignment is enabled for Windows public images, as shown in Figure 3. No additional configuration is required.

  2. Enable dynamic IPv6 address assignment.

    1. Choose Start > Control Panel.
    2. Click Network and Sharing Center.
    3. Click the Ethernet connection.
      Figure 6 Ethernet connection
    4. In the Ethernet Status dialog box, click Properties in the lower left corner.
    5. Select Internet Protocol Version 6 (TCP/IPv6) and click OK.
      Figure 7 Configuring dynamic IPv6 address assignment
    6. Perform 1 to check whether dynamic IPv6 address assignment is enabled.

  3. Enable and configure IPv6.

    1. In the Internet Protocol Version 6 (TCP/IPv6) Properties dialog box, configure an IPv6 address and a DNS server address.
      • IPv6 address: IPv6 address allocated during ECS creation. Obtain the value from the ECS list on the console.
      • Subnet prefix length: 64
      • Preferred DNS server: 240c::6666 (recommended)
      Figure 8 Configuring an IPv6 address and a DNS server address
    2. (Optional) Run the following command depending on your ECS OS.

      For Windows Server 2012, run the following command in PowerShell or CMD:

      Set-NetIPv6Protocol -RandomizeIdentifiers disabled

    3. Perform 1 to check whether dynamic IPv6 address assignment is enabled.

Windows Server 2008

  1. Check whether IPv6 is enabled for the ECS.

    Run the following command in the CMD window to check it:

    ipconfig

    • If an IPv6 address and a link-local IPv6 address are displayed, IPv6 is enabled and dynamic IPv6 assignment is also enabled.
      Figure 9 Querying the IPv6 address
    • If only a link-local IPv6 address is displayed, IPv6 is enabled but dynamic IPv6 assignment is not enabled. Go to 2.
      Figure 10 Link-local IPv6 address
    • If neither an IPv6 address nor link-local IPv6 address is displayed, IPv6 is disabled. Go to 3.
      Figure 11 IPv6 disabled

      By default, dynamic IPv6 address assignment is enabled for Windows public images, as shown in Figure 9. No additional configuration is required.

  2. Enable dynamic IPv6 address assignment.

    1. Choose Start > Control Panel.
    2. Click Network and Sharing Center.
    3. Click Change adapter settings.
    4. Right-click the local network connection and choose Properties.
    5. Select Internet Protocol Version 6 (TCP/IPv6) and click OK.
      Figure 12 Configuring dynamic IPv6 address assignment
    6. Perform 1 to check whether dynamic IPv6 address assignment is enabled.

  3. Enable and configure IPv6.

    1. Choose Start > Control Panel > Network Connection > Local Connection.
    2. Select Properties, select the following options, and click Install.
      Figure 13 Enabling and configuring IPv6
    3. Select Protocol and click Add.
      Figure 14 Adding the protocol
    4. Select Microsoft TCP/IP Version 6 and click OK.
      Figure 15 Network protocols
    5. (Optional) Run the following commands depending on your ECS OS.

      For Windows Server 2008, run the following command in PowerShell or CMD:

      netsh interface ipv6 set global randomizeidentifiers=disable

      Disable the local connection and then enable it again.

      To disable the local connection, choose Start > Control Panel > Network and Internet > Network and Sharing Center > Change Adapter Options. Right-click the local connection and choose Disable from the shortcut menu.

      To enable the local connection, choose Start > Control Panel > Network and Internet > Network and Sharing Center > Change Adapter Options. Right-click the local connection and choose Enable from the shortcut menu.

    6. Perform 1 to check whether dynamic IPv6 address assignment is enabled.

Linux (Automatically Enabling Dynamic Assignment of IPv6 Addresses)

The ipv6-setup-xxx tool can be used to enable Linux OSs to automatically acquire IPv6 addresses. xxx indicates a tool, which can be rhel or debian.

You can also enable dynamic IPv6 address assignment by following the instructions in Linux (Manually Enabling Dynamic Assignment of IPv6 Addresses).

  • When you run ipv6-setup-xxx, the network service will be automatically restarted. As a result, the network is temporarily disconnected.
  • If a private image created from a CentOS 6.x or Debian ECS with automatic IPv6 address assignment enabled is used to create an ECS in an environment that does not support IPv6, the ECS may start slow because of IPv6 address assignment timeout. Set the timeout duration for assigning IPv6 addresses to 30s by referring to Setting the Timeout Duration for IPv6 Address Assignment and try to create a new private image again.
  1. Run the following command to check whether IPv6 is enabled for the ECS:

    ip addr

    • If only an IPv4 address is displayed, IPv6 is disabled. Enable it by referring to Setting the Timeout Duration for IPv6 Address Assignment.
      Figure 16 IPv6 disabled
    • If a link-local address (starting with fe80) is displayed, IPv6 is enabled but dynamic assignment of IPv6 addresses is not enabled.
      Figure 17 IPv6 enabled
    • If the following address is displayed, IPv6 is enabled and an IPv6 address has been assigned:
      Figure 18 IPv6 enabled and an IPv6 address assigned

    IPv6 is enabled for Linux public images by default, as shown in Figure 17.

  2. Enable IPv6 for the ECS.

    1. Run the following command to check whether IPv6 is enabled for the kernel:

      sysctl -a | grep ipv6

      • If a command output is displayed, IPv6 is enabled.
      • If no information is displayed, IPv6 is disabled. Go to 2.b to load the IPv6 module.
    2. Run the following command to load the IPv6 module:

      modprobe ipv6

    3. Add the following content to the /etc/sysctl.conf file:

      net.ipv6.conf.all.disable_ipv6=0

    4. Save the configuration and exit. Then, run the following command to load the configuration:

      sysctl -p

  3. Enable dynamic IPv6 address assignment for the ECS.

    1. Download ipv6-setup-rhel or ipv6-setup-debian with a required version and upload it to the target ECS.

      ipv6-setup-xxx modifies the configuration file of a NIC to enable dynamic IPv6 address assignment or adds such a configuration file for a NIC, and then restarts the NIC or network service. Table 2 lists the download paths of ipv6-setup-rhel and ipv6-setup-debian.

      Table 2 Download paths of ipv6-setup-rhel and ipv6-setup-debian

      Series

      Release Version

      How to Obtain

      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/10

      https://ecs-instance-driver.obs.cn-north-1.myhuaweicloud.com/ipv6/ipv6-setup-debian

    2. Run the following command to make ipv6-setup-xxx executable:

      chmod +x ipv6-setup-xxx

    3. Run the following command to enable dynamic IPv6 address assignment for a NIC:

      ./ipv6-setup-xxx --dev [dev]

      Example:

      ./ipv6-setup-xxx --dev eth0

      • To enable dynamic IPv6 address assignment for all NICs, run the ./ipv6-setup-xxx command.
      • To learn how to use ipv6-setup-xxx, run the ./ipv6-setup-xxx --help command.

Linux (Manually Enabling Dynamic Assignment of IPv6 Addresses)

If a private image created from a CentOS 6.x or Debian ECS with automatic IPv6 address assignment enabled is used to create an ECS in an environment that does not support IPv6, the ECS may start slow because of IPv6 address assignment timeout. Set the timeout duration for assigning IPv6 addresses to 30s by referring to Setting the Timeout Duration for IPv6 Address Assignment and try to create a new private image again.

  1. Run the following command to check whether IPv6 is enabled for the ECS:

    ip addr

    • If only an IPv4 address is displayed, IPv6 is disabled. Enable it by referring to 2.
      Figure 19 IPv6 disabled
    • If a link-local address (starting with fe80) is displayed, IPv6 is enabled but dynamic assignment of IPv6 addresses is not enabled.
      Figure 20 IPv6 enabled
    • If the following address is displayed, IPv6 is enabled and an IPv6 address has been assigned:
      Figure 21 IPv6 enabled and an IPv6 address assigned

    IPv6 is enabled for Linux public images by default, as shown in Figure 20.

  2. Enable IPv6 for the ECS.

    1. Run the following command to check whether IPv6 is enabled for the kernel:

      sysctl -a | grep ipv6

      • If a command output is displayed, IPv6 is enabled.
      • If no information is displayed, IPv6 is disabled. Go to 2.b to load the IPv6 module.
    2. Run the following command to load the IPv6 module:

      modprobe ipv6

    3. Add the following content to the /etc/sysctl.conf file:

      net.ipv6.conf.all.disable_ipv6=0

    4. Save the configuration and exit. Then, run the following command to load the configuration:

      sysctl -p

  3. Enable dynamic IPv6 address assignment for the ECS.

    • Ubuntu 18.04/20.04
      1. Run the following command to access /etc/netplan/:

        cd /etc/netplan

      2. Run the following command to list the configuration file:

        ls

        Figure 22 Configuration file name
      3. Run the following command to edit the configuration file:

        vi 01-network-manager-all.yaml

      4. Append the following content to the configuration file (pay attention to the yaml syntax and text indentation):
        ethernets:
         eth0:
          dhcp6: true
        Figure 23 Edited configuration file

        Save the changes and exit.

      5. Run the following command to make the changes take effect:

        sudo netplan apply

    • Ubuntu 22.04
      1. Run the following command to access /etc/netplan/:

        cd /etc/netplan

      2. Run the following command to list the configuration file:

        ls

        Figure 24 Configuration file name
      3. Run the following command to edit the configuration file:

        vi 01-netcfg.yaml

      4. Append the following content to the configuration file 01-netcfg.yaml (pay attention to the yaml syntax and text indentation):
        ethernets:
         eth0:
          dhcp6: true
        Figure 25 Edited configuration file

        Save the changes and exit.

      5. Run the following command to make the changes take effect:

        sudo netplan apply

      6. Run the following command to edit /etc/NetworkManager/NetworkManager.conf:

        vi /etc/NetworkManager/NetworkManager.conf

      7. Append the following content to the configuration file NetworkManager.conf (pay attention to the file format and indentation):
        [main]
        plugins=ifupdown,keyfile
        dhcp=dhclient
        
        [ifupdown]
        managed=true
        
        [device]
        wifi.scan-rand-mac-address=no
        Figure 26 Modification result
      8. Run the following command for the configuration to take effect:

        systemctl restart NetworkManager

    • Debian
      1. Add the following content to the /etc/network/interfaces file:
        auto lo 
        iface lo inet loopback 
        auto eth0
        iface eth0 inet dhcp
        iface eth0 inet6 dhcp 
             pre-up sleep 3
      2. Add configurations for each NIC to the /etc/network/interfaces file. The following uses eth1 as an example:
        auto eth1
        iface eth1 inet dhcp
        iface eth1 inet6 dhcp 
             pre-up sleep 3
      3. Run the following command to restart the network service:

        service networking restart

        If no IPv6 address is assigned after the NICs are brought down and up, you can run this command to restart the network.

      4. Perform 1 to check whether dynamic IPv6 address assignment is enabled.
    • CentOS, EulerOS, or Fedora
      1. Open the configuration file /etc/sysconfig/network-scripts/ifcfg-eth0 of the primary NIC.
        Add the following configuration items to the file:
        IPV6INIT=yes
        DHCPV6C=yes
      2. Edit the /etc/sysconfig/network file to add or modify the following line:
        NETWORKING_IPV6=yes
      3. For an ECS running CentOS 6, you need to edit the configuration files of its extension NICs. For example, if the extension NIC is eth1, you need to edit /etc/sysconfig/network-scripts/ifcfg-eth1.
        Add the following configuration items to the file:
        IPV6INIT=yes
        DHCPV6C=yes

        In CentOS 6.3, dhcpv6-client requests are filtered by ip6tables by default. So, you also need to add a rule allowing the dhcpv6-client request to the ip6tables file.

        1. Run the following command to add the rule to ip6tables:

          ip6tables -A INPUT -m state --state NEW -m udp -p udp --dport 546 -d fe80::/64 -j ACCEPT

        2. Run the following command to save the rule in ip6tables:

          service ip6tables save

          Figure 27 Example command
      4. (Optional) For CentOS 7/CentOS 8, change the IPv6 link-local address mode of extension NICs to EUI64.
        1. Run the following command to query the NIC information:

          nmcli con

          Figure 28 Querying NIC information
        2. Run the following command to change the IPv6 link-local address mode of eth1 to EUI64:

          nmcli con modify "Wired connection 1" ipv6.addr-gen-mode eui64

          The NIC information varies depending on the CentOS series. In the command, Wired connection 1 needs to be replaced with the value in the NAME column of the queried NIC information.

        3. Run the following commands to bring eth1 down and up:

          ifdown eth1

          ifup eth1

      5. Restart the network service.
        1. For CentOS 6, run the following command to restart the network service:

          service network restart

        2. For CentOS 7/EulerOS/Fedora, run the following command to restart the network service:

          systemctl restart NetworkManager

      6. Perform 1 to check whether dynamic IPv6 address assignment is enabled.
    • SUSE, openSUSE, or CoreOS

      SUSE 11 SP4 does not support dynamic IPv6 address assignment.

      No additional configuration is required for SUSE 12 SP1 or SUSE 12 SP2.

      No additional configuration is required for openSUSE 13.2 or openSUSE 42.2.

      No additional configuration is required for CoreOS 10.10.5.

Setting the Timeout Duration for IPv6 Address Assignment

After automatic IPv6 address assignment is configured on an ECS running CentOS 6.x or Debian, the ECS will be created as a private image. When this image is used to create an ECS in an environment that IPv6 is unavailable, the ECS may start slow because acquiring an IPv6 address times out. Before creating the private image, you can set the timeout duration for acquiring IPv6 addresses to 30s as follows:

  • CentOS 6.x:
    1. Run the following command to edit the dhclient.conf file:

      vi /etc/dhcp/dhclient.conf

    2. Press i to enter editing mode and add the timeout attribute to the file.
      timeout  30;
    3. Enter :wq to save the settings and exit.
  • Debian 7.5:
    1. Run the following command to edit the networking file:

      vi /etc/init.d/networking

    1. Press i to enter editing mode and add the timeout attribute.
      Figure 29 Modification 1
      Figure 30 Modification 2
  • Debian 8.2.0/8.8.0
    1. Run the following command to edit the network-pre.conf file:

      vi /lib/systemd/system/networking.service.d/network-pre.conf

    2. Press i to enter editing mode and add the timeout attribute to the file.
      [Service]
      TimeoutStartSec=30
  • Debian 9.0
    1. Run the following command to edit the networking.service file:

      vi /etc/system/system/network-online.target.wants/networking.service

    2. Press i to enter editing mode and change TimeoutStartSec=5min to TimeoutStartSec=30.

Image Optimization FAQs

more