使用 FRP 实现在家远程桌面到公司内网进行远程办公

目录
[隐藏]

由于安全等原因,公司对于 VPN 访问内网的权限也非常慎重。这就导致在公司外很难进行完整的内网访问。另外,当你的办公环境、大量办公相关的文件均在公司内网办公机器上时,在公司外你也想远程访问自己的办公机器。

一种简单的解决方案是,通过两个 QQ 设置自动接受远程控制进行。这种方式被许多人采用,但它有个弊端是桌面不能锁屏,否则就无法成功。这是非常不安全的,会带来电脑重要文件泄露的风险。

通过具有内网穿透能力的远程控制软件,可以访问到内网机器作为跳板来实现内网访问。然而,当前好用的商业远程控制软件在未购买的情况下,在企业内部基本都是禁止使用的,即使可以使用也会对企业带来被起诉的风险。

我们也可以搭建内网穿透工具实现远程访问的解决方案。FRP 即可帮助你实现该方案的一款工具。

1 什么是 FRP

来自官方文档的解释:

FRP 是一个可用于内网穿透的高性能的反向代理应用。借助中间服务代理转发,可以实现各种内网穿透功能。

我们这里只介绍使用 FRP 实现远程桌面配置的具体操作步骤。其中服务器为 CentOS 7,客户端为 Window 10,控制端随意,可以使用 window 的 mstsc 远程连接即可。

注意一个前提: 需要拥有一台公网服务器或 VPS 用于部署服务端进行服务转发。

当然,你也可能可以借助家里的路由器,配置家庭电脑对外开放公网服务,由此将家庭电脑作为服务端(注意,理论上在国内这是非法的,对外开放公网服务需要备案)。

2 配置 FRP 实现在家远程桌面连接到公司的步骤参考

其基本架构就是:公司-服务器-家 模式。服务器是连接中转的桥梁。

2.1 FRP 服务端安装与配置

安装 FRP:

# 下载 frp 0.31.1。注意下载的版本与服务器系统架构要相符。这里以 amd64 为例
https://github.com/fatedier/frp/releases/download/v0.31.1/frp_0.31.1_linux_amd64.tar.gz
# 使用tar指令解压
tar -zxvf frp_0.31.1_linux_amd64.tar.gz
# 进入解压出来的文件夹
cd frp_0.31.1_linux_amd64

修改服务器配置文件 frps.ini

vi frps.ini

配置内容参考:

[common]
# 要绑定的端口
bind_port = 7000
# 安全授权 token,防止端口被扫描到后可以被任意客户端连接
token = 12345678

# 控制台的用户名
dashboard_user = lzwme
# 控制台的密码
dashboard_pwd = password
# 控制台的端口
dashboard_port = 7750

在当前目录下输入如下命令启动服务端服务:

frps -c frps.ini

如果希望断开 ssh 后依然在后台运行,可以使用 screen 命令启动服务端:

screen frps -c frps.ini

当然,我们也可以设置 frps 服务开机自启动,方法参考如下。

创建后台启动服务文件:

vi /etc/systemd/system/frp.service

内容参考如下:

[Unit]
Description=frps
After=network.target

[Service]
ExecStart=/root/frp_0.31.1_linux_amd64/frps -c /root/frp_0.31.1_linux_amd64/frps.ini

[Install]
WantedBy=multi-user.target

相关操作命令参考:

# 启动测试
systemctl start frp.service
# 查看启动状态
systemctl status frp.service
# 开机自启
systemctl enable frp.service

当服务端启动后,可以通过 dashboard_port 的端口号访问控制台。如:http://1.2.3.4:7750

2.2 FRP 客户端安装与配置

2.2.1 客户端安装与配置 FRP

如果客户端是 linux 或 macOS,安装流程和服务端基本一样。如果是 windows,可以直接下载对应客户端:

macOS 的下载地址: https://github.com/fatedier/frp/releases/download/v0.31.1/frp_0.31.1_darwin_amd64.tar.gz

windows 的下载地址: https://github.com/fatedier/frp/releases/download/v0.31.1/frp_0.31.1_windows_amd64.zip

解压缩下载的文件,并进入文件夹。打开并编辑客户端配置文件 frpc.ini。内容参考:

[common]
# 服务器的 IP
server_addr = 1.2.3.4
# 服务器上设置的服务绑定端口(frps.ini 中的 bind_port)
server_port = 7000

# 安全授权 token,需与服务端设置一致
token = 12345678

[RDP] # 反向代理名称,可以随意设置
# RDP 是 TCP 协议的
type = tcp
# 本机 IP
local_ip = 127.0.0.1
# 远程桌面的默认端口
local_port = 3389
# 外网访问的端口
remote_port = 7001
# 外网访问的域名,建议配置
# custom_domains = frp.lzw.me

# 如果是linux,可设置 ssh。在控制端就可以用 server_addr:remote_port 作为 ssh 登陆地址
# [ssh]
# type = tcp
# local_ip = 127.0.0.1
# local_port = 22
# remote_port = 2222

# 设置一个 http 服务 web
# [web]
# type = http
# local_port = 80
# custom_domains = frpweb.lzw.me

# 设置一个代理服务。在控制端就可以用 server_addr:remote_port 作为代理地址
# [http_proxy]
# type = tcp
# remote_port = 6000
# plugin = http_proxy

在当前目录下打开 cmdpowershell,输入如下命令启动客户端服务:

frpc -c frpc.ini

2.2.2 客户端开启远程桌面

望将客户端设置为允许被远程控制。方法为: 右击“此电脑”,选择“系统”——“远程设置”——“允许远程连接至此电脑”。

2.3 控制端远程连接客户端

在控制端电脑上搜索并打开“远程桌面连接”软件,输入 “服务器 IP:外网访问端口”。例如,按照以上服务端与客户端的示例配置,我们这里应该填入: 1.2.3.4:7001。如果一切正常,会顺利弹出输入账号和密码的输入框。输入客户端电脑的用户名与密码即可进入其桌面。

通过以上步骤,即可实现在家远程桌面到公司工作机而实现远程办公了。

2.4 一些注意事项或提示

  • 通过 FRP 使得原本被屏蔽的内网可以在公网访问,当你在享受便利的同时,也在享受额外带来的安全风险。所以一定要对 token 与密码设置、端口设置、配置文件安全等保持一定的谨慎。在不需要使用时尽量关闭相关服务通道。
  • 能够随时连接到 FRP 客户端工作机的前提是其一直运行着。所以务必将工作机的自动休眠功能取消。
  • More…

3 ARP 其他玩法参考

3.1 点对点内网穿透

点对点即 P2P 模式。frp 提供了一种新的代理类型 xtcp 用于应对在希望传输大量数据且流量不经过服务器的场景。

这种模式需要在被控端(公司)与控制端(家)都部署上 frpc 客户端。不过当前该模式成功率不高。

具体步骤参考如下。

  1. 服务端配置 frps.ini 中需额外配置一个 udp 端口用于支持该类型的客户端:
bind_udp_port = 7001
  1. 被控端(公司)的客户端配置,设置 type=xtcp。参考:
# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000

# 配置远程连接
[p2p_rdp_lzw]
type = xtcp
local_ip = 127.0.0.1
local_port = 3389
# 只有 sk 一致的用户才能访问到此服务
sk = abcdefg
  1. 控制端(家)配置并启动另外一个 frpc 客户端。配置参考:
# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000

[p2p_rdp_lzw_visitor]
type = xtcp
# xtcp 的访问者
role = visitor
# 要访问的 xtcp 代理的名字
server_name = p2p_rdp_lzw
sk = abcdefg
# 绑定本地端口用于访问 ssh 服务
bind_addr = 127.0.0.1
bind_port = 6000
  1. 如一些顺利,则可顺利通过 127.0.0.1:6000 访问。

更多功能及配置方式、示例可参考官方文档: https://github.com/fatedier/frp/blob/master/README_zh.md

4 相关问题

4.1 服务端启动报错 Exec format error

/frpc: cannot execute binary file: Exec format error

这是下载错文件了,下载的 FRP 与操作系统处理器架构不匹配,需要重新下载正确的文件。

可以使用 archuname -a 等命令查看系统架构。如:

$ arch
# 输出
x86_64

FRP 版本与 Linux 系统处理器架构对比参考:

FRP类型 处理器架构
386 X86架构
amd64 amd架构
arm arm架构
arm64 64位arm架构
mips mips架构
mips64 64位mips架构
mipsle mipsle架构
mips64le 64位mipsle架构

4.2 设置 FRP 以 Windows 系统服务方式实现开机启动

CMD 命令提示符下启动 FRP 虽然简单便捷,但一直启动着一个黑色的 cmd 界面看上去并不完美,更为重要的是,还会因无意中的关闭导致中断而没有任何办法。

NSSM 是一个可以将指定脚本或可执行程序注册为 Windows 系统服务的小巧而优秀的工具。同类型工具还有
winsweasy-service 等。

我们这里介绍使用 NSSM 将 FRP 启动脚本注册为 Windows 系统服务的方法。

1、 下载:从官网下载 NSSM,地址为:https://nssm.cc/download。注意,window10 系统要下载 prerelease 版本。

2、 解压:解压下载的 zip 文件至本地目录,根据当前电脑系统类型选择 win32 位或 win64 位目录下的 nssm.exe 文件,打开 cmd 命令提示符进入到该文件所在目录。

3、 服务注册:在 cmd 命令行输入 nssm.exe install frpc,在弹出的对话框中,path 处选择启动frpc的脚本,然后点击Install service注册服务。

提示: 启动 frpc 的批处理脚本可以建立在 frpc 所在目录下,其内容为 frpc -c frpc.ini

4、 服务启动:执行 nssm.exe start frpc

通过以上操作后,即可以在本地计算机服务列表中看到 frpc 服务。打开本地服务程序的方法为:按键 Win+R,输入 services.msc

nssm 其他命令参考:

// 创建一个服务名称为 servicename 的服务
nssm install
// 启动创建的servername服务
nssm start

// 停止创建的servername服务
nssm stop

// 重新启动创建的servername服务
nssm restart

// 删除创建的servername服务
nssm remove

5 相关参考或链接

点赞 (7)
  1. 深海说道:
    Google Chrome 89.0.4389.82 Google Chrome 89.0.4389.82 Windows 10 x64 Edition Windows 10 x64 Edition

    学习了,刚刚弄配置,一次成功 :biggrin: !感谢~ :smile:

  2. Michael说道:
    Google Chrome 89.0.4389.82 Google Chrome 89.0.4389.82 Windows 10 x64 Edition Windows 10 x64 Edition

    太棒了, 感谢! :biggrin: :biggrin: :biggrin:

  3. 游客说道:
    Google Chrome 73.0.3683.86 Google Chrome 73.0.3683.86 Windows 7 x64 Edition Windows 7 x64 Edition

    :biggrin:

  4. sharp说道:
    Google Chrome 78.0.3904.97 Google Chrome 78.0.3904.97 Mac OS X  10.13.6 Mac OS X 10.13.6

    不错学习了

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

Captcha Code