本文主要介绍如何开启或关闭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。
远程连接ECS实例。
具体操作,请参见通过密码或密钥认证登录Linux实例。
运行以下命令进入/etc/systemd/network/目录。
cd /etc/systemd/network/
使用命令
ls
查询该目录下的.network文件。本文以50-dhcp.network文件为例。
修改文件50-dhcp.network内容。
vi /etc/systemd/network/50-dhcp.network
按i进入编辑模式。
将
[Network]
下的信息修改为DHCP=yes
。说明文件内参数
Name=eth*
表示适配所有网络接口,所有网络接口都将通过DHCP配置IP地址与路由。如果只需要配置指定的网络接口,可以修改参数Name
为指定的网络接口,例如,Name=eth0
表示只适配eth0
网络接口。更多关于network的信息请参见systemd.network。[Match] Name=eth* [Network] DHCP=yes
修改完成后按Esc键,并输入
:wq
后按下回车键,保存并退出。运行以下命令开启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,实例重启后配置仍然生效。
远程连接ECS实例。
具体操作,请参见通过密码或密钥认证登录Linux实例。
修改
/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
如果需要开启指定网络接口,修改信息示例如下。
net.ipv6.conf.eth0.disable_ipv6 = 0
修改完成后按Esc键,并输入
:wq
后按下回车键,保存并退出。验证
/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
存在差异,系统可能会生效新的配置,与您需求的配置混淆。如果两个配置文件存在差异,您可以执行以下命令重新生成initramfs。
sudo dracut -v -f
重启实例。
sudo reboot
执行
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。
修改
/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.eth0.disable_ipv6=1
重启实例。
sudo reboot
执行
ifconfig
命令判断是否已关闭IPv6。如果网络配置信息没有包含以下信息,表示IPv6已关闭。
inet6 <以fe80::开头的单播地址> inet6 <ECS实例的IPv6地址>
支持多网卡配置
如果您需要配置多个IPv6地址,可以参见下述方式进行配置。
远程连接ECS实例。
具体操作,请参见通过密码或密钥认证登录Linux实例。
运行以下命令进入
/etc/systemd/network/
目录。cd /etc/systemd/network/
使用命令
ls
查询该目录下的.network
文件。例如,
10-eth0.network
文件。使用命令
cp
复制一个新的配置文件。例如:
cp 10-eth0.network 20-dhcp.network
运行以下命令修改配置文件。
sed -i 's/^Name.*$/Name=*/g' /etc/systemd/network/20-dhcp.network
重启systemd-networkd服务使配置生效。
sudo systemctl restart systemd-networkd