openclaw — tailscale-serve — zsh — 80×24
$ tailscale serve --bg --yes 18789
Available within your tailnet:
https://petermacbook-air.tail469f76.ts.net
|-- proxy http://127.0.0.1:18789
|-- TLS: Let's Encrypt · HTTP/1.1+WebSocket
$ openclaw gateway pair --qr
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
█ wss://petermacbook-air.tail469f76.ts.net █
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
# 扫码即配对 · 地址永不改变 · 穿越任何网络
WireGuard 隧道活跃 节点 Mac 100.65.232.31 · iPhone 100.97.69.7 路径 直连 (UDP Hole Punch) Tailnet imchenbinbin@gmail.com
100.x

Tailscale + OpenClaw 移动配对架构

你的 Mac 和 iPhone 分属于两个完全不同的局域网?没问题。Tailscale 在两者之间建立一条端到端加密的虚拟链路, 让 OpenClaw Gateway 与手机 App 像在同一个 LAN 里一样通信——无论你在公司、家里还是星巴克。

01

网络架构三层视图

从物理链路到应用数据的三层抽象

🟠 应用层 · OpenClaw

MacOpenClaw Gateway 监听 127.0.0.1:18789,WebSocket + REST,Token 认证。Tailscale Serve 将其反向代理到 Tailnet 内部 HTTPS。
iPhoneOpenClaw Mobile 扫描 QR 码获取 wss://petermacbook-air.tail469f76.ts.net,通过 Tailscale 加密通道建立 WebSocket 双向实时连接。
协议:WebSocket over TLS(由 Tailscale Serve 终止)· JSON 消息帧 · 实时双向

🟢 覆盖层 · Tailscale WireGuard Mesh

虚拟 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 层数、网络类型——这些都无关紧要。

02

架构详图

所有组件、路径与连接关系一览
INTERNET · TAILSCALE DERP NETWORK 🏢 公司 10.169.x 🏠 家 192.168.x 📱 热点 172.20.x 🌐 4G/5G 蜂窝 🖥️ Peter的MacBook Air · macOS Tailscale v1.98.9 虚拟 IP 100.65.232.31 · 网卡 utun 🚇 serve: petermacbook-air.tail469f76.ts.net → 127.0.0.1:18789 OpenClaw Gateway 监听 127.0.0.1:18789 · WebSocket + REST · Token 认证 📱 iPhone 14 · iOS Tailscale (iOS) 虚拟 IP 100.97.69.7 DNS 100.100.100.100 · ts.net → 虚拟 IP 解析 OpenClaw Mobile 扫码获取 wss://…tail469f76.ts.net → WebSocket Tailscale Control Plane 设备注册 · 公钥分发 · WireGuard 配置 · ACL 策略 · 短期密钥 · Serve 证书签发 login.tailscale.com 📡 DERP Relay 加密中继(全球部署) 仅见密文 · 不知明文 认证 · 密钥分发 认证 · 密钥分发 🔗 WireGuard 加密直连 (UDP Hole Punch) 100.65.232.31 ⇄ 100.97.69.7 · wss://…ts.net NAT 打不通时走中继(端到端加密) 图例 OpenClaw 组件 Tailscale 组件 物理网络 / 中继 WireGuard 加密通道(直连) 控制信令 (Control Plane) DERP 中继路径(NAT 打不通时降级使用 · 端到端加密 · 中继只看到密文)
03

完整数据流 · 8 步

从安装到配对成功的完整时序
1

Mac 安装并登录 Tailscale Tailscale

下载 macOS GUI → 用 GitHub/Gmail 账号登录 → Control Plane 验证身份、生成设备密钥对 → 分配虚拟 IP 100.65.232.31 → 创建 utun 虚拟网卡。设备加入 imchenbinbin@gmail.com 的 tailnet。

2

iPhone 安装并登录同一账号Tailscale

App Store 安装 Tailscale → 同账号登录 → Control Plane 识别 tailnet 内已有 Mac → 颁发新密钥对 → 分配虚拟 IP 100.97.69.7。两台设备同属一个私有虚拟子网。

3

密钥交换 + WireGuard 隧道建立Tailscale

Control Plane 将两台设备 WireGuard 公钥互发 → 尝试 UDP 直连打洞 → 成功即点对点加密通信;若防火墙/NAT 阻断 → 自动降至 DERP 中继。无论路径如何,两端均维护一条 WireGuard 加密隧道。

4

OpenClaw 设置 Tailscale Serve 模式OpenClaw

修改 openclaw.jsongateway.tailscale.mode = "serve" + gateway.bind = "loopback" → 重启 Gateway。OpenClaw 自动调用 tailscale serve --bg --yes 18789,将本地端口反向代理为 Tailnet 内部 HTTPS:
https://petermacbook-air.tail469f76.ts.net

5

Gateway 生成配对 QR 码OpenClaw

Tailscale Serve 启动成功后,Gateway 将 wss://petermacbook-air.tail469f76.ts.net 编码为 QR 码。这个地址永远不变——无论 Mac 在哪、物理 IP 是什么。一次扫码,永久有效。

6

iPhone 扫码 + Tailscale DNS 解析TailscaleOpenClaw

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。

7

WebSocket 握手 + Token 认证OpenClaw

iPhone → WireGuard 加密通道 → Tailscale Serve 代理 → Gateway :18789 → TLS (Let's Encrypt) → WebSocket Upgrade → 发送 Token 认证 → Gateway 验证通过 → 双向通信建立。所有数据由 WireGuard ChaCha20 加密,中间人不可见明文。

8

实时双向通信 · 切换网络无感知OpenClawTailscale

P哥 从公司回到家 → Mac 物理 IP 从 10.169.x 变为 192.168.x → Tailscale 自动重新握手(WireGuard 只看公钥与虚拟 IP)→ WebSocket 自动重连(毫秒级)→ P哥 手机上 OpenClaw 无需重新扫码。一次配对,永久有效。

04

安全机制

从链路到应用的层层防护
🔐
传输加密 · WireGuard ChaCha20-Poly1305

所有穿越 Tailscale 网络的数据——包括 WebSocket 长连接——均使用 WireGuard ChaCha20-Poly1305 端到端加密。密钥每 2 小时自动轮换,且仅在两台设备的 WireGuard 实例中存在。即使流量经过 DERP 中继,中继服务器也只看得到密文。

  • 协议层:WireGuard over UDP · ChaCha20 对称加密 · Poly1305 MAC 完整性校验
  • 密钥管理:静态公私钥 + 临时对称密钥 · 每 120 秒重新握手轮换 · Noise IK 协议
  • 前向保密:每次轮换生成全新临时密钥,历史会话密钥不可恢复
  • 对抗中间人:公钥固定(pinning),不信任 CA 体系 · DERP 中继无法解密
🏰
网络隔离 · Tailnet-Only + 设备身份

Tailscale Serve 创建的 petermacbook-air.tail469f76.ts.net 仅在私有 tailnet 内可解析和访问。公网 DNS 完全不知道这个域名;外部攻击者无论用什么手段都无法找到你的 Gateway。每台设备注册时生成唯一公私钥对,只有同 tailnet 内经过身份验证的设备才能互联。

  • 域名隔离.ts.net 后缀由 Tailscale DNS 100.100.100.100 解析,公网不可达
  • 设备证书:每台设备唯一 Ed25519 密钥对 · Control Plane 签名认证
  • Mesh 准入:只有 tailnet 管理员(你)批准的设备才能加入
  • 端口绑定:Gateway 仅监听 127.0.0.1:18789,不绑定 0.0.0.0
🔑
应用认证 · Token

即使设备在同 tailnet,连到 Gateway 仍需正确 Token。WebSocket 握手阶段出示有效 Token,Gateway 验证失败立即断开。

🔄
短期认证密钥

Tailscale 使用短期认证密钥(5 个月有效期,可 Renew),非永久凭证。泄漏影响窗口仅限有效期之内。

🛡️
ACL 精细控制

Tailscale ACL 策略可精确控制 tailnet 内哪些设备可访问哪些端口。例如:限制 iPhone 仅访问 :18789,其他端口一概拒绝。

📜
TLS 自动证书

Tailscale Serve 自动为 .ts.net 域名签发 Let's Encrypt TLS 证书并自动续期,WebSocket 使用 wss:// (WebSocket Secure)。

05

关键对比:有 Tailscale vs. 没有

7 个维度的差异
维度 纯局域网模式 (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