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

自动配置IPv6地址

ecs-util-ipv6能为已分配IPv6地址的ECS实例一键配置IPv6地址,或者为没有分配IPv6地址的ECS实例一键清理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工具仅适用于VPC类型实例,依赖实例元数据服务,使用前请勿将网络禁用或者将相关出口IP端口(100.100.100.200:80)禁用。详情请参见实例元数据
  • ecs-util-ipv6工具运行时会自动重启网卡、网络服务,短时间内网络可能会不可用,请慎重执行。
下载对应系统版本工具到目标系统,赋予执行权限后使用管理员权限执行:
chmod +x ./ecs-utils-ipv6
./ecs-utils-ipv6
注意 如果镜像版本是Ubuntu 14版本的公共镜像,执行完该命令后,需重启ECS实例才能生效。具体操作,请参见重启实例

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

命令行参数:
ecs-utils-ipv6 --help           # show usage
ecs-utils-ipv6 --version        # show version
ecs-utils-ipv6                  # auto config all dev ipv6
ecs-utils-ipv6 --static [dev] [ip6s] [prefix_len] [gw6] # config dev static ipv6
e.g. ecs-utils-ipv6 --static eth0
       ecs-utils-ipv6 --static eth0 xxx::x1 64 xxx::x0
       ecs-utils-ipv6 --static eth0 "xxx::x1 xxx:x2 xxx:x3" 64 xxx::x0
ecs-utils-ipv6 --enable         # enable ipv6
ecs-utils-ipv6 --disable        # disable ipv6
可以开启、禁用、手动配置、自动配置(默认)IPv6。
./ecs-utils-ipv6                 #默认可不带参数,自动配置多网卡多IPv6
./ecs-utils-ipv6 --enable    #开启IPv6
./ecs-utils-ipv6 --disable    #禁用IPv6
./ecs-utils-ipv6 --static <dev>      #自动配置网卡IPv6
./ecs-utils-ipv6 --static <dev> <ip6s> <prefix_len> <gw6>     #手动配置网卡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重启实例。