开启或关闭IPv6

本文主要介绍如何开启或关闭Alibaba Cloud Linux 2操作系统中的IPv6。

前提条件

  • 选用的实例规格必须支持IPv6。更多信息,请参见实例规格族

  • 创建的实例必须在支持开通IPv6网段的地域下,并搭建了IPv6专有网络。具体操作,请参见搭建IPv6专有网络

背景信息

Alibaba Cloud Linux 2镜像在aliyun-2.1903-x64-20G-alibase-20190829.vhd及之前的版本未开启IPv6,从aliyun_2_1903_x64_20G_alibase_20200221.vhd版本开始默认开启了IPv6。

开启IPv6

暂时开启

重要

暂时开启IPv6后,实例一旦停止或重启,开启IPv6的相关配置会失效,请您谨慎选择。

在镜像aliyun_2_1903_64_20G_alibase_20190619.vhd及之前的版本中,/etc/systemd/network/目录下的.network文件只配置了DHCP=ipv4,您可以按照以下步骤修改文件内容来暂时开启IPv6。

  1. 远程连接ECS实例。

    具体操作,请参见通过密码或密钥认证登录Linux实例

  2. 运行以下命令进入/etc/systemd/network/目录。

    cd /etc/systemd/network/
  3. 使用命令ls查询该目录下的.network文件。

    本文以50-dhcp.network文件为例。alinux2

  4. 修改文件50-dhcp.network内容。

    vi /etc/systemd/network/50-dhcp.network
  5. i进入编辑模式。

    [Network]下的信息修改为DHCP=yes

    说明

    文件内参数Name=eth*表示适配所有网络接口,所有网络接口都将通过DHCP配置IP地址与路由。如果只需要配置指定的网络接口,可以修改参数Name为指定的网络接口,例如,Name=eth0表示只适配eth0网络接口。更多关于network的信息请参见systemd.network

    [Match]
    Name=eth*
    
    [Network]
    DHCP=yes

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

  6. 运行以下命令开启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

持久开启

以下操作步骤将持久化开启IPv6,实例重启后配置仍然生效。

  1. 远程连接ECS实例。

    具体操作,请参见通过密码或密钥认证登录Linux实例

  2. 修改/etc/sysctl.conf配置文件。

    vi /etc/sysctl.conf
  3. 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后按下回车键,保存并退出。

  4. 验证/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存在差异,系统可能会生效新的配置,与您需求的配置混淆。

  5. 如果两个配置文件存在差异,您可以执行以下命令重新生成initramfs。

    sudo dracut -v -f
  6. 重启实例。

    sudo reboot
  7. 执行ifconfig命令判断是否已开启IPv6。

    如果网络配置信息包含以下信息,表示IPv6已开启。

    inet6 <以fe80::开头的单播地址>
    inet6 <ECS实例的IPv6地址>

关闭IPv6

暂时关闭

以下命令将暂时关闭IPv6。

重要

暂时关闭IPv6后,实例一旦停止或重启,关闭IPv6的相关配置会失效,请您谨慎选择。

  • 关闭所有网络接口。

    sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
    sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1
  • 关闭指定网络接口示例。

    sudo sysctl -w net.ipv6.conf.eth0.disable_ipv6=1

持久关闭

以下操作步骤将持久化关闭IPv6,实例重启后配置仍然生效。您可以通过以下任一方式关闭IPv6。

  • 通过以下任一命令行参数持久化关闭IPv6。

    • sudo grubby --args="ipv6.disable_ipv6=1" --update-kernel=/boot/vmlinuz-$(uname -r)
    • sudo grubby --args="ipv6.disable=1" --update-kernel=/boot/vmlinuz-$(uname -r)
    说明

    参数--args="ipv6.disable_ipv6=1"--args="ipv6.disable=1"均能实现关闭IPv6的功能,区别在于设置--args="ipv6.disable_ipv6=1"参数只关闭网络接口IPv6;而设置--args="ipv6.disable=1"参数直接禁用了IPv6的内核模块,详情请参见Linux内核IPv6说明

  • 通过修改/etc/sysctl.conf文件持久化关闭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.eth0.disable_ipv6=1
    3. 重启实例。

      sudo reboot
    4. 执行ifconfig命令判断是否已关闭IPv6。

      如果网络配置信息没有包含以下信息,表示IPv6已关闭。

      inet6 <以fe80::开头的单播地址>
      inet6 <ECS实例的IPv6地址>

支持多网卡配置

如果您需要配置多个IPv6地址,可以参见下述方式进行配置。

  1. 远程连接ECS实例。

    具体操作,请参见通过密码或密钥认证登录Linux实例

  2. 运行以下命令进入/etc/systemd/network/目录。

    cd /etc/systemd/network/
  3. 使用命令ls查询该目录下的.network文件。

    例如,10-eth0.network文件。

  4. 使用命令cp复制一个新的配置文件。

    例如:

    cp 10-eth0.network 20-dhcp.network
  5. 运行以下命令修改配置文件。

    sed -i 's/^Name.*$/Name=*/g' /etc/systemd/network/20-dhcp.network
  6. 重启systemd-networkd服务使配置生效。

    sudo systemctl restart systemd-networkd