动态获取IPv6地址
操作场景
IPv6的使用,可以有效弥补IPv4网络地址资源有限的问题。如果当前云服务器使用IPv4,那么启用IPv6后,云服务器可在双栈模式下运行,即云服务器可以拥有两个不同版本的IP地址:IPv4地址和IPv6地址,这两个IP地址都可以进行内网/公网访问。
按照约束与限制中的网络环境要求创建的云服务器,有些不能动态获取到IPv6地址,需要进行相关配置才行。如果云服务器使用的是公共镜像,则支持情况如下:
- Linux公共镜像开启动态获取IPv6功能时,需要先判断是否支持IPv6协议栈,再判断是否已开启动态获取IPv6。目前,所有Linux公共镜像均已支持IPv6协议栈。
约束与限制
- 请确保云服务器所在的子网已开启IPv6功能。
若云服务器所在子网未开启IPv6功能,需参考开启云服务器的IPv6功能进行开启,开启后不允许关闭。
- 请确保创建云服务器时已选择“自动分配IPv6地址”。
- 云服务器启动之后动态插拔的网卡不支持IPv6地址动态获取功能。
- 仅弹性云服务器支持IPv6双栈,裸金属服务器不支持。
- 同一个网卡上,只能绑定一个IPv6地址。
操作导航
- Linux系统:本文提供了自动配置、手动配置两种方式启用IPv6,推荐您使用自动配置方法,如表1所示。
对于CentOS 6.x和Debian操作系统,云服务器内部配置IPv6自动获取功能之后,将该云服务器制作为私有镜像,使用该镜像在非IPv6网络环境中创建云服务器时,由于等待获取IPv6地址超时,导致云服务器启动较慢,此时您可以参考设置云服务器获取IPv6地址超时时间操作。
Linux操作系统(自动配置启用IPv6)
ipv6-setup-xxx工具能为开启IPv6协议栈的Linux操作系统自动配置动态获取IPv6地址。其中,xxx表示工具系列:rhel或debian。
您也可以参考Linux操作系统(手动配置启用IPv6)手动配置启用IPv6。
- ipv6-setup-xxx工具运行时会自动重启网络服务,导致网络短暂不可用。
- CentOS 6.x和Debian操作系统的云服务器内部配置IPv6自动获取功能之后,将该云服务器制作为私有镜像,使用该镜像在非IPv6网络环境中创建云服务器时,由于等待获取IPv6地址超时,导致云服务器启动较慢,您可以参考设置云服务器获取IPv6地址超时时间设置获取IPv6地址超时时间为30s,然后再重新制作私有镜像。
- 执行如下命令,查看当前云服务器是否启用IPv6。
ip addr
- 如果没有开启IPv6协议栈,则只能看到IPv4地址,如下图所示,请参考设置云服务器获取IPv6地址超时时间先开启IPv6协议栈。
图1 云服务器未开启IPv6协议栈
- 如果已开启IPv6协议栈,则可以看到LLA地址(fe80开头)。
- 如果已开启IPv6协议栈并且已获取到IPv6地址,则会看到如下地址:
图3 云服务器已开启IPv6协议栈并且已获取到IPv6地址
Linux公共镜像均已开启IPv6协议栈,如图2所示;
- 如果没有开启IPv6协议栈,则只能看到IPv4地址,如下图所示,请参考设置云服务器获取IPv6地址超时时间先开启IPv6协议栈。
- 开启Linux云服务器IPv6协议栈。
- 执行如下命令,确认内核是否支持IPv6协议栈。
- 如果有输出信息,表示内核支持IPv6协议栈。
- 如果没有任何输出,说明内核不支持IPv6协议栈,需要执行2.b加载IPv6模块。
- 执行以下命令,加载IPv6模块。
- 修改“/etc/sysctl.conf”配置文件,增加如下配置:
- 保存配置并退出,然后执行如下命令,加载配置。
- 执行如下命令,确认内核是否支持IPv6协议栈。
- 自动配置启用IPv6。
Linux操作系统(手动配置启用IPv6)
CentOS 6.x和Debian操作系统的云服务器内部配置IPv6自动获取功能之后,将该云服务器制作为私有镜像,使用该镜像在非IPv6网络环境中创建云服务器时,由于等待获取IPv6地址超时,导致云服务器启动较慢,您可以参考设置云服务器获取IPv6地址超时时间设置获取IPv6地址超时时间为30s,然后再重新制作私有镜像。
- 执行如下命令,查看当前云服务器是否启用IPv6。
ip addr
- 如果没有开启IPv6协议栈,则只能看到IPv4地址,如下图所示,请参考2先开启IPv6协议栈。
图4 未开启IPv6协议栈
- 如果已开启IPv6协议栈,则可以看到LLA地址(fe80开头)。
- 如果已开启IPv6协议栈并且已获取到IPv6地址,则会看到如下地址:
图6 已开启IPv6协议栈并且已获取到IPv6地址
Linux公共镜像均已开启IPv6协议栈,如图5所示;
- 如果没有开启IPv6协议栈,则只能看到IPv4地址,如下图所示,请参考2先开启IPv6协议栈。
- 开启Linux云服务器IPv6协议栈。
- 执行如下命令,确认内核是否支持IPv6协议栈。
- 如果有输出信息,表示内核支持IPv6协议栈。
- 如果没有任何输出,说明内核不支持IPv6协议栈,需要执行2.b加载IPv6模块。
- 执行以下命令,加载IPv6模块。
- 修改“/etc/sysctl.conf”配置文件,增加如下配置:
- 保存配置并退出,然后执行如下命令,加载配置。
- 执行如下命令,确认内核是否支持IPv6协议栈。
- 手动配置启用IPv6。操作系统不同,步骤有所差别。
- Ubuntu 18.04/20.04操作系统云服务器配置动态获取IPv6。
- Ubuntu 22.04操作系统云服务器配置动态获取IPv6。
- 执行以下命令,进入“/etc/netplan/”。
- 执行以下命令,查询配置文件名。
图9 查询配置文件名
- 执行以下命令,编辑“01-netcfg.yaml”配置文件。
- 在“01-netcfg.yaml”中增加如下内容,注意yaml文件格式及缩进:
ethernets: eth0: dhcp6: true
图10 修改结果
修改完成后保存退出。
- 执行以下命令,使更改生效。
- 执行以下命令,编辑“/etc/NetworkManager/NetworkManager.conf”文件。
- 在“NetworkManager.conf”中增加如下内容,注意文件格式及缩进:
[main] plugins=ifupdown,keyfile dhcp=dhclient [ifupdown] managed=true [device] wifi.scan-rand-mac-address=no
图11 修改结果
- 执行以下命令,使配置生效。
- Debian操作系统云服务器配置动态获取IPv6。
- 编辑“/etc/network/interfaces”文件,使之包含以下内容:
auto lo iface lo inet loopback auto eth0 iface eth0 inet dhcp iface eth0 inet6 dhcp pre-up sleep 3
- 如果有多个网卡,则在“/etc/network/interfaces”文件中,增加对应网卡的配置,以eth1为例,需要增加:
auto eth1 iface eth1 inet dhcp iface eth1 inet6 dhcp pre-up sleep 3
- 执行如下命令重启网络服务。
如果将网卡进行down/up操作之后无法获取IPv6地址,也可以通过此命令重启网络服务。
- 执行步骤1检查是否已开启动态IPv6。
- 编辑“/etc/network/interfaces”文件,使之包含以下内容:
- CentOS/EulerOS/Fedora操作系统云服务器配置动态获取IPv6。
- 编辑主网卡配置文件“/etc/sysconfig/network-scripts/ifcfg-eth0”。
- 编辑“/etc/sysconfig/network”,按如下所示添加或修改以下行。
NETWORKING_IPV6=yes
- CentOS 6系列从网卡需要编辑对应的配置文件,以eth1为例,编辑“/etc/sysconfig/network-scripts/ifcfg-eth1”。
CentOS 6.3系统中默认ip6tables会过滤dhcpv6-client请求,所以CentOS 6.3除了需要编辑“ifcfg-eth*”文件外,还需要额外添加一条允许dhcpv6-client请求的ip6tables规则。操作如下:
- (可选配置)CentOS 7/CentOS 8系列需要将扩展网卡的IPv6 LLA地址模式修改为EUI64。
- 重启网络服务。
- 执行步骤1检查是否已开启动态IPv6。
- SUSE/openSUSE/CoreOS操作系统云服务器配置动态获取IPv6。
SUSE 12 SP1、SUSE 12 SP2无需特殊配置。
openSUSE 13.2、openSUSE 42.2无需特殊配置。
CoreOS 10.10.5无需特殊配置。