一、环境介绍
通过外网访问公司内网的办公电脑,实现可以通过远程桌面直接访问
- 环境描述:
- FRP项目地址:https://github.com/fatedier/frp/releases
- 注意:前提是中转机FRP服务端所在的机器能通过公网的机器ping通
二、安装FRP服务端

[root@frp-server ~]# wget https://github.com/fatedier/frp/releases/download/v0.30.0/frp_0.30.0_linux_amd64.tar.gz
[root@frp-server ~]# tar -xf frp_0.30.0_linux_amd64.tar_2.gz -C /usr/local/
[root@frp-server ~]# cd /usr/local/
[root@frp-server local]# mv frp_0.30.0_linux_amd64/ frp

三、FRP配置
3.1:配置FRP服务端
- 配置 FRP 服务端的前提条件是需要一台具有公网 IP 的设备,得益于 FRP 是 Go 语言开发的,具有良好的跨平台特性。你可以在 Windows、Linux、MacOS、ARM等几乎任何可联网设备上部署。
- 这里以 Linux 为例,FRP 默认给出两个服务端配置文件,一个是简版的
frps.ini
,另一个是完整版本frps_full.ini
[root@frp-server local]# cd frp/
[root@frp-server frp]# vim frps.ini
[common]
bind_port = 7000
- 其中
bind_port
指frp服务端监听的端口号,frp客户端将通过这一端口进行连接,这里我们可以按需设置,建议修改
3.2:启动FRP服务端
[root@frp-server frp]# nohup ./frps -c ./frps.ini >/dev/null 2>&1 &
- 防火墙放通7000端口
[root@frp-server frp]# firewall-cmd --permanent --zone=public --add-port=7000/tcp
[root@frp-server frp]# firewall-cmd --reload
success
- 通过systemd管理
[root@nps-server frp]# vim /etc/systemd/system/frps.service
[Unit]
Description=frps daemon
After=syslog.target network.target
Wants=network.target
[Service]
Type=simple
ExecStart=/usr/local/frp/frps -c /usr/local/frp/frps.ini
Restart= always
RestartSec=1min
[Install]
WantedBy=multi-user.target
[root@nps-server frp]# systemctl daemon-reload
[root@nps-server frp]# systemctl start frps.service
[root@nps-server frp]# systemctl enable frps.service
- 注意ExecStart中要配置成自己的路径.
- 然后使用
systemctl start frps
即可启动frps, 用systemctl enable frps
即可将frps设置为开机启文章来源(Source):浅时光博客 动。
3.3:配置FRP客户端
- 和 FRP 服务端类似,FRP 默认也给出两个客户端配置文件,一个是简版的
frpc.ini
,另一个是完整版本frps_full.ini
[root@frp-server frp]# vim frpc.ini
[common]
server_addr = 58.242x.x //frp服务端外网IP地址
server_port = 7000 //为FRP服务端监听的端口
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
- 注意:
local_port
和remote_port
,前者的设置根据我们的具体需求,比如笔者的需求是在外网访问内网电脑的远程桌面,那么我们就设为远程桌面的3389端口;后者则可以自定义,比如我们设为1234,那么我们访问frps服务端外网IP:1234
的时候,就会被转发至frps客户端的3389端口。
3.4:启动FRP客户端
[root@frp-server frp]# nohub ./frpc -c ./frpc.ini >dev/null 2>&1 &


- 放通端口
[root@frp-server frp]# firewall-cmd --permanent --zone=public --add-port=6000/tcp
success
[root@frp-server frp]# firewall-cmd --permanent --zone=public --add-port=1234/tcp
success
[root@frp-server frp]# firewall-cmd --reload
success
- 访问测试
[root@localhost ~]# ssh dqz@192.168.66.33 -p 6000

四、FRP 高文章来源(Source):浅时光博客 级进阶
4.1:添加dashboard配置
- 给FRP添加dashboard,修改配置文件
[root@frp-server ~]# vim /usr/local/frp/frps.ini
# 指定 Dashboard 的监听的 IP 地址
dashboard_addr = 0.0.0.0
# 指定 Dashboard 的监听的端口
dashboard_port = 7500
# 指定访问 Dashboard 的用户名
dashboard_user = admin
# 指定访问 Dashboard 的密码
dashboard_pwd = admin

- 放通7500端口
[root@frp-server ~]# firewall-cmd --permanent --zone=public --add-port=7500/tcp
success
[root@frp-server ~]# firewall-cmd --reload
success
4.2:重启fprs服务
[root@frp-server ~]# /usr/local/frp/frps -c /usr/local/frp/frps.ini &
4.3:浏览器访问
4.4:添加身份验证
- 默认情况下只要知道 FRP 服务端开放的端口,任意 FRP 客户端都可以随意在服务端上注册端口映射,这样对于在公网上的 FRP 服务来说显然不太安全。FRP 提供了身份验证机制来提高 FRP 服务端的安全性。要启用这一特性也很简单,只需在 FRP 服务端和 FRP 客户端的 common 配置中启用
privilege_token
参数就行。
[root@nps-server frp]# vim frps.ini
...
privilege_token = dqz123456
- 启用这一特性后,只有 FRP 服务端和 FRP 客户端的 common 配置中的
privilege
参数一致身份验证才会通过,FRP 客户端才能成功在 FRP 服务端注册端口映射。否则就会注册失败原文链接:https://www.dqzboy.com _t文章来源(Source):https://www.dqzboy.com oken - 需要注意的是 FRP 客户端所在机器和 FRP 服务端所在机器的时间相差不能超过 15 分钟,因为时间戳会被用于加密验证中,防止报文被劫持后被其他人利用。这个超时时间可以在配置文件中通过
authentication_timeout
这个参数来修改,单位为秒,默认值为 900,即 15 分钟。如果修改为 0,则 FRP 服务端将不对身份验证报文的时间戳进行超时校验。
4.5:加密与压缩
- 如果公司内网防火墙对外网访问进行了流量识别与屏蔽,例如禁止了 SSH 协议等,可通过设置
use_encryption = true
,将 FRP 客户端 与 FRP 服务端之间的通信内容加密传输,将会有效防止流量被拦截。 - 如果传输的报文长度较长,通过设置
use_compression = true
对传输内容进行压缩,可以有效减小 FRP 客户端 与 FRP 服务端之间的网络流量,来加快流量转发速度,但是会额外消耗一些 CPU 资源。 - 这两个功能默认是不开启的,需要在 FRP 客户端配置文件中通过配置来为指定的代理启用加密与压缩的功能,压缩算法使用的是 snappy。
[root@nps-server frp]# vim frpc.ini
[ssh]
type = tcp
local_port = 22
remote_port = 6000
use_encryption = true
use_compression = true
五、配置远程访问内网PC
- 获取windows客户端程序包,将下载下来的程序包安装在家里的PC机上;点击下载
- 将程序包解压到自己电脑的磁盘的任意目录,这个目录下面创建
.bat
脚本需要用到
5.1:修改配置frpc.ini

[common]
server_addr = 58.242.xx.xx #FRP服务端的公网IP
server_port = 7000 #服务器监听的port,与frps.ini文件中配置的bind_port的值一致
privilege_token = dqz123456 #服务端配置的token
[rdp] #远程桌面配置的名称
type = tcp
local_ip = 目标PC主机IP
local_port = 3389 # 监听本地端口;当用户连接以下remote_port的7001端口时,会被转发到frp client的3389端口(远程桌面的默认端口)。
remote_port = 7001 # 绑定远程端口;frpc 在与frps建立连接后,server会监听于此端口用于被用户连接。需要打开frp服务端的防火墙需要放通此端口
5.2:创建启动脚本
#创建个.bat文件,命名为frpstart.bat,添加如下内容
@echo off
start "C:\Windows\System32\cmd.exe"
cd D:\frp_0.30.0_windows_amd64 //frpc存储路径
frpc -c frpc.ini
exit
- 测试下脚本是否可以正常运行

5.3:注册为系统服务
sc create frp_client binPath= D:\frp_0.30.0_windows_amd64\frpstart.bat start= auto

- 问题解决:以管理员身份去运行CMD


5.4:服务端防火墙放通端口
[root@frp-server ~]# firewall-cmd --permanent --zone=public --add-port=7001/tcp
5.5:查看WEB页面是否注册成功
- 浏览器输入 服务端IP:dashboard端口

5.6:远程访问测试
- 确认远程的办公机开启了远程桌面访问


- 微软键+R—mstsc—服务端公网IP:7001(服务端IP:远程绑定的端口)



- 输入你办公机的开机用户和密码即可登入成功

给博主点赞!