操作系统 / 系统运维

FRP内网穿透搭建和使用

浅时光 · 10月25日 · 2020年 3017次已读

一、环境介绍

通过外网访问公司内网的办公电脑,实现可以通过远程桌面直接访问

  • 环境描述:
    • FRP服务端:Linux-CentOS 7(作为跳板,然后映射3389远程桌面端口)
    • FRP客户端:则是自己外网下文章来源(Source):https://www.dqzboy.com的个人PC
  • FRP项目地址:https://github.com/fatedier/frp/releases
  • 注意:前提是中转机FRP服务端所在的机器能通过公网的机器ping通

二、安装FRP服务端

FRP内网穿透搭建和使用-浅时光博客
[[email protected] ~]# wget https://github.com/fatedier/frp/releases/download/v0.30.0/frp_0.30.0_linux_amd64.tar.gz

[[email protected] ~]# tar -xf frp_0.30.0_linux_amd64.tar_2.gz -C /usr/local/
[[email protected] ~]# cd /usr/local/
[[email protected] local]# mv frp_0.30.0_linux_amd64/ frp
FRP内网穿透搭建和使用-浅时光博客

三、FRP配置

3.1:配置FRP服务端

  • 配置 FRP 服务端的前提条件是需要一台具有公网 IP 的设备,得益于 FRP 是 Go 语言开发的,具有良好的跨平台特性。你可以在 Windows、Linux、MacOS、ARM等几乎任何可联网设备上部署。
  • 这里以 Linux 为例,FRP 默认给出两个服务端配置文件,一个是简版的 frps.ini,另一个是完整版本 frps_full.ini
[[email protected] local]# cd frp/
[[email protected] frp]# vim frps.ini
[common]
bind_port = 7000
  • 其中bind_port指frp服务端监听的端口号,frp客户端将通过这一端口进行连接,这里我们可以按需设置,建议修改

3.2:启动FRP服务端

[[email protected] frp]# nohup ./frps -c ./frps.ini >/dev/null 2>&1 &
  • 防火墙放通7000端口
[[email protected] frp]# firewall-cmd --permanent --zone=public --add-port=7000/tcp
[[email protected] frp]# firewall-cmd --reload
success
  • 通过systemd管理
[[email protected] 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

[[email protected] frp]# systemctl daemon-reload
[[email protected] frp]# systemctl start frps.service
[[email protected] frp]# systemctl enable frps.service
  • 注意ExecStart中要配置成自己的路径.
  • 然后使用systemctl start frps即可启动frps, 用systemctl enable frps即可将frps设置为开机启动。

3.3:配置FRP客户端

  • 和 FRP 服务端类似,FRP 默认也给出两个客户端配置文章来源(Source):https://www.dqzboy.com文件,一个是简版的frpc.ini,另一个是完整版本frps_full.ini
[[email protected] 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_portremote_port,前者的设置根据我们的具体需求,比如笔者的需求是在外网访问内网电脑的远程桌面,那么我们就设为远程桌文章来源(Source):https://www.dqzboy.com面的3389端口;后文章来源(Source):https://www.dqzboy.com者则可以自定义,比如我们设为1234,那么我们访问frps服务端文章来源(Source):https://www.dqzboy.com外网IP:1234的时候,就会被转发至frps客户端的3389端口。

3.4:启动FRP客户端

[[email protected] frp]# nohub ./frpc -c ./frpc.ini >dev/null 2>&1 &
FRP内网穿透搭建和使用-浅时光博客
FRP内网穿透搭建和使用-浅时光博客
  • 放通端口
[[email protected] frp]# firewall-cmd --permanent --zone=public --add-port=6000/tcp
success
[[email protected] frp]# firewall-cmd --permanent --zone=public --add-port=1234/tcp
success
[[email protected] frp]# firewall-cmd --reload
success
  • 访问测试
[[email protected] ~]# ssh [email protected] -p 6000
FRP内网穿透搭建和使用-浅时光博客
连接成功

四、FRP 高级进阶

4.1:添加dashboard配置

  • 给FRP添加dashbo文章来源(Source):https://www.dqzboy.comard,修改配置文件
[[email protected] ~]# 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
FRP内网穿透搭建和使用-浅时光博客
  • 放通7500端口
[[email protected] ~]# firewall-cmd --permanent --zone=public --add-port=7500/tcp
success
[[email protected] ~]# firewall-cmd --reload
success

4.2:重启fprs服务

[[email protected] ~]# /usr/local/frp/frps -c /usr/local/frp/frps.ini &

4.3:浏览器访问

FRP内网穿透搭建和使用-浅时光博客
FRP内网穿透搭建和使用-浅时光博客

4.4:添加身份验证

文章来源(Source):https://www.dqzboy.com
  • 默认情况下只要知道 FRP 服务端开放的端口,任意 FRP 客户端都可以随意在服务端上注册端口映射,这样对于在公网上的 FRP 服务来说显然不太安全。FRP 提供了身份验证机制来提高 FRP 服务端的安全性。要启用这一特性也很简单,只需在 FRP 服务端和 FRP 客户端的 common 配置中启用 privilege_token 参数就行。
[[email protected] frp]# vim frps.ini
...
privilege_token = dqz123456
  • 启用这一特性后,只有 FRP 服务端和 FRP 客户端的 common 配置中的 privilege_token 参数一致身份验证才会通过,FRP 客户端才能成功在 FRP 服务端注册端口映射。否则就会注册失败
  • 需要注意的是 FRP 客户端所在机器和 FRP 服务端所在机器的时间相差不能超过 15 分钟,因为时间戳会被用于加密验证中,防止报文被劫持后被其他人利用。这个超时时间可以在配置文件中通过 authe文章来源(Source):https://www.dqzboy.comntication_timeout 这个参数来修改,单位为秒,默认值为 900,即 15 分钟。如果修改为 0,则 文章来源(Source):https://www.dqzboy.comFRP 服务端将不对身份验证报文的时间戳进行超时校验。

4.5:加密与压缩

  • 如果公司内网防火墙对外网访问进行了流量识别与屏蔽,例如禁止了 SSH 协议等,可通过设置 use_encryption = true,将 FRP 客户端 与 FRP 服务端之间的通信内容加密传输,将会有效防止流量被拦截。
  • 如果传输的报文长度较长,通过设置 use_compression = true 对传输内容进行压缩,可以有效减小 FRP 客户端 与 FRP 服务端之间的网络流量,来加快流量转发速度,但是会额外消耗一些 CPU 资文章来源(Source):https://www.dqzboy.com源。
  • 这两个功能默认是不开启的,需要在 FRP 客户端配置文件中通过配置来为指定的代理启用加密与压缩的功能,压缩算法使用的是 snappy。
[[email protected] 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

FRP内网穿透搭建和使用-浅时光博客
[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
  • 测试下脚本是否可以正常运行
FRP内网穿透搭建和使用-浅时光博客

5.3:注册为系统服务

sc create frp_client binPath= D:\frp_0.30.0_windows_amd64\frpstart.bat start= auto
FRP内网穿透搭建和使用-浅时光博客
  • 问题解决:以管理员身份去运行CMD
FRP内网穿透搭建和使用-浅时光博客
FRP内网穿透搭建和使用-浅时光博客

5.4:服务端防火墙放通端口

[[email protected] ~]# firewall-cmd --permanent --zone=public --add-port=7001/tcp

5.5:查看WEB页面是否注册成功

  • 浏览器输入   服务端IP:dashboard端口
FRP内网穿透搭建和使用-浅时光博客

5.6:远程访问测试

  • 确认远程的办公机开启了远程桌面访问
FRP内网穿透搭建和使用-浅时光博客
FRP内网穿透搭建和使用-浅时光博客
  • 微软键+R—mstsc—服务端公网IP:7001(服务端IP:远程绑定的端口)
FRP内网穿透搭建和使用-浅时光博客
FRP内网穿透搭建和使用-浅时光博客
FRP内网穿透搭建和使用-浅时光博客
  • 输入你办公机的开机用户和密码即可登入成功
FRP内网穿透搭建和使用-浅时光博客
FRP内网穿透搭建和使用-浅时光博客
0 条回应
    本站已安全运行: | 耗时 0.540 秒 | 查询 112 次 | 内存 20.14 MB