前言

你是否有需求,突然来了紧急需求,需要在家里远程操作公司的电脑进行加班? 捂嘴笑.png
不加班怎么享受福报呢? 滑稽.png
当然以上都是瞎扯,在家里访问公司电脑,最简单的是使用远程控制软件,如Teamviewer、向日葵等,但是这都是第三方的应用,安全性没得什么保障,其次并不是很稳定,而且以上软件是监控VGA的输出,也就是你操作的时候,你的公司的屏幕也是可以被同事看到的,吓到人就不太好了,hh
最完美的方案还是windows自带的远程桌面,使用体验完美,并且不会在实际桌面输出,其弊端是公司的电脑一般都不会单独配置ip地址,无法直接连接,其次也不能调用独立显卡进行计算,不过公司的mx250拿来编译怕是要反向加速...
所以综合以上,这里我准备使用frp做内网穿透,并使用vps做端口转发,来实现在任意地点登陆公司电脑 太开心.png


1 准备工作

  • Root权限的VPS服务器(最好是国内的服务器,速度快延迟低,连接稳定)
  • 公司电脑可24h开机并联网

2 开始搭建

2.1 先配置服务器端

1.Centos下先执行命令安装wget
yum install -y wget
2.创建目录来存放frp和配置文件
mkdir /home/frp && cd /home/frp
3.下载Github最新版服务器端frp
下载地址:https://github.com/fatedier/frp/releases
这里以目前最新版 v0.32.1 为例
wget https://github.com/fatedier/frp/releases/download/v0.32.1/frp_0.32.1_linux_amd64.tar.gz
4.解压文件
tar -xzvf frp_0.32.1_linux_amd64.tar.gz
5.进入解压的文件夹
cd frp_0.32.1_linux_amd64/
6.编辑配置文件 vi frps.ini

[common]
bind_addr = 0.0.0.0
#frp连接端口
bind_port = 7000
#frp连接密码
token = 1234567890

#面板端口
dashboard_port = 7500
#面板账号
dashboard_user = admin
#面板密码
dashboard_pwd = admin

修改完成后输入:wq保存退出即可
具体参数可参考官方的参考文档:https://github.com/fatedier/frp/blob/master/README_zh.md
7.给脚本加上执行权限
chmod +X *.sh
8.运行脚本
./frps -c ./frps.ini
2020-04-16T05:55:29.png

至此,服务端就运行成功了,不过别忘了在防火墙放行对应的端口
现在可以直接在浏览器输入服务器ip:7500打开frp面板了

2.2 配置客户端

1.在上面的下载地址下载frp的windows版本
这里我下载的是:frp_0.32.1_windows_amd64
然后将其解压,这里我解压后为如下文件:
2020-04-16T06:00:36.png
2.修改配置文件 frpc.ini

[common]
#服务器ip地址
server_addr = 127.0.0.1
#服务器frp连接端口
server_port = 7000
#连接密码
token = 1234567890

[ssh]
type = tcp
local_ip = 127.0.0.1
#本地转发的端口
local_port = 3389
#远程暴露的端口
remote_port = 3389

修改完毕后保存退出
3.在地址栏输入cmd在当前目录打开cmd
2020-04-16T06:06:41.png
4.输入以下命令启动frp本地客户端,进行端口映射
frpc.exe -c frpc.ini
2020-04-16T06:07:53.png

现在就可以打开远程桌面工具来进行远程桌面连接啦~

3 远程连接

打开电脑的远程桌面工具
输入服务器ip就可以连接远程桌面辣,默认使用3389端口
2020-04-16T12:18:21.png

虽然中间出了点小插曲 --> 因为windows家庭版阉割了远程桌面功能,不过已经想办法解决了,
详见:https://ffis.me/experience/1907.html
最终还是连接成功辣~ 滑稽.png
QQ截图20200416201912.png

4 无人值守

虽然服务器端和客户端的frp都运行正常了,但是并没有加入无人值守开机自动启动
下面来给frp做个开机自动自动

4.1 服务器端的自动启动

这里我服务器系统用的CentOS7,所以可以直接使用systemctl去管理Frp
1、创建.service服务文件
vi /usr/lib/systemd/system/frp.service
这里需要注意 命令的路径一定要使用绝对路径

[Unit]
#服务描述
Description=Frp Server Service
#在以下服务之后启动
After=network.target

[Service]
#服务运行模式:后台模式
Type=simple
#启动服务时执行的命令
ExecStart=/data/frp/frp-server/frps -c /data/frp/frp-server/frps.ini
#表示给服务分配独立的临时空间
PrivateTmp=True
#服务运行的用户和用户组
User=root
Group=root
#非正常退出时,自动重启,用作守护进程
Restart=on-failure

[Install]
#依赖配置
WantedBy=multi-user.target

2、服务状态

#启动/关闭/重启/状态
systemctl start frp.service
systemctl stop frp.service
systemctl restart frp.service
systemctl status frp.service
 
#添加开机自启
systemctl enable frp.service
#关闭开机自启
systemctl disable frp.service

4.2 客户端的自动启动

1、下载
如果客户端也在centos系统可参考上面的配置方式
当然这里我是在windows下使用frp客户端,所以需要把frp添加到系统服务中
这需要用到winsw
下载地址:https://github.com/kohsuke/winsw/releases
我下载的是 WinSW.NET461.exe
WinSW.NET461.exe 重命名为你想要的名字,创建配置文件
这里我重命名为:winswRemote.exe
配置文件需要和winsw同名同目录
我的配置文件为:winswRemote.xml

2、配置
frpc.exefrpc.ini放到winsw同目录,也可以使用绝对路径指定目录
参考如下配置:

<service>
  <!-- 该服务的唯一标识 -->
  <id>FrpRemote</id>
  <!-- 该服务的名称 -->
  <name>Frpc Remote Service</name>
  <!-- 该服务的描述 -->
  <description>Frpc客户端 远程桌面端口转发</description>
  <!-- 要运行的程序路径 -->
  <executable>frpc.exe</executable>
  <!-- 携带的参数 -->
  <arguments>-c frpc.ini</arguments>
  <!-- 第一次启动失败 60秒重启 -->
  <onfailure action="restart" delay="60 sec"/>
  <!-- 第二次启动失败 120秒后重启 -->
  <onfailure action="restart" delay="120 sec"/>
  <!-- 日志模式-旋转:达到10m自动切片 -->
  <logmode>rotate</logmode>
  <!-- 指定日志文件目录(相对于executable配置的路径) -->
  <logpath>logs</logpath>
</service>

3、安装
打开cmd,切换到winsw目录下,运行如下命令

//注册服务
winswRemote.exe install
//卸载服务
winswRemote.exe uninstall
//启动服务
winswRemote.exe start
//停止服务
winswRemote.exe stop
//重启服务
winswRemote.exe restart
//查看状态
winswRemote.exe status