Skip to content

Alibaba Linux 开启或关闭 IPv6

在 Alibaba Cloud Linux(Alinux)中,开启或关闭 IPv6 功能可以通过多种方式实现,具体取决于用户的系统版本和需求。以下是详细的操作步骤:

1. 前提条件

  • 确保选用的实例规格支持 IPv6。更多信息请参考实例规格族
  • 确保实例位于支持 IPv6 网段的地域,并已搭建 IPv6 专有网络。具体操作请参考搭建 IPv6 专有网络

2. 开启 IPv6

2.1 暂时开启 IPv6

暂时开启 IPv6 后,实例一旦停止或重启,相关配置会失效。适用于临时测试场景。

  1. 远程连接 ECS 实例 使用密码或密钥认证登录 Linux 实例。具体操作请参考通过密码或密钥认证登录 Linux 实例

  2. 修改网络配置文件 进入 /etc/systemd/network/ 目录,找到 .network 文件(例如 50-dhcp.network)。运行以下命令:

vi /etc/systemd/network/50-dhcp.network

i 进入编辑模式,将 [Network] 下的内容修改为:

[Match]
Name=eth*

[Network]
DHCP=yes

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

  1. 启用 IPv6 运行以下命令启用 IPv6:
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=0
sudo sysctl -w net.ipv6.conf.default.disable_ipv6=0

2.2 持久化开启 IPv6

持久化开启 IPv6 后,实例重启后配置仍然生效。

  1. 修改 /etc/sysctl.conf 文件 使用以下命令编辑 /etc/sysctl.conf 文件:
vi /etc/sysctl.conf

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

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

  1. 验证配置文件差异 运行以下命令,检查 /etc/sysctl.conf 文件与 initramfs 中的文件是否存在差异:
diff -u /etc/sysctl.conf <(lsinitrd -f /etc/sysctl.conf)

如果存在差异,运行以下命令重新生成 initramfs:

sudo update-initramfs -u
  1. 重启实例 重启实例以使配置生效:
sudo reboot
  1. 验证 IPv6 是否开启 重启后,运行以下命令验证 IPv6 是否已开启:
ifconfig

如果网络配置信息中包含以下内容,则表示 IPv6 已开启:

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

3. 关闭 IPv6

3.1 暂时关闭 IPv6

暂时关闭 IPv6 后,实例一旦停止或重启,相关配置会失效。

  1. 关闭所有网络接口的 IPv6 运行以下命令:
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1
  1. 关闭指定网络接口的 IPv6 如果只想关闭某个特定网络接口(如 eth0)的 IPv6,运行以下命令:
sudo sysctl -w net.ipv6.conf.eth0.disable_ipv6=1

3.2 持久化关闭 IPv6

持久化关闭 IPv6 后,实例重启后配置仍然生效。

  1. 通过命令行参数持久化关闭 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)
  • 参数 ipv6.disable_ipv6=1 只关闭网络接口的 IPv6。
  • 参数 ipv6.disable=1 直接禁用了 IPv6 的内核模块。

  • 通过修改 /etc/sysctl.conf 文件持久化关闭 IPv6 编辑 /etc/sysctl.conf 文件,添加以下内容:

net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1

如果需要关闭指定网络接口,添加以下内容:

net.ipv6.conf.eth0.disable_ipv6=1
  1. 重启实例 重启实例以使配置生效:
sudo reboot
  1. 验证 IPv6 是否关闭 重启后,运行以下命令验证 IPv6 是否已关闭:
ifconfig

如果网络配置信息中没有以下内容,则表示 IPv6 已关闭:

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

4. 支持多网卡配置

如果需要为多个网卡配置 IPv6 地址,可以按照以下步骤操作:

  1. 远程连接 ECS 实例 使用密码或密钥认证登录 Linux 实例。

  2. 复制网络配置文件 进入 /etc/systemd/network/ 目录,找到 .network 文件(例如 10-eth0.network)。运行以下命令复制一个新的配置文件:

cp 10-eth0.network 20-dhcp.network
  1. 修改配置文件 修改新复制的文件,运行以下命令:
sed -i 's/^Name.*$/Name=*/g' /etc/systemd/network/20-dhcp.network
  1. 重启网络服务 重启 systemd-networkd 服务以使配置生效:
sudo systemctl restart systemd-networkd

注意事项

  • 在修改网络配置时,请确保了解每一步操作的含义,避免因误操作导致网络不可用。
  • 如果在操作过程中遇到问题,可以参考阿里云官方文档或联系技术支持。

Ref

https://help.aliyun.com/zh/alinux/support/enable-or-disable-ipv6