一.准备事项

如题,需要自己搭建远程桌面服务,我们需要一台有公网IP的服务器和一个内网穿透软件。因为国情原因,我们大部分设备是没有公网IP的,这就意味着,如果我们需要在除了家庭内网外的环境下访问自己的电脑,就需要一台公网服务器用于中转流量,以及一个内网穿透软件用于转发流量。

这里我们采用的内网穿透软件是开源免费的FRP,如果你有其他的内网穿透软件也可以使用,毕竟原理是一样的~只是操作步骤不同。

FRP项目地址如下:

https://github.com/fatedier/frp

二.开始搭建

1.准备好服务器环境

本人服务器为腾讯云轻量应用服务器,系统环境Ubuntu 22.04。

确认好系统版本后,就可以在release中下载FRP的服务器端

按照系统架构,选择自己适合的版本,笔者这里是frp_0.56.0_linux_amd64.tar.gz

下载好后,在服务器端解压

如图,frps为服务器端,frpc为客户端,两个.toml分别为他们的配置文件

这是老版本的配置文件,请勿照抄,否则无法运行!

先解释一下这些配置项::

bind_port:FRP的监听端口

dashboard_****:管理面板的相关设置项

token:用于与客户端的连接校验

详情请见:https://gofrp.org/zh-cn/docs/reference/server-configures/

输入命令

./frps -c ./frps.toml

配置好后,进入下一步客户端配置~

2.准备客户端环境

同样的,我们需要下载相对应客户端系统的FRP软件,我这里是frp_0.56.0_windows_amd64.zip

解压后,可以看到与服务器端一样的目录配置,同样的,我们这里配置客户端配置文件

同样的,这也是老版本的配置文件,请勿照抄,无法运行!

配置好Common内的与服务器端的连接配置与校验后,重点是下面的RDP协议转发设置

首先,RDP是什么呢?请看维基百科https://zh.wikipedia.org/wiki/%E9%81%A0%E7%AB%AF%E6%A1%8C%E9%9D%A2%E5%8D%94%E5%AE%9A

简单来说,RDP就是微软的远程桌面专有协议,它运行在本地的3389端口上,了解了这个之后,我们再把注意力放在配置项上来

local_ip与local_port不需要多说,它们就是需要FRP转发的地址和端口,在这里就是本地运行的RDP协议

remote_port就是我们想要让FRP转发到服务器上哪个端口,这里我设置的是7001

新版本的设置可以在以下地址照猫画虎:https://gofrp.org/zh-cn/docs/reference/client-configures/

设置好后,输入下列命令运行:

./frpc.exe -c ./frpc.toml

如果您是Windows专业版,那么就可以愉快地开始使用公网远程桌面了,地址是:服务器IP:上面的remote_port(记得在防火墙开放端口)

但是如果您是Windows家庭版,很抱歉,您的系统并不开放远程桌面功能,也就是说不支持RDP协议,股本无法使用远程桌面,但是不需要担心,我们还有办法来获得这个功能,请继续往下看~

3.使用RDPWRAP

你可以选择使用原版RDPWRAP,也可以使用国内开发者在其基础上开发的改进版SuperRDP

地址如下:

https://github.com/stascorp/rdpwrap

https://github.com/anhkgg/SuperRDP

下面仅讲解rdpwrap的使用方法

解压后,使用管理员身份运行install.bat,安装后,打开目录下的RDPConf.exe,应该如图所示:

可以看到监听状态是“未监听”,这是因为软件内置的版本ini和我们现在的系统版本不匹配,这时,我们需要到以下地址下载新的rdpwrap.ini,替换到软件安装目录中,(一般在C:\Program Files\RDP Wrapper文件夹中)。

地址:https://github.com/asmtron/rdpwrap

下载

将里面的autoupdate.bat解压到rdpwrap软件目录中,使用管理员身份运行,它会自动帮你更新版本文件,(当然版本文件更新有滞后性,一般来说Windows刚刚更新一个星期之内是没法使用的)

配置好上述软件后,在Windows高级防火墙设置中开放3389端口,重启电脑,此时应该可以开始使用远程桌面了

4.保持服务器端FRP持久运行

要保证服务器端FRP持久运行,我们可以将其注册为Linux服务,实现持久化运行

具体步骤如下:

Linux输入命令

$ sudo vim /usr/lib/systemd/system/frps.service
$ [Unit]

Description=frps service 
After=network.target syslog.target 
Wants=network.target

[Service]

Type=simple #启动服务的命令

ExecStart=/#path-to-frp#/frps -c /#path-to-frp#/frps.toml
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID

[Install]

WantedBy=multi-user.target
$ systemctl enable frps #启用开机自启动
$ systemctl start frps #启动FRP