本文介绍了如何为Linux实例自动配置IPv6地址和手动配置IPv6地址,推荐您使用更高效的自动配置工具配置IPv6地址。
自动配置IPv6地址
ecs-util-ipv6工具可以为已分配IPv6地址的ECS实例一键配置IPv6地址,或者为没有分配IPv6地址的ECS实例一键清理IPv6配置。
- 下载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工具运行时会自动重启网卡、网络服务,短时间内网络可能会不可用,请慎重执行。
- 运行以下命令使用管理员权限运行ecs-util-ipv6工具。
chmod +x ./ecs-utils-ipv6 ./ecs-utils-ipv6
- 可选:如果镜像版本是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地址:
- 远程连接实例。具体操作,请参见通过密码认证登录Linux实例。
- 检查实例是否已开启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服务。
- 如果返回
- 开启IPv6服务。开启IPv6支持配置为暂时或持久。暂时配置将在实例停止或重启时失效,持久配置将不受实例的状态影响。您可以根据实际情况选择配置方式。
- 暂时开启IPv6。
- 运行以下命令进入/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
- 重启systemd-networkd服务使配置生效。
sudo systemctl restart systemd-networkd
- 开启所有网络接口。
- 运行以下命令进入/etc/systemd/network/目录。
- 持久开启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.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
- 重启实例。
reboot
- 执行
ifconfig
命令判断是否已开启IPv6。如果网络配置信息包含以下信息,表示IPv6已开启。inet6 <以fe80::开头的单播地址> inet6 <ECS实例的IPv6地址>
- 修改
- 暂时开启IPv6。
- 手动配置IPv6地址。
- 运行
vi /etc/sysconfig/network-scripts/ifcfg-eth0
打开网卡配置文件,eth0为网卡标识符,您需要修改成实际的标识符。在文件中根据实际信息添加以下配置:DHCPV6C=yes IPV6INIT=yes
修改完成后,保存并退出。
- 重启实例。
reboot
- 运行
手动配置IPv6地址(其他操作系统)
CentOS、Debian、Ubuntu、Fedora等操作系统请完成以下操作,手动配置IPv6地址:
- 远程连接实例。具体操作,请参见通过密码认证登录Linux实例。
- 检查实例是否已开启IPv6服务。说明 CentOS 8、Debian 10及以上版本、Ubuntu 18及以上版本等操作系统已默认开启IPv6服务。
ip addr | grep inet6
或者ifconfig | grep inet6
命令:- 如果返回
inet6
相关内容,表示实例已成功开启IPv6服务。您可以跳过下文开启IPv6服务的步骤,直接配置IPv6地址。 - 如果未返回
inet6
相关内容,表示实例未开启IPv6服务,请根据下文开启IPv6服务。
- 如果返回
- 开启IPv6服务。
操作系统 操作步骤 CentOS 6 - 运行
vi /etc/modprobe.d/disable_ipv6.conf
,将options ipv6 disable=1
修改为options ipv6 disable=0
后保存退出。 - 运行
vi /etc/sysconfig/network
,将NETWORKING_IPV6=no
修改为NETWORKING_IPV6=yes
后保存退出。 - 运行以下命令:
modprobe ipv6 -r modprobe ipv6
- 运行
lsmod | grep ipv6
,当返回以下内容时,表明IPv6模块已经成功加载:ipv6 xxxxx 8
说明 第三列参数值不能为 0,否则您需要重新设置IPv6服务。 - 运行
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
修改完成后,保存并退出。
- 运行
sysctl -p
使配置生效。
CentOS 7 - 运行
vi /etc/modprobe.d/disable_ipv6.conf
,将options ipv6 disable=1
修改为options ipv6 disable=0
后保存退出。 - 运行
vi /etc/sysconfig/network
,将NETWORKING_IPV6=no
修改为NETWORKING_IPV6=yes
后保存退出。 - 运行
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
修改完成后,保存并退出。
- 运行
sysctl -p
使配置生效。
Debian 8/9 - 运行
vi /etc/default/grub
,删除ipv6.disable=1
后保存退出。 - 运行
vi /boot/grub/grub.cfg
,删除ipv6.disable=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
修改完成后,保存并退出。
- 运行
sysctl -p
使配置生效。
- Ubuntu 14/16
- OpenSUSE 42
说明 OpenSUSE 42开启服务后,无需再手动配置,即可获取IPv6地址。
- 运行
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
修改完成后,保存并退出。
- 运行
sysctl -p
使配置生效。
FreeBSD 11 - 运行
vi /etc/rc.conf
,添加ipv6_activate_all_interfaces="YES"
后保存退出。 - 运行
/etc/netstart restart
重启网络。
SUSE 11/12 说明 SUSE 11/12开启服务后,无需再手动配置,即可获取IPv6地址。- 运行
vi /etc/modprobe.d/50-ipv6.conf
,删除install ipv6 /bin/true
后保存退出。 - 运行
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
修改完成后,保存并退出。
- 运行
sysctl -p
使配置生效。
- 运行
- 查看实例分配的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
- 手动配置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为例:- 运行
vi /etc/sysconfig/network-scripts/ifcfg-eth0
打开网卡配置文件,eth0
为网卡标识符,您需要修改成实际的标识符。在文件中根据实际信息添加以下信息:DHCPV6C=yes IPV6INIT=yes
修改完成后,保存并退出。
- 运行
reboot
重启实例。
CentOS 8 以centos_8_5_x64_20G_alibase_20211228.vhd为例:- 确认网卡配置文件是否包含
IPV6INIT=yes
和DHCPV6C=yes
两项内容。如果包含直接进行下一步操作,如果未包含需先手动添加。vi /etc/sysconfig/network-scripts/ifcfg-eth0
eth0
为网卡标识符,您需要修改成实际的标识符。修改完成后,保存并退出。 - 禁用cloud-init修改
/etc/sysconfig/network-scripts/
目录下网卡文件的能力。说明 分配IPv6地址后无需手动配置,但重启之后可能丢失,因此需要禁用cloud-init修改网卡文件的能力。- 运行
vi /etc/cloud/cloud.cfg
打开网卡配置文件。vi /etc/cloud/cloud.cfg
- 在
Example datasource config
内容前添加以下信息:network: config: disabled
修改完成后,保存并退出。
- 运行
- 运行
reboot
重启实例。
Ubuntu 14 以ubuntu_14_0405_64_20G_alibase_20170824.vhd为例:- 运行
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
修改完成后,保存并退出。
- 运行
vi /etc/network/interfaces
打开网卡配置文件,在文件中根据实际信息添加以下信息:iface eth0 inet6 dhcp
eth0
为网卡标识符,您需要修改成实际的标识符。修改完成后,保存并退出。 - 运行
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为例:- 运行
vi /etc/network/interfaces
打开网卡配置文件,在文件中根据实际信息添加以下信息:iface eth0 inet6 dhcp
eth0
为网卡标识符,您需要修改成实际的标识符。修改完成后,保存并退出。 - 运行
reboot
重启实例。
Ubuntu 18/20 以ubuntu_18_04_x64_20G_alibase_20211227.vhd、ubuntu_20_04_x64_20G_alibase_20211227.vhd为例:- 禁用cloud-init修改
/etc/sysconfig/network-scripts/
目录下网卡文件的能力。说明 分配IPv6地址后无需手动配置,但重启之后可能丢失,因此需要禁用cloud-init修改网卡文件的能力。- 运行
vi /etc/cloud/cloud.cfg
打开网卡配置文件。vi /etc/cloud/cloud.cfg
- 在
Example datasource config
内容前添加以下信息:network: config: disabled
修改完成后,保存并退出。
- 运行
- 运行
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为例: - 确认网卡配置文件是否包含
IPV6INIT=yes
和DHCPV6C=yes
两项内容。如果包含无需再做任何操作,如果未包含需先手动添加。vi /etc/sysconfig/network-scripts/ifcfg-eth0
eth0
为网卡标识符,您需要修改成实际的标识符。修改完成后,保存并退出。 - 运行
reboot
重启实例。
FreeBSD 11 以freebsd_11_4_x64_30G_alibase_20210319.vhd为例: - 运行
vi /etc/rc.conf
打开网卡配置文件,在文件中根据实际信息添加以下信息:ipv6_enable="YES" ipv6_ifconfig_vtnet0="<IPv6地址> <子网前缀长度>"
- 继续在文件中修改以下信息,修改完成后,保存并退出。
修改完成后,配置文件内容示例如下: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"
- 运行
reboot
重启实例。