海外 VPS 很适合跑 Agent、工作流和自动化,但一旦目标站点像小红书这样对异常 IP、浏览器画像和登录环境非常敏感,事情就会立刻变味:大脑在海外,手也在海外,风控就会把你当成陌生访客。我们这次折腾出来的最值得分享的一点,是把“算力和控制逻辑”留在海外 VPS,把“真实 GUI 浏览器和国内出口”交给家里的 Win11,然后用 OpenClaw 的 node host + browser proxy 把两者重新缝起来。
先说结论
真正有价值的,不是“把 Chrome 调试端口暴露出来”这件事本身,而是下面这个思路:
- 海外 VPS 继续跑 OpenClaw Gateway / skills / agent 逻辑。
- 国内 Win11 只负责提供 GUI Chrome 和浏览器执行能力。
- 通过 OpenClaw 的 node host,把 Win11 变成一个远程浏览器节点。
- 浏览器操作走 node browser proxy,而不是让海外 VPS 自己直接碰站点。
这样做的结果是:
- 逻辑、调度、技能仍然集中在 VPS,方便统一维护。
- 浏览器和出口 IP 落在国内 Win11,更接近“真人在国内机器上操作”。
- 浏览器是可见的 GUI,可以扫码、过验证、必要时人工接管。
- 对小红书这类站点,比“海外 VPS 直接打开页面”稳得多。
为什么我们不该继续死磕远程 CDP 端口
一开始最自然的想法,是把 Win11 上 Chrome 的远程调试端口(CDP)暴露出来,然后从 VPS 直连过去。
这个思路看起来很优雅,实际上坑非常多:
- Windows 上从 SSH 会话启动的 Chrome,不一定真正跑在桌面交互会话里。
- 即使本机
127.0.0.1:9222能通,跨 Tailscale 或 SSH forward 仍然可能出现 Empty reply、Connection reset、ECONNREFUSED 这类诡异问题。 - Windows OpenSSH 做 TCP 转发时,对这种长连接/调试口流量并不总是稳定。
- 直接暴露调试端口的安全边界也很脆弱,因为拿到 CDP 口的人几乎就拿到了浏览器本身。
我们最后得到的判断是:
问题并不在 Chrome,而在“怎么把远程浏览器能力安全、稳定地暴露给 OpenClaw”。
这时候,OpenClaw 自己的 node host + browser proxy 才是正解。
最终架构
上面这张图就是最后跑通的链路:
- 海外 VPS 上运行 OpenClaw Gateway。
- Win11 通过 Tailscale 与 VPS 互通。
- 由于 Gateway 默认只绑定在 loopback,我们让 Win11 先建立一条 SSH tunnel 到 VPS 的 loopback Gateway 端口。
- Win11 上运行 OpenClaw node host。
- node host 打开本地 browser proxy,把 Win11 上的 Chrome 能力暴露给 Gateway。
- 最终,Agent 在 VPS 上发出的 browser 调用,会被代理到 Win11 上执行。
这个方案有一个很关键的优点:
Agent 只在“逻辑层”远程,浏览器执行始终在国内机器本地完成。
从失败路径到可用路径
这次最值得记住的,不只是最终架构,而是中间的演化过程:
失败路径:海外 VPS 直接开站点
最开始的直觉是:
- VPS 上跑 skill
- VPS 上直接开 Chrome
- 直接访问小红书
这条路的问题太明显了:
- 海外出口 IP 很容易异常
- 登录态不稳定
- 验证码 / 风控 / 设备画像更容易出问题
- 即使能打开,也不利于人工接管
半成功路径:远程调试端口 / CDP 暴露
第二阶段,我们尝试了:
- Win11 启动带调试端口的 Chrome
- 通过 Tailscale / SSH 隧道 / 端口转发暴露 CDP
- 让 VPS 直接连接这个 CDP 端口
这条路“看起来快”,但运维成本很高,稳定性也差。
可用路径:Win11 变成 OpenClaw 节点
最后我们切换思路:
- 不再把 Win11 当成一个“暴露端口的被控浏览器”
- 而是把 Win11 当成一个 OpenClaw node
- 由 OpenClaw 官方支持的 browser proxy 来暴露浏览器能力
这一步之后,事情就顺了:
- Win11 节点接入 Gateway
- 节点显示
browser, systemcapability - 可以在 Win11 上启动 OpenClaw 管理的
openclawprofile - VPS 侧通过
browser工具直接操控 Win11 的 GUI Chrome
真正有价值的分层:大脑在海外,手在国内
这是我觉得最值得分享的一句话:
海外 VPS 负责思考,国内 Win11 负责出手。
更具体一点:
海外 VPS 负责什么
- Agent 推理
- 工作流编排
- skill 路由
- 任务调度
- 日志与统一维护
国内 Win11 负责什么
- GUI Chrome
- 登录态
- 国内出口 IP
- 扫码 / 验证码 / 人工接管
- 对目标站点发起真实浏览器动作
这是一种非常实用的分层方式,因为它把“容易被风控关注的部分”和“纯计算逻辑的部分”分开了。
为什么 GUI 很重要
如果目标是小红书、抖音、视频号、公众号后台这一类站点,GUI 不是装饰,而是可靠性的一部分。
原因包括:
- 需要扫码登录。
- 可能会遇到滑块或图形验证。
- 需要确认页面是否真的卡住。
- 某些发布流程需要人工复核。
- 无头浏览器或纯 API 调用更容易脱离“真实用户行为画像”。
所以这套方案里,Win11 不是“一个装了浏览器的无头盒子”,而是:
一个可见、可接管、可长期保有登录态的浏览器执行节点。
这套方案里最容易被忽略的几个细节
1. Gateway loopback bind 决定了 SSH tunnel 不是可选项
如果 OpenClaw Gateway 运行在 VPS 上,而且使用默认的:
gateway.bind=loopback
那么 Win11 节点不能直接连 VPS 的 Tailscale 地址去找 Gateway,因为 Gateway 根本没对外监听。
正确做法是:
- Win11 先建立一条 SSH tunnel 到 VPS 的
127.0.0.1:18789 - 再让 node host 连接 Win11 本地的
127.0.0.1:18789
这样既保留了 loopback 的安全边界,又让远端节点能通过隧道接入。
2. 节点配对走的是 devices,而不是 nodes pending
这是一个很容易踩的坑。
OpenClaw 里的 headless node host 在 WebSocket 握手时,走的是 device pairing。 所以真正该看的命令是:
openclaw devices listopenclaw devices approve <requestId>
而不是一开始直觉上会去看的 openclaw nodes pending。
3. Windows 上长期运行的东西,最好别靠一次性命令拼起来
临时验证时,直接在 PowerShell 里起:
- SSH 隧道
openclaw node run
当然可行。
但一旦要长期使用,就应该把它收编成:
- Scheduled Task
- InteractiveToken
- AtLogOn
- 带 PID 和状态检查的守护脚本
这样 Win11 重新登录之后,节点会自动恢复,而不是等你手动再点一遍。
这套方案适合谁
我觉得它特别适合以下几类场景:
1. 站点强依赖国内 IP
比如:
- 小红书
- 抖音创作者后台
- 某些国内 SaaS 控制台
- 某些有地域风控的运营后台
2. 你希望保留“逻辑在云端”的开发体验
如果你已经习惯:
- 所有脚本、skill、配置、日志都在 VPS 上
- Agent 也跑在 VPS 上
那么这套方式可以让你不必把整套工作流迁回国内机器。
3. 你需要真实 GUI 浏览器,而不是只要一个 headless runtime
很多时候,GUI 本身就是能力的一部分。
最后的经验总结
如果让我把这次折腾浓缩成几条经验,我会写成下面几句:
- 不要一上来就暴露 Chrome 调试端口。 这只是“能连上浏览器”,不等于“能稳定交付浏览器能力”。
- OpenClaw 官方的 node host + browser proxy,比手搓 CDP 暴露更值得信任。
- 海外 VPS 不一定要直接碰目标站点。 让它负责“思考”,把“出手”交给国内机器,是一种更聪明的分工。
- 对于小红书这类站点,GUI 浏览器不是锦上添花,而是稳定性本身。
- 工程化永远重要。 临时跑通只是开始,最终还是要落到 Scheduled Task、保活、状态检查这些基础设施上。
如果你也在做远程 Agent、浏览器自动化、或者需要让海外运行的工作流借用国内机器的浏览器能力,希望这篇文章能帮你少踩几颗雷。