
1. 为什么要把 OpenClaw 放到内网穿透后面OpenClaw 这类本地大模型客户端核心吸引力在于把推理任务留在自己机器上跑。你家里那台带独显的台式机或者公司配的高配工作站平时闲置的算力其实相当可观。把 OpenClaw 跑起来之后代码补全、文档问答、长文本摘要这些活儿都能在本地完成数据不出内网响应速度也比走公网 API 稳定。但问题马上就来了模型跑在家里的机器上人却在公司、学校或者出差路上。没有公网 IP外面根本连不进来。这时候内网穿透就成了刚需——它把内网服务映射到一个公网可达的地址让远程设备也能访问你本地的 OpenClaw。我试过几种方案最后稳定下来的组合是OpenClaw 本地监听 内网穿透映射 TaoToken 统一 Key 做鉴权与调用通道。这样既保留了本地算力又解决了远程访问和鉴权管理的问题。下面把整条链路拆开讲每一步都给可复制的配置。先说清楚适用人群如果你手里有一台能跑大模型的机器又经常需要在外网环境调用它这套方案就值得跟做。不需要公网 IP不需要改路由器也不需要把服务暴露在裸奔的公网端口上。2. TaoToken 统一 Key 与 OpenClaw 的接入准备TaoToken 在这里扮演的角色是统一鉴权与调用通道。OpenClaw 本地服务通过内网穿透暴露之后外网请求需要经过一层可靠的鉴权否则谁都能调你的模型。TaoToken 提供统一的 API Key 管理配合 Base URL 配置可以让 OpenClaw 的远程调用走一条受控的通道。你需要先拿到两样东西一个 TaoToken 的 API Key以及确认 OpenClaw 的本地监听端口。API Key 在控制台生成地址是 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 。生成之后先复制保存后面配置里要用。OpenClaw 默认监听 127.0.0.1:3000这个端口只对本机可见。内网穿透客户端会把这个端口映射出去。在映射之前先确认 OpenClaw 服务本身是正常运行的本地用 curl 能通curl -s http://127.0.0.1:3000/v1/models \ -H Authorization: Bearer 你的本地token如果这条命令返回模型列表说明 OpenClaw 本地服务没问题。接下来配置内网穿透客户端把 3000 端口映射到一个公网地址。穿透工具的选择很多核心是拿到一个稳定的公网 endpoint比如https://your-tunnel.example.com。拿到公网 endpoint 之后OpenClaw 的远程访问链路就变成了外网设备 → 公网 endpoint → 内网穿透节点 → 本地 127.0.0.1:3000。TaoToken 的 Key 在这一层负责鉴权确保只有持有有效 Key 的请求才能穿透到本地模型。这里有个关键点OpenClaw 的配置文件里需要同时填 Base URL 和 API Key。Base URL 指向你的公网 endpointAPI Key 用 TaoToken 生成的 Key。这样远程请求先到 TaoToken 的鉴权层通过后再转发到你的本地 OpenClaw。如果你用的是 Claude Code 或者类似的 coding agent配置逻辑是一样的。TaoToken 的接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 里面有不同客户端的配置示例可以对照着改。3. 可复制的 endpoint 与 auth.json 配置片段这一节直接给配置。OpenClaw 的配置文件通常放在用户目录下的.openclaw或者项目根目录具体路径看你的安装方式。下面是一个完整的auth.json示例路径假设为~/.openclaw/auth.json{ base_url: https://your-tunnel.example.com/v1, api_key: sk-你的TaoTokenKey, model: openclaw-local, timeout: 120, proxy: { enabled: false } }注意base_url末尾要带/v1这是 OpenAI 兼容接口的惯例。api_key填 TaoToken 控制台生成的 Key。model字段填你在 OpenClaw 里实际加载的模型 ID可以用openclaw-local作为占位具体值在 OpenClaw 的模型列表里查。如果你用的是 TOML 格式的配置比如~/.openclaw/config.toml对应写法[server] base_url https://your-tunnel.example.com/v1 api_key sk-你的TaoTokenKey model openclaw-local timeout 120 [proxy] enabled false对于 Claude Code 用户配置文件在~/.claude/settings.json需要写全三件套Base URL、Key、Model ID。{ env: { ANTHROPIC_BASE_URL: https://your-tunnel.example.com, ANTHROPIC_API_KEY: sk-你的TaoTokenKey, ANTHROPIC_MODEL: openclaw-local } }Cline 的 MCP 配置也是类似结构在cline_mcp_settings.json里{ mcpServers: { openclaw-remote: { url: https://your-tunnel.example.com/v1, headers: { Authorization: Bearer sk-你的TaoTokenKey } } } }Codex 的auth.json路径通常在~/.codex/auth.json{ base_url: https://your-tunnel.example.com/v1, api_key: sk-你的TaoTokenKey, model: openclaw-local }配置写完先别急着远程测在本地用 curl 验证一下 Base URL 是否可达curl -s https://your-tunnel.example.com/v1/models \ -H Authorization: Bearer sk-你的TaoTokenKey如果返回模型列表说明穿透链路和鉴权都通了。如果返回 401检查 Key 是否复制完整如果返回 502 或超时检查内网穿透客户端是否在线、本地 OpenClaw 是否在跑。4. 远程请求验证与成功结果确认配置就绪后从外网设备发起一次真实的对话请求。用 curl 模拟curl -s https://your-tunnel.example.com/v1/chat/completions \ -H Content-Type: application/json \ -H Authorization: Bearer sk-你的TaoTokenKey \ -d { model: openclaw-local, messages: [ {role: user, content: 用一句话解释内网穿透} ], stream: false }成功的话会返回类似这样的 JSON{ id: chatcmpl-xxx, object: chat.completion, created: 1710000000, model: openclaw-local, choices: [ { index: 0, message: { role: assistant, content: 内网穿透就是让没有公网 IP 的内网服务通过一个公网节点被外部访问。 }, finish_reason: stop } ] }看到choices数组里有内容说明整条链路跑通了外网请求 → TaoToken 鉴权 → 内网穿透节点 → 本地 OpenClaw → 模型推理 → 原路返回。如果用 Python 调用代码更直观import requests url https://your-tunnel.example.com/v1/chat/completions headers { Authorization: Bearer sk-你的TaoTokenKey, Content-Type: application/json } payload { model: openclaw-local, messages: [{role: user, content: 写一个快速排序}], stream: False } resp requests.post(url, jsonpayload, headersheaders, timeout120) print(resp.json()[choices][0][message][content])实测下来首次请求可能会慢几秒因为穿透节点要建立连接。后续请求会稳定很多。如果开了流式输出把stream改成true然后逐行读取data:前缀的内容即可。验证成功后你可以在手机、平板或者公司电脑上直接访问这个 endpoint。OpenClaw 的 Web 界面也可以通过公网地址打开前提是穿透工具同时映射了 Web 端口和 API 端口。5. 常见报错排查401、local proxy failed、reading choices这一节列几个高频报错和对应的排查步骤。401 Unauthorized最常见的原因是 Key 不对或者没带上。先检查请求头里的Authorization字段格式是不是Bearer sk-xxx注意 Bearer 后面有一个空格。然后确认 TaoToken 控制台里这个 Key 是否还在有效期内有没有被禁用。如果 Key 没问题检查 Base URL 是否指向了正确的 endpoint有时候穿透地址变了但配置没更新请求打到了旧地址上鉴权层自然不认。local proxy failed这个报错通常出现在内网穿透客户端这一侧。意思是穿透节点无法连接到你的本地服务。排查顺序先确认本地 OpenClaw 是否在运行用curl http://127.0.0.1:3000/v1/models测一下然后确认穿透客户端里映射的本地端口是不是 3000有没有写错最后检查本地防火墙有没有拦截穿透客户端的出站连接。如果穿透客户端显示在线但依然报这个错尝试重启穿透客户端重新建立隧道。reading choices 相关报错比如Error reading choices: unexpected end of JSON input这通常是响应体不完整导致的。可能原因有三个一是穿透链路超时请求还没返回完连接就断了把timeout调大到 180 或 300二是模型推理时间太长穿透节点有默认超时限制需要在穿透工具里调整超时参数三是流式输出时客户端解析逻辑有问题检查是否按 SSE 格式逐行解析。OAuth 相关报错如果你用的是 Claude Code 或 Codex 这类带 OAuth 流程的客户端可能会遇到OAuth token exchange failed。这时候检查settings.json或auth.json里的 Base URL 是否覆盖了默认的 OAuth 端点。有些客户端会优先走 OAuth 而不是 API Key需要在配置里显式禁用 OAuth 或者把认证方式改成 API Key。TaoToken 的接入文档里有针对这种情况的说明可以对照检查。连接超时但本地正常如果本地 curl 通远程 curl 超时问题基本出在穿透链路上。先看穿透客户端的日志确认隧道是否建立成功。然后检查公网 endpoint 是否可以从外网 ping 通。有些穿透工具会定期更换公网地址如果地址变了所有配置都要同步更新。建议用固定域名或者付费版固定地址省去反复改配置的麻烦。6. 让本地模型随时在线的稳定接入方式整套链路跑通之后日常使用其实很省心。OpenClaw 在本地跑着内网穿透客户端保持在线TaoToken 的 Key 负责鉴权外网设备随时可以调。我一般会把穿透客户端设成开机自启这样机器一开远程访问就自动就绪了。有几个实用技巧可以提升稳定性。第一给穿透客户端配一个健康检查定时探测本地 3000 端口发现服务挂了就自动重启 OpenClaw。第二TaoToken 的 Key 可以按项目分多个不同设备用不同的 Key方便追踪调用来源也方便某个 Key 泄露时单独吊销。第三如果经常在移动网络下访问建议把超时设大一点移动网络抖动比有线网络明显。对于长期跑 coding agent 的场景TaoToken 的 Coding Plan 提供了更稳定的调用配额地址是 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 。如果你只是偶尔验证模型效果用模型对话页面就够了https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite 。最后提醒一句内网穿透把本地服务暴露到公网安全措施不能省。TaoToken 的 Key 鉴权是一层穿透工具本身的访问控制是另一层。不要把管理接口直接映射出去只映射必要的 API 端口。如果穿透工具支持 IP 白名单把常用设备的出口 IP 加进去能挡掉大部分扫描流量。