你的 Mac 和 iPhone 分属于两个完全不同的局域网?没问题。Tailscale 在两者之间建立一条端到端加密的虚拟链路, 让 OpenClaw Gateway 与手机 App 像在同一个 LAN 里一样通信——无论你在公司、家里还是星巴克。
Mac:OpenClaw Gateway 监听 127.0.0.1:18789,WebSocket + REST,Token 认证。Tailscale Serve 将其反向代理到 Tailnet 内部 HTTPS。
iPhone:OpenClaw Mobile 扫描 QR 码获取 wss://petermacbook-air.tail469f76.ts.net,通过 Tailscale 加密通道建立 WebSocket 双向实时连接。
协议:WebSocket over TLS(由 Tailscale Serve 终止)· JSON 消息帧 · 实时双向
虚拟 IP:Mac 100.65.232.31 iPhone 100.97.69.7
Serve 隧道:.tail469f76.ts.net → :18789
NAT 穿透:自动 UDP Hole Punch;失败降至 DERP 中继
加密:WireGuard ChaCha20 · 密钥每 2h 轮换
公司 WiFi(10.169.x)· 家里 WiFi(192.168.x)· 手机热点(172.20.x)· 4G/5G 蜂窝网络 ·
核心前提:设备只要能访问 login.tailscale.com 即可入网。底层 IP、NAT 层数、网络类型——这些都无关紧要。
下载 macOS GUI → 用 GitHub/Gmail 账号登录 → Control Plane 验证身份、生成设备密钥对 → 分配虚拟 IP 100.65.232.31 → 创建 utun 虚拟网卡。设备加入 imchenbinbin@gmail.com 的 tailnet。
App Store 安装 Tailscale → 同账号登录 → Control Plane 识别 tailnet 内已有 Mac → 颁发新密钥对 → 分配虚拟 IP 100.97.69.7。两台设备同属一个私有虚拟子网。
Control Plane 将两台设备 WireGuard 公钥互发 → 尝试 UDP 直连打洞 → 成功即点对点加密通信;若防火墙/NAT 阻断 → 自动降至 DERP 中继。无论路径如何,两端均维护一条 WireGuard 加密隧道。
修改 openclaw.json:gateway.tailscale.mode = "serve" + gateway.bind = "loopback" → 重启 Gateway。OpenClaw 自动调用 tailscale serve --bg --yes 18789,将本地端口反向代理为 Tailnet 内部 HTTPS:https://petermacbook-air.tail469f76.ts.net
Tailscale Serve 启动成功后,Gateway 将 wss://petermacbook-air.tail469f76.ts.net 编码为 QR 码。这个地址永远不变——无论 Mac 在哪、物理 IP 是什么。一次扫码,永久有效。
OpenClaw Mobile 扫描 QR 码 → 取出 wss://…ts.net → iPhone 的 Tailscale DNS(100.100.100.100)解析 .ts.net 域名 → 得到 Mac 虚拟 IP 100.65.232.31 → 通过 WireGuard 隧道向该 IP 发起 TLS/WebSocket 建连。全程不经公网 DNS。
iPhone → WireGuard 加密通道 → Tailscale Serve 代理 → Gateway :18789 → TLS (Let's Encrypt) → WebSocket Upgrade → 发送 Token 认证 → Gateway 验证通过 → 双向通信建立。所有数据由 WireGuard ChaCha20 加密,中间人不可见明文。
P哥 从公司回到家 → Mac 物理 IP 从 10.169.x 变为 192.168.x → Tailscale 自动重新握手(WireGuard 只看公钥与虚拟 IP)→ WebSocket 自动重连(毫秒级)→ P哥 手机上 OpenClaw 无需重新扫码。一次配对,永久有效。
所有穿越 Tailscale 网络的数据——包括 WebSocket 长连接——均使用 WireGuard ChaCha20-Poly1305 端到端加密。密钥每 2 小时自动轮换,且仅在两台设备的 WireGuard 实例中存在。即使流量经过 DERP 中继,中继服务器也只看得到密文。
Tailscale Serve 创建的 petermacbook-air.tail469f76.ts.net 仅在私有 tailnet 内可解析和访问。公网 DNS 完全不知道这个域名;外部攻击者无论用什么手段都无法找到你的 Gateway。每台设备注册时生成唯一公私钥对,只有同 tailnet 内经过身份验证的设备才能互联。
.ts.net 后缀由 Tailscale DNS 100.100.100.100 解析,公网不可达127.0.0.1:18789,不绑定 0.0.0.0即使设备在同 tailnet,连到 Gateway 仍需正确 Token。WebSocket 握手阶段出示有效 Token,Gateway 验证失败立即断开。
Tailscale 使用短期认证密钥(5 个月有效期,可 Renew),非永久凭证。泄漏影响窗口仅限有效期之内。
Tailscale ACL 策略可精确控制 tailnet 内哪些设备可访问哪些端口。例如:限制 iPhone 仅访问 :18789,其他端口一概拒绝。
Tailscale Serve 自动为 .ts.net 域名签发 Let's Encrypt TLS 证书并自动续期,WebSocket 使用 wss:// (WebSocket Secure)。
| 维度 | 纯局域网模式 (LAN) | Tailscale Serve 模式 |
|---|---|---|
| 配对方式 | 每次切网重新扫码 | 一次配对,永久有效 |
| 连接地址 | ws://10.169.49.199:18789 | wss://petermacbook-air.tail469f76.ts.net |
| 跨网络支持 | ❌ 必须同 WiFi / 同热点 | ✅ 任何网络(公司 / 家 / 4G / 5G) |
| 企业防火墙 | ⚠️ 仅放 80/443 会阻断 18789 | ✅ HTTPS 443 端口 · 防火墙友好 |
| IP 变化 | 每次联网 IP 变化,配对失效 | 虚拟 IP 不变,配对永远有效 |
| 传输加密 | ❌ 明文 WebSocket(ws://) | ✅ WireGuard ChaCha20 端到端加密 |
| 公共 WiFi 安全 | ⚠️ 局域网设备可扫描端口 | ✅ Gateway 仅监听 127.0.0.1 |