不过,我想要有一套能在公网和局域网内都能爽快使用的远控方案。那么,为了能躺在床上推 Gal 和打游戏,来折腾一下一套新的远程方案吧!
远控方案构成
我使用的是 Zerotier One + moonlight 的一套控制方案,被控端(PC)使用 Zerotier One + sunshine 的一个输出,用 todesk 作为意外时的备份手段。电脑是长期开着的,所以没有考虑用一个远程插座。最后实际框架如下:
在局域网下,我们并不需要用到 Zerotier,只需要 Sunshine+moonlight 便能实现对被控端的控制。因为 Nvidia 停止了 PC 端的 moonlight 串流服务,所以我们用后继开发者留下的 Sunshine 来做被控端的串流操作。下图展示了局域网中的环境,因为大家都在一个网段里,所以数据可以直接通过路由表转发前往其它设备,而不需要经过过多的流程。
在公网上就比较复杂了,因为公网的情况一环套一环,并不会像局域网那样有着简洁干净的网络环境。由于公网经过了运营商、Internet 等多方的参与,网络环境混乱,不可能直接连接到我们要求的一个对应设备上。这就非常麻烦。
比如下图,路由器给 PC 也就是被控端分配了一个内部网地址,然后光猫给路由器下的所有内部网都分配了一个大型网段的公用 IP。通过 NAT 技术,路由器下的内部网可以使用公用 IP 直接访问到公网上的东西,比如 Internet 。但在公网上由于网段的不同,会导致我们寻找其它设备非常困难。可以看到我们的 PC 和想要连接的手机设备,它们的 IPv4 地址完全不一样,网段都天差地别。就算它们的公用 IP 地址在同一个大型网段内,也会因为运营商的问题而产生寻址过慢导致连接缓慢的情况。
而且我们考虑的太过理想,有时候手机等主控设备也会在一个小的内部网段内,然后甚至也会被分配 192.168.1.1/24 的 IPv4 地址。这个时候想要从公网 IP 找到对应的一个手机设备真的很难。
虽然我们可以通过 NAT(Network Address Translaction)来实现从内网到公网的一个透传,更细致的情况甚至能用 PAT(Port Address Translation)来做到。但缺陷是我们不能用 NAT 或者 PAT 来实现公网到内网的一个访问,因为这是不安全的。而且在技术上也不好处理,容易造成网络地址的混乱。所以为了安全访问内网,我们需要相应的技术来映射内网内的设备,这也被称为“内网透传/内网穿透”技术(NAT 穿透技术)。
传统内网穿透技术会经过 FRP 中转服务器,通过公网 IP 慢慢去找对应设备的私有地址。这里的技术涉及反向代理和防火墙穿透。不能说不能用,只是这个方案真的很慢。因为找公网 IP 就跟查表一样,几亿的表单放哪台机子都不会查得很快。具体技术会在后边介绍。
在公网上,为了更高效实现设备与设备的一个连接,我们需要一个相应的软件来做设备间的识别。这个方案就算 P2P 方案,也是俗称的“打洞”。这个方案就直接把两台机器在端到端层面给连接起来,不需要去考虑复杂的公网状况。但是,它们在连接的时候需要保障端到端上应用的正常运行,这就是为什么被控机和主控机都需要 Zerotier 这种虚拟组网软件。
配置看这里!我要远控玩游戏!
软件安装
需要安装的软件
Moonlight + Zerotier 打洞方案
主控端:Moonlight https://github.com/moonlight-stream
被控端:Sunshine https://github.com/LizardByte/Sunshine
无论主控还是被控都需要安装:Zerotier One https://www.zerotier.com/
版本看自己机型对应
Steam link 方案
主控端:Steamlink app 或者客户端,官方下载地址:https://help.steampowered.com/en/faqs/view/7112-CD02-7B57-59F8
被控端:Steam 客户端,并在客户端内开启远程畅玩:设置 ——> 远程畅玩
注意!Sunshine 推流的时候要在防火墙给对应端口放行!直接把防火墙关了就行!
打洞方案的软件配置
局域网下软件配置
被控端
准备好 Sunshine
点 .exe 文件启动即可
然后在你的浏览器输入 https://localhost:47990 ,进行一番密码设置,便能进入 Sunshine 的控制界面啦!
点击箭头区域进入
然后输入主控那边的 PIN 码即可配对连接
其余设置基本不用管,如果要专门调节画质啥的就在 “Configuration——> General”内进行调节
主控端
移动端下好 moonlight app 并启动,点击下方的 “+” 号
进入后输入对应的被控端 IP 地址即可,公网下的 IP 地址在 Zerotier 这种虚拟组网软件上查看
对应 IP 由路由器分配,输入至上方 Moonlight 内即可识别
添加后我们便能在主界面看到对应的机子了,但是是有个锁头样式的。点击被锁住的机子,会出现一个 PIN 码,我们将 PIN 码在被控端上的 Sunshine 内输入,便可以连接游玩了。
win上看 IP
在被控端按 win+R,输入 cmd,点“确定”
输入 ipconfig
然后在对应的接口看 IP,一般不是 WLAN 就是以太网这两个栏目里看
Linux 上看就不用说了,不会看 IP 就说明不会用 Linux
移动端上看 IP
自己找网络点进去看,都有的。不过用 moonlight 远控手机玩游戏还真有点抽象。
不过现在很多手机厂商都有做手机到电脑的投屏操作,应该也用不到这边的方案。
公网下软件配置
前置,Zerotier 网页配置
进入网页,登录
进入页面后点 "Create A Network",这里也可以点 “Download” 下载各个平台的软件。创建好网络后,点进去。
记住这张图上的 NETWORK ID,这是之后设备加入网络后的凭证,后边在被控和主控上都要用。但不是说你真的要拿笔记下来就是了。
这里也可以改你的网络名字,下方的“Access Control” 通常选 Private 而不是 Public,如果你不想别人随便连你的网络的话。
往下拉,在 IPv4 Auto-Assign 这一栏可以修改这个网络里的 IP 前缀,想要什么就改什么
拉到最关键的一栏,在 Members 中将管理你所添加至网络内的全部设备。在你将设备加入网络后,点击前边的 “Auth?” 进行授权,要不然无法让这个设备在网络上启用。
注意,下图中的 “Address” 一栏是 Zerotier 给你的设备赋予的唯一地址,你在安装好 Zerotier 设备后就已经赋予了。无论之后后边的 "Managed IPs" 如何变化,“Address” 内的地址都唯一标识你这一台设备。
被控端
准备好 Sunshine 和 Zerotier 软件
启动 Zerotier,我们将在右下角的小图标内找到它。右键,选择 “Join New Network”。输入上方我多次强调的 "Network ID",加入至虚拟网络内。然后,在 Member 内给加入进来的设备打上 “Auth?” 的小蓝勾。
在完成了 Zerotier 的启动后,我们需要做推流。这时候就要用到 Sunshine 了,这里没什么好说的,点 .exe 文件启动即可
然后在你的浏览器输入 https://localhost:47990 ,进行一番密码设置,便能进入 Sunshine 的控制界面啦!
点击箭头区域进入
然后输入主控那边的 PIN 码即可配对连接
其余设置基本不用管,如果要专门调节画质啥的就在 “Configuration——> General”内进行调节
主控端
Zerotier app
移动端下好 Zerotier app 并启动,点下方 “ADD NETWORK”,然后进入后输入 Zerotier 的Network ID,最后拖到最下边 “ADD” 即可。
Moonlight app
移动端下好 moonlight app 并启动,点击下方的 “+” 号
进入后输入对应的被控端 IP 地址即可,虚拟网络内的 IP 地址在 Zerotier 这种虚拟组网软件上查看。对应 IP 由 Zerotier 分配,输入至上方 Moonlight 内即可识别(记得要在被控和主控上都打开 Zerotier)
添加后我们便能在主界面看到对应的机子了,但是是有个锁头样式的。点击被锁住的机子,会出现一个 PIN 码,我们将 PIN 码在被控端上的 Sunshine 内输入,便可以连接游玩了。
对了,其实也可以在 ipconfig 里边看到 Zerotier 开的 VLAN 信息 (^_^)
太卡了,我要更快更稳定的连接!来看看 Moon 服务器搭建方案吧!
众所周知,Zerotier 在打洞的时候走的是 Plant 服务器来进行连接,然后 Plant 服务器大多在国外。所以你需要一个稳定的梯子来连过去。但是梯子自己也限制流量啊,所以我们实际是跑不满自己的网络带宽的。
为了更好的连接,我们需要一个国内的服务器来做中转。所以说,Moon 服务器方案需要一台云服务器,这得花些小钱钱了,不能白嫖哩。
注意,moon 服务器不支持连接移动端,如果只拿移动端串流的小伙伴需要自己找找有没有大佬破解的 zerotier app 的移动端限制。
Zerotier 支持自建中转服务器。Zerotier 自己提供的服务器被称为 Plant 服务器,用户自己搭建的服务器被称为 Moon 服务器。当然,也有大佬做出了 Plant 服务器的自建方案,这个大伙儿自己去找对应教程吧。
首先买服务器这些就不用我多说了,拿到一台服务器后开始操作!服务器上安的是 Linux 系统
安装 Zerotier
curl -s https://install.zerotier.com/ | sudo bash
确认是否安装成功
zerotier-cli info
输出 200 info XXXX 1.10.2 ONLINE 就成功上方的 XXXX 就是这台设备的 Zerotier Address
将服务器的 Zerotier 加入网络
zerotier-cli join 你创建的网络分配的id
输出 200 join OK 就成功创建 Moon 文件
chmod 777 /var/lib/zerotier-one
cd /var/lib/zerotier-one
sudo zerotier-idtool initmoon identity.public > moon.json
sudo vim moon.json在 moon.json 删除所有内容后中输入以下部分:
{
"id": "eb444ec0d8",
"objtype": "world",
"roots": [
{
"identity": "eb444ec0d8:0:55f55633d3234c76d69dfe19742c6e002f2dada7e03f1a6e756353ed5c933171c8543a2a1796134c034a5c189def154cd8d465f05298d16c358746f2c2075ece",
"stableEndpoints": ["服务器的公网IP/9993"]
}
],
"signingKey": "f0c4f0b645f480be69054f6eb04fbba53d1b61c617cbf489df544956a5c0fa39a16b13882099f98a91011e817da2b1c8d15032d300f10e2d4629e333fa4459c8",
"signingKey_SECRET": "9af8bb728b9aaa258108dadc203abeccb82bd563411054c78196da3aa02e6dd6d3535407d7ae3363734628f65b968db98220933d978d47906d0f9403eb720361",
"updatesMustBeSignedBy": "f0c4f0b645f480be69054f6eb04fbba53d1b61c617cbf489df544956a5c0fa39a16b13882099f98a91011e817da2b1c8d15032d300f10e2d4629e333fa4459c8",
"worldType": "moon"
}
然后输入 :wq 退出sudo zerotier-idtool genmoon moon.json
这里成功运行会在当前目录下生成一个 .moon 的配置文件,长这样: 000000eb444ec0d8.moon我们将这个 .moon 配置文件放到 moons.d 的文件夹中即可
sudo mkdir moons.d
sudo mv 000000eb444ec0d8.moon moons.d/在服务器的防火墙给 moon 打开的端口放行
这个看自己的服务器的防火墙规则在哪儿,然后给 moon.json 文件里边设置的端口放行即可
重启 Zerotier
systemctl restart zerotier-one.service
在其它端添加 moon 服务器并测试 moon 服务器的情况
是的,你还需要在其它设备上(windows)来添加 moon 服务器,不然会识别不到(因为 Zerotier 默认走最短跳数,如果你挂着梯子直接往外跑了)。
找到你的 zerotier 安装处,默认安装位置如下:
Windows: C:\ProgramData\ZeroTier\One
Linux: /var/lib/zerotier-one
FreeBSD/OpenBSD: /var/db/zerotier-one我是在 windows 上操作的,所以用 win 上边的 zerotier-cli.bat 文件进行操作。这个文件需要管理员权限的 CMD 来执行,所以我们需要以管理员身份运行 cmd.exe
cmd 的默认位置:
C:\Windows\System32\cmd.exe
右键以管理员身份运行即可
然后输入下方命令:
cd C:\ProgramData\ZeroTier\One
zerotier-cli.bat orbit 服务器的zerotier_address地址 服务器的zerotier_address地址(两次)
示例:zerotier-cli.bat orbit XXXX XXXX
输出 200 orbit OK 就完成了
zerotier-cli.bat listpeers
没问题的话上方命令就会显示你的服务器作为 moon 节点了没啥问题设置就完成了!开玩吧!
Steamlink 连接方案的软件配置
被控端
下载 Steam 并登录
进入设置
在“远程畅玩”内的“配对 Steam 流式应用”输入配对码配对主控设备
主控端
下载 Steam link 并打开,进入设置
选择计算机,其它选项在实际流式传输中自己看情况调整
如果已经配对过了,选择对应计算机回到主菜单运行即可
如果没有配对被控设备,选下方的“其它计算机”,然后在被控端输入 PIN 码即可
然后回到界面点击开完即可。不过 Steamlink 实际体验下来,由于墙的问题,连接并不是很流畅。