文章

Frp服务部署&使用

一、介绍

frp(Fast Reverse Proxy,快速反向代理)是一款开源的轻量级反向代理工具,由国内开发者 fatedier 维护,核心功能是帮助内网服务穿透到公网,解决内网设备(如家庭 NAS、开发服务器、树莓派等)无法被公网直接访问的问题。它基于 TCP/UDP 协议工作,支持多种网络场景,且配置简单、性能稳定,广泛用于个人开发、家庭服务暴露、企业内网服务外访等场景。

二、核心功能

在没有公网 IP 的环境中(如家庭宽带、企业内网),内网设备的服务(如 Web 网站、SSH 端口、数据库端口等)无法被公网设备直接访问。frp 通过 “客户端 - 服务端” 架构,搭建一条从公网到内网的 “通道”,实现以下需求:

  • 公网设备访问内网的 Web 服务(如个人博客、家庭 NAS 管理页面);

  • 远程通过 SSH 连接内网的开发机 / 树莓派;

  • 暴露内网的数据库、游戏服务等 TCP/UDP 端口;

  • 实现内网设备之间的跨网络通信(如异地办公访问公司内网服务)。

三、基本架构

frp 分为 服务端(frps)客户端(frpc) 两部分,需配合使用:

  1. 服务端(frps):需部署在有公网 IP 的服务器上(如云服务器,阿里云、腾讯云等均可),负责接收公网请求,并将请求转发给对应的内网客户端。

  2. 客户端(frpc):部署在内网设备上(如家庭 NAS、开发机),负责与公网的服务端建立连接,并将内网服务的端口 “上报” 给服务端;当公网有请求时,客户端接收服务端转发的请求,再传递给内网服务。

简单流程:

公网设备 → 公网服务器(frps) → 内网客户端(frpc) → 内网服务

四、服务端部署

1. 到GitHub上下载最新的frp安装包,选择好自己合适的系统和版本,地址如下:

https://github.com/fatedier/frp/releases

我是Ubuntu系统选择的是最新的v0.64.0版本

wget https://github.com/fatedier/frp/releases/download/v0.64.0/frp_0.64.0_linux_amd64.tar.gz

2. 解压文件到当前目录

tar -zxvf frp_0.64.0_linux_amd64.tar.gz 

3. 移动到具体的安装目录,我这边选择的是/usr/local/目录

mv frp_0.64.0_linux_amd64 /usr/local/frp

4. 修改服务端配置(按需修改)

# 修改配置文件
tee frps.toml > /dev/null << 'EOF'
[common]
# 服务端绑定的端口,用于客户端与服务端通信的核心端口。需要确保该端口对外网开放。
bind_port = 7000
 
# HTTP 代理的虚拟主机端口。用于通过域名访问客户端的 HTTP 服务,需配置 DNS。
vhost_http_port = 8080
 
# HTTPS 代理的虚拟主机端口。用于通过域名访问客户端的 HTTPS 服务,需配置 DNS。
vhost_https_port = 8443
 
# 密钥,是自定义的,想怎么填写就怎么填写,但客户端和服务端必须保持一致,确保安全通信。
token = "123456aaa"
 
# 仪表板端口,用于查看 frps 服务端的运行状态和管理客户端连接。访问地址:服务器IP:7500
dashboard_port = 7500
# 监控页面用户名
dashboard_user = admin
# 监控页面密码
dashboard_pwd = 123456

EOF

5. 加入系统服务并设置开机自启动

# 加入系统服务
cat <<EOF | tee /etc/systemd/system/frps.service
[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target

[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /usr/local/frp/frps -c /usr/local/frp/frps.toml

[Install]
WantedBy = multi-user.target
EOF

6. 服务端启动验证

# 重载配置使其生效
systemctl daemon-reload
 
# 启动 frps 服务
systemctl start frps.service
 
# 设置开机自启
systemctl enable frps.service

出现如下结果就是服务端启动成功,否则请检查配置信息

root@Classic-9863745370:~# systemctl status frps
● frps.service - frp server
     Loaded: loaded (/etc/systemd/system/frps.service; disabled; vendor preset: enabled)
     Active: active (running) since Tue 2025-09-23 17:30:48 CST; 2 days ago
   Main PID: 846923 (frps)
      Tasks: 6 (limit: 2309)
     Memory: 7.8M
        CPU: 13.463s
     CGroup: /system.slice/frps.service
             └─846923 /usr/local/frp/frps -c /usr/local/frp/frps.toml

五、客户端使用

1. 创建配置文件frpc.ini

[common]
server_addr = 1.2.3.4  # 公网服务器的 IP 地址
server_port = 7000     # 与服务端 bind_port 一致

# 配置 SSH 端口转发(名称自定义为 [ssh])
[ssh]
type = tcp  # 协议类型
local_ip = 127.0.0.1  # 内网服务的 IP(本地服务填 127.0.0.1)
local_port = 22       # 内网服务的端口(SSH 默认 22)
remote_port = 6000    # 公网服务器的映射端口(需开放安全组)

2. 启动客户端

./frpc -c ./frpc.ini

3. 测试访问

ssh -p 6000 内网设备用户名@公网服务器IP

六、注意事项

  1. 端口开放:公网服务器需在防火墙 / 安全组开放 bind_port(如 7000)和 remote_port(如 6000),否则客户端无法连接服务端,公网请求也无法到达;

  2. 安全性:避免使用弱密码,重要服务建议开启 token 认证(在 [common] 中添加 token = 自定义密钥,服务端和客户端需一致);

  3. 稳定性:客户端建议配置开机自启(如 Linux 用 systemd,Windows 用任务计划),避免设备重启后 frp 断开;

  4. 版本匹配:服务端和客户端需使用相同版本的 frp,否则可能出现兼容性问题(可从 frp 官网 下载最新版本)。

七、项目地址

GitHub:Frp

License:  CC BY 4.0