📝 编辑备注:本文记录常见的 VPS 双栈网络排障步骤。修改 sysctl 参数前,请先确认你的业务(如特定容器、面板或监听规则)是否强依赖 IPv6。

在使用海外 VPS(例如 DMIT 节点)部署应用或调用外部服务时,有时会遇到一种不太直观的网络问题:服务器本身可以正常联网,但访问 ChatGPT、Claude 、Grok、Gemini 等服务页面或相关官方 API 时,却出现连接超时、请求失败、403 或地区识别异常。

这类问题不一定来自应用代码,也可能与 DNS 解析、IPv6 路由、出口 IP 属性、防火墙或目标平台的网络策略有关。如果同一项服务通过 IPv4 可以连接、通过 IPv6 却持续失败,就可以临时关闭 IPv6 进行对照排查。

当目标域名同时返回 IPv4 的 A 记录和 IPv6 的 AAAA 记录时,系统或应用程序可能尝试通过 IPv6 建立连接。由于 IPv4 与 IPv6 使用不同的公网出口地址,目标服务对两种连接的地区识别、IP 分类或访问策略也可能不同。

如果测试确认 IPv4 连接正常,而 IPv6 持续超时或被拒绝,可以临时执行 DMIT VPS 关闭 IPv6 的配置,让主机上的常规连接改用 IPv4。这是一种对照排查方法,并不能保证解决所有服务访问异常;最终结果仍取决于 IPv4 地址状态、网络路由和目标平台的访问策略。

怎么确认 VPS 是否具备可用的 IPv6 出口?

修改配置前,可以分别测试服务器的 IPv4 和 IPv6 连通性。需要说明的是,下面的 curl -6 命令会强制使用 IPv6,因此只能证明服务器具备可用的 IPv6 出口,不能代表其他应用默认都会选择 IPv6。

先测试 IPv6 出口:

curl -6 --connect-timeout 10 ifconfig.co

如果返回类似下面的 IPv6 地址,说明服务器当前可以通过 IPv6 访问公网:

2xxx:xxxx:xxxx::xxxx

再测试 IPv4 出口:

curl -4 --connect-timeout 10 ifconfig.co

如果 IPv4 和 IPv6 都能返回公网地址,说明这台 VPS 具备双栈网络能力。但具体应用会使用哪一种协议,还取决于域名解析结果、系统地址选择规则以及应用程序自身的连接策略。

对比目标服务的 IPv4 与 IPv6 连接结果

仅仅确认 IPv6 可用还不够。更有价值的排查方法,是分别强制使用 IPv4 和 IPv6 请求同一个目标域名,对比连接结果。

curl -4 -I --connect-timeout 10 https://目标域名
curl -6 -I --connect-timeout 10 https://目标域名

请将 目标域名 替换为实际需要测试的服务地址。使用自己有权访问的官方网站或 API 域名即可。

  • IPv4 和 IPv6 都成功:故障可能与 IP 协议选择无关。
  • IPv4 成功、IPv6 超时或失败:可以继续排查 IPv6 路由、DNS、防火墙和出口地址差异。
  • IPv4 和 IPv6 都失败:应优先检查 DNS、端口、防火墙、代理配置及目标服务状态。
  • 返回 403、429 等 HTTP 状态码:说明网络连接已经建立,问题可能来自访问频率、身份验证或目标平台策略,不能简单归因于 IPv6。

如果确认同一个目标服务通过 IPv4 可以连接、通过 IPv6 持续失败,再临时关闭 IPv6 进行对照测试,会比直接修改服务器配置更有依据。

DMIT VPS 关闭 IPv6 的操作步骤

在 Debian、Ubuntu 等常见 Linux 系统中,可以通过 sysctl 参数关闭 IPv6,并将配置保存在 /etc/sysctl.d/ 目录中,使其在服务器重启后继续生效。CentOS、AlmaLinux 基本也能使用相同参数,只是配置文件的加载方式可能略有区别。

动手前先确认 SSH 能通过服务器的 IPv4 地址正常登录。如果当前使用 IPv6 地址连接服务器,关闭 IPv6 后 SSH 会立即断开。数据库、Docker 容器或本地服务如果监听了 IPv6 地址,也可能暂时无法连接。

1. 创建 IPv6 配置文件

使用 nano 新建一个独立的配置文件:

sudo nano /etc/sysctl.d/99-disable-ipv6.conf

添加以下内容:

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

这组配置会同时关闭网络接口和本机回环接口的 IPv6。添加第三行之前,应确认本地程序没有依赖 ::1

在 nano 中按 Ctrl + O 保存,按回车确认文件名,再按 Ctrl + X 退出。

 

2. 加载新的系统参数

执行下面的命令,让刚才的配置立即生效:

sudo sysctl --system

3. 确认配置是否生效

分别查看三项参数的当前值:

sysctl net.ipv6.conf.all.disable_ipv6
sysctl net.ipv6.conf.default.disable_ipv6
sysctl net.ipv6.conf.lo.disable_ipv6

如果三项均返回 = 1,说明对应的 IPv6 参数已经生效。

再测试服务器能否通过 IPv6 连接公网:

curl -6 --connect-timeout 10 ifconfig.co

如果命令提示无法连接或连接超时,说明主机当前已无法通过 IPv6 访问该测试地址。此时可以重新测试原本出现异常的服务,对比关闭 IPv6 前后的结果。

如何恢复 VPS 的 IPv6?

如果关闭 IPv6 没有解决问题,或者服务器上的程序依赖 IPv6,可以删除刚才创建的持久化配置:

sudo rm /etc/sysctl.d/99-disable-ipv6.conf

接着把当前运行中的参数重新设置为 0

sudo sysctl -w net.ipv6.conf.all.disable_ipv6=0
sudo sysctl -w net.ipv6.conf.default.disable_ipv6=0
sudo sysctl -w net.ipv6.conf.lo.disable_ipv6=0

部分系统在重新启用 IPv6 后,可能不会立即重新获取公网 IPv6 地址。遇到这种情况,可以重启服务器:

sudo reboot

重新连接服务器后检查 IPv6 地址和连通性:

ip -6 addr
curl -6 --connect-timeout 10 ifconfig.co

如果服务器目前运行正常,也没有出现 IPv4 与 IPv6 连接结果不一致,就没必要专门关闭 IPv6。只有在确认目标服务通过 IPv4 可以访问、通过 IPv6 持续失败时,才建议临时关闭 IPv6做一次对照测试。如果问题依旧存在,再继续检查 DNS、防火墙、路由和出口 IP 状态。


网络配置参考与相关资料

🌐 DMIT 官方网站 登录后台可确认当前 VPS 实例的公网 IP 分配状态及底层网络说明。


📘 sysctl Linux 手册页
查看 sysctl 参数的读取、写入及系统配置加载方式。