Frp服务部署&使用
一、介绍
frp(Fast Reverse Proxy,快速反向代理)是一款开源的轻量级反向代理工具,由国内开发者 fatedier 维护,核心功能是帮助内网服务穿透到公网,解决内网设备(如家庭 NAS、开发服务器、树莓派等)无法被公网直接访问的问题。它基于 TCP/UDP 协议工作,支持多种网络场景,且配置简单、性能稳定,广泛用于个人开发、家庭服务暴露、企业内网服务外访等场景。
二、核心功能
在没有公网 IP 的环境中(如家庭宽带、企业内网),内网设备的服务(如 Web 网站、SSH 端口、数据库端口等)无法被公网设备直接访问。frp 通过 “客户端 - 服务端” 架构,搭建一条从公网到内网的 “通道”,实现以下需求:
公网设备访问内网的 Web 服务(如个人博客、家庭 NAS 管理页面);
远程通过 SSH 连接内网的开发机 / 树莓派;
暴露内网的数据库、游戏服务等 TCP/UDP 端口;
实现内网设备之间的跨网络通信(如异地办公访问公司内网服务)。
三、基本架构
frp 分为 服务端(frps) 和 客户端(frpc) 两部分,需配合使用:
服务端(frps):需部署在有公网 IP 的服务器上(如云服务器,阿里云、腾讯云等均可),负责接收公网请求,并将请求转发给对应的内网客户端。
客户端(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
六、注意事项
端口开放:公网服务器需在防火墙 / 安全组开放
bind_port
(如 7000)和remote_port
(如 6000),否则客户端无法连接服务端,公网请求也无法到达;安全性:避免使用弱密码,重要服务建议开启
token
认证(在[common]
中添加token = 自定义密钥
,服务端和客户端需一致);稳定性:客户端建议配置开机自启(如 Linux 用 systemd,Windows 用任务计划),避免设备重启后 frp 断开;
版本匹配:服务端和客户端需使用相同版本的 frp,否则可能出现兼容性问题(可从 frp 官网 下载最新版本)。
七、项目地址
GitHub:Frp