1 Frp介绍

frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

frp 项目官网
https://github.com/fatedier/frp
中文文档
https://github.com/fatedier/frp/blob/dev/README_zh.md
客户端和服务端
https://github.com/fatedier/frp/releases

2 准备工作

搭建一个完整的frp服务链,我们需要

  1. VPS一台(也可以是具有公网IP的实体机)
  2. 访问目标设备(就是你最终要访问的设备)
  3. 简单的Linux基础(会用cp等几个简单命令即可)

3 FRP工作原理

服务端运行,监听一个主端口,等待客户端的连接;
客户端连接到服务端的主端口,同时告诉服务端要监听的端口和转发类型;
服务端fork新的进程监听客户端指定的端口;
外网用户连接到客户端指定的端口,服务端通过和客户端的连接将数据转发到客户端;
客户端进程再将数据转发到本地服务,从而实现内网对外暴露服务的能力。

4 配置教程

部署

下载客户端和服务端
https://github.com/fatedier/frp/releases
linux

#下载文件
wget https://github.com/fatedier/frp/releases/download/v0.37.1/frp_0.37.1_linux_amd64.tar.gz
#解压文件
tar -zxvf frp_0.37.1_linux_amd64.tar.gz
进入解压目录
cd frp_0.37.1_linux_amd64
查看文件
ls 

在这里插入图片描述

Windows的服务执行程序有.exe尾缀。

我们需要关注以下几个文件

  • frpc ------ 客户端执行程序

  • frpc.ini -------- 客户端简易配置文件

  • frpc_full.ini – 客户端完整配置文件

  • frps ------ 服务器执行程序

  • frps.ini -------- 服务器简易配置文件

  • frps_full.ini — 服务器完整配置文件

将其中的 frpc 拷贝到内网服务所在的机器上,将 frps 拷贝到具有公网 IP 的机器上,放置在任意目录。
在windows系统中,不要放在带有空格的文件夹下,空格会导致运行命令识别错误
配置文件使用简易配置即可

  • 将 frps 及 frps.ini 放到具有公网 IP 的机器上。
  • 将 frpc 及 frpc.ini 放到处于内网环境的机器上。

配置文件

配置服务端文件
修改 frps.ini 文件,设置监听 HTTP 请求端口为 8600:

[common]
#服务器IP,0.0.0.0为服务器全局所有IP可用,假如你的服务器有多个IP则可以这样做,或者填写为指定其中的一个服务器IP,支持IPV6
server_addr = 140.xxx.xxx.xxx
#服务端口这个是frp和客户端通讯端口,如果不冲突就不用改
server_port = 7000
#是用于客户端和服务端连接的口令,请自行设置并记录,稍后会用到
token = fasdJIDS487jdsefdj
#http监听端口,注意可能和服务器上其他服务用的80冲突,所以我用的8600
vhost_http_port = 8600
vhost_https_port = 443

#是服务端仪表板的端口,若使用7500端口,在配置完成服务启动后可以通过浏览器访问 x.x.x.x:7500 (其中x.x.x.x为服务器的IP)查看frp服务运行信息。
dashboard_port = 7500
#信息展示面板用户名
dashboard_user = xxxxxname
#信息展示面板密码
dashboard_pwd = xxxxxxpassword
#最多保存多少天日志
log_max_days = 365

#端口白名单,为了防止端口被滥用,可以手动指定允许哪些端口被使用
privilege_allow_ports = 8000-8999
#每个内网穿透服务限制最大连接池上限,避免大量资源占用,可自定义
max_pool_count = 100

配置客户端文件

修改 frpc.ini 文件,假设 frps 所在的服务器的 IP 为 140.x.x.x,local_port 为本地机器上 Web 服务监听的端口, 绑定自定义域名为 yourdomain.com。

[common]
#设置服务器IP,和服务端的配置相同
server_addr = 140.xxx.xxx.xxx
#和服务端的配置相同,这个是frp和 服务端 通讯端口
server_port = 7000
#token是在服务器上设置的连接口令,原样填入即可。
token = fasdJIDS487jdsefdj

#创建一个穿透服务,命名ssh,一般linux使用
[ssh]
#代理类型
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
#创建一个穿透服务,命名RDP,一般windows远程桌面使用
[rdp]
#代理类型
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 33389

#创建一个穿透服务,命名web可以自定义,多个命名不能重复
[web]
#代理类型,web服务可用http或者https,https需要证书相关配置
type = http
#本地端口,服务端接到请求后会来本地访问这个端口
local_port = 80
#设置要访问到内部的这个服务时,需要访问的外部域名,
#可以设置为IP,不能和其他穿透服务重复,如果有多个穿透服务建议用域名
#域名可以设置二级域名,这样就可以建多个穿透服务了
custom_domains =  web001.yourdomain.com

[web2]
type = http
local_port = 8080
custom_domains = web002.yourdomain.com

分别启动 frps 和 frpc

#在服务端启动frps
./frps -c ./frps.ini
#在服务端启动frpc,启动前可以把注释删除
./frpc -c ./frpc.ini

frp访问路径原理

frp实际使用时,会按照端口号进行对应的转发,原理如下图所示。

请添加图片描述

参考资料:
https://gofrp.org/docs/
https://sspai.com/post/52523
https://www.wlphp.com/?post=170

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐