文章目录

龙虾 OpenClaw Telegram 网络请求 fetch failed 时如何确认 VPS 出站 HTTPS 与 DNS 正常

发布于 2026-04-01 16:21:59 · 浏览 17 次 · 评论 0 条

龙虾 OpenClaw Telegram 网络请求 fetch failed 时如何确认 VPS 出站 HTTPS 与 DNS 正常


一、问题背景与核心目标

当你在使用 OpenClaw(龙虾)进行 Telegram 机器人开发或消息收发时,遇到如下错误提示:

fetch failed

这通常意味着你的 VPS(虚拟私有服务器)在尝试向 Telegram API 发送 HTTPS 请求时,网络连接失败。可能的原因包括:

  • VPS 的出站 HTTPS 请求被防火墙或代理拦截
  • DNS 解析失败,导致无法连接 Telegram 的 API 地址
  • 本地或 VPS 的网络配置异常,导致无法访问公网

本指南将带你一步步确认 VPS 的 出站 HTTPS 请求DNS 解析 是否正常,从而定位并解决 fetch failed 的问题。


二、确认 VPS 出站 HTTPS 请求是否正常

1. 使用 curl 测试 HTTPS 连接

打开终端,执行以下命令,测试是否能成功连接 Telegram 的 API 地址:

curl -v https://api.telegram.org
  • -v 表示 verbose(详细输出),便于查看连接过程
  • 如果返回类似如下内容,说明 HTTPS 请求正常:
* Rebuilt URL to: https://api.telegram.org/
*   Trying 142.93.244.18...
* Connected to api.telegram.org (142.93.244.18) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
...
* Connection state changed (MAX_CONCURRENT_STREAMS == 128)!
< HTTP/2 200
  • 如果返回错误如 curl: (7) Failed to connect to api.telegram.org port 443: Connection timed out,说明 HTTPS 请求被阻断或网络不通。

2. 检查防火墙是否放行 HTTPS 端口(443)

Ubuntu / Debian 系统:

sudo ufw status

查看是否允许 HTTPS 流量:

sudo ufw allow 443/tcp

CentOS / RHEL 系统:

sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

3. 检查是否使用了代理或透明代理

如果你的 VPS 使用了代理(如 Shadowsocks、Clash、Squid 等),请确认:

  • 代理是否正常运行
  • 代理是否配置了 HTTPS 代理(如 http://127.0.0.1:1080
  • 代理是否对 Telegram API 的域名进行了特殊处理(如白名单)

测试是否绕过代理:

curl -v --proxy 127.0.0.1:1080 https://api.telegram.org

如果绕过代理后能正常连接,说明代理可能干扰了 HTTPS 请求。


三、确认 DNS 解析是否正常

1. 使用 nslookupdig 测试 Telegram API 的 DNS 解析

nslookup api.telegram.org

dig api.telegram.org

正常输出应包含类似如下内容:

;; ANSWER SECTION:
api.telegram.org. 300 IN A 142.93.244.18

如果返回 ;; connection timed out; no servers could be reached,说明 DNS 解析失败。


2. 检查本地 DNS 配置是否正确

Ubuntu / Debian:

查看 DNS 配置文件:

cat /etc/resolv.conf

确保包含以下内容(或使用公共 DNS):

nameserver 8.8.8.8
nameserver 8.8.4.4

CentOS / RHEL:

cat /etc/resolv.conf

或查看 NetworkManager 配置:

nmcli dev show | grep DNS

3. 检查是否使用了 DNS 代理或 DNS 污染

如果你使用了 DNS 代理(如 dnsmasq、AdGuard Home、Pi-hole 等),请确认:

  • 代理是否正常运行
  • 代理是否对 api.telegram.org 进行了特殊处理(如重定向、缓存)
  • 代理是否被中间人篡改(如 DNS 污染)

测试是否绕过 DNS 代理:

nslookup api.telegram.org 8.8.8.8

如果绕过 DNS 代理后能正常解析,说明 DNS 代理可能干扰了解析。


四、综合排查与修复建议

1. 检查 VPS 的网络连通性

使用以下命令测试 VPS 是否能访问公网:

ping -c 4 8.8.8.8
traceroute api.telegram.org

如果 ping 不通或 traceroute 超时,说明网络不通,需联系 VPS 服务商或检查本地网络配置。


2. 检查是否使用了 HTTPS 证书验证(可临时关闭)

如果你的代码中使用了 fetchaxios,可以尝试关闭 HTTPS 证书验证(仅用于测试):

fetch('https://api.telegram.org', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    method: 'sendMessage',
    chat_id: '123456789',
    text: 'Hello, Telegram!'
  }),
  // 关闭证书验证(仅测试用)
  // agent: new https.Agent({ rejectUnauthorized: false })
})

⚠️ 请勿在生产环境中关闭证书验证,否则存在安全风险。


3. 检查 OpenClaw 的网络配置

OpenClaw 本身不处理网络请求,它只是封装了 Telegram 的 API。请确认:

  • 你的 OpenClaw 代码中使用的 fetchaxios 是否配置了正确的代理或 DNS
  • 是否使用了本地开发环境(如 Docker、Node.js)导致网络隔离
  • 是否在容器中运行 OpenClaw,且容器未正确配置网络

五、总结:关键检查点一览表

检查项 工具/命令 是否正常
HTTPS 请求是否正常 curl -v https://api.telegram.org
防火墙是否放行 443 端口 ufw status / firewall-cmd
是否使用了代理 curl --proxy 127.0.0.1:1080 https://api.telegram.org
DNS 解析是否正常 nslookup api.telegram.org / dig api.telegram.org
DNS 配置是否正确 /etc/resolv.conf
是否使用了 DNS 代理 nslookup api.telegram.org 8.8.8.8
网络连通性是否正常 ping 8.8.8.8 / traceroute api.telegram.org

六、附录:常见错误与解决方案

错误信息 可能原因 解决方案
fetch failed HTTPS 请求被拦截 检查防火墙、代理、证书验证
DNS lookup timed out DNS 解析失败 检查 DNS 配置、代理、网络连通性
Connection refused 无法连接 Telegram API 检查网络、代理、防火墙
ERR_SSL_PROTOCOL_ERROR HTTPS 协议错误 检查证书、代理、系统时间

通过以上步骤,你可以系统性地排查并解决 OpenClaw 在 Telegram 请求中遇到的 fetch failed 问题。如仍有疑问,建议提供具体的错误日志或代码片段,以便进一步分析。

评论 (0)

暂无评论,快来抢沙发吧!

扫一扫,手机查看

扫描上方二维码,在手机上查看本文