一、安装
# 下载
wget https://github.com/fatedier/frp/releases/download/v0.51.3/frp_0.51.3_linux_amd64.tar.gz
# 解压缩
tar -zxvf frp_0.51.3_linux_amd64.tar.gz
二、开机自启
之前写过一篇关于搭建frp服务的文章,里面采用的后台启动方式有一个很大的弊端,就是系统重启之后,frp的服务就要手动开启一次才能正常运行,这实在是不能忍的,现在都什么年代了,现在都流行自动化了,所以必须要让frp开机启动。本文只讲ubuntu系统和centos系统,这两个系统使用率较高,windows系统的还没实践过就先不讲。
(一) ubuntu系统下:
第一步:下载安装Ubuntu下常用的进程管理器supervisor:
sudo apt install supervisor-y
第二步:在/etc/supervisor/conf.d下新建一个配置文件frp.conf。输入以下内容。command 是放置frp的位置。
vim/etc/supervisor/conf.d/frp.conf
客户端:
[program:frp]
command=/etc/frp/frpc-c/etc/frp/frpc.ini
autostart=true
服务端:
[program:frp]
command=/etc/frp/frps-c/etc/frp/frps.ini
autostart=true
重启supervisor
sudo systemctl restart supervisor
查看运行状态:
sudo systemctl status supervisor
查看frp服务是否已经启动
ps-ef|grep frp
最后设置supervisor开机启动
sudo systemctl enable supervisor
(二) centos7系统下
例如:frp的文件路径是/home/frp/下
客户端:
第一步:
cp /home/frpc /usr/bin/frpc
mkdir /etc/frp
cp /home/frpc.ini /etc/frp/frpc.ini
第二步:
vim /lib/systemd/system/frpc.service
填入一下内容:
[Unit]
Description=Frp Client Service
After=network.target
[Service]
Type=idle
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/bin/frpc -c /etc/frp/frpc.ini
ExecReload=/usr/bin/frpc reload -c /etc/frp/frpc.ini
[Install]
WantedBy=multi-user.target
保存退出
systemctl daemon-reload
systemctl start frpc#启动frpc
systemctl status frpc#查看状态
systemctl enable frpc#设置开机启动
服务端:
第一步:
cp/etc/frp/frps/usr/local/bin/frps
第二步:
vim/lib/systemd/system/frps.service
填入一下内容:
1. [Unit]
2. Description=frps service
3. After=network.target syslog.target
4. Wants=network.target
5. [Service]
6. Type=simple
7. ExecStart=/etc/frp/frps-c/etc/frp/frps.ini
8. [Install]
9. WantedBy=multi-user.target
保存退出
1. systemctl start frps#启动frps
2. systemctl status frps#查看状态
3. systemctl enable frps#设置开机启动
三、服务端配置
frp 服务端详细配置说明。
(一) 基础配置
参数 | 类型 | 说明 | 默认值 | 可选值 | 备注 |
bind_addr | string | 服务端监听地址 | 0.0.0.0 | ||
bind_port | int | 服务端监听端口 | 7000 | 接收 frpc 的连接 | |
kcp_bind_port | int | 服务端监听 KCP 协议端口 | 0 | 用于接收采用 KCP 连接的 frpc | |
quic_bind_port | int | 服务端监听 QUIC 协议端口 | 0 | 用于接收采用 QUIC 连接的 frpc | |
quic_keepalive_period | int | quic 协议 keepalive 间隔,单位: 秒 | 10 | ||
quic_max_idle_timeout | int | quic 协议的最大空闲超时时间,单位: 秒 | 30 | ||
quic_max_incoming_streams | int | quic 协议最大并发 stream 数 | 100000 | ||
proxy_bind_addr | string | 代理监听地址 | 同 bind_addr | 可以使代理监听在不同的网卡地址 | |
log_file | string | 日志文件地址 | ./frps.log | 如果设置为 console,会将日志打印在标准输出中 | |
log_level | string | 日志等级 | info | trace, debug, info, warn, error | |
log_max_days | int | 日志文件保留天数 | 3 | ||
disable_log_color | bool | 禁用标准输出中的日志颜色 | false | ||
detailed_errors_to_client | bool | 服务端返回详细错误信息给客户端 | true | ||
tcp_mux_keepalive_interval | int | tcp_mux 的心跳检查间隔时间 | 60 | 单位:秒 | |
tcp_keepalive | int | 和客户端底层 TCP 连接的 keepalive 间隔时间,单位秒 | 7200 | 负数不启用 | |
heartbeat_timeout | int | 服务端和客户端心跳连接的超时时间 | 90 | 单位:秒 | |
user_conn_timeout | int | 用户建立连接后等待客户端响应的超时时间 | 10 | 单位:秒 | |
udp_packet_size | int | 代理 UDP 服务时支持的最大包长度 | 1500 | 服务端和客户端的值需要一致 | |
tls_cert_file | string | TLS 服务端证书文件路径 | |||
tls_key_file | string | TLS 服务端密钥文件路径 | |||
tls_trusted_ca_file | string | TLS CA 证书路径 | |||
nat_hole_analysis_data_reserve_hours | int | 打洞策略数据的保留时间 | 168 |
(二) 权限验证
参数 | 类型 | 说明 | 默认值 | 可选值 | 备注 |
authentication_method | string | 鉴权方式 | token | token, oidc | |
authenticate_heartbeats | bool | 开启心跳消息鉴权 | false | ||
authenticate_new_work_conns | bool | 开启建立工作连接的鉴权 | false | ||
token | string | 鉴权使用的 token 值 | 客户端需要设置一样的值才能鉴权通过 | ||
oidc_issuer | string | oidc_issuer | |||
oidc_audience | string | oidc_audience | |||
oidc_skip_expiry_check | bool | oidc_skip_expiry_check | |||
oidc_skip_issuer_check | bool | oidc_skip_issuer_check |
(三) 管理配置
参数 | 类型 | 说明 | 默认值 | 可选值 | 备注 |
allow_ports | string | 允许代理绑定的服务端端口 | 格式为 1000-2000,2001,3000-4000 | ||
max_pool_count | int | 最大连接池大小 | 5 | ||
max_ports_per_client | int | 限制单个客户端最大同时存在的代理数 | 0 | 0 表示没有限制 | |
tls_only | bool | 只接受启用了 TLS 的客户端连接 | false |
(四) Dashboard, 监控
参数 | 类型 | 说明 | 默认值 | 可选值 | 备注 |
dashboard_addr | string | 启用 Dashboard 监听的本地地址 | 0.0.0.0 | ||
dashboard_port | int | 启用 Dashboard 监听的本地端口 | 0 | ||
dashboard_user | string | HTTP BasicAuth 用户名 | |||
dashboard_pwd | string | HTTP BasicAuth 密码 | |||
dashboard_tls_mode | bool | 是否启用 TLS 模式 | false | ||
dashboard_tls_cert_file | string | TLS 证书文件路径 | |||
dashboard_tls_key_file | string | TLS 密钥文件路径 | |||
enable_prometheus | bool | 是否提供 Prometheus 监控接口 | false | 需要同时启用了 Dashboard 才会生效 | |
asserts_dir | string | 静态资源目录 | Dashboard 使用的资源默认打包在二进制文件中,通过指定此参数使用自定义的静态资源 | ||
pprof_enable | bool | 启动 Go HTTP pprof | false | 用于应用调试 |
(五) HTTP & HTTPS
参数 | 类型 | 说明 | 默认值 | 可选值 | 备注 |
vhost_http_port | int | 为 HTTP 类型代理监听的端口 | 0 | 启用后才支持 HTTP 类型的代理,默认不启用 | |
vhost_https_port | int | 为 HTTPS 类型代理监听的端口 | 0 | 启用后才支持 HTTPS 类型的代理,默认不启用 | |
vhost_http_timeout | int | HTTP 类型代理在服务端的 ResponseHeader 超时时间 | 60 | ||
subdomain_host | string | 二级域名后缀 | |||
custom_404_page | string | 自定义 404 错误页面地址 |
(六) TCPMUX
参数 | 类型 | 说明 | 默认值 | 可选值 | 备注 |
tcpmux_httpconnect_port | int | 为 TCPMUX 类型代理监听的端口 | 0 | 启用后才支持 TCPMUX 类型的代理,默认不启用 | |
tcpmux_passthrough | bool | 是否透传 CONNECT 请求 | false | 通常在本地服务是 HTTP Proxy 时使用 |
四、客户端配置
frp 客户端的详细配置说明。
(一) 基础配置
参数 | 类型 | 说明 | 默认值 | 可选值 | 备注 |
server_addr | string | 连接服务端的地址 | 0.0.0.0 | ||
server_port | int | 连接服务端的端口 | 7000 | ||
nat_hole_stun_server | string | xtcp 打洞所需的 stun 服务器地址 | stun.easyvoip.com:3478 | ||
connect_server_local_ip | string | 连接服务端时所绑定的本地 IP | |||
dial_server_timeout | int | 连接服务端的超时时间 | 10 | ||
dial_server_keepalive | int | 和服务端底层 TCP 连接的 keepalive 间隔时间,单位秒 | 7200 | 负数不启用 | |
http_proxy | string | 连接服务端使用的代理地址 | 格式为 {protocol}://user:passwd@192.168.1.128:8080 protocol 目前支持 http、socks5、ntlm | ||
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, quic, websocket, wss | |
quic_keepalive_period | int | quic 协议 keepalive 间隔,单位: 秒 | 10 | ||
quic_max_idle_timeout | int | quic 协议的最大空闲超时时间,单位: 秒 | 30 | ||
quic_max_incoming_streams | int | quic 协议最大并发 stream 数 | 100000 | ||
tls_enable | bool | 启用 TLS 协议加密连接 | true | ||
tls_cert_file | string | TLS 客户端证书文件路径 | |||
tls_key_file | string | TLS 客户端密钥文件路径 | |||
tls_trusted_ca_file | string | TLS CA 证书路径 | |||
tls_server_name | string | TLS Server 名称 | 为空则使用 server_addr | ||
disable_custom_tls_first_byte | bool | TLS 不发送 0x17 | true | 当为 true 时,不能端口复用 | |
tcp_mux_keepalive_interval | int | tcp_mux 的心跳检查间隔时间 | 60 | 单位:秒 | |
heartbeat_interval | int | 向服务端发送心跳包的间隔时间 | 30 | 建议启用 tcp_mux_keepalive_interval,将此值设置为 -1 | |
heartbeat_timeout | int | 和服务端心跳的超时时间 | 90 | ||
udp_packet_size | int | 代理 UDP 服务时支持的最大包长度 | 1500 | 服务端和客户端的值需要一致 | |
start | string | 指定启用部分代理 | 当配置了较多代理,但是只希望启用其中部分时可以通过此参数指定,默认为全部启用 | ||
meta_xxx | map | 附加元数据 | 会传递给服务端插件,提供附加能力 |
(二) 权限验证
参数 | 类型 | 说明 | 默认值 | 可选值 | 备注 |
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_scope | string | oidc_scope | |||
oidc_token_endpoint_url | string | oidc_token_endpoint_url | |||
oidc_additional_xxx | map | OIDC 附加参数 | map 结构,key 需要以 oidc_additional_ 开头 |
(三) UI
参数 | 类型 | 说明 | 默认值 | 可选值 | 备注 |
admin_addr | string | 启用 AdminUI 监听的本地地址 | 0.0.0.0 | ||
admin_port | int | 启用 AdminUI 监听的本地端口 | 0 | ||
admin_user | string | HTTP BasicAuth 用户名 | |||
admin_pwd | string | HTTP BasicAuth 密码 | |||
asserts_dir | string | 静态资源目录 | AdminUI 使用的资源默认打包在二进制文件中,通过指定此参数使用自定义的静态资源 | ||
pprof_enable | bool | 启动 Go HTTP pprof | false | 用于应用调试 |