frp是一个高性能内网穿透应用,支持tcp、udp、http、https、stcp等多种协议。通过具有公网IP的中转节点,可以将内网服务便捷地暴露到公网。
repo地址:https://github.com/fatedier/frp,官方wiki:https://gofrp.org/docs。
frp分为frps(服务端)和frpc(客户端)两部分,其中frps部署在具有公网IP的中转服务器上,frpc部署到内网机器(如nas、路由器等)中,软件提供了windows/linux/macos多个版本的编译版本,同时也支持docker运行,使你可以便捷的部署该应用。
本人手里有一台群晖的DS218+,上面使用docker部署了多个服务,如gitea、bitwarden、api服务等等,但是由于国内IP资源紧张,即使申请公网IP也是每隔几天一换,而且运营商都是直接封80和443端口的,十分不方便公网访问。这时,frp就解决了我的困扰,只需购买云服务器做中转节点,再配上备案的域名,公网访问变得十分简单。
下面说一下frp的使用方法,先去repo的releases中下载最新的程序包,这里以linux_amd64版本为例,下载frp_x.xx.x_linux_amd64.tar.gz
程序包,解压后可以看到里面的主要组成部分是frps
(服务端主程序)、frps.ini
(服务端配置文件)、frpc
(客户端主程序)、frpc.ini
(客户端配置文件),编写好配置文件后先通过./frps -c ./frps.ini
启动服务端,再通过./frpc -c ./frpc.ini
启动客户端即可,也可以通过配置systemd
、supervisor
等工具实现程序后台长期运行。
frps.ini
是服务端配置文件,下面介绍一下常用配置项:
[common]
#frps服务端绑定的IP,默认0.0.0.0即可
bind_addr = 0.0.0.0
#frps服务端绑定的端口,可以配置为空闲端口
bind_port = 8888
#如果需要支持vhost虚拟主机,则必须配置http与https的端口,通过配置则可以实现通过不同域名访问至不同服务
vhost_http_port = 80
vhost_https_port = 443
#日志文件路径
log_file = frps.log
#日志级别
log_level = info
#日志存储最大天数
log_max_days = 3
#每个代理最大连接池大小
max_pool_count = 3
#为防止非法接入frps,可以设置token进行鉴权
authentication_method = token
#配置鉴权心跳
authenticate_heartbeats = true
#配置新连接时鉴权
authenticate_new_work_conns = true
#配置鉴权token
token = 123456
#为防止明文传输,可以设置frps与frpc之间采用tls加密传输数据
tls_only = true
tls_cert_file = server.crt
tls_key_file = server.key
tls_trusted_ca_file = ca.crt
#vhost虚拟主机的总域名,如test.cn,则vhost可以配置为a.test.cn、b.test.cn等等
subdomain_host = test.cn
#tcp流复用
tcp_max = true
#自定义404页
custom_404_page = 404.html
frpc.ini
是客户端配置文件,下面介绍一下常用配置项:
[common]
#配置服务端的IP
server_addr = 123.123.123.123
#配置服务端端口
server_port = 8888
#配置使用token进行鉴权
authentication_method = token
#配置鉴权心跳
authenticate_heartbeats = true
#配置新连接时鉴权
authenticate_new_work_conns = true
#配置鉴权token,以上四条配置必须与服务端配置相同
token = 123456
#连接池大小
pool_count = 3
#为防止明文传输,可以设置frps与frpc之间采用tls加密传输数据
tls_only = true
tls_cert_file = client.crt
tls_key_file = client.key
tls_trusted_ca_file = ca.crt
#以下为具体应用配置,每一个区块对应一条规则
[tcp proxy]
#连接类型为tcp
type = tcp
#内网地址
local_ip = 127.0.0.1
local_port = 2000
#穿透到公网节点所映射的端口
remote_port = 2000
#是否使用流量压缩
use_compression = true
[udp proxy]
#连接类型为udp
type = udp
#内网地址
local_ip = 127.0.0.1
local_port = 2001
#穿透到公网节点所映射的端口
remote_port = 2001
#是否使用流量压缩
use_compression = true
[http proxy]
#连接类型为http
type = http
#内网地址
local_ip = 127.0.0.1
local_port = 2001
#通过域名访问公网节点时二级域名的前缀,如配置为a则访问a.test.cn可以适配该规则
subdomain = a
#是否使用流量压缩
use_compression = true
[https proxy]
#连接类型为https
type = https
#内网地址
local_ip = 127.0.0.1
local_port = 2001
#通过域名访问公网节点时二级域名的前缀,如配置为a则访问a.test.cn可以适配该规则
subdomain = b
#通过protocol v2版协议插件实现内网应用可以获取到外部访问IP
proxy_protocol_version = v2
#是否使用流量压缩
use_compression = true
最新评论