现象

服务器已分配 IPv6 地址,但外部无法通过 IPv6 访问网站或 SSH 服务,或者在服务器内部执行 IPv6 命令时提示“网络不可达”或超时。部分用户发现 IPv4 正常,但 IPv6 配置后重启失效或无法获取默认路由。

原因

  • 系统未启用 IPv6 协议栈或内核参数禁止了 IPv6。
  • 网络接口未正确配置 IPv6 地址或前缀长度错误。
  • 缺少 IPv6 默认网关(Gateway),导致无法路由到公网。
  • 防火墙(如 UFW、firewalld、Windows 防火墙)拦截了 IPv6 入站连接。
  • 云平台安全组或交换机未放行 IPv6 流量。

先自查(3 分钟)

首先确认操作系统是否识别到 IPv6 地址,并检查内核是否禁用 IPv6。登录服务器终端,执行以下命令查看接口信息:

ip -6 addr show

如果输出中能看到全局地址(Global Scope),说明地址已分配。接着检查内核参数,确认 IPv6 未被禁用:

sysctl net.ipv6.conf.all.disable_ipv6

如果返回值为 1,表示 IPv6 已被禁用,需改为 0。同时,在服务器本地尝试 ping 一个公网 IPv6 地址(如 2001:4860:4860::8888),判断基本连通性:

ping6 -c 4 2001:4860:4860::8888

解决步骤

根据操作系统不同,配置静态 IPv6 地址及默认网关。以下是主流系统的配置方法。

Ubuntu 22.04 / 24.04 / Debian 12

Ubuntu 22.04 及以上版本默认使用 Netplan 管理网络。编辑 /etc/netplan/01-netcfg.yaml 文件(文件名可能略有不同,以实际为准):

sudo nano /etc/netplan/01-netcfg.yaml

在 interfaces 下添加或修改 ethernet 配置,确保包含 ipv6 地址和网关。假设接口名为 eth0,IPv6 地址为 2400:da00:1:1::100/64,网关为 2400:da00:1:1::1:

network:
  version: 2
  ethernets:
    eth0:
      addresses:
        - 192.168.1.100/24
        - 2400:da00:1:1::100/64
      gateway4: 192.168.1.1
      gateway6: 2400:da00:1:1::1
      nameservers:
        addresses:
          - 223.5.5.5
          - 2400:3200::1

保存文件后,应用配置:

sudo netplan apply

CentOS 7 / Rocky Linux 9

CentOS 7 和 Rocky Linux 9 使用 ifcfg 文件。编辑接口配置文件,例如 /etc/sysconfig/network-scripts/ifcfg-eth0:

sudo nano /etc/sysconfig/network-scripts/ifcfg-eth0

添加以下两行,分别定义 IPv6 地址和默认网关:

IPV6ADDR=2400:da00:1:1::100/64
IPV6_DEFAULTGW=2400:da00:1:1::1

重启网络服务使配置生效:

sudo systemctl restart network

Windows Server 2019 / 2022

打开“设置” -> “网络和 Internet” -> “以太网” -> 点击当前连接的“硬件属性” -> “编辑” -> “编辑 IPv6 地址”。选择“手动”,勾选“启用 IPv6”,输入 IPv6 地址、子网前缀长度(通常为 64)和默认网关。或者使用 PowerShell 命令:

New-NetIPAddress -InterfaceAlias "Ethernet" -PrefixOrigin Static -AddressFamily IPv6 -IPAddress "2400:da00:1:1::100" -PrefixLength 64
New-NetRoute -InterfaceAlias "Ethernet" -DestinationPrefix "2001::/32" -NextHop "2400:da00:1:1::1" -AddressFamily IPv6

注意:修改网络配置前,务必确保 VNC 控制台可用,防止配置错误导致 SSH 断连且无法远程恢复。配置防火墙时,不要直接禁用所有 IPv6 规则,以免误伤业务。

配置完成后,检查防火墙是否放行 IPv6。Ubuntu 需确保 UFW 允许 IPv6 入站:

sudo ufw allow in on eth0 to any from 2400::/16

CentOS/Rocky 使用 firewalld:

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv6" source address="2400::/16" accept'
sudo firewall-cmd --reload

验证

在服务器内部再次执行 ping6 测试公网连通性:

ping6 -c 4 2001:4860:4860::8888

如果 ping 通,说明服务器出网正常。接着,从外部客户端(如另一台支持 IPv6 的电脑)测试访问服务器。假设服务器 IPv6 为 2400:da00:1:1::100,在外部执行:

ping6 -c 4 2400:da00:1:1::100

如果 ping 通,说明入网正常。若 ping 不通但 ping 公网正常,检查云平台安全组是否放行了 IPv6 入站规则,以及服务器防火墙是否拦截了 ICMPv6。

进一步验证服务端口,使用 nc 或 telnet 测试 SSH 端口(22)或 HTTP 端口(80/443):

nc -6 -zv 2400:da00:1:1::100 22

如果显示“succeeded”,说明服务端口已可达。

预防

  • 配置前备份网络配置文件,保留 VNC 访问权限作为紧急恢复手段。
  • 定期监控 IPv6 路由表,确保默认网关存在且正确。
  • 在云平台安全组中,明确区分 IPv4 和 IPv6 规则,避免遗漏。
  • 使用脚本自动化验证 IPv6 连通性,纳入日常巡检。

在奇异互动如何最快处理

如果配置后仍无法连通,首先登录会员中心,进入「云服务器详情页」,使用「VNC 控制台」直接登录系统内部排查,避免 SSH 断连导致无法操作。若怀疑是 IP 分配或路由问题,可在详情页点击「更换 IP / 增加 IP」重新申请或核对 IPv6 地址。若确认是云平台底层网络故障或安全组配置无法修改,请直接提交工单。提交时,请在工单中关联具体的云服务器实例,并附上:1. 服务器 IP 地址(IPv4 和 IPv6);2. 操作系统版本;3. 执行 ip -6 addr show 和 sysctl net.ipv6.conf.all.disable_ipv6 的截图;4. 从外部 ping6 服务器地址的超时截图;5. 防火墙配置截图。这样可帮助工程师快速定位是配置问题还是平台网络问题。