详解FRP内网穿透:如何解决运营商无公网IP导致的办公难题

0 阅读1分钟

一、 运营商网络环境的复杂化

近期,国内多地宽带用户反映,动态公网IP(Dynamic Public IP)的获取门槛显著提高。笔者在近期办公地址搬迁后,遇到了联通后台主动断开连接、电信套餐变相涨价等问题。这对于需要频繁进行大数据传输、模型同步的AI开发项目来说,构成了严重阻碍。

二、 解决方案:FRP内网穿透技术详解

针对无公网IP的环境,FRP(Fast Reverse Proxy)提供了成熟的反向代理方案。

  1. 架构原理: 通过公网服务器(Server)转发内网设备(Client)的数据流。

  2. 核心步骤:

    • 环境准备: 采用 VPS + Ubuntu 22.04 环境。

    • 服务端配置: 修改 frps.toml,设定绑定端口及安全令牌。

    • 客户端部署: 支持 Windows/Linux/Docker 平台,实现按需映射。

三、 避坑指南与实操总结

  • 防火墙配置: 必须确保 7000(绑定端口)、7500(管理端)及业务端口在云端安全组完全放行。

  • 稳定性考量: 对于NAS、Git服务,建议开启守护进程,确保服务随系统启动。

通过FRP方案,笔者成功规避了运营商的网络限制,确保了旗下 Panelai 系统的正常迭代。

一、 为什么选择 FRP 架构?

  1. 解决无公网 IP 痛点:通过云服务器(VPS)中转流量,让内网设备秒变公网服务器,实现远程办公与开发。
  2. 极简原生:纯 TCP 端口直连模式,无损耗、极度清爽,一次配置永久省心。
  3. 安全与性能兼顾:统一通过云端安全组管理入口,无需在主路由开启大量 DMZ 映射,配合域名解析更优雅。

二、 服务端(VPS)下载与解压

在 Ubuntu 系统里用命令行搞定。打开 VPS 的 SSH 终端,依次执行:

三、 编写服务端配置 (纯净版)

如果你安装了宝塔面板,强烈建议直接去宝塔网页端操作,比命令行更直观:

  1. 打开宝塔面板 -> 左侧菜单“文件”。
  2. 进入 /usr/local/frp 目录。
  3. 找到 frps.toml,双击编辑它。
  4. 清空里面的默认内容,粘贴以下核心配置并保存:

四、 配置 Systemd 守护进程与启动

回到 SSH 终端,执行下面这行命令打开编辑器:

在窗口里鼠标右键粘贴以下内容(按 Ctrl+O 回车保存,Ctrl+X 退出):

依次执行以下三条命令启动服务:

五、 客户端部署方案 A:群晖 NAS(保姆级极详版)

【注:如果你选择用群晖做主穿透节点,请执行此步骤。】

  1. 本地编写配置文件:在你的电脑桌面上新建一个文本文件,重命名为 frpc.toml(注意后缀必须是 .toml,不是 txt)。用记事本或 VSCode 打开它,填入你的穿透规则(具体代码见第七节),然后保存。
  2. 上传至群晖:打开群晖系统里的 File Station,在 docker 共享文件夹下新建一个名为 frpc 的文件夹。将你刚才在电脑上写好的 frpc.toml 上传到这个 /docker/frpc/ 目录中。
  3. 下载 Docker 镜像:打开群晖 Container Manager,点击左侧“注册表”,搜索 fatedier/frpc,双击下载最新版(latest)。
  4. 配置网络模式(极度重要):在“映像”里选中刚下载的镜像点击运行。在“网络”设置页面,务必勾选“使用与 Docker Host 相同的网络”(即 host 模式)。只有这样,容器才能跨过群晖访问到家里的 PVE、Ubuntu 等其他局域网设备。
  5. 挂载配置文件:在“存储空间设置”页面,点击 “添加文件”(注意是添加文件,千万别点成添加文件夹),选中你刚才上传的 docker/frpc/frpc.toml 文件。在右侧的“装载路径/挂载路径”中手动填写:/etc/frp/frpc.toml,并建议勾选“只读”。
  6. 启动与检查:一路下一步完成创建并启动容器。在“容器”列表中点击它,进入“日志”选项卡,如果看到绿色的 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

九、 架构师级避坑与维护小贴士

  1. 配置生效机制:每次修改服务端的 frps.toml 后,必须在 VPS 的 SSH 终端执行 systemctl restart frps 才能生效。客户端同理,修改后需重启 Docker 容器或进程。
  2. Nginx 域名配合:如果穿透了宝塔里的网站服务,需在宝塔该站点的“域名管理”中添加 绑定的域名:外网端口(例如 api.test.com:2095)才能正常访问,否则会报“未找到站点”。
  3. RustDesk 必开 UDP:若穿透 RustDesk 远程桌面,其对应的 remotePort 必须同时在阿里云安全组中开启 TCPUDP 协议。
  4. 实时状态监控:访问 你的VPS公网IP:7500 查看控制台,确认对应的 Proxy 是否全部显示为绿色的 Online