首页Python3 正文

利用frp搭建自己的mstsc远程桌面服务器

时间: 2020年9月4日 浏览 331

相信大家做开发的时候都是使用的公司的电脑,但是BUG可不会挑着你上班的时候出现,有时候一个电话打来,节假日也得匆匆忙忙跑回公司改代码。本文将简单介绍如何使用FRP(全名Fast Reverse Proxy)进行内网穿透,通过阿里云服务器远程访问自己公司电脑。

一、实现思路

Windows是自带远程桌面功能的,只是该功能只有专业版才有。Windows远程桌面端口是3389,控制端Win键 + R打开run界面输入mstsc可以呼出远程桌面连接,输入目标电脑IP即可连接。公司电脑通常部署在内网中,不能直接通过IP访问到,因此需要将内网的电脑3389端口映射到公网IP服务器上,内网电脑与云服务器建立连接,控制端通过访公网服务器转发流量到内网电脑中,简单地说就是内网穿透。

二、准备工作

1、一台有公网IP的云服务器,开放7000,3389端口(没有的话的可以右上角了)
2、一台Windows旗舰版/专业版系统的电脑(被连接端,能够访问互联网)
3、FRP 项目地址

三、操作步骤

准备工作中的1、2不再详细赘述,这里主要讲FRP的搭建和使用,FRP的操作很简单,下面以被连接端Windows10专业版,阿里云服务器Ubuntu18.04LTS为例介绍操作步骤:

首先去这里下载FRP应用,根据自己要远程的电脑和云服务器选择对应的版本下载。

FRP文件结构

1、将下载好的FRP解压,进入到目录中,可以总共有8个文件,其中有用的是这六个:
FRP目录
可以看到文件名以frp + c/s命名,其中以c结尾的是客户端,以s结尾的是服务端,ini是配置文件,带full的是详细配置,这里我们只需要使用不带full的frpc/s.ini的简单配置文件就可以了。

服务端(Ubuntu18.04)

1、将文件frp_0.29.0_linux_amd64.tar.gz传输到服务器并解压,打开frps.ini,可以看到:

[common] bind_port = 7000

如果有需要,可以更改服务器的启动端口
这里我们不做更改,直接输入命令
./frps -c ./frps.ini
在这里插入图片描述
截图我改成6999端口,出现蓝色字样即启动成功

被连接端(Windows10专业版)

1、首先允许远程桌面连接,具体操作可以自行搜索
(win10下进入到设置->系统->远程桌面开启即可,注意Windows10专业版才有的选项)

2、同样先解压,打开frpc.ini

[common] server_addr = 127.0.0.1 server_port = 7000 auto_token=mstsc [mstsc] type = tcp local_ip = 127.0.0.1 local_port = 22 remote_port = 6000

其中
server_addr,server_port为服务端的IP地址和端口
可以看到FRP默认配置了SSH端口,即不修改的话通过访问服务端6000端口可以SSH到内网电脑,下面我们修改为

[common] server_addr = 你的服务器IP地址 server_port = 7000 auto_token=mstsc [mstsc] type = tcp local_ip = 127.0.0.1 local_port = 3389 remote_port = 3389

其中
type为连接方式
local_ip为本机ip
local_port为本地需要映射的端口
remote_port为映射到服务器上的端口
auto_token=mstsc对应 [mstsc],如果需要同时部署多台的话改个名就可以了

修改完成后保存,注意这里不能直接通过双击exe文件来运行
win + R打开运行,输入powershell,进入到目录下执行

在这里插入图片描述

至此,内网穿透就完成了,下面Win + R输入mstsc,输入服务器的IP,如果remote_port不是3389的话还需要加上端口号地址(server_addr :remote_port),即可远程内网电脑桌面了

Window
手机端RD Client
手机端使用官方出品的RD Client也是可以连接的

四、使用点对点直连

显然,使用服务器中转,流畅性受到控制端,被控端,以及服务器三方面的影响,特别是受中间代理服务器的影响最大,那么,有没有直连方案呢?

FPR提供了一种xtcp的直连方式,可以允许我们控制端与被控端进行点对点连接。原理是通过服务端找到双方位置,之后双方使用UDP进行通讯

下面修改服务端配置文件frps.ini

[common] bind_port = 7000 bind_udp_port = 7001

可以看多了一个UDP端口,重启服务器
在这里插入图片描述
因为是直连,所以连接双方都要有frp

其中控制端frpc.ini文件如下:

[common] server_addr = 你的IP地址 server_port = 7000 [p2p_mstsc_visitor] #官方文档是使用xtcp,但是测试发现穿透率不高,所以改用stcp type = stcp # xtcp 的访问者 role = visitor # 要访问的 xtcp 代理的名字 server_name = mstsc # 只有 sk 一致的用户才能访问到此服务 sk = kangdi # 绑定本地端口用于访问 ssh 服务 bind_addr = 127.0.0.1 bind_port = 6999

启动服务,出现类似字样
在这里插入图片描述
服务端会出现类似字样
在这里插入图片描述
被控制端frpc.ini文件如下:

[common] server_addr = 你的IP地址 server_port = 7000 auto_token=mstsc [mstsc] type = stcp # 只有 sk 一致的用户才能访问到此服务 sk = kangdi local_ip = 127.0.0.1 local_port = 3389

启动服务,出现类似字样
在这里插入图片描述
服务端出现类似字样
在这里插入图片描述
现在,在远程连接的时候输入localhost:6999就能点对点访问服务器了

在这里插入图片描述
FRP的功能不仅仅只有内网穿透,
以后有机会还会介绍FPR更多相关的功能