视频教程
安装
- 下载文件,解压缩,
- 拷贝文件到指定地点
- 配置frpc.ini
- 运行frpc程序
- 关闭防火墙
- 修改DNS解析
- 宝塔面板配置反向代理
官方配置文件
基础配置
参数 | 类型 | 说明 | 默认值 | 可选值 | 备注 |
---|
server_addr | string | 连接服务端的地址 | 0.0.0.0 | | |
server_port | int | 连接服务端的端口 | 7000 | | |
http_proxy | string | 连接服务端使用的代理地址 | | | 格式为 {protocol}://user:passwd@192.168.1.128:8080 protocol 目前支持 http 和 socks5 |
log_file | string | 日志文件地址 | ./frpc.log | | 如果设置为 console,会将日志打印在标准输出中 |
log_level | string | 日志等级 | info | trace, debug, info, warn, error | |
log_max_days | int | 日志文件保留天数 | 3 | | |
disable_log_color | bool | 禁用标准输出中的日志颜色 | false | | |
pool_count | int | 连接池大小 | 0 | | |
user | string | 用户名 | | | 设置此参数后,代理名称会被修改为 {user}.{proxyName},避免代理名称和其他用户冲突 |
dns_server | string | 使用 DNS 服务器地址 | | | 默认使用系统配置的 DNS 服务器,指定此参数可以强制替换为自定义的 DNS 服务器地址 |
login_fail_exit | bool | 第一次登陆失败后是否退出 | true | | |
protocol | string | 连接服务端的通信协议 | tcp | tcp, kcp, websocket | |
tls_enable | bool | 启用 TLS 协议加密连接 | false | | |
heartbeat_interval | int | 向服务端发送心跳包的间隔时间 | 30 | | |
heartbeat_timeout | int | 和服务端心跳的超时时间 | 90 | | |
start | string | 指定启用部分代理 | | | 当配置了较多代理,但是只希望启用其中部分时可以通过此参数指定,默认为全部启用 |
权限验证
参数 | 类型 | 说明 | 默认值 | 可选值 | 备注 |
---|
authentication_method | string | 鉴权方式 | token | token, oidc | 需要和服务端一致 |
authenticate_heartbeats | bool | 开启心跳消息鉴权 | false | | 需要和服务端一致 |
authenticate_new_work_conns | bool | 开启建立工作连接的鉴权 | false | | 需要和服务端一致 |
token | string | 鉴权使用的 token 值 | | | 需要和服务端设置一样的值才能鉴权通过 |
oidc_client_id | string | oidc_client_id | | | |
oidc_client_secret | string | oidc_client_secret | | | |
oidc_audience | string | oidc_audience | | | |
oidc_token_endpoint_url | string | oidc_token_endpoint_url | | | |
UI
参数 | 类型 | 说明 | 默认值 | 可选值 | 备注 |
---|
admin_addr | string | 启用 AdminUI 监听的本地地址 | 0.0.0.0 | | |
admin_port | int | 启用 AdminUI 监听的本地端口 | 0 | | |
admin_user | string | HTTP BasicAuth 用户名 | admin | | |
admin_pwd | string | HTTP BasicAuth 密码 | admin | | |
asserts_dir | string | 静态资源目录 | | | AdminUI 使用的资源默认打包在二进制文件中,通过指定此参数使用自定义的静态资源 |
参数 | 类型 | 说明 | 是否必须 | 默认值 | 可选值 | 备注 |
---|
type | string | 代理类型 | 是 | tcp | tcp, udp, http, https, stcp, sudp, xtcp, tcpmux | |
use_encryption | bool | 是否启用加密功能 | 否 | false | | 启用后该代理和服务端之间的通信内容都会被加密传输 |
use_compression | bool | 是否启用压缩功能 | 否 | false | | 启用后该代理和服务端之间的通信内容都会被压缩传输 |
proxy_protocol_version | string | 启用 proxy protocol 协议的版本 | 否 | | v1, v2 | 如果启用,则 frpc 和本地服务建立连接后会发送 proxy protocol 的协议,包含了原请求的 IP 地址和端口等内容 |
bandwidth_limit | string | 设置单个 proxy 的带宽限流 | 否 | | | 单位为 MB 或 KB,0 表示不限制,如果启用,会作用于对应的 frpc |
本地服务配置
local_ip
和 plugin
的配置必须配置一个,且只能生效一个,如果配置了 plugin
,则 local_ip
配置无效。
参数 | 类型 | 说明 | 是否必须 | 默认值 | 可选值 | 备注 |
---|
local_ip | string | 本地服务 IP | 是 | 127.0.0.1 | | 需要被代理的本地服务的 IP 地址,可以为所在 frpc 能访问到的任意 IP 地址 |
local_port | int | 本地服务端口 | 是 | xxxx | | 配合 local_ip |
plugin | string | 客户端插件名称 | 否 | | 见客户端插件的功能说明 | 用于扩展 frpc 的能力,能够提供一些简单的本地服务,如果配置了 plugin,则 local_ip 和 local_port 无效,两者只能配置一个 |
plugin_params | map | 客户端插件参数 | 否 | | | map 结构,key 需要都以 “plugin_” 开头,每一个 plugin 需要的参数也不一样,具体见客户端插件参数中的内容 |
负载均衡和健康检查
参数 | 类型 | 说明 | 是否必须 | 默认值 | 可选值 | 备注 |
---|
group | string | 负载均衡分组名称 | 否 | | | 用户请求会以轮询的方式发送给同一个 group 中的代理 |
group_key | string | 负载均衡分组密钥 | 否 | | | 用于对负载均衡分组进行鉴权,group_key 相同的代理才会被加入到同一个分组中 |
health_check_type | string | 健康检查类型 | 否 | | tcp,http | 配置后启用健康检查功能,tcp 是连接成功则认为服务健康,http 要求接口返回 2xx 的状态码则认为服务健康 |
health_check_timeout_s | int | 健康检查超时时间(秒) | 否 | 3 | | 执行检查任务的超时时间 |
health_check_max_failed | int | 健康检查连续错误次数 | 否 | 1 | | 连续检查错误多少次认为服务不健康 |
health_check_interval_s | int | 健康检查周期(秒) | 否 | 10 | | 每隔多长时间进行一次健康检查 |
health_check_url | string | 健康检查的 HTTP 接口 | 否 | | | 如果 health_check_type 类型是 http,则需要配置此参数,指定发送 http 请求的 url,例如 “/health” |
TCP
参数 | 类型 | 说明 | 是否必须 | 默认值 | 可选值 | 备注 |
---|
remote_port | int | 服务端绑定的端口 | 是 | | | 用户访问此端口的请求会被转发到 local_ip:local_port 当type=tcp时,此项必选 |
UDP
参数 | 类型 | 说明 | 是否必须 | 默认值 | 可选值 | 备注 |
---|
remote_port | int | 服务端绑定的端口 | 是 | | | 用户访问此端口的请求会被转发到 local_ip:local_port |
HTTP
custom_domains
和 subdomain
必须要配置其中一个,两者可以同时生效。
参数 | 类型 | 说明 | 是否必须 | 默认值 | 可选值 | 备注 |
---|
custom_domains | []string | 服务器绑定自定义域名 | 是(和 sub_domain 两者必须配置一个) | | | 用户通过 vhost_http_port 访问的 HTTP 请求如果 Host 在 custom_domains 配置的域名中,则会被路由到此代理配置的本地服务 |
subdomain | string | 自定义子域名 | 是(和 custom_domains 两者必须配置一个) | | | 和 custom_domains 作用相同,但是只需要指定子域名前缀,会结合服务端的 subdomain_host 生成最终绑定的域名 |
locations | []string | URL 路由配置 | 否 | | | 采用最大前缀匹配的规则,用户请求匹配响应的 location 配置,则会被路由到此代理 |
http_user | string | 用户名 | 否 | | | 如果配置此参数,暴露出去的 HTTP 服务需要采用 Basic Auth 的鉴权才能访问 |
http_pwd | string | 密码 | 否 | | | 结合 http_user 使用 |
host_header_rewrite | string | 替换 Host header | 否 | | | 替换发送到本地服务 HTTP 请求中的 Host 字段 |
headers | map | 替换 header | 否 | | | map 中的 key 是要替换的 header 的 key,value 是替换后的内容 |
HTTPS
custom_domains
和 sub_domain
必须要配置其中一个,两者可以同时生效。
参数 | 类型 | 说明 | 是否必须 | 默认值 | 可选值 | 备注 |
---|
custom_domains | []string | 服务器绑定自定义域名 | 是(和 sub_domain 两者必须配置一个) | | | 用户通过 vhost_http_port 访问的 HTTP 请求如果 Host 在 custom_domains 配置的域名中,则会被路由到此代理配置的本地服务 |
sub_domain | string | 自定义子域名 | 是(和 custom_domains 两者必须配置一个) | | | 和 custom_domains 作用相同,但是只需要指定子域名前缀,会结合服务端的 subdomain_host 生成最终绑定的域名 |
STCP
参数 | 类型 | 说明 | 是否必须 | 默认值 | 可选值 | 备注 |
---|
role | string | 角色 | 是 | server | server,visitor | server 表示服务端,visitor 表示访问端 |
sk | string | 密钥 | 是 | | | 服务端和访问端的密钥需要一致,访问端才能访问到服务端 |
SUDP
参数 | 类型 | 说明 | 是否必须 | 默认值 | 可选值 | 备注 |
---|
role | string | 角色 | 是 | server | server,visitor | server 表示服务端,visitor 表示访问端 |
sk | string | 密钥 | 是 | | | 服务端和访问端的密钥需要一致,访问端才能访问到服务端 |
XTCP
参数 | 类型 | 说明 | 是否必须 | 默认值 | 可选值 | 备注 |
---|
role | string | 角色 | 是 | server | server,visitor | server 表示服务端,visitor 表示访问端 |
sk | string | 密钥 | 是 | | | 服务端和访问端的密钥需要一致,访问端才能访问到服务端 |
个人配置文件
[common]
server_addr = 服务器ip地址
server_port = 7000
token=omv5
login_fail_exit = false
[ssh]
type = tcp
local_ip = 192.168.50.142
local_port = 22
remote_port = 6000
[omv5]
type =http
local_ip =192.168.50.142
local_port =80
custom_domains =omv5.cryogeny.cn
omv5关闭防火墙
iptables -F
iptables -Z
iptables -X
DNS解析
宝塔面板配置反向代理
如何安全的暴露内网信息
前面官方的配置文档中已经提到了要采用以下两个字段,可以在每个type=http 的分段中都给配置上。
http_user = xxx
http_pwd = xxx