最近不是快过年了嘛,但是由于疫情的原因,大家回家的时候估计都要带好电脑,笔记本还好说,台式机就比较麻烦了。

趁着现在比较闲就来水一篇使用 frp 内网穿透来远程 开机 和 控制 电脑,希望能够帮助大家在家的时候能远程控制放在出租屋的台式机。

所需的资源

  • VPS (一台拥有公网 IP 的电脑,用来开启 FRP 服务)
  • WIFI智能插座(支持远程控制的插座,用来远程开机)

主要思路

总体思路是要解决两个问题,一个是如何自动开机,还有一个是如何进行远程控制。

远程开机

第一个问题就是如何自动开机。实现远程开机的方式有很多种,我这里选择了比较简单的方式,也方便大家上手。那就是使用 WIFI 智能插座 + BIOS 设置通电开机 的配置。这个组合就能在家通过控制 WIFI 智能插座通电状态来控制电脑的开机了。

远程控制

远程控制的方式也有很多,市面上也有很多远程控制软件,但是很多都是收费的,免费的也有,比较有名的比如像 TeamViewer ,现在连了一段时间就会怀疑你是商业用途,就会断线,不太好用。我这里使用的是 frp 这种方案,frp 是一个专注于内网穿透的高性能的反向代理应用。

远程开机

刚才说了,我们实现远程主要是通过 WIFI 智能插座 + BIOS 通电开机设置 的方式实现的。现在就细说一下。

我用的是这款 小米智能插座 ,使用小米的智能插座,主要是我平时也有使用小米的其他智能家居,米家用的也比较习惯了,市面上也有其他品牌可以选择。

接下来就是如何 BIOS 上设置通电开机的配置了,由于 BIOS 各家厂商的配置都不尽相同,以我使用的 微星主板 为例,是在 高级 - 电源管理设置 - AC电源掉电再来电的状态,这个选项,我们只要选择 【开机】就行了。这样只要 插座一通电,就能自动开机了。

如果还有同学不知道如何进入 BIOS 的话,我这里再说一下,一般是在按下开机电源按键之后,就一直按 Del 键(有些厂商也可能是其他的键),就会进入到 BIOS 界面了。

到这里设置完成之后,你就可以先试一下,是不是能够通过手机米家控制电脑开机了。

远程控制

我们这里使用的是 frp 的内网穿透方案,这里就需要用到一台拥有公网 IP 的 VPS ,主要是用来跑 FRP 的服务端。

官方文档地址:https://gofrp.org/docs/

github 地址:https://github.com/fatedier/frp

安装 frp 服务端

安装也非常简单,到 github 的 releases 里面下载最新版本的压缩文件,然后解压出来就行了。

这里提供一下简单的脚本,是之前安装的时候记录下来的。帮助一些没接触过的同学。

mkdir -p /etc/frp
cd /etc/frp
# 下载最新的版本
wget "https://github.com/fatedier/frp/releases/download/v0.37.1/frp_0.37.1_linux_amd64.tar.gz"
# 解压
tar xzvf frp_0.37.1_linux_amd64.tar.gz
# 拷贝出来
mv frp_0.37.1_linux_amd64/* /etc/frp

现在最新的版本是v0.38.0,可以把上面的版本号修改成最新的版本,如果是新同学的话,建议不要修改,方便后面可以跟着操作。

接下来就是修改一下配置。

先打开配置文件,服务端的配置文件是 frps.ini

vi frps.ini

写入下面的配置。

[common]
# 绑定服务端口
bind_port = 7000
# 控制台的配置:用户名,密码,端口
dashboard_user = test
dashboard_pwd = test_pwd
dashboard_port = 7500

到这里,配置也就弄完了,这个是最简单的配置了。开了 仪表盘 的端口,主要是为了我们测试服务有没有正常跑起来。

然后我们开始运行 frp 服务。

./frps -c frps.ini

如果终端没有报错的话,这个时候,你就可以打开浏览器输入,你的 VPS 的 IP 地址 + 端口 ,看看能不能访问到。

如果顺利的话,就能看到类似下面的界面:

frp控制台界面

我估计很多同学到这一步应该还是不行,因为我们还没有开放端口,一般 VPS 都会限制访问端口,我们需要到 VPS 厂商那边去开通端口。

我使用的是 腾讯云,就以 腾讯云 为例,需要进入到 安全组 配置里面,然后添加一条新的规则。

frp控制台安全组配置

然后我们再回到浏览器刷新一下,应该就能看到 frp 服务的控制台界面了。

这个时候记得还要开通 7000 端口,因为等一下我们安装完客户端之后还要试一下能不能正常连接上 frp 的服务。

安装 frp 客户端

安装完 frp 服务端,接下来就要安装 frp 的客户端了。

一样的,我们要下载客户端下来。同样也是要到 github 上下载。

客户端下载地址:https://github.com/fatedier/frp/releases/download/v0.37.1/frp_0.37.1_windows_amd64.zip

由于某种不可抗力的影响,有些同学可能下载的过程不太顺利,我这里上传到了网盘一份。阿里云盘 不让上传 zip,只能传 毒盘 了。

链接:https://pan.baidu.com/s/1LAHJHqsJGXacBnK3EVm3ag
提取码:yuo8

客户端的安装就更简单了,找个目录解压,然后修改配置文件 frpc.ini 。Windows 端解压的操作就不用多介绍了吧。

[common]
server_addr = 这里填你的 VPS ip 地址
server_port = 7000

# 这个客户端的名称,可以随便写
[PC]
type = tcp 
local_ip = 127.0.0.1 
# 由于要使用 windows 的远程桌面,所以使用 远程桌面的默认端口 3389 
local_port = 3389 
remote_port = 3389

这个配置里面 remote_port 这个配置可以修改成你想要的端口,我这里用 3389 ,主要是为了后面远程桌面的时候不用再填端口。

哦!对了,remote_port 这个配置的端口也要在 VPS 的安全组上面配置一下,否则也会访问不上。

这样我们客户端的配置也搞完了,我们运行一下,看能不能连上 Frp 的服务。先进入到解压之后的目录。

./frpc -c ./frpc.ini

我这里用的命令终端是Windows PowerShell 。但是我看到我之前的笔记上写的是下面这个,不知道是不是不同终端的差异。如果上面的不行的话,可以试一下下面这个。

frpc.exe -c frpc.ini

如果运行之后,看到 start proxy success 的字样,说明启动成功了。

如果失败了的话,检查一下连接 VPS 的终端是不是掉线了。我用的 腾讯云 VPS ,过一会没有操作就会自动断开。如果掉线了的话,要重新登录 VPS 的终端,开启 frp 服务。然后再测试一下。

测试远程桌面

Windows 默认是没有开启远程桌面,需要到设置里面开一下。

然后我们就可以测试一下,能不能正常进行远程桌面。用另一个电脑,或者用手机也可以,手机要安装能够远程桌面的APP。然后输入 VPS 的 IP 试一下,正常的情况下,会让你输入用户名和密码,这个是你能够支持远程桌面的 Windows 账户。输完账户密码的话,正常的话是已经能够进行远程桌面了。

开机启动

如果能走到这里,那就恭喜你,已经成功跑通这一个流程了。剩下的就是一些边边角角的东西了。

我们刚才测试的时候,需要连着 VPS 的终端才能运行 Frp 的服务,但是我们不能一直开着这个终端吧,这也太不方便了。我们想要的效果是 VPS 启动的时候就能自动启动 frp 服务,这样我们随时都能连上了。

同样的,放在出租屋里的电脑,也是希望能够开机就自动启动,不需要我们手动启动 frp 客户端。如果我们都能坐在电脑前启动 frp 客户端了,那还要远程干什么。

开机启动 frp 服务端

我这里开机服务使用的是 Systemd

Systemd 的任务启动是放在 /lib/systemd/system/ 这个目录下面。我们先在这个目录下面新建一个文件 frp.service,cd 到该目录下,然后使用命令 vi frp.service 创建一个任务 。输入配置。

# Unit 为一个单元,或者说是一个任务
[Unit]
# 描述
Description=frp service
# 启动的时机,这里是网络连接上之后
After=network-noline.target

# 描述如何启动
[Service]
# 启动执行的命令
ExecStart=/etc/frp/frp_0.37.1_linux_amd64/frps -c /etc/frp/frp_0.37.1_linux_amd64/frps.ini
# 类型,一般用 simple 就行了
Type=simple
# 失败时重启
Restart=on-failure
# 重启时间间隔
RestartSec=60s

[Install]
# 配置多用户
WantedBy=multi-user.target

这样,一个简单的 Systemd 任务就创建好了。我们可以现在就启动看一下效果。

systemctl start frp.service

然后你关闭连接 VPS 的终端,启动一下 Frp 的客户端,这个时候应该也能正常连接上frp 服务了。

如果测试正常的话,接下来就是设置开机启动这个任务。

systemctl enable frp.service

后面再测试一下 重启 VPS ,是不是也能正常。到这里就已经能够在 VPS 开机连上网络之后开启 frp 的服务了。

开机启动 frp 客户端

我这里使用的是 任务计划程序。这个是 Windows 自带的程序,我们可以通过这个来做开机自启动。

首先,我们需要一个启动 frp 客户端的脚本,在 Frp 的目录下,新建一个文件 start.bat ,脚本内容如下。

@echo off
:home
frpc -c frpc.ini
goto home

这个脚本很简单,里面用到的启动脚本,就是我们上面手动启动 frp 客户端一样。然后加个循环,如果启动失败,就重试。

如果不想要重试的话,就用下面的脚本。

@echo off
frpc -c frpc.ini
exit

接下来双击启动,测试一下,看是否能够正常启动。

如果正常,那我们就进入下一步,如何开机就运行这个脚本?

我这里使用的是 任务计划程序 。在开始菜单里面搜索,任务计划程序。后面的操作我都截图了。

先点击右侧的 创建任务

任务计划程序

勾选 [ 不管用户是否登录都要运行,使用最高权限运行,隐藏 ] 这几个选项

再新建一个触发器,选择 启动时

再选择我们刚才创建的脚本

这样就可以了,点 确定 ,这个时候应该会需要你输入管理员的密码,以后电脑开机的时候就会自动启动 frp 的客户端了。

然后我们再测试一下,重启一下电脑,在任务管理器里面应该就能看到 frpc.exe 正在运行了。

串起所有流程

到这里,所有的步骤都完成了。是时候串起所有的流程跑一遍看看最终的效果了。

  1. 先把电脑关机,等电脑完全关机。
  2. 打开米家,把 智能插座 关闭,等个十秒钟,再打开。这个时候你就能看到电脑自动开机了。
  3. 等一会,等 frp 客户端的启动。
  4. 使用 远程桌面 的客户端进行连接,输入 VPS 的 IP 地址。这个时候会需要登录你的 Windows 账户,这个时候就能成功 远程桌面 你的电脑了。

扩展

虽然到这里,我要讲的内容就已经讲完了,但是还有一些可以扩展的东西。

比如,

如果你还有一个域名的话,就可以直接使用 域名 进行远程桌面了,就不用记一串很长的 VPS 的 IP 地址了。

如果你想要可以随时连接多台电脑,要怎么配置呢?

还有一个就是 其实 frp 是可以支持 p2p 的方式进行打洞穿透,如果成功,后续的流量将不用经过 frps ,而是直接通信,不再受到 frps 所在服务器的带宽限制。

这些后续扩展的功能,感兴趣的同学可以继续研究哈。