利用frp搭建远程办公环境

Published on: May 2, 2022 | Reading Time: 1 min | Last Modified: May 2, 2022

frp
远程办公
内网穿透

疫情当下,无法到公司上班,但公司的ERP、共享文件等又只能在内网访问,在家办公着实不方便。有什么办法在家里也能像在公司一样方便的使用公司的内网服务呢?

一般情况下公司网管会让你在公司电脑上装TeamViewer、向日葵之类的远程桌面软件,或者用QQ的远程协助功能来解决。但这些方法需要在控制端与被控端都安装相同的软件才能正常连接,而且被控端失联后你还要请同事帮忙在被控端打开软件再进行连接。隐私也是个大问题,你所有的操作在被控电脑上都是可以实时看到的。

frp内网穿透+Windows自带的远程桌面完全可以规避以上软件的不足,让你愉快的在家享受远程办公的乐趣。如果公司网络有公网IP,网管又乐意帮你做端口转发的话,其实也就用不到内网穿透了。本文介绍的就是以上条件都不具备的条件下如何自给自足,而且很流畅的实现远程办公。

话不多说,开干吧!

你所需的条件:

  • 一台有公网IP的Linux服务器

安装frp服务端软件

下载frp软件包到服务器

wget https://github.com/fatedier/frp/releases/download/v0.42.0/frp_0.42.0_linux_amd64.tar.gz

解压软件包

tar -zxvf frp_0.42.0_linux_amd64.tar.gz

从服务器删除刚刚下载的软件包

rm -f frp_0.42.0_linux_amd64.tar.gz

移动已解压的软件包文件夹到服务器etc文件夹下,并将文件夹重命名为frp

mv tar -zxvf frp_0.42.0_linux_amd64 /etc/frp

frps服务的配置

编辑frps配置配置文件

vi /etc/frp/frps.ini

内容修改如下:

[common]
bind_port = 7000 #frps服务监听端口
vhost_http_port = 8080 #如果客户端有http服务,用serverip:8080访问客户端的http服务
subdomain_host = sixdian.com #如果希望用域名访问客户端上的http服务则设置你自己的顶级域名地址,子域名在客户端设置
dashboard_port = 7500 #设置访问frps仪表板的端口
dashboard_user = username #设置访问仪表板的用户名 
dashboard_pwd = ******** #设置访问仪表板的密码
token = ****** #设置连接服务端与客户端所使用的令牌
max_pool_count = 5

设置frps服务开机启动

新建systemctl配置文件

vi /etc/systemd/system/frps.service

配置文件写入以下内容,并保存

[Unit]
Description=frps service
After=network.target network-online.target syslog.target
Wants=network.target network-online.target

[Service]
Type=simple

ExecStart=/etc/frp/frps -c /etc/frp/frps.ini

[Install]
WantedBy=multi-user.target

启动frps服务

systemctl start frps

让frps开机启动

systemctl enable frps

Windows客户端远程桌面的配置

Windows 设置-系统-远程桌面-启用远程桌面

在你习惯安装软件的分区内新建一个名为"frp"的文件夹(我是建在D盘)

下载frp的Windows版到本地

最新版地址:

https://github.com/fatedier/frp/releases/download/v0.42.0/frp_0.42.0_windows_amd64.zip

将下载的软件包解压,并将解压后文件夹内的文件复制到刚刚新建新的位于D盘的frp文件夹内

编辑配置文件frpc.ini为以下内容,并保存

[common]
server_addr = test.sixdian.com #设置你的服务器ip地址或已解析到服务器的域名
server_port =  7000 #设置你远端服务器frps服务的监听端口
token = ******** #设置你远端服务器frps服务的令牌
tls_enable = true #需要加密的话设置此项
pool_count = 1

[HP ProBook 430 G1 rdp] #方括号内随便写,会在frps服务的仪表板内显示,方便识别
type = tcp #用tcp协议与frps服务通信
local_ip = 127.0.0.1 #本机IP地址
local_port = 3389 #本地Windows远程桌面默认的服务端口
remote_port = 12345 #你frps服务端已开放的端口,登录远程桌面使用此端口
use_compression = true 

[HP ProBook 430 G1 rdp-udp] #方括号内随便写,会在frps服务的仪表板内显示,方便识别
type = udp #用udp协议与frps服务通信,需frps服务器防火墙开启通信端口的udp协议
local_ip = 127.0.0.1 #本机IP地址
local_port = 3389 #本地Windows远程桌面默认的服务端口
remote_port = 12345 #你frps服务端已开放的端口,登录远程桌面使用此端口
use_compression = true

用WinSW将frpc注册为Windows服务,实现开机后台启动

下载WinSW,并把下载下来的WinSW-x64.exe放到frp文件夹下,并将文件名称修改为"winsw-frpc"

最新版地址:

https://github.com/winsw/winsw/releases/download/v2.11.0/WinSW-x64.exe

在frp文件夹内新建WinSW的配置文件,名为"winsw-frpc.xml"

编辑winsw-frpc.xlm文件内容为:

<service>
    <id>frpc</id>
    <name>frpc</name>
    <description>frpc remote control</description>
    <executable>frpc</executable>
    <arguments>-c frpc.ini</arguments>
    <logmode>reset</logmode>
</service>

开打cmd终端:

winsw-frpc install
winsw-frpc start

这样就会把frpc程序注册为你Windows的系统服务,在你启动Windows的时候自动开启服务

按下面的设置,将frpc服务设置为失败后重启,这样只要你的服务器不宕机就不用怕被控端失联了。

试一下效果吧 Win+R,运行:

mstsc

输入你Linux服务器的IP地址:12345,填写你被控端电脑的用户名和密码

注:我家里网络有公网IP,我把frps服务搭建在我的软路由上面,所以我只需要连接我路由器的IP地址就可以了。

End!