本文主要介绍 frp 的常用使用方式, 以及入门级别的部署。 如果需要实现特定的场景, 建议阅读官方文档, 官方文档链接在下方参考文章可以查看。
博主博客
一、介绍
frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议,且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
二、下载
进入 Release 进行下载。
根据不同的服务器架构下载不同的包(一个包包含服务端和客户端)。
- linux 可以使用 wget 进行下载, 比如
wget https://github.com/fatedier/frp/releases/download/v0.51.2/frp_0.51.2_linux_amd64.tar.gz
。 - linux 可以使用
tar -zxvf frp_0.51.2_linux_amd64.tar.gz
进行解压, 解压到当前目录。 - 解压后有 (frps, frps.ini, frps_full.ini) 服务端文件, (frpc, frpc.ini, frpc_full.ini) 客户端文件, LICENSE。
三、服务端(需要有公网 IP, 比如我使用的是阿里云服务器)
3.1 TCP 转发最简化配置
编辑最简化配置 vi frps.ini
, 该配置只有一个端口号。
[common]
bind_port = 7000
启动服务端 ./frps -c ./frps.ini
。
- 配置完, 记得看看防火墙有没有打开。
3.2 HTTP 转发最简化配置
编辑最简化配置 vi frps.ini
。
[common]
bind_port = 7000
vhost_http_port = 8080
https 代理的话需要配置 vhost_https_port
。
启动服务端 ./frps -c ./frps.ini
。
四、客户端(内网 IP)
4.1 TCP 转发最简化配置
编辑最简化配置 vi frpc.ini
, 把 x.x.x.x 替换为服务端的公网 IP.
[common]
server_addr = x.x.x.x
server_port = 7000
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
local_ip
和 local_port
配置为本地需要暴露到公网的服务地址和端口。remote_port
表示在 frp 服务端监听的端口,访问此端口的流量将会被转发到本地服务对应的端口。
启动客户端 ./frpc -c ./frpc.ini
。
4.2 HTTP 转发最简化配置
编辑最简化配置 vi frpc.ini
, 把 x.x.x.x 替换为服务端的公网 IP.
[common]
server_addr = x.x.x.x
server_port = 7000
[web]
type = http
local_port = 80
custom_domains = www.yourdomain.com
[web2]
type = http
local_port = 8080
custom_domains = www.yourdomain2.com
local_port
为本地机器上 Web 服务监听的端口, 绑定自定义域名为 custom_domains
。
启动客户端 ./frpc -c ./frpc.ini
。
五、测试
5.1 TCP 转发最简化配置
使用命令 ssh -p 6000 [email protected]
, 会请求公网 x.x.x.x:6000
, 然后 frp 会转发到内网 22 端口。
5.2 HTTP 转发最简化配置
通过浏览器访问 http://www.yourdomain.com:8080
即可访问到处于内网机器上 80 端口的服务,访问 http://www.yourdomain2.com:8080
则访问到内网机器上 8080 端口的服务。
六、Web 界面(可选)
6.1 服务端
编辑配置 vi frps.ini
。
# frps.ini
[common]
dashboard_port = 7500
# dashboard 用户名密码,可选,默认为空
dashboard_user = admin
dashboard_pwd = admin
打开浏览器通过 http://[server_addr]:7500
访问 Dashboard 界面,输入用户名密码 admin
。
也可以通过配置 TLS 证书来启用 HTTPS 接口:
dashboard_tls_mode = true
dashboard_tls_cert_file = server.crt
dashboard_tls_key_file = server.key
6.2 客户端
编辑配置 vi frpc.ini
。
# frpc.ini
[common]
admin_addr = 127.0.0.1
admin_port = 7400
admin_user = admin
admin_pwd = admin
打开浏览器通过 `http://127.0.0.1:7400 访问 Admin UI。
如果想要在外网环境访问 Admin UI,可以将 7400 端口通过 frp 映射出去即可,但需要重视安全风险。
# frpc.ini
[admin_ui]
type = tcp
local_port = 7400
remote_port = 7400
七、身份认证(可选)
身份认证有 token
和 oidc
两种方式, 在这只介绍 token
, token
必须服务端和客户端相同才能成功连接。
7.1 服务端
编辑配置 vi frps.ini
。
[common]
# authentication_method specifies what authentication method to use authenticate frpc with frps.
# If "token" is specified - token will be read into login message.
# If "oidc" is specified - OIDC (Open ID Connect) token will be issued using OIDC settings. By default, this value is "token".
authentication_method = token
# auth token
token = 12345678
6.2 客户端
编辑配置 vi frpc.ini
。
[common]
authentication_method = token
# auth token
token = 12345678
八、范围端口映射(可选)
在 frpc 的配置文件中可以指定映射多个端口,目前只支持 TCP 和 UDP 的代理类型。
这一功能通过 range:
段落标记来实现,客户端会解析这个标记中的配置,将其拆分成多个 proxy,每一个 proxy 以数字为后缀命名。
例如要映射本地 6000-6005, 6007 这7个端口,主要配置如下:
# frpc.ini
[range:test_tcp]
type = tcp
local_ip = 127.0.0.1
local_port = 6000-6005,6007
remote_port = 6000-6005,6007
实际连接成功后会创建 7 个 proxy,命名为 test_tcp_0, test_tcp_1 ... test_tcp_6
。
九、使用 systemd (可选)
9.1 安装(已安装跳过)
# yum
yum install systemd
# apt
apt install systemd
9.2 编辑服务文件
编辑配置 vim /etc/systemd/system/frps.service
。
[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /path/to/frps -c /path/to/frps.ini
[Install]
WantedBy = multi-user.target
9.3 使用 systemd
命令管理 frps
# 启动 frp
systemctl start frps
# 停止 frp
systemctl stop frps
# 重启 frp
systemctl restart frps
# 查看 frp 状态
systemctl status frps
# 配置 frps 开机自启
systemctl enable frps
附录
- 启动客户端:
./frpc -c ./frpc.ini
- 启动服务端:
./frps -c ./frps.ini
- 热加载配置文件:
frpc reload -c ./frpc.ini
- 命令行查看代理状态:
frpc status -c ./frpc.ini
(此功能需要在 frpc 中配置 admin 端口)