转载于简书:
https://www.jianshu.com/p/8589be3dd393
作者红盟群友: 小岳
一、FRP简介:
FRP工具采用C/S模型,将FRP服务端部署在具有固定公网IP的机器上,FRP客户端部署在内网机器上,通过访问暴露在服务端上的端口,反向代理到位于内网的服务。 在此基础上,FRP支持 TCP、UDP、HTTP、HTTPS 等多种协议,提供了加密、压缩、身份认证、代理限速和负载均衡等众多能力。
- FRP客户端服务端通信支持TCP、KCP 以及Websocket 等多种协议;
- 采用TCP连接流式复用,在单个连接间承载更多请求,节省连接建立时间;
- 支持代理组间的负载均衡;
- 端口复用,多个服务可通过同一个服务端端口暴露;
- 多个原生支持的客户端插件(静态文件查看,HTTP、SOCK5 代理等),便于独立使用FRP客户端完成某些工作;
- 高度扩展性的服务端插件系统,方便结合自身需求进行功能扩展。
FRP开源项目地址:
https://github.com/fatedier/frp
FRP使用场景:
让互联网(外部网络)的设备能访问局域网(内部网络)的设备所提供的服务,尤其是在内部网络出口没有固定公网IP的场景中。
二、FRP测试环境:
| 角色 | 系统 | 备注 |
| 服务端 | CentOS7.6 | 在腾讯云运行,具有公网IP |
| 客户端 | Windows7 | 在本地内网运行,可访问互联网,内网ip:172.16.103.133 |
测试目标:将内网Windows 7的远程桌面端口(3389)暴露到服务端,实现在外部网络可以通过远程桌面连接到内网的Windows 7。
三、FRP搭建:
3.1FRP服务端搭建
关闭CentOS 7.6防火墙:
systemctl status firewalld.service
systemctl stop firewalld.service
systemctl disable firewalld.service
关闭CentOS 7.6 SELinux:
vi /etc/selinux/config
SELINUX=disabled ##将SELINUX从enforcing改为disabled
init 6 ## 重启系统
sestatus ##查看SELiunx状态
安装配置FRP服务端:
yum -y install wget ##安装wget工具
wget https://github.com/fatedier/frp/releases/download/v0.38.0/frp\_0.38.0\_linux\_amd64.tar.gz ##下载FRP部署包
tar -zxvf frp\_0.38.0\_linux\_amd64.tar.gz ##解压FRP部署包
cd frp\_0.38.0\_linux\_amd64 ##进入FRP文件夹
vi frps.ini ##编辑服务端配置文件
[common]
bind\_port = 54420 ##客户端通信端口
vhost\_http\_port = 54421 ##HTTP端口
vhost\_https\_port = 54422 ##HTTPS端口
token = 123456 ##自定义秘钥
dashboard\_port = 7112 ##服务端Web管理端口(选配)
dashboard\_user = admin ##服务端WeB管理用户名(选配)
dashboard\_pwd = 123456 ##服务端WeB管理密码(选配)
wr退出保存。
运行FRP服务端:
前台运行:
./frps -c ./frps.ini ##在FRP目录下输入此命令
后台运行:
nohup ./frps -c ./frps.ini & ##在FRP目录下输入此命令
腾讯云安全组放行端口:
- 放行从外网访问公网IP指定端口的流量;
- 放行TCP端口:54420、54421、54422、7112。
3.2FRP客户端搭建:
FRP客户端支持Windows、Linux、MacOS、ARM、OpenWRT等平台,本例以Windows 7为例,将Windows 7的远程桌面端口(3389)暴露到服务端,实现从公网访问Windows 7的远程桌面。
- 使用浏览器访问
https://github.com/fatedier/frp/releases/download/v0.38.0/frp\_0.38.0\_linux\_amd64.tar.gz下载FRP安装包;
-
解压安装包:
- 编辑文件夹中的FRP客户端配置文件"frpc.ini":
[common]
server\_addr = 140.143.XXX.XXX ##服务端的公网IP
server\_port = 54420 ##服务端配置的端口
token = 123456 ##服务端配置的密钥
admin\_addr = 172.16.103.133 ##客户端Web管理地址(选配)
admin\_port = 7112 ##客户端Web管理端口(选配)
admin\_user = admin ##客户端Web管理用户名(选配)
admin\_pwd = 123456 ##客户端Web管理密码(选配)
[mstsc] ##服务标识,可随意写
type = tcp ##要暴露的协议
local\_ip = 172.16.103.133 ##提供服务的内网主机的IP
local\_port = 3389 ##服务使用的内部端口
remote\_port = 10088 ##服务暴露到公网后使用的端口
以下为暴露Web服务的配置示例(选配):
[Web1] ##服务标识,可随意写
type = http ##要暴露的协议
local\_ip = 172.16.103.133 ##提供服务的内网主机的IP
local\_port = 80 ##服务使用的内部端口
remote\_port = 54421 ##服务暴露到公网后使用的端口
custom\_domains = web1.yuezq.com
[Web2] ##服务标识,可随意写
type = http ##要暴露的协议
local\_ip = 172.17.103.133 ##提供服务的内网主机的IP
local\_port = 8060 ##服务使用的内部端口
remote\_port = 54421 ##服务暴露到公网后使用的端口
custom\_domains = web2.yuezq.com
注:与暴露TCP协议不同,使用FRP暴露HTTP/HTTPS协议时,可采用端口多路复用的方式。即一个外部端口可对应多个内部不同HTTP/HTTPS服务的端口,并通过在客户端配置文件中配置不同的域名来进行区分访问。
- 运行FRP客户端:
在当前FRP目录下,在上方地址栏中输入"cmd"并回车。
- 将FRP客户端配置为开机自启:
制作批处理文件:
在FRP文件夹下新建一个"start.bat"文件,然后粘贴以下脚本后保存退出。
@echo off
:home
frpc -c frpc.ini
goto home
关闭Windows 7的休眠:
打开计划任务程序:
四、FRP连接测试:
访问FRP服务端的Web界面进行验证:
访问FRP客户端的Web界面进行验证:
在外网使用远程桌面工具进行连接:
远程桌面可成功登录:
历史文章推荐:
查看更多精彩内容,还请关注 橘猫学安全 :
每日坚持学习与分享,麻烦各位师傅文章底部给点个“
再看
”,感激不尽
