龙虾 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. 使用 nslookup 或 dig 测试 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 证书验证(可临时关闭)
如果你的代码中使用了 fetch 或 axios,可以尝试关闭 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 代码中使用的
fetch或axios是否配置了正确的代理或 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 问题。如仍有疑问,建议提供具体的错误日志或代码片段,以便进一步分析。

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