很多人第一次接触 OpenClaw 时,最容易把 gateway 理解成“主程序”,把 node 理解成“另一个网关”。
但从架构上看,OpenClaw 的设计其实更像两层系统:
• gateway是控制面,负责接入消息渠道、维护会话、运行模型、路由工具调用。• node是执行面和设备面,负责把某台机器的能力接进来,让 OpenClaw 真正去操作那台设备。
如果只把 OpenClaw 当成一个聊天机器人,gateway 已经够用了;但如果你希望它控制更多机器、调用更多设备能力、把命令执行放到指定主机上,node 才是关键。
这篇文章不先讲配对,而是先把 node 的架构机制、用途和适用场景讲清楚。最后再用一个最实用的例子收尾:WSL2 上运行 gateway,Windows 上运行 node,把 OpenClaw 的控制面和执行面拆开。
一、OpenClaw Node 到底是什么
node 不是第二个 gateway,也不是一个“更轻量的聊天入口”。
它更准确的定位是:挂在 Gateway 后面的设备能力提供者和远程执行宿主。
从官方定义看,node 会以 role: "node" 的身份连接到 Gateway 的 WebSocket,向 Gateway 广告自己能提供哪些能力。对于 OpenClaw 来说,这些能力可能包括:
• system.run、system.which这样的命令执行能力• camera.*、canvas.*、notifications.*这样的设备能力• 某些平台上的浏览器代理或系统级扩展能力
换句话说,Gateway 并不需要自己拥有所有权限和所有外设。它只需要知道“哪一个 node 能做什么”,然后在合适的时候把调用路由过去。
这个设计和很多传统 agent 工具的区别非常明显:
• 传统做法通常是“模型和执行都在同一台机器上” • OpenClaw 的做法是“模型和编排在 Gateway,执行和设备访问在 Node”
一旦你理解了这一点,后面很多配置问题都会变简单。因为你会知道:node 的意义从来不是多开一个服务,而是把 OpenClaw 的能力延伸到别的设备上。
二、Node 在架构上解决了什么问题
1. 把控制面和执行面拆开
在没有 node 的情况下,OpenClaw 的命令执行天然落在 Gateway 所在主机。
这意味着:
• Gateway 在哪里,命令就在哪里执行 • Gateway 有什么权限,模型就能间接调什么权限 • 设备能力和系统权限都跟 Gateway 主机强绑定
Node 把这件事解耦了。
Gateway 继续负责:
• 接收用户消息 • 调用模型 • 维护会话状态 • 决定要不要使用工具
Node 则负责:
• 在具体机器上执行命令 • 暴露设备能力 • 以该机器本地的权限边界处理审批和 allowlist
所以在逻辑上,Gateway 更像“大脑和中控台”,Node 更像“手脚和外设接口”。
2. 让 OpenClaw 具备多设备能力
如果只有 Gateway,OpenClaw 只能控制 Gateway 所在的那一台机器。
有了 Node 以后,它就可以扩展成一套多设备系统。例如:
• Gateway 跑在一台常驻在线的 Linux 主机上 • 你的 Windows 工作站作为一个 node 接入 • 你的 macOS 电脑作为另一个 node 接入 • 某台专门跑构建任务的机器再作为一个 headless node 接入
这样一来,OpenClaw 看到的就不再是一台机器,而是一组可调度的能力节点。
3. 把安全边界放回设备本地
这一点非常重要,但也最容易被忽略。
OpenClaw 的 exec approvals 和 allowlist 不是抽象地保存在“系统中心”,而是跟随实际执行主机生效。
这意味着:
• 命令在 Gateway 主机执行,就由 Gateway 主机本地审批 • 命令在 Node 主机执行,就由 Node 主机本地审批
这带来的好处是,你可以把真正敏感的命令权限控制在设备本地,而不是让 Gateway 统一拥有所有机器的高权限访问。
4. 让 Gateway 常驻在线,而设备按需接入
很多人的真实使用环境不是“一台永不休眠的工作站”,而是:
• 笔记本会睡眠 • 本地桌面机会重启 • 某些设备只在白天在线
如果你把 Gateway 直接跑在这些设备上,会出现一个问题:设备一睡眠,整个控制面就一起消失。
Node 的价值就是让你把 Gateway 放到一个更稳定的地方,而把设备接入变成“能力接入”而不是“系统本体”。这样即使某个 node 暂时不在线,Gateway 和会话仍然活着。
三、Node 适合什么场景
如果你只是在单台机器上偶尔跑几条命令,未必一定需要 node。
但下面这些场景,node 的价值会非常明显。
场景一:你想让 OpenClaw 常驻在线
比如你希望:
• 消息渠道一直在线 • Dashboard 可以持续保留会话状态 • 模型调度不中断
这时最合理的做法,是把 Gateway 放在一个稳定宿主上,再把你自己的工作设备挂成 node。
场景二:你希望命令只在指定机器上执行
例如:
• Git、PowerShell、浏览器自动化必须在 Windows 上执行 • 某些图形能力或通知能力必须依赖本机桌面环境 • 某些命令只能访问本机装好的工具链
这时 node 可以让你明确告诉 OpenClaw:控制还在 Gateway,但执行必须落在这个设备上。
场景三:你想把权限边界收紧
如果 Gateway 跑在一个更通用的 Linux 环境里,而你的个人电脑包含更多敏感文件,那么让 Gateway 直接获得本机执行权限未必是你想要的。
把个人电脑作为 node 接入,会更符合“中心编排、边缘执行”的思路。
场景四:你想扩展 OpenClaw 的设备能力
Node 的意义不只是 shell。
它的长期价值在于:OpenClaw 可以通过 node 接入不同设备的相机、画布、通知、浏览器代理和系统集成功能。也就是说,node 是 OpenClaw 从“聊天 + 命令”走向“多设备操作系统”的基础设施。
四、Node 和 Gateway 的区别,应该怎么理解
很多配置问题,都是因为一开始把这两个角色混了。
可以用最简洁的一句话区分:
• gateway负责“接入、会话、模型、路由”• node负责“设备、执行、能力暴露”
如果你更习惯工程语言,可以把它们理解成下面这张表。
因此,node 的设计用意不是替换 Gateway,而是扩展 Gateway。
五、为什么 WSL2 Gateway + Windows Node 是一个很实用的组合
理解完架构后,再来看一个非常典型的部署方式:
• gateway运行在WSL2• node运行在Windows
这个组合之所以实用,是因为它恰好对应了很多 Windows 用户的真实环境:
• 你想在 Linux 环境里跑 Gateway,享受更顺手的服务化和命令行环境 • 你又希望 OpenClaw 最终操作的是 Windows 本机,因为你的浏览器、PowerShell、桌面通知、工作文件都在那里
这其实就是最标准的“控制面和执行面分离”:
• WSL2 负责 Gateway • Windows 负责 Node
对于日常使用来说,这样的拆分有几个现实好处:
• Gateway 不需要直接背上 Windows 桌面环境的执行负担 • Windows 上的命令和设备能力仍然能被调用 • 后续你如果再接入更多设备,整体架构也不会变形
六、实操示例:WSL2 跑 Gateway,Windows 跑 Node
下面这部分不再讨论抽象概念,直接给出一套可落地的思路。
1. 先把 Gateway 配好
WSL2 里的 Gateway 配置至少要把这几个点写对:
{
gateway: {
mode: "local",
bind: "lan",
port: 18789,
auth: {
mode: "token",
token: "<随机长 token>"
}
}
}这里最容易踩的坑就是:
• bind: "lan"没配• port没配或写错
如果这两项没设好,Windows 上的 node 很可能连不上 WSL2 里的 Gateway,你看到的典型报错就是:
node host gateway connect failed: read ECONNRESET
node host gateway closed (1006)原因很直接:Gateway 没有真正监听到 Windows 可达的地址和端口。
2. 在 WSL2 中启动 Gateway
调试阶段最直接的方式是前台运行:
openclaw gateway run等你确认链路打通之后,再根据自己的环境决定是否切换成长期后台运行方式。
3. 在 Windows 上把本地端口转到 WSL2
因为 WSL2 和 Windows 不是同一个网络栈,Windows 侧最省事的办法通常是通过 portproxy 把一个本地端口转发到当前的 WSL2 IP。
先获取 WSL2 当前 IP:
$distro = "Ubuntu-24.04"
$wslIp = (wsl -d $distro -- hostname -I).Trim().Split(" ")[0]然后建立本地转发:
$listen = 18790
$target = 18789
netsh interface portproxy delete v4tov4 listenaddress=127.0.0.1 listenport=$listen
netsh interface portproxy add v4tov4 listenaddress=127.0.0.1 listenport=$listen `
connectaddress=$wslIp connectport=$target
Test-NetConnection 127.0.0.1 -Port $listen这个做法的好处是,Windows 上的 node 始终连本地 127.0.0.1:18790,不用每次直接记 WSL2 的动态 IP。
4. 在 Windows 上启动 Node
先用前台方式跑通:
$env:OPENCLAW_GATEWAY_TOKEN = "<与 Gateway 一致的 token>"
openclaw node run --host 127.0.0.1 --port 18790 --display-name "Windows Node"连接成功之后,再决定是否切成后台服务形式。
5. 在 Gateway 端批准配对
回到 WSL2 的 Gateway 侧,批准这个 node:
openclaw nodes pending
openclaw nodes approve <request-id>
openclaw nodes status做到这里,Windows Node 就已经真正成为 Gateway 后面的一个执行节点了。
七、配对成功后,怎么让 Dashboard 专门操作 Windows Node
这一点是很多人第二个会踩到的坑。
Node 配对成功,不等于后续所有命令都会自动跑到 node 上。
如果你不显式指定,exec 默认仍然可能落在 Gateway 主机执行。
在 Dashboard 的当前会话里,最直接的做法是输入:
/exec host=node security=allowlist node="Windows Node"这条命令的作用是:
• 把当前会话里的 exec目标切到node• 明确指定目标是 Windows Node• 使用 node 侧的 allowlist / approvals 规则
如果你希望这个行为变成默认值,而不是每次新会话都重新输入,可以在 Gateway 侧设置:
openclaw config set tools.exec.host node
openclaw config set tools.exec.node "Windows Node"
openclaw config set tools.exec.security allowlist如果你只想让某一个 agent 默认使用它,也可以做 agent 级绑定:
openclaw config set agents.list[0].tools.exec.node "Windows Node"八、这个部署方式最常见的几个坑
1. 忘了给 Gateway 配 bind: "lan"
这是最常见的问题之一。
如果 Gateway 只绑定在 WSL2 内部的 loopback,Windows 上的 node 无法通过你建立的转发链路连进去。表面看像“node 连不上”,本质上是 Gateway 没有监听在正确的地址上。
2. WSL2 IP 变化导致转发失效
WSL2 的 IP 不是固定不变的。只要 WSL2 重启,原来的 portproxy 目标地址就可能失效。
所以这套方案最好配一个自动刷新脚本,或者做成计划任务,在登录时重新读取 WSL2 IP 并更新转发规则。
3. 以为配对成功后命令就会自动跑到 Node
不会。
配对成功只是说明 node 已经注册到了 Gateway 上,真正的执行目标仍然取决于当前 exec 配置。
4. 只盯着 Gateway,看不到 Node 侧审批
如果命令被拦截,不要只在 Gateway 上找原因。因为命令真正在哪台主机执行,审批和 allowlist 就在哪台主机生效。
在这个例子里,很多执行控制实际落在 Windows Node 本地。
九、什么时候推荐你用这种方案
如果你符合下面这些条件,这套方式非常值得用:
• 你希望 Gateway 在 Linux 风格环境中运行 • 你日常真正要控制的是 Windows 本机 • 你不想让 Gateway 直接接管 Windows 的全部执行权限 • 你准备把 OpenClaw 从“一个聊天入口”扩展成“一个能调度多设备的系统”
如果你的需求只是“单机上偶尔跑几条命令”,那直接在一台机器上运行 Gateway 可能更简单。
但只要你开始在意设备边界、持续在线、权限隔离和多设备能力,node 的价值就会立刻体现出来。
十、结语
OpenClaw Node 的真正意义,不是多一个安装步骤,也不是多一个后台服务。
它代表的是一种架构取向:让 Gateway 做编排,让 Node 做执行,让 OpenClaw 从单机工具变成多设备控制系统。
从这个角度看,WSL2 Gateway + Windows Node 只是一个入门例子。它好用,不是因为它“技巧多”,而是因为它准确体现了 OpenClaw 的设计思想:
• 中心负责控制 • 边缘负责执行 • 不同设备提供不同能力
当你理解了这一点,后面无论是接 Windows、macOS,还是接别的远程主机,思路其实都是一致的。
夜雨聆风