| 2026-08-31
在开发、测试或远程办公场景中,我们常常需要从外网访问处于内网中的服务器、数据库或Web服务。然而,由于公网IP稀缺、运营商NAT限制或缺乏路由器管理权限,直接暴露内网服务变得困难。frp内网穿透教程将帮助你利用一款轻量级反向代理工具,轻松打通内外网壁垒。frp(Fast Reverse Proxy)是一款开源的高性能内网穿透工具,支持TCP、UDP、HTTP、HTTPS等协议,能够将内网服务安全地映射到公网服务器上。下面我们将从环境准备、服务端部署、客户端配置到实际测试,一步步完成frp内网穿透教程。
1. 环境准备与基本原理
在开始frp内网穿透教程之前,需要明确两个角色:服务端(通常部署在有公网IP的VPS或云主机上)和客户端(部署在内网需要被访问的机器上)。frp的工作流程是:客户端主动连接服务端,服务端监听公网端口,当外网用户访问服务端的指定端口时,流量通过隧道转发至客户端的本地服务。因此,你必须拥有一台具备公网IP的服务器(如腾讯云、阿里云、华为云等),并确保防火墙允许相关端口通信。本教程假设服务端操作系统为Linux(CentOS/Ubuntu),客户端为Linux或Windows。
2. 服务端部署(frps)
服务端需要运行frps程序。首先通过SSH登录到你的公网服务器,下载最新版frp。访问frp GitHub Releases页面获取对应架构的压缩包(例如frp_0.58.0_linux_amd64.tar.gz)。使用wget下载并解压:
wget https://github.com/fatedier/frp/releases/download/v0.58.0/frp_0.58.0_linux_amd64.tar.gz
tar -zxvf frp_0.58.0_linux_amd64.tar.gz
cd frp_0.58.0_linux_amd64
服务端配置文件为frps.toml(新版使用TOML格式,旧版为ini)。创建一个最小化配置,编辑该文件:

[common]
bind_port = 7000
**可选:设置认证令牌,增强安全性**
token = "your_secure_token"
保存后,启动服务端:
./frps -c frps.toml
建议使用systemd管理以便开机自启。将frps复制到/usr/local/bin/,并创建systemd服务单元。至此,服务端已就绪,这是frp内网穿透教程的关键一步。
3. 客户端部署(frpc)
客户端同样下载对应系统版本的frp。以Linux客户端为例,解压后编辑frpc.toml。假设我们需要将内网一台Windows机器的远程桌面(端口3389)映射到公网服务器的3389端口,配置如下:
[common]
server_addr = "你的公网服务器IP"
server_port = 7000
token = "your_secure_token"
[rdp]
type = "tcp"
local_ip = "127.0.0.1"
local_port = 3389
remote_port = 3389
注意:remote_port是公网服务器上开放的端口,必须确保该端口未被占用且防火墙放行。启动客户端:
./frpc -c frpc.toml
如果是Windows客户端,直接双击frpc.exe(需在命令行执行)即可。当控制台显示“start proxy success”时,说明连接建立成功。这是frp内网穿透教程中连接内外网的核心环节。
4. 配置Web服务(HTTP/HTTPS)映射
除了TCP,frp还支持HTTP代理,方便将内网Web服务暴露出去。例如内网运行一个Nginx站点(端口80),希望外网通过http://你的域名:8080访问。修改客户端配置:
[web]
type = "http"
local_port = 80
custom_domains = "yourdomain.com" # 或使用服务器IP+端口
**如果使用域名,需将<a href='https://hsk.oray.com/' target='_blank'>域名解析</a>到服务端IP**
服务端需启用vhost_http_port,在frps.toml中添加:
[common]
bind_port = 7000
vhost_http_port = 8080
这样外网访问http://yourdomain.com:8080即可转发到内网的80端口。此部分也是frp内网穿透教程的常见应用场景,适用于微信开发调试、个人博客远程访问等。
5. 安全加固与运维建议
完成上述frp内网穿透教程后,还需关注安全性:
务必设置token认证,防止未授权客户端连接。
服务端使用allow_ports限制客户端可映射的端口范围,如allow_ports = 2000-3000,3389。
对于HTTP服务,可启用HTTPS,服务端配置vhost_https_port并部署SSL证书。
使用tls_enable = true对控制连接和隧道进行TLS加密(frp v0.52+支持)。
监控frp运行状态,可结合systemd的journal日志或集成到Prometheus。
此外,如果内网服务需要多个子域名,frp支持subdomain配置,配合泛域名解析可实现动态映射。
6. 总结与问题排查
通过本frp内网穿透教程,你已掌握从服务端到客户端的完整部署流程。常见问题包括客户端无法连接(检查防火墙、token、端口占用)、映射成功但访问超时(确认local_ip和local_port正确、服务本身可用)、http映射出现404(检查custom_domains和vhost配置)。建议先在简单场景(如SSH映射)上验证,再扩展至复杂应用。
frp内网穿透教程虽然步骤清晰,但实际网络环境可能遇到特殊NAT或运营商限制,此时可尝试更换bind_port或使用xtcp模式实现P2P穿透。一旦配置稳定,它将极大提升你的开发效率和远程管理能力。
FAQ
Q: frp服务端需要公网IP,如果我没有公网服务器怎么办?
A: 可以考虑使用云厂商的轻量应用服务器,最低配置即可运行frps,成本很低。
Q: frp支持UDP穿透吗?
A: 支持,在客户端配置中将type改为udp即可,常用于游戏联机、DNS转发等场景。
Q: 客户端和服务端版本不一致能正常工作吗?
A: 强烈建议使用相同版本,避免协议兼容性问题。请定期升级。
Q: 如何实现客户端自动重连?
A: frp客户端内置断线重连机制,默认每3秒重试一次,无需额外配置。若需更精细控制,可在frpc.toml中设置login_fail_exit = false。