如何处理云主机缺失IPv6默认路由导致IPv6网络不通问题

问题背景

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路由通告的频率通常设置为一分钟),重新查看路由是否生成;

本文档内容整理自移动云官方帮助中心(查看原文),仅供参考。