本文介绍了如何为Linux实例自动配置IPv6地址和手动配置IPv6地址,推荐您使用更高效的自动配置工具配置IPv6地址。

自动配置IPv6地址

ecs-util-ipv6工具可以为已分配IPv6地址的ECS实例一键配置IPv6地址,或者为没有分配IPv6地址的ECS实例一键清理IPv6配置。

  1. 下载ecs-util-ipv6工具到目标系统。
    以CentOS操作系统为例,运行以下命令下载工具。
    wget https://ecs-image-utils.oss-cn-hangzhou.aliyuncs.com/ipv6/rhel/ecs-utils-ipv6
    各操作系统的ecs-util-ipv6工具下载地址如下表所示:
    系列 发行版 下载地址
    RHEL
    • CentOS 5/6/7/8
    • Red Hat 5/6/7
    • Anolis OS
    • Fedora
    • Alibaba Cloud Linux 2/3
    下载地址
    Debian
    • Ubuntu 14/16/18/20
    • Debian/8/9/10/11
    下载地址
    SLES
    • SUSE 11/12/15
    • OpenSUSE 15/42
    下载地址
    FreeBSD FreeBSD 11 下载地址
    说明 ecs-util-ipv6工具的使用限制如下:
    • ecs-util-ipv6工具仅适用于VPC类型实例,依赖实例元数据服务,使用前请勿将网络禁用或者将相关出口IP端口(100.100.100.200:80)禁用。详情请参见实例元数据
    • ecs-util-ipv6工具运行时会自动重启网卡、网络服务,短时间内网络可能会不可用,请慎重执行。
  2. 运行以下命令使用管理员权限运行ecs-util-ipv6工具。
    chmod +x ./ecs-utils-ipv6
    ./ecs-utils-ipv6
  3. 可选:如果镜像版本是Ubuntu 14版本的公共镜像,需重启ECS实例才能生效。
    具体操作,请参见重启实例

如果当前ECS实例已绑定IPv6地址,则会自动配置;否则会自动清理原有IPv6地址配置。

  • 您可以运行以下相关命令,去开启、禁用ECS实例的IPv6地址,自动配置(默认)、手动配置网卡的IPv6地址。
    ./ecs-utils-ipv6                 #默认可不带参数,自动配置多网卡多IPv6
    ./ecs-utils-ipv6 --enable    #开启IPv6
    ./ecs-utils-ipv6 --disable    #禁用IPv6
    ./ecs-utils-ipv6 --static <网卡名称>      #自动配置网卡IPv6
    ./ecs-utils-ipv6 --static <网卡名称> <IPv6地址> <子网前缀长度> <IPv6网关>     #手动配置网卡IPv6,支持多IPv6,请用""包含,多个IPv6用空格隔开

    其中,<网卡名称> <IPv6地址> <子网前缀长度> <IPv6网关> 均是变量,请根据实际情况替换。

  • 对于需要自动化配置IPv6实例的需求,例如大批量配置,建议您使用云助手或者实例自定义数据配合脚本的方式来调用。更多信息,请参见云助手实例自定义数据。以下为脚本示例(假设是RHEL系列、Bash Shell脚本)。
    #!/bin/sh
    install_dir=/usr/sbin
    install_path="$install_dir"/ecs-utils-ipv6
    if [ ! -f "$install_path" ]; then
        tool_url="http://ecs-image-utils.oss-cn-hangzhou.aliyuncs.com/ipv6/rhel/ecs-utils-ipv6"
        # download the tool
        if ! wget "$tool_url" -O "$install_path"; then
            echo "[Error] download tool failed, code $?"
            exit "$?"
        fi
    fi
    # chmod the tool
    if ! chmod +x "$install_path"; then
        echo "[Error] chmod tool failed, code $?"
        exit "$?"
    fi
    # run the tool
    "$install_path"

手动配置IPv6地址(Alibaba Cloud Linux 2/3操作系统)

Alibaba Cloud Linux操作系统请完成以下操作,手动配置IPv6地址:

  1. 远程连接实例。具体操作,请参见通过密码认证登录Linux实例
  2. 检查实例是否已开启IPv6服务。
    说明 Alibaba Cloud Linux 2镜像在aliyun_2_1903_64_20G_alibase_20190829.vhd及之前的版本未开启IPv6,从aliyun_2_1903_x64_20G_alibase_20200221.vhd版本开始默认开启IPv6服务。
    运行ip addr | grep inet6或者ifconfig | grep inet6命令:
    • 如果返回inet6相关内容,表示实例已成功开启IPv6服务。您可以跳过下文开启IPv6服务的步骤,直接配置IPv6地址。
    • 如果未返回inet6相关内容,表示实例未开启IPv6服务,请根据下文开启IPv6服务。
  3. 开启IPv6服务。
    开启IPv6支持配置为暂时或持久。暂时配置将在实例停止或重启时失效,持久配置将不受实例的状态影响。您可以根据实际情况选择配置方式。
    • 暂时开启IPv6。
      1. 运行以下命令进入/etc/systemd/network/目录。
        cd /etc/systemd/network/
      2. 使用命令ls查询该目录下的.network文件。

        例如,50-dhcp.network文件。

      3. 修改文件50-dhcp.network内容。
        vi /etc/systemd/network/50-dhcp.network
      4. i键进入编辑模式。
        [Network]下的信息修改为DHCP=yes
        说明 文件内参数Name=eth*表示适配所有网络接口,所有网络接口都将通过DHCP配置IP地址与路由。如果只需要配置指定的网络接口,可以修改参数Name为指定的网络接口,例如,Name=eth0表示只适配eth0网络接口。更多关于network的信息请参见systemd.network
        [Match]
        Name=eth*
        
        [Network]
        DHCP=yes

        修改完成后按Esc键,并输入:wq后按下回车键,保存并退出。

      5. 运行以下命令开启IPv6。
        • 开启所有网络接口。
          sudo sysctl -w net.ipv6.conf.all.disable_ipv6=0
          sudo sysctl -w net.ipv6.conf.default.disable_ipv6=0
        • 开启指定网络接口示例。
          sudo sysctl -w net.ipv6.conf.eth0.disable_ipv6=0
        • 重启systemd-networkd服务使配置生效。
          sudo systemctl restart systemd-networkd
    • 持久开启IPv6。
      1. 修改/etc/sysctl.conf配置文件。
        vi /etc/sysctl.conf
      2. i进入编辑模式。使用以下任一方式修改文件内容。
        • 删除下列配置信息。
          net.ipv6.conf.all.disable_ipv6 = 1
          net.ipv6.conf.default.disable_ipv6 = 1
          net.ipv6.conf.lo.disable_ipv6 = 1
        • 修改对应的配置信息为如下内容。
          net.ipv6.conf.all.disable_ipv6 = 0
          net.ipv6.conf.default.disable_ipv6 = 0
          net.ipv6.conf.lo.disable_ipv6 = 0
          如果需要开启指定网络接口,修改信息示例如下。
          net.ipv6.conf.eth0.disable_ipv6 = 0

          修改完成后按Esc键,并输入:wq后按下回车键,保存并退出。

      3. 验证/etc/sysctl.conf配置信息是否与initramfs中的/etc/sysctl.conf存在差异。
        diff -u /etc/sysctl.conf <(lsinitrd -f /etc/sysctl.conf)
        说明 Alibaba Cloud Linux 2配置了initramfs(initram file system)。如果initramfs中的/etc/sysctl.conf文件与IPv6的配置文件/etc/sysctl.conf存在差异,系统可能会生效新的配置,与您需求的配置混淆。
      4. 如果两个配置文件存在差异,您可以执行以下命令重新生成initramfs。
        sudo dracut -v -f
      5. 重启实例。
        reboot
      6. 执行ifconfig命令判断是否已开启IPv6。
        如果网络配置信息包含以下信息,表示IPv6已开启。
        inet6 <以fe80::开头的单播地址>
        inet6 <ECS实例的IPv6地址>
  4. 手动配置IPv6地址。
    1. 运行vi /etc/sysconfig/network-scripts/ifcfg-eth0打开网卡配置文件,eth0为网卡标识符,您需要修改成实际的标识符。在文件中根据实际信息添加以下配置:
      DHCPV6C=yes
      IPV6INIT=yes

      修改完成后,保存并退出。

    2. 重启实例。
      reboot

手动配置IPv6地址(其他操作系统)

CentOS、Debian、Ubuntu、Fedora等操作系统请完成以下操作,手动配置IPv6地址:

  1. 远程连接实例。具体操作,请参见通过密码认证登录Linux实例
  2. 检查实例是否已开启IPv6服务。
    说明 CentOS 8、Debian 10及以上版本、Ubuntu 18及以上版本等操作系统已默认开启IPv6服务。
    运行ip addr | grep inet6或者ifconfig | grep inet6命令:
    • 如果返回inet6相关内容,表示实例已成功开启IPv6服务。您可以跳过下文开启IPv6服务的步骤,直接配置IPv6地址。
    • 如果未返回inet6相关内容,表示实例未开启IPv6服务,请根据下文开启IPv6服务。
  3. 开启IPv6服务。
    操作系统 操作步骤
    CentOS 6
    1. 运行vi /etc/modprobe.d/disable_ipv6.conf,将options ipv6 disable=1修改为options ipv6 disable=0后保存退出。
    2. 运行vi /etc/sysconfig/network,将NETWORKING_IPV6=no修改为NETWORKING_IPV6=yes后保存退出。
    3. 运行以下命令:
      modprobe ipv6 -r
      modprobe ipv6
    4. 运行lsmod | grep ipv6,当返回以下内容时,表明IPv6模块已经成功加载:
      ipv6                  xxxxx  8
      说明 第三列参数值不能为 0,否则您需要重新设置IPv6服务。
    5. 运行vi /etc/sysctl.conf做如下修改:
      #net.ipv6.conf.all.disable_ipv6 = 1
      #net.ipv6.conf.default.disable_ipv6 = 1
      #net.ipv6.conf.lo.disable_ipv6 = 1
      
      net.ipv6.conf.all.disable_ipv6 = 0
      net.ipv6.conf.default.disable_ipv6 = 0
      net.ipv6.conf.lo.disable_ipv6 = 0

      修改完成后,保存并退出。

    6. 运行sysctl -p使配置生效。
    CentOS 7
    1. 运行vi /etc/modprobe.d/disable_ipv6.conf,将options ipv6 disable=1修改为options ipv6 disable=0 后保存退出。
    2. 运行vi /etc/sysconfig/network,将NETWORKING_IPV6=no修改为NETWORKING_IPV6=yes后保存退出。
    3. 运行vi /etc/sysctl.conf做如下修改:
      #net.ipv6.conf.all.disable_ipv6 = 1
      #net.ipv6.conf.default.disable_ipv6 = 1
      #net.ipv6.conf.lo.disable_ipv6 = 1
      
      net.ipv6.conf.all.disable_ipv6 = 0
      net.ipv6.conf.default.disable_ipv6 = 0
      net.ipv6.conf.lo.disable_ipv6 = 0

      修改完成后,保存并退出。

    4. 运行sysctl -p使配置生效。
    Debian 8/9
    1. 运行vi /etc/default/grub,删除ipv6.disable=1后保存退出。
    2. 运行vi /boot/grub/grub.cfg,删除ipv6.disable=1后保存退出。
    3. 重启实例。
    4. 运行vi /etc/sysctl.conf做如下修改:
      #net.ipv6.conf.all.disable_ipv6 = 1
      #net.ipv6.conf.default.disable_ipv6 = 1
      #net.ipv6.conf.lo.disable_ipv6 = 1
      
      net.ipv6.conf.all.disable_ipv6 = 0
      net.ipv6.conf.default.disable_ipv6 = 0
      net.ipv6.conf.lo.disable_ipv6 = 0

      修改完成后,保存并退出。

    5. 运行sysctl -p使配置生效。
    • Ubuntu 14/16
    • OpenSUSE 42
      说明 OpenSUSE 42开启服务后,无需再手动配置,即可获取IPv6地址。
    1. 运行vi /etc/sysctl.conf做如下修改:
      #net.ipv6.conf.all.disable_ipv6 = 1
      #net.ipv6.conf.default.disable_ipv6 = 1
      #net.ipv6.conf.lo.disable_ipv6 = 1
      
      net.ipv6.conf.all.disable_ipv6 = 0
      net.ipv6.conf.default.disable_ipv6 = 0
      net.ipv6.conf.lo.disable_ipv6 = 0

      修改完成后,保存并退出。

    2. 运行sysctl -p使配置生效。
    FreeBSD 11
    1. 运行vi /etc/rc.conf,添加ipv6_activate_all_interfaces="YES"后保存退出。
    2. 运行/etc/netstart restart重启网络。
    SUSE 11/12
    说明 SUSE 11/12开启服务后,无需再手动配置,即可获取IPv6地址。
    1. 运行vi /etc/modprobe.d/50-ipv6.conf,删除install ipv6 /bin/true后保存退出。
    2. 运行vi /etc/sysctl.conf做如下修改:
      #net.ipv6.conf.all.disable_ipv6 = 1
      #net.ipv6.conf.default.disable_ipv6 = 1
      #net.ipv6.conf.lo.disable_ipv6 = 1
      
      net.ipv6.conf.all.disable_ipv6 = 0
      net.ipv6.conf.default.disable_ipv6 = 0
      net.ipv6.conf.lo.disable_ipv6 = 0

      修改完成后,保存并退出。

    3. 运行sysctl -p使配置生效。
  4. 查看实例分配的IPv6地址。
    您可以通过控制台和实例元数据两种方式查看实例分配的IPv6地址。
    • 控制台:更多信息,请参见分配 IPv6 地址
    • 实例元数据:通过以下元数据项获取IPv6地址。更多信息,请参见实例元数据
      • IPv6 地址:network/interfaces/macs/[mac]/ipv6s
      • IPv6 网关:network/interfaces/macs/[mac]/ipv6-gateway
      • IPv6 虚拟交换机 CIDR 地址段:network/interfaces/macs/[mac]/vswitch-ipv6-cidr-block
  5. 手动配置IPv6地址。
    操作系统 操作步骤
    • CentOS 6/7
    • Red Hat 6/7
    • Almalinux
    • Rocky Linux
    以centos_6_10_x64_20G_alibase_20201120.vhd、centos_7_9_x64_20G_alibase_20211227.vhd为例:
    1. 运行vi /etc/sysconfig/network-scripts/ifcfg-eth0打开网卡配置文件,eth0为网卡标识符,您需要修改成实际的标识符。在文件中根据实际信息添加以下信息:
      DHCPV6C=yes
      IPV6INIT=yes

      修改完成后,保存并退出。

    2. 运行reboot重启实例。
    CentOS 8
    以centos_8_5_x64_20G_alibase_20211228.vhd为例:
    1. 确认网卡配置文件是否包含IPV6INIT=yesDHCPV6C=yes两项内容。如果包含直接进行下一步操作,如果未包含需先手动添加。
      vi /etc/sysconfig/network-scripts/ifcfg-eth0
      eth0为网卡标识符,您需要修改成实际的标识符。修改完成后,保存并退出。
    2. 禁用cloud-init修改/etc/sysconfig/network-scripts/目录下网卡文件的能力。
      说明 分配IPv6地址后无需手动配置,但重启之后可能丢失,因此需要禁用cloud-init修改网卡文件的能力。
      1. 运行vi /etc/cloud/cloud.cfg打开网卡配置文件。
        vi /etc/cloud/cloud.cfg
      2. Example datasource config内容前添加以下信息:
        network:
          config: disabled

        修改完成后,保存并退出。

    3. 运行reboot重启实例。
    Ubuntu 14
    以ubuntu_14_0405_64_20G_alibase_20170824.vhd为例:
    1. 运行vi /etc/sysctl.conf打开网卡配置文件。在文件中修改以下信息:
      #net.ipv6.conf.all.disable_ipv6 = 1
      #net.ipv6.conf.default.disable_ipv6 = 1
      #net.ipv6.conf.lo.disable_ipv6 = 1
      net.ipv6.conf.all.disable_ipv6 = 0
      net.ipv6.conf.default.disable_ipv6 = 0
      net.ipv6.conf.lo.disable_ipv6 = 0

      修改完成后,保存并退出。

    2. 运行vi /etc/network/interfaces打开网卡配置文件,在文件中根据实际信息添加以下信息:
      iface eth0 inet6 dhcp
      eth0为网卡标识符,您需要修改成实际的标识符。修改完成后,保存并退出。
    3. 运行reboot重启实例。
    • Ubuntu 16
    • Debian 8/9/10/11
    以debian_9_13_x64_20G_alibase_20211227.vhd、debian_10_11_x64_20G_alibase_20211227.vhd、debian_11_2_x64_20G_alibase_20211227.vhd 、ubuntu_16_04_x64_20G_alibase_20211028.vhd为例:
    1. 运行vi /etc/network/interfaces打开网卡配置文件,在文件中根据实际信息添加以下信息:
      iface eth0 inet6 dhcp
      eth0为网卡标识符,您需要修改成实际的标识符。修改完成后,保存并退出。
    2. 运行reboot重启实例。
    Ubuntu 18/20
    以ubuntu_18_04_x64_20G_alibase_20211227.vhd、ubuntu_20_04_x64_20G_alibase_20211227.vhd为例:
    1. 禁用cloud-init修改/etc/sysconfig/network-scripts/目录下网卡文件的能力。
      说明 分配IPv6地址后无需手动配置,但重启之后可能丢失,因此需要禁用cloud-init修改网卡文件的能力。
      1. 运行vi /etc/cloud/cloud.cfg打开网卡配置文件。
        vi /etc/cloud/cloud.cfg
      2. Example datasource config内容前添加以下信息:
        network:
          config: disabled

        修改完成后,保存并退出。

    2. 运行reboot重启实例。
    • Anolis OS 7.9/8.4
    • CentOS Stream
    • Fedora
    以anolisos_7_9_x64_20G_rhck_alibase_20220110.vhd、anolisos_8_4_x64_20G_rhck_alibase_20211008.vhd、centos_stream_8_x64_20G_alibase_20211227.vhd、fedora_34_1_x64_20G_alibase_20211028.vhd为例:
    1. 确认网卡配置文件是否包含IPV6INIT=yesDHCPV6C=yes两项内容。如果包含无需再做任何操作,如果未包含需先手动添加。
      vi /etc/sysconfig/network-scripts/ifcfg-eth0
      eth0为网卡标识符,您需要修改成实际的标识符。修改完成后,保存并退出。
    2. 运行reboot重启实例。
    FreeBSD 11 以freebsd_11_4_x64_30G_alibase_20210319.vhd为例:
    1. 运行vi /etc/rc.conf打开网卡配置文件,在文件中根据实际信息添加以下信息:
      ipv6_enable="YES"
      ipv6_ifconfig_vtnet0="<IPv6地址> <子网前缀长度>"
    2. 继续在文件中修改以下信息,修改完成后,保存并退出。
      ip6addrctl_enable="YES"
      ipv6_activate_all_interfaces="YES"
      ipv6_network_interfaces="auto"
      修改完成后,配置文件内容示例如下:
      hostname="Aliyun"
      sshd_enable="YES"
      dumpdev="NO"
      ipv6_enable="YES"
      ip6addrctl_enable="YES"
      ip6addrctl_policy="ipv4_prefer"
      ipv6_activate_all_interfaces="YES"
      ipv6_network_interfaces="auto"
      ifconfig_lo0="inet 127.0.0.1      netmask 255.0.0.0"
      ifconfig_vtnet0="inet 192.168.XX.XX netmask 255.255.255.0"
      ipv6_ifconfig_vtnet0="2001:XXXX:4:4:4:4:4:4 prefixlen 64"
      defaultrouter="192.168.XX.XX"
      hostname="freebsd"
    3. 运行reboot重启实例。