服务端详细配置文件:

# [common] is integral section
[common]
# 服务端监听地址和端口,该端口是和客户端通信的端口,底层通信端口,tcp
# bind_addr为0.0.0.0含义就是服务端服务器上的所有IP都可以监听外部连接请求
# 如果需要配置单个就将服务器的某一个公网IP写在bind_addr
bind_addr = 0.0.0.0
bind_port = 7000

# 可以使用nat打洞,进行点对点的连接,这时候数据通信不仅过frp服务端
# bind_udp_port = 7001

# 可以使用底层通信端口为kcp
# 如果未设置,则在frps中禁用kcp
# kcp_bind_port = 7000

# 指定要侦听的地址代理,默认值与bind_addr相同
# 考虑到这个场景:内网的的数据库是个备库,frps这边要把本地的数据库备份到内网机器上,在此使用proxy_bind_addr = 127.0.0.1 就可以达到这个效果,还很安全
# proxy_bind_addr = 127.0.0.1

# 域名访问内网的web服务,需要将域名解析到服务器,A记录或者CNAME记录
vhost_http_port = 80
# vhost_https_port = 443

# http相应超时,默认60s
# vhost_http_timeout = 60

# frpweb统计界面
# dashboard_addr的默认值与bind_addr相同
# 仅当设置了dashboard_port时,仪表板才可用
dashboard_addr = 0.0.0.0
dashboard_port = 7500

# 仪表板账号和密码,如果未设置,则默认值均为admin
dashboard_user = admin
dashboard_pwd = admin

# 仪表板资源目录(仅适用于调试模式)
# assets_dir = ./static

# frp服务端日志文件
log_file = ./frps.log

# 日志等级: trace, debug, info, warn, error
log_level = info

# 日志保留天数
log_max_days = 3

# frp服务端和客户端通过bind_port端口进行认证的token,服务端和客户端都要一致
token = 123456789

# heartbeat configure,不建议修改默认值
# heartbeat_timeout的默认值为90
# heartbeat_timeout = 90

# 只允许frpc绑定你列出的端口,如果你没有设置,就不会有任何限制
# allow_ports = 2000-3000,3001,3003,4000-50000

# 默认情况下:当用户请求建立连接后,frps 才会请求 frpc 主动与后端服务建立一个连接 
# 如果由大量短连接的情况呢,是不是很和耗时?
# 因此,该字段会在和frp客户端连接后,主动建立max_pool_count个连接,当有用户来访问业务的是时候就会从该连接池内取出连接来用,使用于大量短连接的情况
max_pool_count = 5

# 最大端口可用于每个客户端,默认值为0表示无限制
# max_ports_per_client = 0

# 该功能需要泛解析,即把*.frps.com A记录到frps在的服务器上,然后frpc就可以只配置subdomain = test 就可以使用 test.frps.com来使用.
subdomain_host = frps.com

# 启动tcp多路复用
# tcp_mux = true

# HTTP请求的自定义404页面
# custom_404_page = /path/to/404.html

服务端简洁配置文件:

[common]
bind_port = 7000

vhost_http_port = 80
vhost_https_port = 443

dashboard_addr = 0.0.0.0
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = admin


log_file = ./frps.log
log_level = info
log_max_days = 3

token = 123456789

max_pool_count = 5

subdomain_host = frps.com

客户端详细配置文件:

# [common] is integral section
[common]
# 服务器的地址和端口
server_addr = 0.0.0.0
server_port = 7000

# frpc通过代理去连接frps。http或socks5代理方式
# http_proxy = http://user:passwd@192.168.1.128:8080
# http_proxy = socks5://user:passwd@192.168.1.128:1080

# 日志文件
log_file = ./frpc.log

# 日志等级: trace, debug, info, warn, error
log_level = info

# 日志最大保留天数
log_max_days = 3

# 和frps底层通信认证token和frps一致
token = 123456789

# 客户端管理面板,一般用于热重载配置文件
admin_addr = 127.0.0.1
admin_port = 7400
admin_user = admin
admin_pwd = admin

# 和frps刚开始通信时建立的连接数量, 默认值为0
pool_count = 5

# 开启tcp多路复用 和frps一致
tcp_mux = true

# 加入frpc标识,会重命名代理模块名称 如 your_name.ssh
user = your_name

# decide if exit program when first login failed, otherwise continuous relogin to frps
# frpc和frps登陆失败后是否继续持续登陆,默认为true
login_fail_exit = true

# 和frps通信的底层协议 tcp kcp websocket,  默认是 tcp
protocol = tcp

# 如果tls_enable为true,frpc将通过tls连接frps
# tls_enable = true

# frpc使用的dns服务器
# dns_server = 8.8.8.8

# frpc中启动的代理模块,模式都启动
# proxy names you want to start divided by ','
# default is empty, means all proxies
# start = ssh,dns

# heartbeat configure, it's not recommended to modify the default value
# the default value of heartbeat_interval is 10 and heartbeat_timeout is 90
# heartbeat_interval = 30
# heartbeat_timeout = 90

# #############################  代理模块  ####################################################

# 代理模块名称,例:ssh,可以存在多个代理模块,代理模块的名称不能重复,否则后面的将会覆盖前面的
# 如果[common]部分中的用户不为空,则会将其更改为{user}.{proxy},例如'your_name.ssh'
[ssh]
# 代理模块类型
# 支持 tcp | udp | http | https | stcp | xtcp, 默认是 tcp
type = tcp

# 客户端本地多要代理的地址和端口
local_ip = 127.0.0.1
local_port = 22

# true或false,如果为true,则frps和frpc之间的消息将被加密,默认为false
use_encryption = false
# 如果为true,则将压缩消息
use_compression = false

# 映射到frps上的远程端口,0为随机端口,由frps来指配,这个值对于http/https没有作用
remote_port = 6001

# frpc健康检查,支持tcp和http
health_check_type = tcp
# 连接本地端口服务超时,单位秒
health_check_timeout_s = 3
# 失败多少次就剔除该代理本地端口
health_check_max_failed = 3
# 检查频率,单位秒
health_check_interval_s = 10

#frpc的负载均衡,就是说一个frps映射多个frpc本地端口,
[test1]
type = tcp
local_port = 8080
#remote_port要一致
remote_port = 80
#group group_key 要一致
group = web
group_key = 123

[test2]
type = tcp
local_port = 8081
#remote_port要一致
remote_port = 80
#group group_key 要一致
group = web
group_key = 123

[ssh_random]
type = tcp
local_ip = 127.0.0.1
local_port = 22
# 如果remote_port为0,frps将为您分配一个随机端口
remote_port = 0

# 端口组映射,需要添加“range:”前缀 tcp udp都可以
[range:tcp_port]
type = tcp
local_ip = 127.0.0.1
local_port = 6010-6020,6022,6024-6028
remote_port = 6010-6020,6022,6024-6028
use_encryption = false
use_compression = false

# 转发 DNS 查询请求
# DNS 查询请求通常使用 UDP 协议,frp 支持对内网 UDP 服务的穿透,配置方式和 TCP 基本一致。
[dns]
type = udp
local_ip = 114.114.114.114
local_port = 53
remote_port = 6002
use_encryption = false
use_compression = false

# 端口组映射
[range:udp_port]
type = udp
local_ip = 127.0.0.1
local_port = 6010-6020
remote_port = 6010-6020
use_encryption = false
use_compression = false

# http配置
[web01]
type = http
local_ip = 127.0.0.1
local_port = 80
use_encryption = false
use_compression = true
# 为该网站添加一个访问密码
http_user = admin
http_pwd = admin
# 泛解析使用
subdomain = web01
# 单个域名使用
custom_domains = web02.yourdomain.com
# 仅适用于http类型,web02.yourdomain.com/pic 到这个服务
locations = /,/pic
# 修改请求头,web02.yourdomain.com会在访问本地网络的时候修改为example.com
host_header_rewrite = example.com
# header_开头后面的参数会添加到http请求头中
header_X-From-Where = frp
# http健康检查
health_check_type = http
# frpc将向本地http服务指定的url地址发送GET请求
# 当http服务返回2xx http响应代码时,代表它处于活动状态
health_check_url = /status
health_check_interval_s = 10
health_check_max_failed = 3
health_check_timeout_s = 3

[web02]
type = https
local_ip = 127.0.0.1
local_port = 8000
use_encryption = false
use_compression = false
subdomain = web01
custom_domains = web02.yourdomain.com
# 如果不为空,frpc将使用代理协议将连接信息传输到本地服务
# v1 or v2 or empty
proxy_protocol_version = v2

# 转发 Unix域套接字
# 通过 tcp 端口访问内网的 unix域套接字(例如和 docker daemon 通信)。
[plugin_unix_domain_socket]
type = tcp
remote_port = 6003
# 如果定义了插件,local_ip和local_port就没用了
# 插件将处理从frps获得的连接
plugin = unix_domain_socket
# params with prefix "plugin_" that plugin needed
plugin_unix_path = /var/run/docker.sock

# frpc做反向代理
[plugin_http_proxy]
type = tcp
remote_port = 6004
plugin = http_proxy
# 代理到本地认证
plugin_http_user = abc
plugin_http_passwd = abc

# sock方式的反向代理
[plugin_socks5]
type = tcp
remote_port = 6005
plugin = socks5
plugin_user = abc
plugin_passwd = abc

# 对外提供简单的文件访问服务
# 通过 static_file 插件可以对外提供一个简单的基于 HTTP 的文件访问服务。
[plugin_static_file]
type = tcp
remote_port = 6006
plugin = static_file
# 要对外暴露的文件目录
plugin_local_path = /var/www/blog
# 访问 url 中会被去除的前缀,保留的内容即为要访问的文件路径
# 通过浏览器访问 http://x.x.x.x:xxxx/static/ 来查看位于 /tmp/file 目录下的文件,会要求输入已设置好的用户名和密码。
plugin_strip_prefix = static
plugin_http_user = abc
plugin_http_passwd = abc

# 为本地 HTTP 服务启用 HTTPS
# 通过 https2http 插件可以让本地 HTTP 服务转换成 HTTPS 服务对外提供。
[plugin_https2http]
type = https
custom_domains = test.yourdomain.com
plugin = https2http
plugin_local_addr = 127.0.0.1:80
# HTTPS 证书相关的配置
plugin_crt_path = ./server.crt
plugin_key_path = ./server.key
plugin_host_header_rewrite = 127.0.0.1

# 安全地暴露内网服务
[secret_tcp]
# 对于某些服务来说如果直接暴露于公网上将会存在安全隐患。
# 使用 stcp(secret tcp) 类型的代理可以避免让任何人都能访问到要穿透的服务,但是访问者也需要运行另外一个 frpc。
# 如果类型是stcp,则remote_port是无用的
type = stcp
# 只有 sk 一致的用户才能访问到此服务
sk = abcdefg
local_ip = 127.0.0.1
local_port = 22
use_encryption = false
use_compression = false

# 在要访问这个服务的机器上启动另外一个 frpc
[secret_tcp_visitor]
# frpc role visitor -> frps -> frpc role server
# stcp 的访问者
role = visitor
type = stcp
# 要访问的 stcp 代理的名字
server_name = secret_tcp
sk = abcdefg
# 绑定本地端口用于访问服务
bind_addr = 127.0.0.1
bind_port = 9000
use_encryption = false
use_compression = false

# 点对点内网穿透
# frp 提供了一种新的代理类型 xtcp 用于应对在希望传输大量数据且流量不经过服务器的场景。
# 使用方式同 stcp 类似,需要在两边都部署上 frpc 用于建立直接的连接。
[p2p_tcp]
type = xtcp
sk = abcdefg
local_ip = 127.0.0.1
local_port = 22
use_encryption = false
use_compression = false

[p2p_tcp_visitor]
role = visitor
type = xtcp
server_name = p2p_tcp
sk = abcdefg
bind_addr = 127.0.0.1
bind_port = 9001
use_encryption = false
use_compression = false

客户端简单配置:

[common]
server_addr = 0.0.0.0
server_port = 7000

log_file = ./frpc.log
log_level = info
log_max_days = 3

token = 123456789

admin_addr = 127.0.0.1
admin_port = 7400
admin_user = admin
admin_pwd = admin

pool_count = 5

# #############################  代理模块  ####################################################

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6001

[ssh_random]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 0

[range:tcp_port]
type = tcp
local_ip = 127.0.0.1
local_port = 6010-6020,6022,6024-6028
remote_port = 6010-6020,6022,6024-6028
use_encryption = false
use_compression = false

[range:udp_port]
type = udp
local_ip = 127.0.0.1
local_port = 6010-6020
remote_port = 6010-6020
use_encryption = false
use_compression = false

[web01]
type = http
local_ip = 127.0.0.1
local_port = 80
use_encryption = false
use_compression = true
subdomain = web01

[web02]
type = http
local_ip = 127.0.0.1
local_port = 80
use_encryption = false
use_compression = true
subdomain = web02

只要你成为一个废物,就没人能利用你