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 内网穿透 |
|
需暴露端口 带宽消耗大 |
|
| Tailscale 官方 |
|
免费版设备上限 100 台 |
|
| Cloudflare Tunnel |
免费 HTTPS |
配置复杂度中等 |
|
| Headscale 自建 |
P2P 直连 无设备限制 |
AuthKey 可能踩坑 |
|
🎯 决策逻辑
我有 VPS → 以上都能跑
↓
我要安全 → frp 要暴露端口,排除
↓
我要自主 → Tailscale 官方数据走第三方,排除
↓
我不想绑定域名 → Cloudflare Tunnel 排除
↓
最终选择:Headscale 自建 ✨
💡 方法论小结
选远程访问方案时,先问自己三个问题:
我有 VPS 吗?
我要安全还是极简?
数据要不要走第三方?
答案不同,方案不同。有 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
方案对比速查表
|
|
|
|---|---|
|
|
Headscale 自建
|
|
|
frp |
|
|
Cloudflare Tunnel |
|
|
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
喜欢这篇文章的话,记得点赞、在看、转发三连 🌟
你的支持是我持续输出的动力 💪
夜雨聆风