一、FRP 简介
FRP(Fast Reverse Proxy)是一款开源
的内网穿透工具,它可以帮助用户将内网服务暴露到公网上。以下是FRP的GitHub地址和一些基本信息介绍:
FRP GitHub地址
-
FRP的GitHub仓库地址是:
https://github.com/fatedier/frp
-
FRP 安装包下载地址:
https://github.com/fatedier/frp/releases
-
架构分类:
- amd64 :一般指X86-64处理器,intel及amd产品基本上均为该架构
- 386:早起X86架构,目前基本上看不到了
- arm及arm64:均为使用arm指令集的CPU
- mips及mips64:均为RISC处理器
-
系统分类:
- drawin:为mac使用的包
- freebsd:为一种类unix系统,freebsd系统专用
- linux:linux系统均可使用该包
- windows:windows系统使用的包
FRP功能特点
- 多协议支持:FRP支持
TCP、UDP、HTTP、HTTPS
等多种协议,满足不同应用场景的需求。 - P2P通信:FRP支持
P2P模式
,提高特殊环境下连接的灵活性。 - TLS加密:FRP提供
TLS加密功能
,确保数据传输的安全性。 - 动态DNS:FRP支持
动态DNS
,便于动态IP环境中的稳定访问。 - Web界面:FRP
提供Web界面
,简化管理和监控。 - 反向代理:FRP作为
反向代理
,使得内部服务可以通过外部服务器被访问。
架构与工作原理
frp 主要由两个组件组成:客户端(frpc) 和 服务端(frps)。通常情况下,服务端部署在具有公网 IP 地址的机器上,而客户端部署在需要穿透的内网服务所在的机器上。
由于内网服务缺乏公网 IP 地址,因此无法直接被非局域网内的用户访问。用户通过访问服务端的 frps,frp 负责根据请求的端口或其他信息将请求路由到相应的内网机器,从而实现通信。
二、FRP Windows 版本安装部署
1. 下载相应的安装包资源
- Windows 版本下载:
https://github.com/fatedier/frp/releases/download/v0.61.0/frp_0.61.0_windows_amd64.zip
2. 服务端配置
-
- 直接解压安装包;
-
- 修改 frps.toml 文件
# 服务端与客户端通信端口
bindPort = 7000
# 服务端将只接受 TLS 链接
transport.tls.force = true
# 身份验证令牌,frpc 要与 frps 一致
auth.token = "public"
# 后台管理地址
webServer.addr = "0.0.0.0"
# 后台管理端口
webServer.port = 7500
# 后台登录用户名
webServer.user = "admin"
# 后台登录密码
webServer.password = "admin"
-
- 打开命令行(管理员模式)或 PowerShell,在命令行中运行`frps.exe(服务端),并指定配置文件,启动FRP服务。
.\frps.exe -c .\frps.toml
- 访问 控制台
http://localhost:7500/
3. 客户端配置
-
客户端文件同服务端;
-
修改客户端配置文件 frpc.toml;
#服务端公网ip
serverAddr = "202.100.100.22"
# frps与frpc客户端通信的端口
serverPort = 7000
#此处和服务端统一
auth.token = "public"
[[proxies]]
#此处名称可自定义
name = "test-tcp"
#此处为协议,还有tcp、udp、http、https、stcp
type = "tcp"
localIP = "127.0.0.1"
#此处为本地开放的SSH端口
localPort = 22
#此处为公网地址转换的端口,此端口可任意调换
remotePort = 6000
- 启动客户端
.\frpc.exe -c .\frpc.toml
- 访问服务端控制台,可以看到客户端信息
- 测试服务内网穿透
找一台可以上网的windows机器,使用telnet
命令
telnet 202.100.100.22 6000
如果可以连通,那就说明可以穿透通过。
三、FRP 实战部署访问 WEB 应用
- 修改服务端
frps.toml
文件,增加 HTTP 虚拟主机的端口vhostHTTPPort
配置
# 服务端与客户端通信端口
bindPort = 7000
# 服务端将只接受 TLS 链接
#transport.tls.force = true
# 身份验证令牌,frpc 要与 frps 一致
auth.token = "public"
# 后台管理地址
webServer.addr = "0.0.0.0"
# 后台管理端口
webServer.port = 7500
# 后台登录用户名
webServer.user = "admin"
# 后台登录密码
webServer.password = "admin"
# 配置域名
#subdomainHost = "dazhong.online"
# 用于HTTP虚拟主机的端口
vhostHTTPPort = 8088
- 修改客户端文件
frpc.toml
,增加 http 服务配置参数
serverAddr = "139.155.142.114"
serverPort = 7000
auth.method = "token"
auth.token = "public"
[[proxies]]
name = "test-tcp"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000
# http 服务配置参数
[[proxies]]
name = "web-8080"
type = "http"
localPort = 8080 #本地服务端口
customDomains = ["202.100.100.22"] # 域名配置,如果没有域名则使用服务端IP
-
访问本地服务:http://+服务器IP+端口
http://202.100.100.22:8088
-
配置域名访问
通过添加域名解析记录,将公网IP和域名进行绑定
-
此处以阿里云域名为例,添加解析记录
-
方式一:通过客户端文件
frpc.toml
添加customDomains
参数添加完整域名
# 主域名为 mydomain.com
customDomains = ["test8080.mydomain.com"]
访问 http://test8080.mydomain.com:8088/
- 方式二:通过服务端和客户端文件都配置
subdomainHost
子域名:
服务端文件 frps.toml
新增主域名
subdomainHost = "dazhong.online"
客户端文件 frpc.toml
新增子域名 test8080
subdomainHost = "test8080"
访问 http://test8080.mydomain.com:8088/
注意 subdomainHost 和 customDomains 参数不可以同时使用:
- subdomain_host(服务端配置)
subdomain_host 是在frp服务端(frps)配置文件中使用的参数。它指定了一个域名,该域名下的所有子域名都将用于frp的虚拟主机(vhost)HTTP代理。这意味着,当你在客户端(frpc)配置了subdomain参数时,客户端的HTTP服务将被映射到这个subdomain_host指定的域名下的子域名。- custom_domains(客户端配置)
custom_domains 是在frp客户端(frpc)配置文件中使用的参数。它允许你指定一个或多个自定义域名,这些域名将被用于客户端的HTTP或HTTPS服务。这个参数通常用于静态域名的场景,而不是动态子域名。
参数文档:
- 1.frp内网穿透之(反向代理nginx)
https://zhuanlan.zhihu.com/p/9565100806