乐于分享
好东西不私藏

OpenClaw便捷篇:搞定私有虚拟网络,让项目细节随时可见

OpenClaw便捷篇:搞定私有虚拟网络,让项目细节随时可见

那天我在咖啡厅,刚点完一杯拿铁,手机突然收到一条消息。

我想问家里的 OpenClaw——帮我查一下部署文档放在哪个目录了?

OpenClaw 在家里 Mac 上跑着,Gateway 端口 18789,为了安全没有设置LAN,路由器我不想开端口,数据更不能走第三方服务器。

那一刻我突然意识到:我需要的是一个“只对我可见”的虚拟局域网

折腾了一下午,我发现了一个方案:

🔐 自建 Headscale + Tailscale
⏱️ 15 分钟搞定
🚫 零端口暴露
🔒 点对点加密
👤 只对我的设备可见

这篇文章,我想把这个踩坑过程完整记录下来,特别是那个卡住我的 AuthKey 问题——以及我怎么绕过它。


💡 先说结论:三端架构,像门禁系统一样简单

如果你有 VPS,想安全访问家里的 OpenClaw,这套方案是目前我认为最合适的:

架构示意:

🌐 VPS (公网)

  └── Headscale 控制服务器 :8080

      └── 只负责"认门卡",不看你进门后干什么

🏠 家里 Mac (内网)

  └── Tailscale 客户端 → 虚拟 IP 100.64.0.1

  └── OpenClaw Gateway :18789 → 对虚拟网络可见

📱 外出设备 (手机/笔记本)

  └── Tailscale 客户端 → 虚拟 IP 100.64.0.2

  └── 直接访问 http://100.64.0.1:18789

🚪 用门禁系统来理解

Headscale = 你自建的“门禁系统”
Tailscale = 你发给每台设备的“门卡”

门禁只认你发的卡,不关心你进门后做什么。门卡之间互相认识,进门后可以随意对话——而且对话内容不经过门禁服务器

⚡ 三个关键认知

✅ Headscale 端口 8080 和 OpenClaw 端口 18789 是完全独立的,Headscale 只管“组网”

✅ 控制信令走 VPS(几 KB),数据流量 P2P 直连(不泄露)

✅ 虚拟 IP 100.64.x.x,就像 WiFi 局域网一样简单


但在动手之前,我其实对比了几个方案。

因为我知道,选对方案比踩坑更重要


🔍 方案对比:为什么我选了 Headscale

我的需求

🔒 安全:零端口暴露,数据不走第三方
🎯 自主:有 VPS,想完全掌控自己的网络
⚡ 简单:不想折腾复杂的路由器配置
👤 OpenClaw 专用:只对我的设备可见,不想分享给陌生人

四种方案横向对比

方案
优点
缺点
我的选择
frp 内网穿透
配置简单,有 VPS 就能跑
所有流量走 VPS 
需暴露端口
带宽消耗大
Tailscale 官方
极简,开箱即用
数据走官方服务器
免费版设备上限 100 台
Cloudflare Tunnel
无需公网 IP 
免费 HTTPS
域名需托管 Cloudflare 
配置复杂度中等
Headscale 自建
无端口暴露 
P2P 直连
无设备限制
需要手动配置 
AuthKey 可能踩坑

🎯 决策逻辑

我有 VPS → 以上都能跑

    ↓

我要安全 → frp 要暴露端口,排除

    ↓

我要自主 → Tailscale 官方数据走第三方,排除

    ↓

我不想绑定域名 → Cloudflare Tunnel 排除

    ↓

最终选择:Headscale 自建 ✨

💡 方法论小结

选远程访问方案时,先问自己三个问题:

  1. 我有 VPS 吗?

  2. 我要安全还是极简?

  3. 数据要不要走第三方?

答案不同,方案不同。有 VPS 且要自主,Headscale 是最优解。


方案定下来了,我开始动手。

但没想到,第一个坑就在眼前


🛠️ 实战过程:AuthKey 卡住,我用 Node 绑定绕过

第一步:VPS 安装 Headscale ✅

SSH 登录 VPS,按官方教程下载安装:

# 创建目录

mkdir -p /etc/headscale /var/lib/headscale

# 下载 (AMD64)

wget https://github.com/juanfont/headscale/releases/download/v0.23.0/headscale_0.23.0_linux_amd64 -O /usr/local/bin/headscale

# 添加执行权限

chmod +x /usr/local/bin/headscale

# 创建命名空间(类似用户组)

headscale namespaces create personal

# 启动服务

headscale serve

开放防火墙端口:

ufw allow 8080/tcp

浏览器访问 http://VPS_IP:8080/health,看到 OK——服务正常

⏱️ 这一步,大概 5 分钟


第二步:Mac 安装 Tailscale ✅

brew install tailscale

装好,准备连接。


第三步:AuthKey 注册 ⚠️ 卡住了

官方教程说,先在 VPS 创建 Pre-Auth Key:

headscale preauthkeys create --namespace personal --expiration 720h --reusable

然后 Mac 上执行:

sudo tailscale up --login-server=http://VPS_IP:8080 --authkey=生成的KEY

我执行了这条命令,终端显示:

To authenticate, visit...

然后……一直没响应

我等了 5 分钟,还是卡住。没有任何输出,没有任何进度。

😓 “我以为 AuthKey 是最简单的方式,后来发现它可能是个坑。”

我尝试了几次,开 debug 日志、换环境变量,都没用。搜索了一圈,发现不少人遇到同样的问题——AuthKey 注册在某些网络环境下就是没响应


🎉 转折:Node 手动绑定——秒成功

折腾了半小时,我换了一个思路:

不用 AuthKey,改用 Node 手动绑定

Step 1:Mac 上发起连接(不带 authkey)

sudo tailscale up --login-server=http://VPS_IP:8080

终端显示:

To authenticate, visit:

  http://VPS_IP:8080/register?key=nodekey:abc123...

Step 2:回到 VPS,手动注册节点

headscale nodes register --user personal --key nodekey:abc123...

Step 3:Mac 终端自动完成连接

tailscale ip

# 输出:100.64.0.1

秒成功! 🎊

那一刻我才明白:

  • AuthKey 是官方推荐的“自动化”方式,但在某些环境下会卡住

  • Node 手动绑定虽然多一步,但更可靠

💡 方法论小结

AuthKey 注册无响应时,改用 Node 手动绑定:

  • 客户端:tailscale up --login-server=xxx

  • 服务端:headscale nodes register --key nodekey: xxx

这招救了我。


第四步:手机加入 📱

iPhone 上装 Tailscale App,打开后输入自定义服务器地址:

http://VPS_IP:8080

同样会显示一个注册链接,复制其中的 nodekey,在 VPS 上执行注册命令。

手机拿到虚拟 IP:100.64.0.2 ✅


第五步:验证 🎯

Mac 上启动 OpenClaw Gateway:

openclaw gateway run --auth token --token "我的32位密钥" --bind lan --port 18789

手机上测试:

curl http://100.64.0.1:18789/health

# 输出:OK

那一刻,我知道 OpenClaw 安全回家了 🏠

✅ 只对我的设备可见
✅ 不经过任何第三方
✅ 零端口暴露


🧠 关键洞察:4 条认知

洞察 1️⃣:有 VPS 时,Headscale 比 frp 更安全

场景:我对比了 frp 和 Headscale,发现 frp 需要暴露端口在公网,任何人都能扫描到;Headscale 通过虚拟网络访问,无公开端口。

权衡

  • Headscale 配置复杂度中等,适合有折腾能力的人

  • frp 配置更简单,适合单一服务、临时分享

推荐

  • 你有 VPS,想长期使用,注重安全 → Headscale

  • 你只想临时分享一个服务给朋友 → frp


洞察 2️⃣:AuthKey 可能无响应,Node 绑定更可靠

场景:AuthKey 注册卡住 5 分钟,换 Node 手动绑定秒成功。

权衡

  • Node 绑定需要手动操作,适合个人使用、设备数量少

  • AuthKey 批量注册适合企业场景,但在某些网络环境下可能失败

推荐

  • 个人使用、设备 < 10 台 → Node 绑定

  • 批量部署设备 → AuthKey(但要准备好 fallback)


洞察 3️⃣:Headscale 只管“组网”,不管你跑什么服务

场景:OpenClaw 端口 18789,Headscale 端口 8080,完全独立。Headscale 只负责让设备互相认识,不关心你跑什么服务、用什么端口。

权衡:你需要自己管理 ACL(访问控制),多人共用时配置会变复杂。

推荐

  • 个人使用 → 默认 ACL(允许所有互通)

  • 多人共用 → 配置精细 ACL 隔离


洞察 4️⃣:虚拟网络 = 隐私保护

场景:数据流量 P2P 直连,不经过 VPS。Headscale 只传控制信令(几 KB),视频、文件都在设备间直传。

权衡:P2P 打洞失败时走 DERP 中继,延迟会增加。但即使中继,数据仍然加密,只经过你自己的 DERP 服务器(如果配置了)。

推荐

  • 注重隐私、不想数据走第三方 → 自建 Headscale + 自建 DERP

  • 追求极简 → 用 Tailscale 官方(但数据走官方服务器)


🧰 工具箱:复制粘贴就能用

核心命令(精简版)

VPS(Ubuntu)

# 安装

wget https://github.com/juanfont/headscale/releases/download/v0.23.0/headscale_0.23.0_linux_amd64 -O /usr/local/bin/headscale

chmod +x /usr/local/bin/headscale

# 配置

mkdir -p /etc/headscale /var/lib/headscale

touch /var/lib/headscale/db.sqlite

# 启动

headscale namespaces create personal

headscale serve

# 防火墙

ufw allow 8080/tcp

Mac

# 安装

brew install tailscale

# 连接(不用 authkey)

sudo tailscale up --login-server=http://VPS_IP:8080

# 确认 IP

tailscale ip

VPS(手动注册节点)

headscale nodes register --user personal --key nodekey:xxx

验证

curl http://100.64.0.1:18789/health


方案对比速查表

需求场景
推荐方案
有 VPS + 注重安全 + 长期使用
Headscale 自建

 ⭐
有 VPS + 单一服务 + 临时分享给他人
frp
有域名 + 想分享给他人访问
Cloudflare Tunnel
无 VPS + 极简 + 不介意数据走官方
Tailscale 官方

✅ 检查清单

部署完成后,逐项确认:

  •   VPS Headscale 运行正常(访问 /health

  •   Mac Tailscale 连接成功(tailscale status

  •   Mac 虚拟 IP 确认(tailscale ip

  •   手机测试访问(curl http://100.64.0.1:18789/health


📝 总结

一杯咖啡的时间,我把 OpenClaw “带”到了咖啡厅。

这套方案的核心价值

🔐 安全:零端口暴露,数据 P2P 直连
🎯 自主:完全掌控自己的网络,不依赖第三方
⚡ 简单:虚拟 IP 就像 WiFi 局域网,不用记端口

唯一的坑

AuthKey 注册可能卡住,但用 Node 手动绑定轻松绕过。


如果你也有 VPS,也想安全访问家里的 OpenClaw、NAS、开发环境,试试这套方案。

有问题评论区见 👇


📚 参考资料

  • Headscale 官方文档:https://headscale.net

  • Headscale GitHub:https://github.com/juanfont/headscale

  • Tailscale 官方文档:https://tailscale.com/kb

  • OpenClaw 文档:https://docs.openclaw.ai


喜欢这篇文章的话,记得点赞、在看、转发三连 🌟

你的支持是我持续输出的动力 💪