记录自研 FRP 管理工具 Mole-go 的公版部署与使用过程,探讨如何通过 Go + Wails 3 构建极致简单的内网穿透图形化管理体验。
在介绍部署高性能的内网穿透开发演示环境时,虽然也提到了部署配置,但是不太详细。这次本文将带你详细的快速完成基于 Mole 的内网穿透服务部署,包含服务端 (frps) 与桌面客户端 (Mole/frpc) 的配置与排查要点。
📖 核心概念
首先,我们了解几个关键概念,只有了解之后我们才能进行扩展,应用到更多的场景中。
什么是 FRP?
FRP (Fast Reverse Proxy) 是一款高性能的反向代理/内网穿透工具,它通过在公网服务器和内网客户端之间建立隧道,使外网可以访问内网服务(如 NAS、树莓派、开发环境等)。什么是 Mole?
Mole 是一款基于 wails3 开发的 FRP 桌面客户端,提供图形化管理界面,简化 frpc 的配置与使用:- 告别繁琐命令行
- 支持系统托盘常驻,防止误关窗口导致中断
- 支持 HTTP/HTTPS、TCP、UDP 等多种协议
🛠️ 部署前准备
- 必须有一台拥有公网 IP 的低配云服务器(例如1核1G内存的阿里云、腾讯云等),如果你需要提供视频等服务,那么带宽要高,服务器配置视情况进行调高。
- FRP 服务端(frps)建议使用 FRP Releases 的 v0.65.0 或更高版本,可以从https://91demo.top/tools/下载我已经打包好各平台的服务端。
- Mole 桌面客户端安装包,可以从https://91demo.top/tools/直接下载,或者从Github下载源码littletow/mole-go编译。
- 需要具备基本网络与防火墙管理知识。
1. 服务端配置(frps)
在你拥有公网IP的云服务器上部署frps服务端:
下载并解压 FRP 服务端(以 Linux 为例)
访问 FRP 的 Releases 页面下载对应版本并解压(示例为 v0.65.0 或更高)。编写 frps.toml 配置文件(示例)
将以下内容写入frps.toml,并根据实际需求调整端口与 token:bindPort = 7000 # 客户端连接端口(frpc 连接到此端口) vhostHTTPPort = 8080 # HTTP 映射的公网访问端口(可选) # 建议设置 auth.token 为复杂字符串,防止未授权连接 auth.token = "你的复杂密匙"auth.token强烈推荐设置,这样可以防止他人滥用你的计算机资源。这个配置就可以满足你的HTTP代理请求,如果需要UDP或者TCP,你还需要配置远端访问端口。
启动 frps(示例)
在服务端目录运行:./frps -c frps.toml这样就能启动服务,供客户端进行连接,但是这种方式有个缺点,就是当终端关闭时,服务就中断了,所以我推荐使用 systemd 或类似进程管理工具把 frps 设为服务以便后台运行,开机自启与日志管理。另外特别要注意的是,必须确保云服务器安全组、防火墙已放行
bindPort(本例为 7000)以及你需要的 HTTP/TCP 端口(例如 8080、其他映射端口)。在服务端支持 HTTPS(使用nginx或者caddy反向代理)
我推荐的做法是在服务器上使用 nginx 或 Caddy 负责 HTTPS,nginx/Caddy 监听 443,反向代理到 frps 的 vhostHTTPPort(例如 8080)。下面是两种代理的配置:Caddy配置:
example.com { reverse_proxy 127.0.0.1:8080 }Nginx配置:
server { listen 80; server_name example.com; # 可直接重定向到 https return 301 https://$host$request_uri; } server { listen 443 ssl http2; server_name example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers off; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://127.0.0.1:8080; # 转发到 frps 的 vhostHTTPPort } }这里的域名需要调整为你自己的域名,如果仅仅自用或者小中型网站我推荐使用Caddy,因为Caddy 会自动为你的域名获取并续期 Let’s Encrypt 证书(默认),配置极简,推荐用于快速部署。如果已经有Nginx环境,使用Nginx也是一个不错选择,它性能极高。
这个架构使用HTTPS的工作原理:
外部客户端访问 https://yourdomain.com -> nginx/Caddy 在服务器上完成 TLS -> 将解密后的 HTTP 请求以带 Host 头的形式代理到 frps 的 vhostHTTPPort -> frps 根据 Host(Host=example.com)将请求转发到对应 frpc(在内网的客户端)。它的好处是域名证书管理集中(nginx/Caddy 或 Caddy 自动化)、支持 HTTP/2、性能高、能在边缘添加 WAF、缓存、访问控制等功能,内网服务专心业务逻辑。
2. 客户端配置(Mole / frpc)
下载与安装 Mole
前往 Mole 的 Release 页面或从https://91demo.top/tools/下载适合你系统的安装包并安装或解压。基础连接设置(在 Mole 配置界面中):
- 服务器地址:填入你的云服务器的公网 IP(或域名)
- 服务器端口:填入
7000(须与服务端bindPort一致) - Token:填入服务端
auth.token中的值
添加代理规则(在 Mole 中新增条目)
- HTTP/HTTPS(适用于网站)
- 类型:HTTP/HTTPS
- 本地端口(Local Port):你内网 Web 服务运行的端口(例如 80、8080)
- 自定义域名(如果使用域名映射)
- TCP/UDP(适用于 SSH、RDP、任意 TCP 服务或 UDP 服务)
- 类型:TCP 或 UDP
- 本地端口:内网服务监听端口(例如 SSH 的 22)
- 远程端口:映射到 frps 的公网可访问端口(如果不使用随机端口,可指定)
- HTTP/HTTPS(适用于网站)
保存配置:点击 Mole 配置界面上的 “保存” 按钮,注意需要重新连接才能加载最新配置。
可选:查看并编辑 frpc 配置
- Mole 会在用户目录下解压 frpc 二进制并生成配置文件,若需要可手动修改后测试。
🚀 第三步:开启穿透服务
- 一键启动:在 Mole 控制页面点击 “启动” 按钮。
- 状态验证:在 Mole 的日志区域观察输出,若显示
start proxy success或类似成功信息,表示连接已建立。 - 静默运行:关闭主窗口后,程序会缩至系统托盘继续运行(避免误关闭导致穿透中断)。
看起来复杂,实际操作非常简单,并且该套服务配置一次就可以永久使用。
❓ 常见问题排查(FAQ)
| 问题现象 | 解决方案 |
|---|---|
| 连接服务器失败 | 1. 检查云服务器安全组/防火墙是否放行 7000(bindPort)及所需映射端口。2. 检查服务端与客户端的 token 是否完全一致(注意空格/换行)。 |
| 如何查看底层报错 | 在 Mole 的 “日志” 页面可查看 frpc 的原生输出;也可到用户目录找到 frpc 的日志或手动运行 frpc 查看控制台输出。 |
| 如何手动验证 | Mole 会在用户目录下生成 frpc 二进制和配置文件,你可以进入该目录手动运行 ./frpc -c frpc.toml(或对应配置文件)进行调试。 |
| 是否支持自启动 | Mole 目前不支持系统开机自启,但支持软件启动后自动启动配置好的 frpc 服务(请在 Mole 设置中查看相关选项)。 |
🔗 相关资源
- 项目源码(示例):littletow/mole-go
- FRP Releases(下载 frps/frpc):fatedier/frp
- Mole Releases(下载桌面客户端):littletow/mole-go
- 云服务器:阿里云 - 专享特惠
- 云服务器:腾讯云 - 专享特惠
💡 小贴士
- 强烈建议设置复杂的
auth.token并妥善保管,避免被未授权的 frpc 连接。 - 在生产环境中,将 frps 配置为 systemd 服务以便可靠运行并自动重启。
- 使用基于域名的 HTTP 映射时,请确保 DNS 指向你的 frps 公网 IP,或在 vhost 配置上使用正确的域名。
- 如果你觉得 Mole 客户端对你有帮助,欢迎前往 GitHub 为项目点个 Star ⭐,或在 Issues 中提交建议和问题。