记录自研 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服务端:

  1. 下载并解压 FRP 服务端(以 Linux 为例)
    访问 FRP 的 Releases 页面下载对应版本并解压(示例为 v0.65.0 或更高)。

  2. 编写 frps.toml 配置文件(示例)
    将以下内容写入 frps.toml,并根据实际需求调整端口与 token:

    bindPort = 7000           # 客户端连接端口(frpc 连接到此端口)
    vhostHTTPPort = 8080      # HTTP 映射的公网访问端口(可选)
    # 建议设置 auth.token 为复杂字符串,防止未授权连接
    auth.token = "你的复杂密匙"
    

    auth.token强烈推荐设置,这样可以防止他人滥用你的计算机资源。这个配置就可以满足你的HTTP代理请求,如果需要UDP或者TCP,你还需要配置远端访问端口。

  3. 启动 frps(示例)
    在服务端目录运行:

    ./frps -c frps.toml
    

    这样就能启动服务,供客户端进行连接,但是这种方式有个缺点,就是当终端关闭时,服务就中断了,所以我推荐使用 systemd 或类似进程管理工具把 frps 设为服务以便后台运行,开机自启与日志管理。另外特别要注意的是,必须确保云服务器安全组、防火墙已放行 bindPort(本例为 7000)以及你需要的 HTTP/TCP 端口(例如 8080、其他映射端口)。

  4. 在服务端支持 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)

  1. 下载与安装 Mole
    前往 Mole 的 Release 页面或从https://91demo.top/tools/下载适合你系统的安装包并安装或解压。

  2. 基础连接设置(在 Mole 配置界面中):

    • 服务器地址:填入你的云服务器的公网 IP(或域名)
    • 服务器端口:填入 7000(须与服务端 bindPort 一致)
    • Token:填入服务端 auth.token 中的值
  3. 添加代理规则(在 Mole 中新增条目)

    • HTTP/HTTPS(适用于网站)
      • 类型:HTTP/HTTPS
      • 本地端口(Local Port):你内网 Web 服务运行的端口(例如 80、8080)
      • 自定义域名(如果使用域名映射)
    • TCP/UDP(适用于 SSH、RDP、任意 TCP 服务或 UDP 服务)
      • 类型:TCP 或 UDP
      • 本地端口:内网服务监听端口(例如 SSH 的 22)
      • 远程端口:映射到 frps 的公网可访问端口(如果不使用随机端口,可指定)
  4. 保存配置:点击 Mole 配置界面上的 “保存” 按钮,注意需要重新连接才能加载最新配置。

  5. 可选:查看并编辑 frpc 配置

    • Mole 会在用户目录下解压 frpc 二进制并生成配置文件,若需要可手动修改后测试。

🚀 第三步:开启穿透服务

  1. 一键启动:在 Mole 控制页面点击 “启动” 按钮。
  2. 状态验证:在 Mole 的日志区域观察输出,若显示 start proxy success 或类似成功信息,表示连接已建立。
  3. 静默运行:关闭主窗口后,程序会缩至系统托盘继续运行(避免误关闭导致穿透中断)。

看起来复杂,实际操作非常简单,并且该套服务配置一次就可以永久使用。

❓ 常见问题排查(FAQ)

问题现象解决方案
连接服务器失败1. 检查云服务器安全组/防火墙是否放行 7000(bindPort)及所需映射端口。2. 检查服务端与客户端的 token 是否完全一致(注意空格/换行)。
如何查看底层报错在 Mole 的 “日志” 页面可查看 frpc 的原生输出;也可到用户目录找到 frpc 的日志或手动运行 frpc 查看控制台输出。
如何手动验证Mole 会在用户目录下生成 frpc 二进制和配置文件,你可以进入该目录手动运行 ./frpc -c frpc.toml(或对应配置文件)进行调试。
是否支持自启动Mole 目前不支持系统开机自启,但支持软件启动后自动启动配置好的 frpc 服务(请在 Mole 设置中查看相关选项)。

🔗 相关资源


💡 小贴士

  • 强烈建议设置复杂的 auth.token 并妥善保管,避免被未授权的 frpc 连接。
  • 在生产环境中,将 frps 配置为 systemd 服务以便可靠运行并自动重启。
  • 使用基于域名的 HTTP 映射时,请确保 DNS 指向你的 frps 公网 IP,或在 vhost 配置上使用正确的域名。
  • 如果你觉得 Mole 客户端对你有帮助,欢迎前往 GitHub 为项目点个 Star ⭐,或在 Issues 中提交建议和问题。