本文主要介绍 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_iplocal_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

七、身份认证(可选)

身份认证有 tokenoidc 两种方式, 在这只介绍 tokentoken 必须服务端和客户端相同才能成功连接。

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 端口)

参考文档