FRP的核心原理是通过公网服务器中转内网流量,实现内网穿透,配置关键在于正确设置frps服务端与frpc客户端的配置文件,确保端口映射与认证令牌一致。
FRP服务器与客户端配置实战指南
在数字化转型的浪潮中,许多企业和个人开发者都面临着将内网服务暴露给公网的需求,无论是远程桌面控制、内网Web服务发布,还是IoT设备的数据回传,FRP(Fast Reverse Proxy)凭借其高性能和易用性,成为了业内共识认为的首选工具之一,配置FRP并非复杂的代码编写,而是一场关于网络拓扑与端口管理的精密配合。
服务端(frps)环境部署
服务端是FRP架构的大脑,负责接收来自客户端的连接请求并转发数据,选择一台拥有公网IP的云服务器(如简米云、酷番云或AWS)作为服务端是基础前提。
下载与解压
访问FRP的官方GitHub仓库,根据服务器操作系统(Linux/Windows)和架构(amd64/arm64)下载对应版本,以Linux为例,执行以下命令:
wget https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_linux_amd64.tar.gz
tar -xzvf frp_0.52.3_linux_amd64.tar.gz
cd frp_0.52.3_linux_amd64
核心配置文件frps.ini
配置文件是服务端行为的定义书,创建一个名为frps.ini的文件,填入以下基础配置:
[common]
# 绑定端口,默认7000,建议修改为非标准端口以增加安全性
bind_port = 7000
# 绑定地址,0.0.0.0表示监听所有网卡
bind_addr = 0.0.0.0
# 身份验证令牌,必须与客户端保持一致
token = your_strong_password
# Dashboard监控面板端口
dashboard_port = 7500
# 监控面板用户名和密码
dashboard_user = admin
dashboard_pwd = admin_password
业内专家指出,设置强密码的token是防止未授权访问的第一道防线,切勿使用默认值或简单字符串。
启动服务端
使用nohup命令后台运行,确保服务在终端关闭后依然存活:
nohup ./frps -c ./frps.ini > frps.log 2>&1 &
你可以通过浏览器访问http://<服务器IP>:7500,输入预设的用户名和密码,查看实时连接状态和流量统计。
客户端(frpc)内网穿透配置
客户端部署在内网机器上,它负责监听本地服务,并通过加密隧道将流量转发给服务端。
下载与解压
在需要穿透的内网机器上下载相同版本的FRP客户端,解压后进入目录。
核心配置文件frpc.ini
创建frpc.ini文件,配置内容如下:
[common]
# 服务端地址
server_addr = <你的公网服务器IP>
# 服务端端口
server_port = 7000
# 身份验证令牌,必须与服务端一致
token = your_strong_password
示例1:远程桌面(RDP)穿透
[rdp]type = tcplocal_ip = 127.0.0.1local_port = 3389remote_port = 6000
示例2:Web服务穿透
[web]type = httplocal_ip = 127.0.0.1local_port = 80custom_domains = <你的域名>
这里需要特别注意,remote_port是公网访问时使用的端口,而local_port是内网服务实际监听的端口,对于Web服务,推荐使用HTTP类型,并绑定自定义域名,这样可以利用FRP的HTTP路由功能,实现基于域名的多服务分发。
启动客户端
同样使用后台运行命令:
nohup ./frpc -c ./frpc.ini > frpc.log 2>&1 &
FRP服务器和客户端配置常见问题排查
在实际操作中,连接失败是最常见的问题,以下是几种典型场景的解决方案。
连接被拒绝或超时
如果客户端启动后日志显示连接失败,首先检查防火墙,云服务器厂商(如简米云安全组、酷番云安全组)默认会拦截非标准端口,务必在控制台放行bind_port(如7000)和dashboard_port(如7500)对应的入方向规则。
Token认证失败
日志中出现authentication failed
错误,通常是因为frps.ini和frpc.ini中的token字段不一致,请仔细比对,注意大小写和空格,建议将此字段设置为长随机字符串,避免使用特殊字符。
Web服务无法访问
对于HTTP类型的穿透,如果绑定域名后无法访问,需确保:
- 域名已解析到公网服务器IP。
- 服务器防火墙放行了80/443端口(如果使用默认HTTP端口)。
- 在
frpc.ini中正确配置了custom_domains。
FRP与Ngrok对比及选型建议
许多用户在开始时会纠结于选择FRP还是Ngrok,这两种工具各有优劣,适用于不同场景。
| 特性 | FRP | Ngrok |
|---|---|---|
| 部署方式 | 需自建服务端,完全掌控 | 主要使用官方公共服务器,也可自建 |
| 安全性 | 高,数据完全私有 | 中等,使用公共服务器时数据经过第三方 |
| 成本 | 仅需服务器费用,无额外订阅费 | 免费额度有限,高级功能需付费订阅 |
| 稳定性 | 取决于自建服务器性能 | 官方服务稳定,但国内访问速度可能受限 |
| 适用人群 | 有服务器资源、注重隐私和长期稳定性的开发者 | 快速测试、临时分享、无服务器资源的用户 |
据工信部数据,近年来国内对数据安全的监管日益严格,自建FRP服务因其数据不经过第三方平台,成为企业内网穿透的主流选择,对于个人开发者而言,如果仅用于临时调试,Ngrok的便捷性无可替代;但若涉及生产环境或敏感数据,FRP是更稳妥的方案。
FRP服务器和客户端配置进阶优化
当基础配置完成后,可以通过以下优化提升体验。
使用HTTPS加密
在frpc.ini的HTTP代理配置中,可以指定
tls_enable = true,FRP会自动处理TLS握手,但这需要服务端配置SSL证书,或者使用支持SNI的域名解析。
多服务复用端口
通过HTTP类型的custom_domains,你可以在同一个remote_port(如80)下映射多个不同的内网服务,只需为每个服务绑定不同的域名即可,这大大节省了公网端口资源。
日志轮转与监控
建议配置日志轮转策略,避免日志文件无限增长占用磁盘空间,可以使用log_max_days参数限制日志保留天数,定期监控Dashboard的流量使用情况,及时发现异常连接。
Q&A:FRP服务器和客户端配置常见疑问
FRP支持UDP协议穿透吗?
支持,在frpc.ini中,将type设置为udp即可,穿透DNS服务或某些游戏服务器,配置方式与TCP类似,只需指定local_port和remote_port,需要注意的是,UDP是无连接的,因此不适合需要保持长连接的场景,且防火墙对UDP的拦截策略可能与TCP不同,需单独检查。
FRP配置中local_port和remote_port有什么区别?
local_port是内网机器上实际运行服务的端口,例如你本地搭建的Web服务监听在8080端口,那么local_port就是8080。remote_port是公网访问时使用的端口,例如你希望公网用户通过http://<IP>:8080访问,那么remote_port就是8080,两者可以相同,也可以不同,取决于你的网络规划和端口占用情况。
FRP客户端掉线后如何自动重连?
FRP客户端默认支持断线重连,在frpc.ini中,server_port和server_addr保持不变的情况下,客户端会在后台尝试重新连接服务端,如果配置了start参数,可以指定启动时自动连接,对于生产环境,建议使用systemd或supervisor等进程管理工具托管frpc进程,确保服务在崩溃或重启后能自动拉起。
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/473532.html



