
如果你想从自己的电脑进行低延迟远程访问或游戏串流,Sunshine + Moonlight 很有吸引力:跨平台原生客户端、优秀的延迟表现、且不强制使用云账号。
如果你想从自己的电脑进行低延迟远程访问或游戏串流,Sunshine + Moonlight 很有吸引力:跨平台原生客户端、优秀的延迟表现、且不强制使用云账号。问题在于运维——把这套堆栈跑起来并不难;让它长期可靠、安全并且可达且不出现意外,则是本篇 walkthrough 要明确的、持续性的工作。
Sunshine 与 Moonlight 的实际功能
Sunshine 是你在要串流的机器上运行的主机/服务器组件。它负责捕获显示/音频、编码帧,并对外暴露一个服务,供 Moonlight(客户端)连接。Moonlight 是客户端:Windows、macOS、Linux、iOS、Android 以及部分智能电视有移植或构建。两者合起来用现代编码器以低延迟重现 GameStream 风格的串流。
选择你的连接模型 — 中继、直连,或 Tenvo 托管
让 Sunshine 可从互联网访问有四种可行方式。我按你应预期的运维负担逐一列出。
- Tenvo 托管中继(推荐,除非规则禁止使用第三方基础设施)。你会得到多区域中继,由 Tenvo 维护;对大多数客户端而言无需证书、NAT 或路由器配置。Tenvo 定价:Free $0 / Lite $2.99/mo / Pro $7.99/mo —— 将其计入呼叫响应与运维节省成本时考虑。
- 自己运行的公共中继(自托管)。在书面合规需求、隔离 VPC、数据驻留要求等情形下适用。自托管意味着证书、可用性、扩容以及密钥保管责任由你的团队承担。
- 直连(端口转发或 NAT 穿透,如 UPnP、hole punching)。基础设施成本最低但脆弱:家用路由器、动态 IP、ISP 的 CGNAT 以及公司防火墙常常会导致连接中断。
- 私有网络或 VPN(WireGuard、企业 VPN)。非常可靠,但需要 VPN 基础设施与用户入门。适合你能同时控制两端的小团队或实验环境。
前置条件 — 在点击安装前你必须准备的事项
- 主机系统:近期的 Linux 发行版(常见选择为 Ubuntu 22.04 / Debian 12);Windows 和部分 macOS 构建受支持,但对于无头主机 Linux 更常见。
- GPU/驱动:若要使用硬件编码,通常需要受支持的 GPU(NVIDIA、AMD)以及能暴露编码器的驱动。在 Linux 上这意味着使用厂商提供的软件包——GPU 驱动的更新策略很重要(它们常常需要与内核或 X/Wayland 兼容性校验)。
- 网络:如果计划使用中继,确保允许出站 TLS(443/HTTPS)。对于直连,你需要稳定的公网 IP 或动态 DNS+端口转发与路由器访问权限。
- 证书:若要在互联网暴露 IP/域名,使用自动化 TLS 方案(Caddy、certbot、acme.sh)。若你自托管中继,则需要自行处理证书签发与续期。
- 客户端设备:在用户将使用的平台上安装 Moonlight。先在局域网内测试配对,确认基本功能后再开放到互联网。
分步:在 Linux 上安装并配置 Sunshine(示例流程)
下面给出一个针对 Linux 主机的务实示例(若你偏好原生安装程序,请替换为 Windows/macOS 的步骤)。我刻意不写具体的 Sunshine 发布版本号,因为分发方式会变——请从项目的 GitHub 或包仓库获取最近的稳定构建。
1) Prepare the OS # Keep packages up to date sudo apt update && sudo apt upgrade -y 2) Install GPU drivers (example: NVIDIA) # On Ubuntu 22.04 sudo apt install -y nvidia-driver-535 # pick the vendor driver your GPU needs 3) Create a dedicated user for Sunshine sudo useradd -r -m -d /var/lib/sunshine -s /usr/sbin/nologin sunshine 4) Download Sunshine & place binaries # Download the official release tarball or package and extract to /usr/local/bin sudo mkdir -p /etc/sunshine /var/lib/sunshine sudo install -m 0755 /path/to/sunshine /usr/local/bin/sunshine 5) Example systemd unit (/etc/systemd/system/sunshine.service) [Unit] Description=Sunshine game streaming host After=network.target [Service] User=sunshine Group=sunshine ExecStart=/usr/local/bin/sunshine --config /etc/sunshine/config.toml Restart=on-failure [Install] WantedBy=multi-user.target sudo systemctl daemon-reload sudo systemctl enable --now sunshine 6) Firewall: only open what you intend to use # If using only a managed relay, you need outbound TLS only. For direct connect, open the ports Sunshine advertises and your chosen TCP/UDP ports. # Example (ufw): sudo ufw allow from 192.168.0.0/16 to any port 47999 proto tcp # adjust to your config 7) TLS / certificates # For internet exposure use an ACME-enabled server (Caddy or certbot) to get a cert for your FQDN. If you run a relay, verify its TLS requirements.
两个实用建议:将 Sunshine 的配置置于版本控制之下(如 /etc/sunshine/config.toml),并以非特权用户运行二进制程序。在动 DNS 或证书之前先在 LAN 上测试配对。
配对与客户端设置 — 实际发生的流程
首次连接时 Moonlight 与 Sunshine 会交换配对凭据。典型流程:在主机上启动 Sunshine,在客户端打开 Moonlight,通过局域网发现或手动输入 IP/FQDN 找到主机、发起配对请求、在主机端接受——通常会通过本地提示或短时验证码确认。配对完成后,Moonlight 会保存密钥并在未被主机撤销前无需再次交互式确认。
若使用中继(Tenvo 或自托管),发现过程通常经由中继服务发生,这样客户端可以在 NAT 后面无需端口转发就到达主机。运维上的注意点是:若使用第三方中继,TLS 会在该中继终止——中继运营方在技术上有能力观察或拦截流量(若其选择这么做)。在合规或信任决策中要考虑这一点。
持续维护:你将继承的那些安静责任
运行自有的 Sunshine 主机不是“装好就忘”的项目。请为下列定期任务做好规划:
- 证书续期:若使用公网 TLS,请自动化续期(通过 certbot 或 Caddy 使用 Let's Encrypt)。验证自动续期的上报,并测试 Sunshine 重新加载新证书的路径,使服务能在不手动重启的情况下使用新证书。
- 操作系统与驱动更新:每月的安全更新;GPU 驱动的更新应先在测试环境验证后再推向生产。驱动通常是串流与音频回归的来源。
- 配置和密钥备份:将 /etc/sunshine 与配对密钥纳入配置备份。如果丢失配对密钥,用户需要重新配对。
- 监控与告警:可用性检测(外部合成测试)、磁盘/CPU/GPU 使用监控与日志。为可用性制定 SLO,并明确在主机夜间宕机时谁需要响应。
- 日志轮转与保留:串流日志量大;轮转日志并清理旧记录。决定哪些日志需保留用于审计以及保留期限。
- 扩展与故障切换:如果部署多主机或多站点,请测试故障切换。单一自托管中继在一个区域内是单点故障;Tenvo 的多区域托管中继能替你移除该运维细节。
- 用户生命周期管理:人员离职时撤销配对,并至少每季度审计一次已配对设备。
时间预估:单台主机安装并测试预计需 1–2 小时;之后小规模部署每周的持续工作以分钟计(证书检查、更新)。对于大规模机群,请按修补、监控与事件响应核算等效人力。
故障排查:常见失效模式与修复建议
- 局域网无法发现主机 —— 检查 mDNS/UPnP 与本地防火墙。一些企业交换机会阻止组播;通过 IP ping 主机并尝试按 FQDN 或 IP 手动连接,而不要依赖发现。
- 黑屏或画面乱码 —— 通常是 GPU 驱动或合成器冲突。尝试非合成会话或更新驱动。在 Wayland 下,检查合成器对屏幕捕获的支持情况。
- 没有音频 —— 确认音频后端配置正确(PulseAudio/pipewire),并确认 Sunshine 已配置为捕获正确的 sink。
- 高延迟 —— 检查网络路径与编码设置。降低比特率或更改编码器预设;在局域网内测试以将 GPU/编码问题与网络问题区分开来。
- 配对反复失败 —— 清理旧密钥(如 /etc/sunshine/pairs 或类似位置)并重新发起配对;查看系统日志(journalctl -u sunshine)以获取错误信息。
如果你需要更深入的安全背景或完全避免端口转发,请参阅我们的指南 无端口转发的远程桌面 解释,以及威胁模型文章 远程桌面安全吗?坦率的威胁模型。若你的要求是完全自托管,请在决定前阅读 自托管远程桌面:为什么、如何、以及会坏的点。
结语 — 何时自托管、何时付费使用托管中继
只有在策略或网络隔离强制要求你自托管时,才应选择自托管 Sunshine 与中继。否则,托管中继在实际运维成本上常常更划算:你是在购买可用性、证书管理、多区域故障转移以及别人替你接外包的告警响应。Tenvo 的托管中继是我们建议的务实默认选择:它消除了大部分日常维护的繁琐,同时让你保持对主机与配对的控制权。如果你选择自托管,请为上文列出的维护项预留预算——这些比最初的安装更重要。
准备尝试托管中继或下载客户端?从 Download 开始。若你想要与其他工具做更深的比较,请参阅我们的其他文章,例如 RustDesk self-hosted setup: Docker + Caddy TLS,以及我们的定价比较以了解总体拥有成本。