记一次小龙虾(OpenClaw)的 web_fetch 工具被 SSRF 检查拦截的排查与解决
问题现象
最近一个月来在使用小龙虾(OpenClaw)时,工具 web_fetch(网页内容抓取)频繁失败,错误信息为:
Blocked: resolves to private/internal/special-use IP address
这直接导致无法用 web_fetch 读取任何外部网页内容,包括技术文档、社区帖子、工具官网等。
内网站点同样受影响——即使访问的是局域网内的服务(例如 NAS 管理界面、路由器后台、局域网文件服务等),SSRF 检查也会因为同样的原因拦截请求。
当然小龙虾会在 web_fetch 调用不通的时候,换用 curl 或者干脆调用联网搜索来搜索要访问的 URL,所以之前一直没太强的感知。
排查过程
1. 定位根因
通过 DNS 查询确认,Surge(macOS 上的网络路由配置工具)在增强模式下,会将所有 DNS 查询劫持到虚拟 IP 段 198.18.0.0/15(RFC 2544 基准测试地址段),并返回一个虚假的 Fake IP 地址。OpenClaw 的 SSRF 安全检查识别到这是特殊保留地址段,判定为风险地址并拒绝访问。
简单来说:Surge 返回了「假 IP」→ OpenClaw SSRF 拦截了「假 IP」→ web_fetch 失败
Fake IP 的隐私保护机制
Fake IP 模式的核心目的是隐私保护。当 DNS 查询被劫持并返回虚假 IP 时,真实的访问目标不会被暴露在本地网络层面——所有流量都通过加密隧道转发,外部观察者只能看到代理服务器的 IP,无法追踪到用户实际访问的域名。这种设计在需要保护查询隐私的场景下非常实用。
但与此同时,OpenClaw 的 SSRF 安全检查会将 Fake IP 判定为可疑地址并拦截,因为它无法区分「真正的私有/内网 IP」和「代理工具生成的虚拟 IP」。
2. 搜索官方议题
在 GitHub OpenClaw 仓库中搜索,发现这是一个被广泛反馈的问题,涉及多个相关议题:
议题 #26847 还提供了一个 DNS-over-HTTPS 补丁方案,思路是劫持 Node.js DNS 解析,对 198.18.x.x 的响应通过 DoH 重新解析为真实 IP,作为配置修复之前的临时绕过方案。
3. 找到官方修复
PR #61830 在 v2026.4.10(2026-04-11 发布)中为 web_fetch 新增了 ssrfPolicy.allowRfc2544BenchmarkRange 配置项,允许用户显式放行 RFC 2544 基准地址段(198.18.0.0/15)。
关键代码变更:
在
src/agents/tools/web-fetch.ts中,将policy参数透传给底层fetchWithSsrFGuard()Cache key 增加了 policy 维度,避免严格/宽松策略的缓存混淆
配置 schema 和 types 全面更新
4. 验证修复
只需在 openclaw.json 的 tools.web.fetch 下添加配置:
{
"tools": {
"web": {
"fetch": {
"ssrfPolicy": {
"allowRfc2544BenchmarkRange": true
}
}
}
}
}
重启 Gateway 后,原本失败的 web_fetch 立即恢复正常,返回完整的网页内容。
解决方案
推荐方案
在 openclaw.json 中添加以下配置(适用于 v2026.4.10 及以上):
{
"tools": {
"web": {
"fetch": {
"ssrfPolicy": {
"allowRfc2544BenchmarkRange": true
}
}
}
}
}
验证步骤:
# 1. 验证配置合法
openclaw config validate
# 2. 重启 Gateway
openclaw gateway restart
# 3. 测试 web_fetch 是否恢复正常
备选临时方案
如果使用旧版本或配置后仍未生效,可参考议题 #26847 中的 DNS-over-HTTPS 补丁:通过 NODE_OPTIONS --import 注入一个 ESM 模块,劫持 dns.lookup,对返回 198.18.x.x 的查询自动通过 DoH 重新解析。
技术背景
为什么是 198.18.x.x?
198.18.0.0/15 是 RFC 2544 定义的基准测试地址段,专门用于网络设备性能测试。Surge、Clash 等路由工具的 Fake IP 模式使用这个地址段来标识「待建立的连接」,而不是真实的公网 IP。
OpenClaw 的 SSRF 安全检查将这个地址段识别为「特殊保留地址」并默认拦截,这是合理的安全设计——但在使用 Fake IP 路由环境时会导致误拦。
内网站点也受影响
除了外部网站,使用 Fake IP 路由时,本地网络中的内网站点(例如 NAS 管理界面、路由器后台、局域网文件服务等)同样会因 DNS 劫持返回 Fake IP 而被 SSRF 拦截。开启 allowRfc2544BenchmarkRange 配置后,这类场景也能正常使用。
总结
本文档写于 2026 年 4 月 16 日,基于 OpenClaw v2026.4.14 版本验证。