一、 运营商网络环境的复杂化
近期,国内多地宽带用户反映,动态公网IP(Dynamic Public IP)的获取门槛显著提高。笔者在近期办公地址搬迁后,遇到了联通后台主动断开连接、电信套餐变相涨价等问题。这对于需要频繁进行大数据传输、模型同步的AI开发项目来说,构成了严重阻碍。
二、 解决方案:FRP内网穿透技术详解
针对无公网IP的环境,FRP(Fast Reverse Proxy)提供了成熟的反向代理方案。
-
架构原理: 通过公网服务器(Server)转发内网设备(Client)的数据流。
-
核心步骤:
-
环境准备: 采用 VPS + Ubuntu 22.04 环境。
-
服务端配置: 修改
frps.toml,设定绑定端口及安全令牌。 -
客户端部署: 支持 Windows/Linux/Docker 平台,实现按需映射。
-
三、 避坑指南与实操总结
-
防火墙配置: 必须确保 7000(绑定端口)、7500(管理端)及业务端口在云端安全组完全放行。
-
稳定性考量: 对于NAS、Git服务,建议开启守护进程,确保服务随系统启动。
通过FRP方案,笔者成功规避了运营商的网络限制,确保了旗下 Panelai 系统的正常迭代。
一、 为什么选择 FRP 架构?
- 解决无公网 IP 痛点:通过云服务器(VPS)中转流量,让内网设备秒变公网服务器,实现远程办公与开发。
- 极简原生:纯 TCP 端口直连模式,无损耗、极度清爽,一次配置永久省心。
- 安全与性能兼顾:统一通过云端安全组管理入口,无需在主路由开启大量 DMZ 映射,配合域名解析更优雅。
二、 服务端(VPS)下载与解压
在 Ubuntu 系统里用命令行搞定。打开 VPS 的 SSH 终端,依次执行:
三、 编写服务端配置 (纯净版)
如果你安装了宝塔面板,强烈建议直接去宝塔网页端操作,比命令行更直观:
- 打开宝塔面板 -> 左侧菜单“文件”。
- 进入
/usr/local/frp目录。 - 找到
frps.toml,双击编辑它。 - 清空里面的默认内容,粘贴以下核心配置并保存:
四、 配置 Systemd 守护进程与启动
回到 SSH 终端,执行下面这行命令打开编辑器:
在窗口里鼠标右键粘贴以下内容(按 Ctrl+O 回车保存,Ctrl+X 退出):
依次执行以下三条命令启动服务:
五、 客户端部署方案 A:群晖 NAS(保姆级极详版)
【注:如果你选择用群晖做主穿透节点,请执行此步骤。】
- 本地编写配置文件:在你的电脑桌面上新建一个文本文件,重命名为
frpc.toml(注意后缀必须是.toml,不是 txt)。用记事本或 VSCode 打开它,填入你的穿透规则(具体代码见第七节),然后保存。 - 上传至群晖:打开群晖系统里的 File Station,在
docker共享文件夹下新建一个名为frpc的文件夹。将你刚才在电脑上写好的frpc.toml上传到这个/docker/frpc/目录中。 - 下载 Docker 镜像:打开群晖 Container Manager,点击左侧“注册表”,搜索
fatedier/frpc,双击下载最新版(latest)。 - 配置网络模式(极度重要):在“映像”里选中刚下载的镜像点击运行。在“网络”设置页面,务必勾选“使用与 Docker Host 相同的网络”(即 host 模式)。只有这样,容器才能跨过群晖访问到家里的 PVE、Ubuntu 等其他局域网设备。
- 挂载配置文件:在“存储空间设置”页面,点击 “添加文件”(注意是添加文件,千万别点成添加文件夹),选中你刚才上传的
docker/frpc/frpc.toml文件。在右侧的“装载路径/挂载路径”中手动填写:/etc/frp/frpc.toml,并建议勾选“只读”。 - 启动与检查:一路下一步完成创建并启动容器。在“容器”列表中点击它,进入“日志”选项卡,如果看到绿色的
login to server success,说明群晖已经成功与云服务器握手!
六、 客户端部署方案 B:Ubuntu 虚拟机【二选一】
【注:如果你不打算用群晖,而是想在独立的 Ubuntu 虚拟机(如 PVE 下的虚拟机)里跑客户端,请直接在虚拟机的 SSH 终端执行以下操作。】
七、 客户端(FRPC)穿透规则规划代码
无论你用方案 A 还是方案 B,你的 frpc.toml 文件内容结构都是一样的。注意:remotePort(外网端口)必须唯一,不可冲突:
八、 云厂商与宝塔安全组放行准则
因为走纯端口直连,所有的业务端口都直接暴露在公网上,防火墙放行是最关键的一步。
请去宝塔面板 -> 安全(以及阿里云/腾讯云后台的“安全组”),将以下端口全部放行:
- 8700 (FRP 隧道通信必开)
- 7500 (FRP 后台管理面板必开)
- 8006 (给 PVE 预留)
- 5000 (给 NAS 预留)
- 2095 (给宝塔网站 80 端口预留)
- (以及你在
frpc.toml里配置的其他所有自定义remotePort)
九、 架构师级避坑与维护小贴士
- 配置生效机制:每次修改服务端的
frps.toml后,必须在 VPS 的 SSH 终端执行systemctl restart frps才能生效。客户端同理,修改后需重启 Docker 容器或进程。 - Nginx 域名配合:如果穿透了宝塔里的网站服务,需在宝塔该站点的“域名管理”中添加
绑定的域名:外网端口(例如api.test.com:2095)才能正常访问,否则会报“未找到站点”。 - RustDesk 必开 UDP:若穿透 RustDesk 远程桌面,其对应的
remotePort必须同时在阿里云安全组中开启 TCP 和 UDP 协议。 - 实时状态监控:访问
你的VPS公网IP:7500查看控制台,确认对应的 Proxy 是否全部显示为绿色的 Online。