Sunshine+Moonlight+Tailscale远程操控电脑

尝试实现了一套新的远程操控电脑的方案

最近几天尝试了在内网中使用 Sunshine 和 Moonlight 实现了局域网内串流玩游戏(GalGame)
在使用了一段时间后,体验非常好,可以躺在床上玩游戏,于是就想这么方便的方案,为什么不能用在工网上远程控制电脑呢
在尝试了网络上的方案后,发现使用 IPv6 的方案对我来说是不可行的,必须尝试使用其他的方案,于是就想到了使用 Tailscale 进行内网穿透再使用 Sunshine 和 Moonlight 来远程控制电脑

局域网内实现串流控制

首先在被控电脑上安装 Sunshine,Sunshine 可以在 GitHub 上下载对应系统的安装包
我是在 Windows 上安装的,所以下载的是 sunshine-windows-installer.exe
安装完成后,打开 Sunshine,在浏览器中对 Sunshine 进行配置
由于这个方案本质上是构建了一个大内网,所以对于 Sunshine 来说,配置一个网页登录账号密码即可

在安卓手机上安装 Moonlight,Moonlight 可以在 GitHub 上下载apk安装包
安装完成后,打开 Moonlight,里面可以看到内网中存在的 Sunshine 服务器,选择连接后,可以看到联机请求的 PIN 码

在 Sunshine 的网页设置中,输入这个 PIN 码,即可在内网中操控电脑了

实现在公网远程操控电脑

只使用 Tailscale 是最简单的方案,只需要被控电脑和控制设备都安装 Tailscale,使用官方的服务器即可完成
不过我选择了自建 Headscale 服务器和 Derper 服务器,搭建方法在我以前的文章中已经完成了,按照其中的方案进行操作即可

搭建完成后,将被控电脑和控制设备都加入到 Headscale 网络中,这样在 Moonlight 中就可以看到被控设备了,至此,公网的远程控制电脑完成了

无需域名搭建 Derper 服务器

现在的 Derper 服务端已经支持无需域名的搭建方式了,使用 acme 申请证书这一步可以替换为以下命令生成自签证书

1
2
DERP_IP= Derper服务器IP
openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes -keyout ${DERP_IP}.key -out ${DERP_IP}.crt -subj "/CN=${DERP_IP}" -addext "subjectAltName=IP:${DERP_IP}"

将生成的证书和私钥放入 /opt/derper 目录下,并更改 /etc/systemd/system/derper.service文件的内容

1
2
3
4
5
6
7
8
9
10
11
[Unit]
Description=Start Derper
After=network.target
Wants=network.target
[Service]
User=root
Restart=always
ExecStart=/opt/derper/derper -hostname Derper服务器IP -a :12150 -http-port 12151 -certmode manual -certdir /opt/derper
RestartPreventExitStatus=1
[Install]
WantedBy=multi-user.target

Headscale 的配置文件 /etc/headscale/derp.yaml 也进行如下修改

1
2
3
4
5
6
7
8
9
10
11
12
regions:
901:
regionid: 901
regioncode: DERP
regionname: MYDERP
nodes:
- name: DERP_SERVER_1
regionid: 901
hostname: Derper服务器的IP地址
stunport: 3478
stunonly: false
derpport: 12150

这样,就可以搭建不需要域名的 Derper 服务器了


能够实现一个新的远程控制电脑的方案,非常的高兴ヾ(^-^)ノ
但是由于这个方案使用的是 Tailscale 打洞方案,所以在网络情况不佳的情况下,会比较不稳定,所以不能完全替代其他的远程方案,需要和其他的远程方案一起使用