Skip to main content

IPv6连通性故障排查

操作场景

本文将为您提供云服务器的 IPv6 连通性问题的基本排障思路。

操作步骤

首先通过如下四个步骤检查云服务器是否已经完成 IPv6 配置:

  1. 执行如下命令,查看云服务器的网卡(通常是 eth0)是否已经获取到“fe80”开头的 link-local IPv6 地址。

    ifconfig
    • 若已获取表明该镜像已经开启了 IPv6 功能,请执行 步骤2。
    • 若未获取,请参见 解决思路-步骤1。

    说明:

    “fe80”开头的 IPv6 地址并非是用于通信的 IPv6 地址。

    img

  2. 执行如下命令,查看云服务器的网卡(通常是 eth0)是否已经获取到“2402”开头的 IPv6 地址(不是“fe80”开头的地址)。

    ifconfig
    • 若已获取,请执行 步骤3。
    • 若未获取,请参见 解决思路-步骤2。

    img

  3. 执行如下命令,查看网卡的默认路由。

    ip -6 route show
    • 若已配置默认路由且能 Ping 通公网,请执行 步骤4。
    • 若看不到默认路由,或无法 Ping 通公网,请参见 解决思路-步骤3。

    img

    通过 ping6 240c::6666 或者 ping -6 240c::6666 来测试公网连通性。

    img

  4. 执行如下命令,确认是否22端口和80端口都已经监听了 IPv6。

    netstat -tupln

    如果22端口和80端口没有监听 IPv6,请参见 解决思路-步骤4。

    img

解决思路

步骤1:云服务器未获取到“fe80”开头的 IPv6 地址

如果通过 ifconfig,没有看到“fe80”开头的 IPv6 地址,则说明云服务器没有开启 IPv6 功能。请参见 快速入门 - 云服务器配置 IPv6,选择您所需的镜像开启 IPv6 的方式重新配置,可以通过执行 sysctl -a | grep ipv6 | grep disable 来确认。

步骤2:云服务器未获取到“2402”开头的 IPv6 地址

如果通过 ifconfig,没有看到“2402”开头的 IPv6 地址,则有两种可能性:

  1. 控制台云服务器的弹性网卡没有分配 IPv6 地址

  2. 云服务器内的 dhcpv6 相关配置没有配置好或者没有执行 dhclient -6

    • 登录云服务器,执行如下命令,打开 /etc/sysconfig/network-scripts/ 文件夹下的 ifcfg-eth0 文件:
      vim /etc/sysconfig/network-scripts/ifcfg-eth0
    • 按 “i” 切换至编辑模式,增加如下内容:
      DHCPV6C=yes
    • 按 “Esc”,输入 “:wq”,保存文件并返回,重启云服务器。
    • 依次执行如下命令,查看是否已经获取到“2402”开头的 IPv6 地址:
      dhclient -6 或 dhclient -6 网卡名称
      ifconfig

步骤3:已获取到 IPv6 地址但无法 Ping 通公网

如果已经获取到 IPv6 地址,但是无法 Ping 通公网,则有两种可能性:

  1. 没有为 IPv6 地址开启公网

    • 解决方法:进入控制台为 IPv6 地址开启公网,详情请参见 管理 IPv6 公网
  2. 没有配置默认路由

    • 执行如下命令,打开 /etc/sysconfig/network-scripts/ 文件夹下的 route6-eth0 文件:
      vim /etc/sysconfig/network-scripts/route6-eth0
    • 按 “i” 切换至编辑模式,增加如下内容:
      default via fe80::1 dev eth0
    • 按 “Esc”,输入 “:wq”,保存文件并返回,执行如下命令重启网络服务,或者重启云服务器:
      service network restart
      或者
      systemctl restart network

步骤4:IPv6 公网可以 Ping 通但无法通过22或80端口访问

如果 IPv6 公网可以 Ping 通,但是无法通过22或者80端口来访问,则通常是 sshd 和 Nginx 等服务配置问题,需要修改 sshd 和 Nginx 配置,使22或者80等端口监听 IPv6。配置完成后:

  1. 依次执行如下命令,重启 sshd 和 Nginx 服务:

    service sshd restart
    service nginx restart
  2. 通过执行 netstat -tupln 查看22或者80等端口是否已监听 IPv6,可参见上文 操作步骤-步骤4。