远程串流打游戏方法介绍
主要介绍两种方法:
- Parsec
- Tailscale + Headscale(可选)+ DERP + Sunshine & Moonlight
Parsec
Parsec 一款远程桌面软件。
特点
- 主要基于 P2P 技术连接,这一点好处/坏处都很显然
- 需要官网注册后使用
优点
- 可以他人远程到自己电脑上一起玩本地多人游戏
- 可以管理其他人连接的权限(例如硬件控制范围:键盘/鼠标/手柄)
- 可以设置连接质量(例如画质/帧率)
- 网络情况好下,延迟和画质水平都很不错
- 注册账号即可免费使用绝大部分重要功能
缺点
- 只有英文
- 在复杂的网络环境下可能连接失败(例如 NAT 穿透失败,本人已经遇见过,后续会提供可能的解决方案,但难度高且效果不保证)
- 没有 iOS / iPadOS 版本
操作
比较简单就不多提了,见 官网
Tailscale + Headscale(可选)+ DERP(可选) + Sunshine & Moonlight
介绍:
- Tailscale 是一个基于 WireGuard 的零配置 VPN 服务,提供了简单的点对点连接和 NAT 穿透功能。
此处用法主要用到其虚拟组网的方式完成内网穿透,以进行远程串流。 - Headscale 是一个开源的 Tailscale 服务器实现,可以让你自己搭建 Tailscale 网络的控制面。
Tailscale 主要部分都开源,不过其控制面闭源,考虑到其控制面在外网,而可能有各种相应的可以预见的问题,而 Headscale 则是开源的 Tailscale 控制面实现。
因此如果有具有公网 IP 的服务器(最好有绑定域名),推荐研究一下 Headscale 进行搭建。 - DERP 是一个开源的 TURN 服务器实现,可以帮助穿透 NAT 和防火墙。
Tailscale 使用 DERP 服务器作为备用路径,当直接的 P2P 连接失败时,流量会通过 DERP 服务器中转。
而官方的 DERP 服务器具有与其控制面类似的问题,因此如果你的服务器具有不错的带宽条件,也可以尝试搭建 DERP 服务器,帮助 Tailscale 获取更可靠的 fallback 连接。 - Sunshine 是一个开源的游戏串流软件,可以与 Moonlight 配合使用,实现低延迟的游戏串流。
- Moonlight 是一个开源的游戏串流客户端,可以接收 Sunshine 发送的游戏视频流,并将输入事件发送回 Sunshine。
使用场景及其效果
分本人的使用场景:
- 寝室内网环境:
在床上用 iPad 或者 Macbook Air 连接寝室的游戏本进行游戏,延迟和画质都很优秀。
本人寝室网络环境就是一个简单的某米千兆路由器,很便宜了。 - 外部网络环境:
5G / 其他 Wifi 网络环境下,通过 iPhone / iPad / 笔记本 连接寝室游戏本进行游戏,质量可能稍差一些。
部署
1. Tailscale 使用(基础组网)
- 注册并登录 Tailscale(支持第三方授权登录)。
- 在所有设备上安装客户端并登录同一账号。
- 设备会自动加入同一虚拟局域网,并分配
100.x.x.x虚拟 IP,后续可直接用该 IP 通信。
注意:iOS、iPadOS APP Store 国区中没有 Tailscale
2. Sunshine + Moonlight 使用(串流层)
- 服务端(游戏本) 安装 Sunshine,并通过浏览器进入管理控制台(默认
https://localhost:47990)。 - 在 Sunshine 中配置应用、编码器(如 NVENC/AMF/QuickSync)与分辨率档位。
- 客户端(手机/平板/轻薄本) 安装 Moonlight。
- 确保双方已通过 Tailscale 处于同一虚拟局域网,Moonlight 自动发现 Sunshine;如未自动发现,手动填入服务端的 Tailscale 虚拟 IP。
- Moonlight 发起连接后会显示 PIN 码,在 Sunshine 控制台输入确认完成配对。
Sunshine 配置建议:由于本人电脑连着显示屏,并且以显示屏为主显示器,因此默认 Sunshine 会使用显示屏进行串流。
可以考虑配置:配置-Audio/Video-显示器Id 为笔记本的 Id(可以在 故障排除-日志 中找到)
并且进行如下配置 配置-Audio/Video-高级显示设置选项

3. (可选进阶)Headscale 部署及使用(自建控制面)
目标:将控制面从官方服务切换为自建 Headscale,以提升稳定性和可控性。
-
服务器准备 :一台公网服务器 + 绑定域名(示例:
controlplane.example.com)。 -
Headscale 原生部署 :采用 systemd 方式运行,监听本地端口(示例:
127.0.0.1:9080)。 -
Nginx 反代配置(关键点是正确传递协议头):
nginxlocation / { proxy_pass http://127.0.0.1:9080; # 这里本人因 8080 被占用换成了 9080 proxy_set_header X-Forwarded-Proto https; # 核心:告知后端真实协议为 https proxy_set_header Host $host; } -
客户端接入 Headscale:
- iOS / iPadOS:Accounts-右上角 Advanced Login Options-Use a custom coordination server
填入https://controlplane.example.com,并执行登录。
如果顺利,会拉起页面获取一条指令,在控制面服务器上执行该指令完成配对。 - 其他平台类似
- 对于无头设备(例如在 Linux 终端内),可以先在 Headscale 服务端生成一个认证密钥,然后通过密钥来认证,可以免去上面再服务器上执行配对指令的步骤。
- iOS / iPadOS:Accounts-右上角 Advanced Login Options-Use a custom coordination server
4. (可选进阶)DERP 部署及使用(自建中继)
目标:在 NAT 穿透失败时,让流量回退到自建 DERP 中继,降低外部网络连接的延迟。
-
容器化部署 :使用 Docker 镜像(如
fredliang/derper),直接暴露端口:- TCP
7443(DERP TLS) - UDP
3478(STUN)
docker-compose.yml示例:yamlservices: derper: image: fredliang/derper:latest container_name: tailscale-derp restart: always ports: - "7443:7443" # 自定义中继端口 - "3478:3478/udp" # STUN 打洞端口 volumes: # 直接挂载 Nginx 现有证书,并在容器内改名以符合 DERP 期望 - /home/username/nginx/ssl/example.com.fullchain.pem:/app/certs/derp.example.com.crt:ro - /home/username/nginx/ssl/example.com.key:/app/certs/derp.example.com.key:ro # 挂载宿主机 Tailscale Socket 用于安全验证 - /var/run/tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock environment: - DERP_DOMAIN=derp.example.com - DERP_CERT_MODE=manual - DERP_ADDR=:7443补充:本人域名通过 acme.sh 申请证书,具体请搜索相关教程
- TCP
-
证书直挂容器 :将宿主机证书只读映射进容器,启用手动证书模式(示例域名:
derp.example.com)。 -
避坑一:不要用 Nginx Stream 代理
- 该方案会引发 双重 TLS 握手冲突 ,导致客户端报
no-derp-connection。 - 正确做法是让 DERP 容器直接接管 TLS。
- 该方案会引发 双重 TLS 握手冲突 ,导致客户端报
-
避坑二:DERP 映射表不要写 IP
derp.yaml中hostname必须是纯域名,不能包含 IP。- 否则客户端会用 IP 握手,触发证书域名不匹配(
cert mismatch)。
-
维护顺序(关键工作流):
- 容器更新:
docker-compose down && docker-compose up -d - 代理与控制层:重载 Nginx、重启 Headscale
- 客户端重置:
tailscale up --login-server https://controlplane.example.com --reset
- 容器更新: