frp 内网穿透从零搭建指南
之前搭了个 frp 把本地的 stable-diffusion-webui 暴露到公网上,当时在那篇隐藏 cmd 窗口的文章里简单提了一嘴 frp,但没细讲怎么配。后来寻思着这东西挺实用的,干脆写一篇从零开始的完整教程吧。
本文基于 frp v0.52.0+ 版本,使用 TOML 格式配置文件。旧版的 INI 格式(已经不推荐使用了,新功能只能在 TOML/YAML/JSON 格式下生效。frps.ini / frpc.ini)
什么是内网穿透?
简单说,
frp 的架构
frp 分两个角色:
- frps(Server):部署在有公网 IP 的服务器上,负责接收外部请求并转发
- frpc(Client):部署在你的内网机器上,负责把本地服务注册到 frps 上
1 | 外网用户 --> 公网服务器(frps) --> 内网机器(frpc) --> 本地服务 |
就这么简单,下面直接上配置。
部署流程概览
第一步:下载安装 frp
在 GitHub Releases 下载对应平台版本
第二步:配置服务端 frps
编写 frps.toml,配置监听端口和认证 token
第三步:配置客户端 frpc
编写 frpc.toml,配置服务端地址和要转发的本地服务
第四步:开放防火墙
放行 frp 相关端口,云服务器别忘了安全组
第五步:启动测试
启动 frps 和 frpc,看到 login to server success 就搞定了
一、服务端部署(frps)
1. 下载安装
去 GitHub Releases 页面下载对应平台的版本。服务器一般是 Linux amd64:
1 | # 下载(以 v0.61.1 为例,去 GitHub 看最新版本号) |
2. 配置 frps.toml
1 | # 服务端监听地址 |
auth.token 一定要改成一个强密码!别用 12345678 这种,被人扫到就完蛋了。同理 Dashboard 的密码也要改。
3. 用 systemd 管理 frps
创建 service 文件:
1 | sudo vim /etc/systemd/system/frps.service |
编辑 systemd service 文件需要 root 权限,用 sudo 前缀!
写入以下内容:
1 | [Unit] |
启动并设为开机自启:
1 | sudo systemctl daemon-reload |
4. 开放防火墙端口
别忘了开防火墙,不然 frpc 连不上:
1 | sudo ufw allow 7000/tcp |
1 | sudo firewall-cmd --permanent --add-port=7000/tcp |
除了系统防火墙,还要去控制台的安全组里放行 7000 和 7500 端口!很多人卡在这一步。
云服务器(阿里云、腾讯云等)除了系统防火墙,还要去控制台的安全组里放行端口,很多人卡在这一步。咱说的就是你,别光配 ufw 就以为完事了!
二、客户端配置(frpc)
1. 下载安装
跟服务端一样,去 GitHub Releases 下载对应你本地机器平台的版本。Windows 的话下载 frp_x.x.x_windows_amd64.zip,解压就行。
2. 配置 frpc.toml
假设我们要把本地的 Web 服务(比如 SD WebUI 跑在 127.0.0.1:7860)暴露到公网服务器的 6000 端口:
1 | # 服务端地址 |
配置好之后启动:
1 | # Linux |
看到 login to server success 就说明连上了。这时候访问 http://你的服务器IP:6000 就能打开你本地的 Web 服务了。
好家伙,到这一步你已经成功了!如果要停止 frpc,按 Ctrl+C 即可。
3. 多个服务怎么办?
直接多加几个 [[proxies]] 就行:
多服务配置示例
1 | [[proxies]] |
三、安全注意事项
这个话题很重要,
1. Token 认证必须配
frp 默认使用 token 认证(auth.method = "token"),
2. Dashboard 密码要改
Dashboard 默认账号密码是 admin / admin,127.0.0.1,通过 SSH 隧道访问,不要直接暴露到公网。
3. 不要暴露敏感端口
千万不要把 3389(RDP)、22(SSH,除非你知道自己在干嘛)、3306(MySQL)等端口直接暴露到公网。如果非要暴露,至少改掉默认端口号,并且配合 allowPorts 限制可用端口范围。
4. 服务端限制端口范围
在 frps.toml 中可以限制客户端能使用的端口范围:
1 | # 只允许这些端口范围 |
5. TLS 加密
frp 从 v0.50.0 开始 transport.tls.force = true),客户端与服务端之间的通信是加密的。如果需要强制要求 TLS,可以在 frps.toml 中加上:
1 | transport.tls.force = true |
安全检查清单
配置了 token 认证,且使用强密码
Dashboard 密码已修改,绑定 127.0.0.1
没有暴露 3389、22、3306 等敏感端口
服务端配置了 allowPorts 限制端口范围
TLS 加密已启用
定期检查 frps 日志,排查异常连接
四、Windows 下 frpc 开机自启
Windows 下 frpc 是个命令行程序,直接写 bat 自启动的话每次开机都会弹一个黑框,关了服务就没了。咱不能忍,得搞个优雅的方案。
关于如何在 Windows 下开机自启动命令行程序并隐藏 cmd 窗口,我之前专门写过一篇文章,详细介绍了用 VBS 脚本隐藏窗口的方法,详见这篇文章。
简单说就是写一个 VBS 脚本来启动 frpc:
VBS 脚本实现
1 | Set ws = CreateObject("Wscript.Shell") |
保存为 start_frpc.vbs,然后把这个 VBS 文件的快捷方式丢到启动文件夹里:
1 | C:\Users\你的用户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup |
或者用
五、常用排错命令
排错命令速查
1 | # 查看 frps 状态 |




