LAB
手机遥控家里的 agent(实录)· Tailscale + serve + 回环小代理
可复现文本2026-10-14
手机遥控家里的 agent(实录)· Tailscale + serve + 回环小代理
- 链路
- 手机 Chrome → Tailscale(WireGuard) → tailscaled serve :443 → 127.0.0.1:19400 小代理 → 桌面版 GUI :19387
- 实测
- 蜂窝 IPv6 直连(非中继)· wss 握手 101 · 鉴权 RPC 200 · 重启后 serve 规则仍在
- 不需要
- 公网 IP / 端口映射 / DDNS / 反向隧道 / 手机 App / Termux
- 四个前提
- 有人登录 Windows · 宿主 GUI 在跑 · 19387 不漂移 · 别启动会抢 100.0.0.0/8 的 VPN 客户端
本次固定提示词(展开)
提示词是实验条件:换一套 prompt,同一个模型的产出可能完全不同。所以本栏把 prompt 和结果一起给。
短问答
用一句话解释什么是显存带宽。
三句话说明
用三句话说明为什么小模型在消费级显卡上更实用。
代码
用 Python 写一个函数,把秒数格式化成 1h2m3s 的形式。只要代码。
完整实录(展开)
① 最终形态
- 链路:手机 Chrome → Tailscale(直连打不通时自动走 DERP 中继)→ 家里的 tailscaled → serve 把 tailnet 的
:443反代到本机回环 →127.0.0.1:19400小代理(约 100 行 Node)→127.0.0.1:19387桌面版 GUI。 - 手机侧零配置:不输密码、不装 App、不装 Termux。那张签名 cookie 是本机代理替它带的,手机从头到尾没拿到过。
- 路由器一根手指都不用动:不需要公网 IP、端口映射、DDNS、反向隧道;
serve默认只在 tailnet 内可见(不是 funnel)。
② 为什么"直接连"一定失败(三道闸)
- 闸 1 · 宿主只绑回环:GUI 只听
127.0.0.1:19387,手机哪怕在同一局域网也连不上 → 必须有个"从回环往外转"的东西,tailscale serve就是。 - 闸 2 · /api 要一张绑定"授权域"的签名 cookie:实测不带 cookie 时连回环 Host 也照样 401;cookie 名 =
base64url(sha256("<host:port>"))。用域名直连时服务端算出的授权域与地址栏对不上,现场签一张也照样被拒(实测 8 组组合全 401)→ 中间必须有代理,让上游始终看到回环授权域。 - 闸 3 · 上游有意不给远程页面完整能力:非回环页面 → 设置持久化模式判成
memory,设置镜像一个请求都不发。这是设计不是 bug → 本文不绕它:手机上看会话、跑 agent,改设置回 PC 上改。
③ 工具与步骤
- 只用两样:Tailscale(两端各一个客户端)+ Node(小代理,零依赖)。
- 开反代:
tailscale serve --bg --https=443 http://127.0.0.1:19400。关键在--bg—— 规则写进 tailscaled 配置,重启电脑后自动恢复(实测重启后两条规则都在)。 - 小代理三件事:① 把 Host / Origin 改写成回环 ② 从本机凭据库取密钥现签 cookie 带上(值不落日志)③ 转发 WebSocket 升级(实时输出是 wss 不是轮询)。只绑回环 —— 绑
0.0.0.0等于把凭据送给整个局域网。 - 自启:启动夹放
.lnk(目标wscript.exe)→ 脚本要幂等、宿主没起来也照启动、写日志。
④ 三个坑(每个都附判据)
- 裸脚本不执行:重启后代理没起、无报错、日志一行都没有。判据:日志一行都没有 = 根本没被执行;有行但失败 = 脚本内部问题。
- VPN 的系统代理吞掉 tailnet:Clash 系客户端的 bypass 写死
localhost;127.*;192.168.*;10.*;172.16-31.*,不含100.64.0.0/10与*.ts.net→ 这台电脑上所有浏览器都访问不了 tailnet。判据:node(不走系统代理)200 / 浏览器ERR_CONNECTION_CLOSED。 - 会出事的是路由不是端口:"VPN 抢了 UDP 41641"实测不成立(41641 一直属于 tailscaled,手机 peer 是蜂窝 IPv6 直连);真正断线的是某些 VPN 抢
192.168.0.0/24与100.0.0.0/8。另外 Windows 版 Tailscale 没有官方改端口入口。
⑤ 怎么证明"真的可用"
- 鉴权:
POST /api/session/list→ 200 才算过(401= 没过)。 - 实时:
wss://<host>/api/remote.mux→ 101 Switching Protocols。 - 到位:
tailscale status里手机 peeronline+active,看清是direct还是relay。 - 扛重启:重启后
serve status两条规则在、代理日志有started。
⑥ 边界与安全
- 别用
tailscale funnel(那会暴露到公网);代理只绑回环;cookie 是 30 天长期凭据。 - 手机端设置页不可用是上游有意设计,本文不去绕。
- 宿主关机、或重启后没人登录 → 用户级启动项不会跑,做不到无人值守。
- 实测数字:direct(蜂窝 IPv6)· wss 101 · RPC 200 · 第三条机器 tailnet 打开 HTTP 200 · 两条
serve --bg规则重启后仍在。
完整版中英对照长文:打开 /note/
坑:启动夹里放裸 .vbs 不会被执行(按文件关联被"打开"而非运行,无报错、日志一行都没有)→ 必须放 .lnk 指向 wscript.exe;另外 Tailscale 的端口(UDP 41641)从头到尾没被 VPN 抢过,真正会断线的是路由。
来源:本机实录 2026-10-14,从手机端实测通过;完整长文见 tuiceday.cn/note/
本页是该条实测的独立页面;完整列表见 实测。