用途与实际影响
这项功能怎样使用
为什么需要它
手机网络和家里网络可能各有阻挡。即使主机有 IPv6,也只有指定手机当次探测才能说明走的是直连、中继还是根本连不上。
举个实际例子
“我在外面连主机很慢。”先对这台手机和主机检查网络路径:若走中继,就说明这次没有直连;之后还要在 Moonlight/Artemis 真正看画面。
最后我会得到什么
能分别说明本机服务状态和指定手机的连接路径;本轮没有手机端实测回执,所以不承诺直连速度或延迟。
正常时
指定手机到主机的当次探测确实返回直连,才称这次直连;实际串流体验仍另验。
发现问题时
只走中继时如实报告,画质和延迟需按手机实测调整。
入口不可用或证据不足时
家里失去网络地址或 Tailscale 没登录时先修连接;恢复后仍需重新探测同一手机。
从哪里开始
在两端 Tailscale 在线后,用项目 verify-path 或 verify-path-lite 指定真实 peer 做有界路径检查;之后由 Moonlight/Artemis 建立一次真实串流才验画面。
需要准备什么
- 要连接的手机和主机
- 想诊断直连、中继还是实际串流故障
从开始到拿到结果
- 1
确认指定手机和主机
先看两端 Tailscale 是否在线,再对这台手机做当次网络路径检查。
- 2
分清直连和中继
诊断会报告直连、经过 Tailscale 中继或不可达;任何一种都不能单靠主机网络配置猜出来。
- 3
实际连接再验画面
Moonlight/Artemis 连上后再看声音、画面与输入;路径通过仍不等于串流可用。
技术实现与依据
这里保留实现、关键条件、精确入口、历史记录和验证结果。
Tailscale 1.102.2运行且无人值守;WLAN未见非链路本地IPv6,手机peer(对端)未测关键规则与设计选择
明确“串流层(Sunshine)尽量不换,传输层(Tailscale)随时可换”的解耦原则;未来若替换为皎月连等工具,串流配置无需推翻。
光猫开启 Native(原生)IPv4/IPv6 双栈,Windows 重新启用 WLAN 的 ms_tcpip6 协议绑定并清理 DisabledComponents 注册表限制。
不在 Windows 服务级别把 Tailscale 写死到固定代理端口,避免代理软件关闭后 Tailscale 持续离线。
固化 Tailscale 的 unattended(无人值守)模式(ForceDaemon=true),让服务可在锁屏或注销时继续运行;这不证明登录前桌面可被 Sunshine 捕获。
本模块用到的名词
- CGNAT(运营商级网络地址转换)
- 千百家庭共享一个公网 IPv4 地址的技术;由于没有独立公网 IPv4,外部无法主动向内部发起连接。
- P2P(点对点)
- 两端直接通信而不是把数据交给中继;只有指定 peer 的现场探测返回 direct 时,才能确认当前走这条路径。
- SLAAC(无状态地址自动配置)
- IPv6 终端根据路由器通告的前缀自动生成自身公网 IPv6 地址的标准机制。
- Unattended Mode(无人值守模式)
- Tailscale 在用户注销或未登录 Windows 桌面时仍作为后台系统服务正常工作的配置项。
专业定义
它不把“服务在线”当成“手机已直连”:先看本机网络,再对指定手机做 peer 探测,最后才说是 direct(直连)、DERP 中继还是不可达。
解决什么
解决复杂 NAT 网络环境下远程打洞困难、海外中继延迟奇高、以及网络配置冲突引发的掉线问题。
当前怎样实现
- 通过移动光猫 PPPoE(宽带拨号协议)原生下发 IPv6 前缀,配合路由器 SLAAC(无状态地址自动配置),让 PC 获得可用于直连尝试的 IPv6 地址。
- repair-stream.ps1 提供一键幂等修复:清除残存的服务级代理端口环境变量,重启服务并强制固化 unattended 偏好。
- verify-path.ps1 与 verify-path-lite.ps1 分别提供深度路径诊断与日常无侵入巡检。
执行流程
- 1
手机发起串流请求,通过 Tailscale 控制面交换两端公网 IPv6 端点与 WireGuard 公钥。
- 2
两端尝试在运营商骨干网内直接发送 WireGuard UDP 探测包。
- 3
协商结果可能是 IPv6/IPv4 direct、DERP 或不可达;必须保存当次 peer 探测分类,不能预设会升级为直连。
- 4
真实串流建立后,Sunshine 才通过协商好的连接发送视频与音频;本轮没有建立该会话。
边界
- 本项目不创建 Sunshine 公网端口映射或 Funnel;当前主机另有用户配置的 Funnel,现有证据没有把它归因于 Sunshine,需按对应服务单独判断。
- 公开文档与脚本中绝对不出现真实的私人 Tailnet 域名或完整的个人 IPv6 地址。
- 不破坏本机其他依赖特定代理通道的日常网络需求。
失败与恢复
- Tailscale 陷入 NoState 掉登录状态
- 运行 repair-stream.ps1 清除固定代理端口覆盖,重新拉起服务并验证登录状态。
- 光猫重启后失去公网 IPv6 前缀
- 登录网关确认 Native 双栈状态,网卡重新连接以重新获取 SLAAC 地址。
- 手机端检测到流量走 DERP 中继
- 排查手机蜂窝是否被限制 IPv6,重新发起连接以促进 P2P 升级。
真实入口
repair-stream.ps1传输层与服务幂等修复入口
verify-path.ps1端到端网络路径与 DERP 诊断工具
verify-path-lite.ps1每日无感知路径与编码能力巡检任务
如何验证
- 2026-09-13T06:30:05Z自然巡检日志记录Tailscale Running、start-mode=Auto、状态命令exit=0;9月14日服务只读复核仍为Running/Auto。
- 2026-09-04 回读 Tailscale 1.102.2 为 online,且 tailscale-unattended=true。
- 同一每日巡检明确记录 tailscale-ping skipped,因为没有提供 peer;当前直连/DERP 路线未证。
- 巡检提示存在用户配置的 Funnel;没有输出端点,也没有证据把它归为 Sunshine。
与其他模块的关系
为串流链路提供可分层诊断的传输入口;它能证明服务和指定 peer 路径,但不能替代手机画面与输入 E2E(端到端验证)。
