利用 frp 搭建远程办公环境

Published on: May 2, 2022 | Reading Time: 2 min

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!