1. 为什么 OpenClaw 默认只能本机访问
OpenClaw 装好之后,Gateway 默认把监听地址绑在127.0.0.1,也就是 loopback 回环地址。这个设计本身没问题——它意味着只有同一台机器上的浏览器才能打开 Control UI,外部网络根本连不上。但问题也随之而来:你把 OpenClaw 部署在云服务器上,人在本地电脑前,想通过公网 IP 打开它的 Web 界面,结果发现浏览器一直转圈或者直接拒绝连接。
这不是 OpenClaw 坏了,而是它压根没打算让外部访问。默认配置里bind是loopback,mode是local,防火墙也没放行 18789 端口。你要做的,是把它从「只认本机」改成「监听所有网络接口」,同时把鉴权、跨域、设备身份验证这几道关卡按需调整。
这篇要解决的就是这条链路:OpenClaw 公网访问配置 + TaoToken 统一 Key 接入 + 自动化 config.toml 骨架。适合在远程服务器上跑 OpenClaw、需要从本地浏览器管理、或者想把 OpenClaw 作为服务提供给局域网内其他用户的人。下面从备份配置开始,一步步把 Gateway 改成公网可达,再把模型通道接到 TaoToken 上,最后给出验证和排障动作。
2. TaoToken 前置:统一 Key 与 API 通道
OpenClaw 本身是一个 Agent 框架,它需要调用大模型才能干活。默认配置里模型走的是volcengine-plan/kimi-k2.5这类通道,但如果你手上有多个模型供应商,每个都要单独配 Key、单独改 base_url,维护起来很烦。TaoToken 在这里的角色是统一 Key 和统一 API 通道:你只需要一个 Key,就能通过同一个入口调用不同模型,OpenClaw 的 config 里只写一个 provider 就行。
具体操作上,先去 TaoToken 控制台创建一个 API Key。地址是https://taotoken.net/api-keys,登录后点创建,复制出来的 Key 形如sk-xxxx。这个 Key 后面要写进 OpenClaw 的 config.toml 或者 settings.json 里,作为模型调用的凭证。
TaoToken 的 API 入口是https://taotoken.net/api,注意这个地址不带任何查询参数,直接作为 base_url 使用。OpenClaw 的模型配置里,provider 的 base_url 填这个,api_key 填你刚创建的 Key,模型名按 TaoToken 文档里支持的写。这样 OpenClaw 发请求时,会先到 TaoToken,再由 TaoToken 路由到具体模型,你不需要在 OpenClaw 里配多个供应商。
如果你还没决定用哪个模型,可以先在https://taotoken.net/models这个对话页面试一下,确认模型能正常响应,再把同样的模型名写进 OpenClaw 配置。长期跑编码任务或者 Agent 的话,Coding Plan 页面https://taotoken.net/coding-plan有更细的套餐说明,按自己的调用量选就行。
3. 可复制配置:config.toml 骨架与 settings.json 关键字段
OpenClaw 的配置分两块:一块是 Gateway 本身的网络与鉴权,通常写在~/.openclaw/openclaw.json或者你指定的 config.toml 里;另一块是模型通道,可以写在同一个文件,也可以拆到 settings.json。下面给一份可直接复制的骨架,你按自己的 IP、端口、Key 替换占位符即可。
先备份原配置,这一步别省:
mkdir -p ~/.openclaw/backups cp ~/.openclaw/openclaw.json ~/.openclaw/backups/openclaw.json.$(date +%Y%m%d_%H%M%S) ls -la ~/.openclaw/backups/然后编辑配置文件。如果你用的是 TOML 格式,骨架如下:
# ~/.openclaw/config.toml [gateway] port = 18789 mode = "local" bind = "0.0.0.0" [gateway.auth] mode = "token" token = "your-secure-token-here" [gateway.controlUi] allowInsecureAuth = true allowedOrigins = ["*"] dangerouslyDisableDeviceAuth = true [agents.defaults] workspace = "/root/.openclaw/workspace" [agents.defaults.model] primary = "taotoken/ark-code-latest" [agents.defaults.models] "taotoken/ark-code-latest" = {} "taotoken/kimi-k2.5" = {} [providers.taotoken] base_url = "https://taotoken.net/api" api_key = "sk-你的TaoTokenKey"如果你用的是 JSON 格式的 settings.json,关键字段对应如下:
{ "gateway": { "port": 18789, "mode": "local", "bind": "0.0.0.0", "auth": { "mode": "token", "token": "your-secure-token-here" }, "controlUi": { "allowInsecureAuth": true, "allowedOrigins": ["*"], "dangerouslyDisableDeviceAuth": true } }, "providers": { "taotoken": { "base_url": "https://taotoken.net/api", "api_key": "sk-你的TaoTokenKey" } }, "agents": { "defaults": { "model": { "primary": "taotoken/ark-code-latest" }, "models": { "taotoken/ark-code-latest": {}, "taotoken/kimi-k2.5": {} }, "workspace": "/root/.openclaw/workspace" } } }几个字段说明一下。bind改成0.0.0.0是让 Gateway 监听所有网络接口,这是公网访问的前提。auth.mode设成token表示用 Token 鉴权,token字段填一个你自己生成的强密码,别用默认值。controlUi.allowedOrigins设成["*"]是允许任意来源访问 Control UI,测试阶段方便,生产环境建议改成你的域名。dangerouslyDisableDeviceAuth设成true是因为 HTTP 模式下浏览器会禁用 Web Crypto API,导致设备身份验证失败,先关掉才能登录。
模型部分,providers.taotoken.base_url填https://taotoken.net/api,api_key填你的 TaoToken Key。agents.defaults.model.primary填taotoken/ark-code-latest或者你实际要用的模型名。这样 OpenClaw 启动后,所有模型调用都会走 TaoToken 通道。
保存后重启 Gateway:
openclaw gateway restart sleep 3 openclaw gateway status正常的话你会看到类似输出:
Gateway: bind=lan (0.0.0.0), port=18789 Dashboard: http://<你的IP>:18789/ Probe note: bind=lan listens on 0.0.0.0 (all interfaces)如果状态里还是bind=loopback,说明配置没生效,检查文件路径和格式。
4. 验证请求:公网可达与鉴权生效
配置改完,先在本机测一下端口通不通:
curl -I http://127.0.0.1:18789返回 200 或者 302 都算正常。然后从另一台机器测公网 IP:
curl -I http://<你的服务器公网IP>:18789如果本机通、外网不通,大概率是防火墙或者云服务器安全组没放行。Ubuntu 用 UFW 的话:
sudo ufw allow 18789/tcp sudo ufw reload sudo ufw statusCentOS 用 firewalld:
sudo firewall-cmd --permanent --add-port=18789/tcp sudo firewall-cmd --reload云服务器还要去控制台的安全组里加一条入站规则,允许 18789 端口的 TCP 流量。这一步经常被漏掉,本机 curl 通、外网 curl 不通,先查安全组。
浏览器打开http://<你的服务器IP>:18789,应该能看到登录界面。输入你配置里写的 token,登录成功进入 Control UI。如果提示origin not allowed,检查allowedOrigins是否包含*或者你的实际来源。如果提示control ui requires device identity,检查dangerouslyDisableDeviceAuth是否为true。
鉴权生效的验证方式是:不带 token 直接请求 API 端点,应该返回 401 或 403。带正确 token 请求,返回正常数据。这样说明 Token 鉴权在工作。
模型通道的验证,可以在 Control UI 里发一条测试消息,看是否正常返回。如果报模型不可用,检查providers.taotoken.base_url是否写成了https://taotoken.net/api,以及api_key是否复制完整。你也可以先用 curl 直接测 TaoToken 的接口:
curl -X POST https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer sk-你的Key" \ -H "Content-Type: application/json" \ -d '{"model":"ark-code-latest","messages":[{"role":"user","content":"ping"}]}'返回正常说明 Key 和通道没问题,问题就在 OpenClaw 配置侧。
5. 本篇常见错排查
Q1: 登录时提示origin not allowed
这是 Control UI 的跨域来源限制。在gateway.controlUi里把allowedOrigins设成["*"],或者填你的实际域名。改完重启 Gateway。
Q2: 提示control ui requires device identity
HTTP 模式下浏览器禁用了 Web Crypto API,设备身份验证走不通。在gateway.controlUi里加dangerouslyDisableDeviceAuth: true。生产环境建议上 HTTPS,然后把这个关掉。
Q3: 提示unauthorized: too many failed authentication attempts
多次输错 token 触发了速率限制。等 5 到 10 分钟,清一下浏览器缓存和 Cookie,再重启 Gateway 重试。
Q4: 本机能访问,外网访问不了
按顺序查这几项:
# 1. 确认 Gateway 监听地址 openclaw gateway status | grep -i "listening\|bind" # 2. 检查端口监听情况 ss -tlnp | grep 18789 # 3. 检查防火墙 sudo ufw status sudo iptables -L -n | grep 18789 # 4. 从另一台机器测端口连通性 telnet <服务器IP> 18789 nc -vz <服务器IP> 18789常见原因就三个:bind还是127.0.0.1、防火墙没放行、云服务器安全组没加规则。
Q5: 模型调用报错,提示 provider 不可用
检查providers.taotoken.base_url是否写成了https://taotoken.net/api,注意结尾没有斜杠。api_key是否完整复制,有没有多余空格。模型名是否在 TaoToken 支持的列表里。可以先用 curl 直接测 TaoToken 接口,排除 Key 本身的问题。
Q6: 想恢复成仅本地访问
把bind改回loopback,allowInsecureAuth设false,allowedOrigins设空数组,dangerouslyDisableDeviceAuth设false,然后重启 Gateway。
6. 接入文档与后续动作
公网访问配好之后,下一步是把模型通道调通。TaoToken 的 API Key 在https://taotoken.net/api-keys创建,接入文档在https://taotoken.net/doc,里面有 base_url、鉴权方式、模型列表的详细说明。如果你还没确定用哪个模型,先去https://taotoken.net/models对话页面试几个,确认响应正常再写进 OpenClaw 配置。
长期跑编码任务或者 Agent 的话,https://taotoken.net/coding-plan有套餐说明,按调用量选就行。配置过程中遇到模型通道的问题,优先查接入文档里的 base_url 和鉴权部分,大部分报错都是地址写错或者 Key 没复制全。
最后提醒一句:dangerouslyDisableDeviceAuth和allowedOrigins: ["*"]只建议在测试环境或者受信任的局域网里用。生产环境上 HTTPS,把来源限制到具体域名,Token 用openssl rand -base64 32生成强密码,防火墙只放行必要 IP。这些动作做完,OpenClaw 的公网访问链路才算真正落地。