问题背景
IPv6(互联网协议版本6)是下一代互联网协议,旨在解决IPv4地址耗尽问题,并提高网络安全性。云主机作为新一代网络服务,已支持IPv6地址分配。但部分用户可能会遇到云主机IPv6默认路由缺失的问题,导致无法正常使用IPv6网络。
针对系统版本
Centos 7系列、BC-Linux 7系列、BC-Linux Euler系列,基于DHCP来获取IPv6地址。
问题原因
1. 网卡配置文件设置禁用IPv6默认路由
2. 主机关闭RA(Router Advertisement,路由器通告)通告接收
3. 主机关闭IPv6路由接收
操作步骤
1. 执行以下命令,查看IPv6路由。
ip -6 route show
正常路由显示如下:
异常路由显示如下:
2. 执行以下命令,查看网卡配置文件。
cat /etc/sysconfig/network-scripts/ifcfg-eth*(对应网卡配置文件)
编辑对应网卡配置文件,例如本文中ifcfg-eth0,并设置IPV6_DEFROUTE=yes,开启对应网卡默认路由。
执行以下步骤使配置文件生效:
(1)重启云主机;
(2)执行以下命令,重启网卡;
ifdown eth0
ifup eth0
3. 确认云主机是否无法接受RA通告,查看accept_ra内核参数。
本例中以网卡eth0为例进行演示,内核参数需匹配对应网卡名称。涉及内核参数:net.ipv6.conf.eth0.accept_ra,默认值为1。该内核参数主要用来判断内核是否接收RA路由通告,以此生成路由表中对应网卡的默认路由。包含对应网卡名称的参数覆盖all、default的参数,例如net.ipv6.conf.eth0.accept_ra覆盖net.ipv6.conf.all.accept_ra。其含义如下:
|
内核参数 |
值 |
解释 |
|
net.ipv6.conf.eth0.accept_ra |
0 |
不接受RA。 |
|
net.ipv6.conf.eth0.accept_ra |
1 |
forwarding是关闭时就接受RA。注意当主机部署容器化服务(Docker、K8S等),forwarding会被开启,此时主机相当于路由器,故而不接受RA。 |
|
net.ipv6.conf.eth0.accept_ra |
2 |
无论forwarding是否关闭,主机都接受RA。 |
forwarding具有配置是否关闭查看对应网卡的内核参数的能力,如net.ipv6.conf.eth0.forwarding,为0表示关闭查看对应网卡的内核参数的能力,1表示开启查看对应网卡的内核参数的能力,默认关闭。
假设您的机器部署了容器,并查看确认forwarding开启。如果net.ipv6.conf.eth0.accept_ra仍然为默认值1,那么对应网卡不会生成IPv6默认路由。
(1)执行以下命令,查看对应内核参数值;
sysctl net.ipv6.conf.eth0.accept_ra
(2)编辑/etc/sysctl.conf文件,添加以下命令,保存并退出,执行sysctl -p刷新内核参数生效;
net.ipv6.conf.eth0.accept_ra=2
(3)等待一分钟(RA路由通告的频率通常设置为一分钟),重新查看路由是否生成;
4. 查看accept_ra_defrtr参数。
本例中以网卡eth0为例进行演示,内核参数需匹配对应网卡名称。涉及内核参数:net.ipv6.conf.eth0.accept_ra_defrtr,默认值为1。其含义如下:
|
内核参数 |
值 |
解释 |
|
net.ipv6.conf.eth0.accept_ra_defrtr |
0 |
系统不再保留IPv6路由。 |
|
net.ipv6.conf.eth0.accept_ra_defrtr |
1 |
系统正常保留IPv6路由。 |
(1)执行以下命令,查看对应内核参数值;
sysctl net.ipv6.conf.eth0.accept_ra_defrtr
(2)如果为0,编辑/etc/sysctl.conf文件,添加net.ipv6.conf.eth0.accept_ra_defrtr=1,保存并退出,执行sysctl -p刷新内核参数生效;
(3)等待一分钟(RA路由通告的频率通常设置为一分钟),重新查看路由是否生成;