
社会在发展,人类在进步,相信大家都有出门爬山的时候用家里的电脑写程序维护github项目的需求,如果恰巧你有一台能远程连接的,开放一个端口甚至好几个端口的,能接入公网的云端计算节点,就能完美解决你的痛点。
我采用的是串流源sunshine串流+frp转发到节点+wireguard隧道、moonlight终端的方案,其中wireguard适合只有比较少端口开放的方案,鉴于我用八个端口没实现直接转发,还是省时省力一点吧。
用wireguard不需要额外配置什么,安装启动即可
在串流源和串流终端都下载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
启动源的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,启用隧道,就成功连接到电脑了,理论上此时可以完全访问电脑的各种资源设备
在终端下载安装moonlight,添加电脑为源隧道中的Address,就可以连接到串流了
由于sunshine与moonlight的协议,可以实现远程使用键鼠、手柄、手写笔等各种输入方式,且音视频卡顿时,操作信号也不会卡,可以作为游戏/办公的方案之一
然而,在我的实际试验中,校园网的延迟与带宽都是严重瓶颈,音视频经常出现卡顿,丢包率有时会跑到50%以上,会一段时间内体验较好但是突发严重卡顿
平衡画质体验和卡顿后,我现在使用720p30帧,如果你的源、节点和终端的网络都相对稳定且高速,可以试试1080甚至2k4k
这套方案的优点是除节点外不需要任何付费软件/服务,且上限很高,兼容性强,可以在只有两个端口的情况下实现串流,带宽需求相对不高,720p30需要5-10兆的带宽。最大的优点是完全私密,每个节点间都是公私钥端对端加密,在私钥不泄露的情况下基本不会泄露或被入侵
缺点就是就算是在windows上,配置也较为复杂,虽然相对于无wireguard简单不少。而且需要购买并配置节点,现在节点也不便宜,纯转发用途的节点很难找,或者都是高价高带宽的。
这份教程也可能有没涉及的点,如果发现问题或缺漏可以跟我说。