frp 完整部署文档(v0.65+ 版本,TOML 格式优先)
一、文档说明
1.1 文档用途
本文档详细介绍 frp(Fast Reverse Proxy)的完整部署流程,涵盖服务端(frps)、客户端(frpc)的安装、配置、启动、开机自启,以及多场景代理配置、安全优化、故障排查等内容,适用于 v0.65+ 版本(配置文件优先采用 TOML 格式,旧版 INI 格式已弃用),适配 Windows、Linux、Mac 等跨平台环境,帮助用户快速实现内网穿透,将内网服务安全暴露到公网。
1.2 核心概念
frp 是一款高性能的反向代理工具,专注于内网穿透,核心作用是通过一台拥有公网 IP 的服务器(服务端),将处于 NAT 或防火墙后的内网服务(如家庭 NAS、远程桌面、本地网站、SSH 服务等),暴露给互联网访问,无需配置复杂的端口映射或虚拟端口,直接通过 TCP 等协议即可实现稳定穿透。
核心组件:
-
服务端(frps):部署在拥有公网 IP 的云服务器(如阿里云、腾讯云)上,负责接收客户端连接、转发外网请求到内网客户端。
-
客户端(frpc):部署在需要穿透的内网设备(电脑、NAS、服务器)上,主动连接服务端,将内网服务端口映射到服务端的公网端口。
1.3 适用场景
-
远程访问内网电脑(Windows 远程桌面、Linux SSH);
-
外网访问内网 Web 服务(本地网站、博客、管理后台);
-
远程管理内网 NAS、监控设备等;
-
多内网服务同时穿透(可在一个客户端配置多个代理);
-
高延迟/高丢包环境下的远程调试(如户外设备、异地办公)。
1.4 版本说明
本文档基于 frp v0.65+ 版本编写,该版本已全面转向 TOML 配置格式,INI 格式虽仍支持但已弃用,新功能仅支持 TOML/YAML/JSON 格式配置;若使用旧版本,需将本文档中的 TOML 配置转换为 INI 格式(具体转换规则可参考官方文档)。
二、部署准备
2.1 环境要求
2.1.1 服务端环境
-
服务器:拥有公网 IP 的云服务器(阿里云、腾讯云、华为云等),推荐配置:1核2G 及以上,带宽 1Mbps 及以上;
-
操作系统:Linux(CentOS、Ubuntu、Debian 等,推荐 Ubuntu 20.04+)、Windows Server(本文以 Linux 为主,Windows 服务端配置附后);
-
网络:开放指定端口(核心端口 7000,管理面板端口 7500,以及业务映射端口,如 8080、6000 等),需在云服务商安全组中放行;
-
依赖:无需额外依赖(frp 基于 Go 语言编写,二进制文件可直接运行)。
2.1.2 客户端环境
-
设备:需要穿透的内网设备(Windows、Linux、Mac、NAS 等);
-
网络:内网设备可正常访问互联网(能连接到服务端公网 IP);
-
依赖:无需额外依赖,下载对应系统的二进制文件即可运行。
2.2 工具与资源下载
2.2.1 下载地址
frp 官方下载地址(GitHub Release):https://github.com/fatedier/frp/releases
下载对应系统和架构的压缩包(如 Linux 64 位:frp_0.65.0_linux_amd64.tar.gz;Windows 64 位:frp_0.65.0_windows_amd64.zip),服务端和客户端需下载同一版本的压缩包(压缩包中包含 frps、frpc 及对应配置文件示例)。
2.2.2 下载说明
压缩包包含的核心文件:
-
frps:服务端可执行文件;
-
frps.toml:服务端配置文件(示例);
-
frpc:客户端可执行文件;
-
frpc.toml:客户端配置文件(示例);
-
LICENSE、README.md:许可协议和说明文档。
2.3 前置配置(关键)
服务端需提前配置安全组,放行以下端口(以阿里云/腾讯云为例),否则外网无法连接 frp 服务,这是新手最容易失败的环节:
| 端口范围 | 协议 | 授权对象 | 说明 |
|---|---|---|---|
| 7000/7000 | TCP | 0.0.0.0/0 | 必选,frp 服务端与客户端的通信隧道端口(默认) |
| 7500/7500 | TCP | 0.0.0.0/0 | 可选,Web 管理面板端口,用于监控 frp 运行状态 |
| 8080/8080(示例) | TCP | 0.0.0.0/0 | 业务端口,用于映射内网 Web 服务(可自定义) |
| 6000/6000(示例) | TCP | 0.0.0.0/0 | 业务端口,用于映射 Windows 远程桌面(可自定义) |
| 22222/22222(示例) | TCP | 0.0.0.0/0 | 业务端口,用于映射 Linux SSH 服务(避开默认 22 端口,更安全) |
| 偷懒技巧:若计划长期使用多个业务端口,可直接放行一个端口区间(如 8000/9000),后续客户端使用该区间内的端口时,无需再次修改安全组规则。 |
三、服务端(frps)部署(Linux 系统)
3.1 安装 frps
3.1.1 上传并解压压缩包
-
通过 Xshell、Putty 等工具连接到云服务器(以 Ubuntu 20.04 为例);
-
创建 frp 安装目录(推荐 /usr/local/frp):
mkdir -p /usr/local/frp -
将下载好的 frp 压缩包上传到该目录(可使用 rz 命令或 FTP 工具);
-
解压压缩包(替换文件名为实际下载的文件名):
cd /usr/local/frp tar -zxvf frp_0.65.0_linux_amd64.tar.gz -
进入解压后的目录(目录名随版本变化,可使用 ls 命令查看):
cd frp_0.65.0_linux_amd64 -
将 frps 可执行文件和配置文件移动到安装目录根目录(简化操作):
mv frps frps.toml /usr/local/frp/ cd /usr/local/frp
3.1.2 配置 frps.toml(核心步骤)
编辑 frps.toml 配置文件(使用 vim 编辑器,若未安装可执行 apt install vim):
vim frps.toml
清空默认内容,粘贴以下基础配置(可根据需求调整,注释已详细说明):
# frps.toml - 服务端基础配置(v0.65+)
# 1. 基础网络设置(客户端连接的核心配置)
bindAddr = "0.0.0.0" # 监听所有网卡的请求,无需修改
bindPort = 7000 # 客户端连接的端口,必须与客户端 serverPort 一致,且安全组已放行
# 2. 安全认证(务必修改为复杂密码,防止未授权访问)
auth.token = "YourSuperSecretToken_2026!" # 自定义复杂密码,客户端需与该值完全一致
# 3. Web 管理面板(可选,强烈建议开启,便于监控 frp 运行状态)
webServer.addr = "0.0.0.0" # 管理面板监听地址
webServer.port = 7500 # 管理面板端口,需在安全组放行
webServer.user = "admin" # 管理面板登录用户名
webServer.password = "AdminPass123" # 管理面板登录密码,建议修改为复杂密码
# 4. 日志配置(便于排查故障)
log.to = "./frps.log" # 日志文件存储路径
log.level = "info" # 日志级别(info:普通信息,warn:警告,error:错误)
log.maxDays = 3 # 日志保留天数,自动清理过期日志
# 5. 可选:端口限制(强化安全,限制客户端可映射的端口范围)
allow_ports = ["6000-8000", "22222"] # 允许客户端映射的端口,可自定义
# deny_ports = ["21", "3389"] # 禁止映射的危险端口,按需添加
配置说明:
-
auth.token:必须修改为复杂字符串(如字母+数字+特殊符号),客户端配置需与该值完全一致,否则无法连接服务端;
-
webServer 相关配置:开启后,可通过 http://公网IP:7500 访问管理面板,查看客户端连接状态、代理配置等;
-
allow_ports/deny_ports:用于限制客户端可映射的端口,避免端口滥用,提升安全性,按需配置即可。
配置完成后,按 Esc 键,输入 :wq 保存并退出 vim 编辑器。
3.1.3 测试启动 frps
执行以下命令启动 frps(临时测试,窗口关闭则服务停止,适合调试配置):
./frps -c frps.toml
启动成功标志:终端输出类似以下内容,无 error 信息,且显示 “start frps success”:
2026/03/10 12:00:00 [I] [root.go:200] frps started successfully
2026/03/10 12:00:00 [I] [web_server.go:100] web server listen on [0.0.0.0:7500]
2026/03/10 12:00:00 [I] [listener.go:110] tcp listener listen on [0.0.0.0:7000]
此时,可访问 http://公网IP:7500,输入配置的用户名和密码,若能正常登录管理面板,说明服务端启动成功。
3.1.4 配置 frps 开机自启(永久运行)
临时启动方式无法持久化,需配置 systemd 服务,实现开机自启和后台运行(Linux 系统通用方法):
-
创建 frps 服务文件:
vim /etc/systemd/system/frps.service -
粘贴以下内容(注意修改 ExecStart 路径为实际 frps 安装路径):
[Unit] Description=frp server (Fast Reverse Proxy) After=network.target [Service] Type=simple # 替换为 frps 可执行文件和配置文件的实际路径 ExecStart=/usr/local/frp/frps -c /usr/local/frp/frps.toml Restart=on-failure # 服务故障时自动重启 RestartSec=5 # 重启间隔 5 秒 User=root # 以 root 用户运行 [Install] WantedBy=multi-user.target -
保存并退出后,重新加载 systemd 配置:
`systemctl daemon-reload -
启动 frps 服务并设置开机自启:
# 启动服务 systemctl start frps # 设置开机自启 systemctl enable frps -
查看 frps 服务运行状态:
systemctl status frps 若输出 “active (running)”,说明服务已成功启动并设置开机自启;若启动失败,可通过 journalctl -u frps 查看错误日志,排查配置问题。
3.2 Windows 服务端部署(补充)
若服务端为 Windows Server 系统,部署步骤如下:
-
下载 Windows 版本的 frp 压缩包,解压到指定目录(如 D:\frp);
-
编辑 frps.toml 配置文件,内容与 Linux 服务端一致(参考 3.1.2 节);
-
临时启动:打开 cmd 命令提示符,进入 frp 目录,执行命令:
frps.exe -c frps.toml (窗口不要关闭,关闭则服务停止) -
永久运行(推荐新手):下载第三方开源工具 frpc-desktop(支持管理 frps),安装后选择“服务端”模式,导入 frps.toml 配置,点击“启动”,即可以 Windows 服务形式在后台运行,且有可视化日志;
-
配置防火墙:在 Windows 防火墙中放行 7000、7500 及业务端口(与云服务器安全组配置一致)。
四、客户端(frpc)部署(多系统适配)
客户端部署需根据内网设备的操作系统选择对应版本,核心配置一致,以下分别介绍 Linux、Windows、Mac 系统的部署方法,重点说明配置和启动步骤。
4.1 通用准备
-
下载与服务端同一版本的 frp 压缩包,解压到内网设备的指定目录(如 Linux:/usr/local/frp;Windows:D:\frp;Mac:/usr/local/frp);
-
进入解压目录,找到 frpc 可执行文件和 frpc.toml 配置文件,重点修改 frpc.toml 配置(核心是关联服务端信息和映射内网服务)。
4.2 Linux 客户端部署
4.2.1 配置 frpc.toml(核心)
编辑 frpc.toml 配置文件(vim /usr/local/frp/frpc.toml),粘贴以下基础配置(支持多服务同时映射,注释详细):
# frpc.toml - 客户端基础配置(v0.65+)
# 1. 通用设置(关联服务端,必须与服务端配置一致)
serverAddr = "你的云服务器公网IP" # 替换为服务端实际公网IP
serverPort = 7000 # 与服务端 bindPort 一致
auth.token = "YourSuperSecretToken_2026!" # 与服务端 auth.token 完全一致
# 2. 服务1:映射 Linux SSH 服务(外网可通过 SSH 访问内网 Linux 设备)
((proxies))
name = "ssh_linux" # 代理名称,唯一即可
type = "tcp" # 代理类型,SSH 用 TCP 协议
localIP = "127.0.0.1" # 内网服务 IP(本地设备用 127.0.0.1 即可)
localPort = 22 # 内网 SSH 服务默认端口
remotePort = 22222 # 服务端对外暴露的端口(需在安全组放行,避开默认 22 端口)
# 3. 服务2:映射内网 Web 服务(外网可访问内网本地网站)
((proxies))
name = "web_home"
type = "tcp"
localIP = "127.0.0.1"
localPort = 80 # 内网 Web 服务端口(如 Nginx、Apache 默认端口)
remotePort = 8080 # 服务端对外暴露的 Web 端口(需在安全组放行)
# 4. 可选:安全TCP代理(STCP,适合私密服务,无需暴露服务端端口)
# ((proxies))
# name = "rdp_stcp"
# type = "stcp" # 代理类型为 STCP(安全TCP)
# localIP = "127.0.0.1"
# localPort = 3389 # 内网远程桌面端口
# sk = "YourSTCPSecretKey" # 访问密钥,访问方客户端需配置相同密钥
配置说明:
-
serverAddr:必须填写服务端的公网 IP,不可填写内网 IP;
-
每个 ((proxies)) 块对应一个内网服务映射,可根据需求添加多个,name 必须唯一;
-
remotePort:需与服务端安全组放行的端口一致,且不可与其他代理的 remotePort 冲突;
-
STCP 代理:适合私密服务(如远程桌面),无需在服务端暴露端口,仅密钥匹配的访问方才能连接,安全性更高。
4.2.2 测试启动 frpc
执行以下命令启动 frpc(临时测试):
cd /usr/local/frp
./frpc -c frpc.toml
启动成功标志:终端输出类似以下内容,显示“start frpc success”,且服务端管理面板(http://公网IP:7500)中能看到该客户端的连接信息和代理配置:
2026/03/10 12:30:00 [I] [root.go:200] frpc started successfully
2026/03/10 12:30:00 [I] [control.go:150] [ssh_linux] start proxy success
2026/03/10 12:30:00 [I] [control.go:150] [web_home] start proxy success
4.2.3 配置开机自启
与服务端类似,通过 systemd 配置开机自启:
-
创建 frpc 服务文件:
vim /etc/systemd/system/frpc.service -
粘贴以下内容(修改 ExecStart 路径为实际 frpc 安装路径):
[Unit] Description=frp client (Fast Reverse Proxy) After=network.target [Service] Type=simple ExecStart=/usr/local/frp/frpc -c /usr/local/frp/frpc.toml Restart=on-failure RestartSec=5 User=root [Install] WantedBy=multi-user.target -
重新加载 systemd 配置并启动服务:
systemctl daemon-reload systemctl start frpc systemctl enable frpc -
查看服务状态:
systemctl status frpc
4.3 Windows 客户端部署
4.3.1 配置 frpc.toml
解压 frp 压缩包到 D:\frp,用记事本或 Notepad++ 打开 frpc.toml,粘贴以下配置(以映射 Windows 远程桌面和本地 Web 服务为例):
# frpc.toml - Windows 客户端配置
serverAddr = "你的云服务器公网IP"
serverPort = 7000
auth.token = "YourSuperSecretToken_2026!"
# 服务1:Windows 远程桌面(RDP)
((proxies))
name = "rdp_windows"
type = "tcp"
localIP = "127.0.0.1"
localPort = 3389 # Windows 远程桌面默认端口
remotePort = 6000 # 服务端对外暴露的端口(需在安全组放行)
# 服务2:本地 Web 服务
((proxies))
name = "web_windows"
type = "tcp"
localIP = "127.0.0.1"
localPort = 80
remotePort = 8080
4.3.2 启动 frpc
-
临时启动:打开 cmd 命令提示符(以管理员身份运行),进入 D:\frp 目录,执行命令:
frpc.exe -c frpc.toml (窗口不要关闭,关闭则服务停止) -
永久运行(推荐):使用 frpc-desktop 图形化工具,安装后选择“客户端”模式,导入 frpc.toml 配置,点击“启动”,即可后台运行,无需保持 cmd 窗口打开,且支持开机自启配置。
4.4 Mac 客户端部署(补充)
-
解压 frp 压缩包到 /usr/local/frp,打开终端,进入该目录;
-
配置 frpc.toml(与 Linux 客户端配置一致,参考 4.2.1 节);
-
临时启动:
./frpc -c frpc.toml -
永久运行:通过 launchd 配置开机自启,或使用第三方工具(如 frpc-desktop),步骤与 Windows 类似。
五、多场景进阶配置
5.1 协议选型优化(按需匹配场景)
frp 支持多种代理协议,可根据场景灵活选择,提升穿透稳定性和效率:
-
稳定网络场景(Web 服务、数据库):优先使用 TCP 协议,搭配 tcp_mux = true 开启连接多路复用(服务端和客户端同时配置),减少连接开销,适合高并发;
-
高延迟/高丢包场景(远程桌面、户外设备):选用 KCP 协议,客户端代理段添加 protocol = kcp,服务端需开放对应 UDP 端口(默认与 7000 端口一致),可大幅降低延迟;
-
多 Web 站点场景:使用 HTTP/HTTPS 协议,服务端配置 vhost_http_port = 80、vhost_https_port = 443,客户端通过 custom_domains 配置多域名,实现单端口映射多 Web 服务;
-
私密服务场景(SSH、远程桌面):使用 STCP 协议,无需暴露服务端端口,仅密钥匹配的访问方能连接,安全性更高。
5.2 负载均衡配置(高可用)
当多个内网设备提供相同服务时,可配置负载均衡,服务端自动将请求分发到存活的客户端,避免单点故障(仅支持 TCP、HTTP、TCPMUX 类型代理):
# 客户端配置示例(两个 Web 节点负载均衡)
serverAddr = "你的公网IP"
serverPort = 7000
auth.token = "YourSuperSecretToken_2026!"
# 节点1
((proxies))
name = "web_node1"
type = "tcp"
localPort = 8080
remotePort = 80
loadBalancer.group = "web_cluster" # 同一分组名称
loadBalancer.groupKey = "web_key" # 分组密钥,用于权限验证
# 节点2
((proxies))
name = "web_node2"
type = "tcp"
localPort = 8081
remotePort = 80 # 同一分组需使用相同 remotePort
loadBalancer.group = "web_cluster"
loadBalancer.groupKey = "web_key"
5.3 健康检查配置(避免无效转发)
为代理配置健康检查,当内网服务故障时,服务端自动摘除故障代理,避免请求转发到不可用的服务,支持 TCP 和 HTTP 两种检查类型:
((proxies))
name = "ssh_proxy"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 22222
# 健康检查配置
healthCheck.type = "tcp" # TCP 类型检查(建立连接即正常)
healthCheck.timeoutSeconds = 3 # 连接超时时间(秒)
healthCheck.maxFailed = 3 # 连续3次失败则摘除代理
healthCheck.intervalSeconds = 10 # 检查间隔(秒)
六、测试验证
部署完成后,需进行测试,确认内网穿透是否正常,以下以常见场景为例:
6.1 SSH 访问测试(Linux 客户端)
在外网设备(非内网)的终端中执行命令,连接内网 Linux 设备:
ssh -p 22222 内网Linux用户名@服务端公网IP
若能成功登录,说明 SSH 穿透正常。
6.2 远程桌面测试(Windows 客户端)
-
在外网 Windows 设备上,打开“远程桌面连接”(Win+R 输入 mstsc);
-
输入:服务端公网IP:6000(如 123.45.67.89:6000);
-
输入内网 Windows 设备的用户名和密码,若能成功登录,说明远程桌面穿透正常。
6.3 Web 服务测试
在外网设备的浏览器中输入:http://服务端公网IP:8080,若能正常访问内网 Web 服务(如本地网站、管理后台),说明 Web 穿透正常。
6.4 管理面板验证
访问 http://服务端公网IP:7500,登录管理面板,查看“客户端列表”和“代理列表”,确认客户端已连接、代理已正常启动,无异常状态。
七、故障排查
若测试失败,可按以下步骤排查故障,重点关注配置、端口、网络三个维度:
7.1 常见故障及解决方法
| 故障现象 | 可能原因 | 解决方法 |
|---|---|---|
| 客户端启动失败,提示“auth failed” | 客户端 auth.token 与服务端不一致 | 检查两端配置文件,确保 auth.token 完全一致,无空格、大小写错误 |
| 客户端启动成功,但外网无法访问 | 服务端安全组未放行业务端口;remotePort 冲突;内网服务未启动 | 1. 检查云服务器安全组,放行对应的 remotePort;2. 确认 remotePort 未被其他服务占用;3. 检查内网服务(如 SSH、Web)是否正常启动 |
| 客户端无法连接服务端,提示“connection refused” | 服务端未启动;服务端 7000 端口未放行;公网 IP 错误 | 1. 检查服务端 frps 服务是否正常运行;2. 确认安全组放行 7000 端口;3. 核对客户端 serverAddr 是否为服务端公网 IP |
| 访问管理面板失败 | 7500 端口未放行;webServer 配置错误;服务端未启动 | 1. 放行 7500 端口;2. 检查服务端 frps.toml 中 webServer 相关配置;3. 重启 frps 服务 |
| 穿透延迟高、卡顿 | 网络质量差;协议选择不当;服务端带宽不足 | 1. 切换 KCP 协议;2. 检查服务端带宽是否充足;3. 优化内网网络 |
7.2 日志排查方法
-
服务端日志:路径为 /usr/local/frp/frps.log(Linux)、D:\frp\frps.log(Windows),可通过 tail -f frps.log 实时查看日志,排查启动和连接错误;
-
客户端日志:路径与服务端类似(frpc.log),实时查看日志可定位代理启动失败、连接异常等问题;
-
配置校验:执行 frps verify -c frps.toml(服务端)或 frpc verify -c frpc.toml(客户端),可预先校验配置文件语法是否正确,避免配置错误导致启动失败。
八、安全优化建议
-
修改默认端口:将 7000(bindPort)、7500(管理面板端口)改为自定义端口,避开默认端口,减少被扫描风险;
-
强化认证:auth.token 务必设置为复杂字符串,避免使用简单密码,防止未授权访问;
-
限制端口范围:通过服务端 allow_ports 配置,限制客户端可映射的端口,禁止映射 21、22、3389 等危险端口;
-
使用 STCP 代理:对于私密服务(如远程桌面、SSH),优先使用 STCP 协议,无需暴露服务端端口,提升安全性;
-
定期更新版本:及时下载 frp 最新版本,修复已知安全漏洞;
-
限制管理面板访问:若无需外网访问管理面板,可将 webServer.addr 改为内网 IP,或在安全组中限制管理面板端口的访问对象(仅允许自己的 IP 访问)。
九、常见操作命令(Linux 系统)
9.1 服务端命令
# 启动 frps 服务
systemctl start frps
# 停止 frps 服务
systemctl stop frps
# 重启 frps 服务
systemctl restart frps
# 查看 frps 运行状态
systemctl status frps
# 查看 frps 日志
journalctl -u frps # 查看所有日志
tail -f /usr/local/frp/frps.log # 实时查看日志
# 校验配置文件
./frps verify -c frps.toml
9.2 客户端命令
# 启动 frpc 服务
systemctl start frpc
# 停止 frpc 服务
systemctl stop frpc
# 重启 frpc 服务
systemctl restart frpc
# 查看 frpc 运行状态
systemctl status frpc
# 查看 frpc 日志
journalctl -u frpc
tail -f /usr/local/frp/frpc.log
# 校验配置文件
./frpc verify -c frpc.toml
十、文档更新与说明
-
本文档基于 frp v0.65+ 版本编写,若后续版本更新导致配置格式变化,可参考官方文档调整;
-
版本区别:v0.65+ 版本优先用 TOML 配置(文档重点),旧版本用 INI 配置(已弃用,新功能不支持);
-
官方文档地址:https://gofrp.org/zh-cn/docs/;
-
若遇到本文档未覆盖的故障,可参考官方文档或 frp GitHub Issues 排查。
&spm=1001.2101.3001.5002&articleId=158960031&d=1&t=3&u=c626edfe74b64d058b3d16d23f41f775)
427

被折叠的 条评论
为什么被折叠?



