如何通过公网节点实现私有云串流
Andy_Sun128
2025年12月26日 22:29

社会在发展,人类在进步,相信大家都有出门爬山的时候用家里的电脑写程序维护github项目的需求,如果恰巧你有一台能远程连接的,开放一个端口甚至好几个端口的,能接入公网的云端计算节点,就能完美解决你的痛点。

我采用的是串流源sunshine串流+frp转发到节点+wireguard隧道、moonlight终端的方案,其中wireguard适合只有比较少端口开放的方案,鉴于我用八个端口没实现直接转发,还是省时省力一点吧。


1.下载安装sunshine

用wireguard不需要额外配置什么,安装启动即可


2.配置wireguard和frp客户/服务端

在串流源和串流终端都下载wireguard

在串流源,打开wireguard,新建空隧道后,会出现一个公钥

把公钥、listenport、address都保存下来

下面每多一台要串流的设备就加一个peer,其中的allowedips设置好后也要记住,一般设置成上面address的下一个网段,比如x.x.x.1/24,就把下面设置成x.x.x.2/32,依次增加


开始配置frp

在源和节点处都下载解压frp,源设置frpc.toml文件

serverAddr = "你的节点公网ip或域名"

serverPort = 你的节点能通信的一个端口

[[proxies]]

name = "随便起个名字"

type = "udp"

localIP = "127.0.0.1"

localPort = 之前设置的listenport

remotePort = 节点隧道数据的端口

记住这个serverAddr和remotePort

在节点配置frps.toml,只需要一行

bindPort = 之前设置的serverPort

记得在节点的防火墙放行serverPort和remotePort,这样隧道就能通公网了

在终端的wireguard中,点击加号也新建一个隧道,点击添加节点,随便起个名称

本地栏:随机生成一个公钥,并复制到源隧道内的peer的publickey等号后面,将源隧道内的allowedips放到本地栏的局域网ip地址,将结尾改成/24,dns可选设置一个

远程栏:将之前保存的公钥粘贴到公钥,对端填之前设置的serverAddr:remotePort,路由的ip地址是x.x.x.0/24

源隧道和终端隧道就配置完成了,如果有多终端,那么终端配置依然是一个本地一个远程,源配置需要添加多个peer


3.启动串流及转发服务

启动源的sunshine和wireguard,在wireguard边栏选择配置好的隧道,点击连接

在节点启动frps,我的是windows系统,在frps所在目录Shift+右键选择在此处打开Powershell窗口,粘贴.\frps.exe -c .\frps.toml后回车执行,正常运行的话其中一行会出现frps started successfully

稍等一小会,在源的frpc所在目录Shift+右键选择在此处打开Powershell窗口,粘贴.\frpc.exe -c .\frpc.toml后回车执行,如果frpc没有报错,节点frps出现回应就代表成功连接

此时打开终端wireguard,启用隧道,就成功连接到电脑了,理论上此时可以完全访问电脑的各种资源设备

4.开始串流

在终端下载安装moonlight,添加电脑为源隧道中的Address,就可以连接到串流了


5.串流体验

由于sunshine与moonlight的协议,可以实现远程使用键鼠、手柄、手写笔等各种输入方式,且音视频卡顿时,操作信号也不会卡,可以作为游戏/办公的方案之一

然而,在我的实际试验中,校园网的延迟与带宽都是严重瓶颈,音视频经常出现卡顿,丢包率有时会跑到50%以上,会一段时间内体验较好但是突发严重卡顿

平衡画质体验和卡顿后,我现在使用720p30帧,如果你的源、节点和终端的网络都相对稳定且高速,可以试试1080甚至2k4k


6.总结

这套方案的优点是除节点外不需要任何付费软件/服务,且上限很高,兼容性强,可以在只有两个端口的情况下实现串流,带宽需求相对不高,720p30需要5-10兆的带宽。最大的优点是完全私密,每个节点间都是公私钥端对端加密,在私钥不泄露的情况下基本不会泄露或被入侵

缺点就是就算是在windows上,配置也较为复杂,虽然相对于无wireguard简单不少。而且需要购买并配置节点,现在节点也不便宜,纯转发用途的节点很难找,或者都是高价高带宽的。

这份教程也可能有没涉及的点,如果发现问题或缺漏可以跟我说。