[开源] Fonu - 专为 fnOS 准备的轻量 DDNS + HTTPS 证书 + 反向代理工具

最近一直在折腾飞牛 fnOS 的公网访问。平时真正用得比较多的,其实就三件事:DDNS、HTTPS 证书、反向代理。
社区里已有 Lucky 等成熟方案,功能非常强。但对我自己来说,长期打开的也就这几项,很多高级能力基本用不到,整体略重。所以干脆写了一个更轻量的:Fonu——面向 fnOS 公网访问,把「域名 → DDNS → 证书 → 反代 → 内网服务」这条链路尽量做简单。环境变量、端口说明、Compose 示例见 GitHub README;这篇是推广,不是说明书。
Fonu 是做什么的
Fonu 不是「大而全」的网络工具,而是把 NAS 公网访问最常用的几块收进一个 Web 后台:
- DDNS:IPv4 / IPv6,多域名,Cloudflare、DNSPod、阿里云、腾讯云 DNS
- HTTPS 证书:ACME 申请与自动续签
- 反向代理:HTTP / HTTPS、WebSocket,流量统计、当前连接数、访问 / 错误日志
- 访问保护:IP 白名单 / 黑名单、大陆 IP 限制、Basic Auth、请求限流、连接数限制
一条链路大概是这样:
域名 → DDNS → HTTPS 证书 → 反向代理 → fnOS / MoviePilot / Jellyfin / 青龙 / …和 PicHost 一样,都是我自己在 NAS 上长期跑着、顺手开源出来的小工具;Fonu 管公网入口,PicHost 管博客配图。
为什么又写一个反代工具
估计很多人第一反应是:Lucky 已经很成熟了,为什么还要写?
原因很直白:我自己的需求比较单一——就是 DDNS + 证书 + 反代。Lucky 功能全面,但很多我用不到;Fonu 的方向不是替代 Lucky,而是:
只把飞牛 NAS 公网访问常用的几项单独做好:简单、轻量、配置直观。
需要非常完整、非常高级的网络能力,Lucky 肯定更合适;如果只是给自己的 fnOS 配域名、证书、反代,可以试试 Fonu。
专为 fnOS,独立 Nginx
Fonu 目前按 飞牛 fnOS 场景开发和测试,我自己也主要在 fnOS 上用。群晖、威联通、自建 Linux 等环境理论上能跑 Docker 就可能能用,但没有专门做过完整测试,现阶段优先推荐 fnOS 用户。
另一个重要设计:Fonu 跑自己独立的一套 Nginx,不会去改飞牛系统自带的 Nginx 配置。
fnOS├── 飞牛自己的 Nginx└── Fonu ├── DDNS ├── HTTPS 证书 └── 独立 Nginx → 反向代理增加一条反代规则,不必动系统 Nginx;两边正常情况下互不干扰。飞牛已占用 80/443 时,Fonu 默认用高位端口(如 18080 / 9443)做反代,管理后台在 :6893。
产品展示
后台基于 Vue 3 + Naive UI,支持浅色 / 深色主题。下面是我自己在 fnOS 上实际在用的界面截图(v0.1.24)。
仪表盘
公网 IP、域名、证书、服务状态一屏看完;今日请求趋势、实时流量、最近访问与系统日志也集中在这里,偶尔扫一眼就知道有没有异常。

DDNS
多服务商、多根域名,解析记录与同步状态一页管理;支持 IPv4 / IPv6,同步间隔可配。

HTTPS 证书
ACME 申请与自动续签,证书 / 私钥 / ZIP 下载;申请过程有实时日志,快到期会在仪表盘提示。

反向代理
规则列表可看每条服务的运行状态、当前 / 总上下行、连接数;全局汇总卡片一眼看整体流量。

新建规则尽量保持简单:填前端域名、监听端口、目标地址,勾选 HTTPS 和跳转即可。例如 mp.example.com → http://192.168.1.100:3000。

点进单条规则,概览页看实时流量曲线和累计统计;日志页 SSE 推送访问记录,服务突然访问异常先在这里排查。


访问保护
反代出去的可能是 fnOS 后台、青龙、MoviePilot、qBittorrent、Alist 等管理界面。每条规则可单独配安全策略:大陆 IP 限制、黑白名单、Basic Auth、请求限流、连接数限制、安全响应头等;也有「一键推荐」快捷开启常用组合。Fonu 不打算做成复杂 WAF,而是家庭 NAS 场景里实用、好配、别太重。

设置
外观与时区、DDNS / 证书自动任务、反代可信代理、管理密码、Webhook 通知、ACME 邮箱、配置导出与恢复等。

想试的话
现阶段只提供 Docker 部署,暂无 fnOS 原生 .fpk;Host 网络模式在飞牛上最省事:
docker run -d \ --name fonu \ --network host \ -v ./data:/data \ --restart unless-stopped \ muxui/fonu:latest数据统一在 /data,务必挂载 volume,更新容器配置才不会丢。启动后看日志拿 admin 初始密码,访问 http://<主机IP>:6893/login 登录,进设置立刻改密码。
镜像:hub.docker.com/r/muxui/fonu · 源码:github.com/O96u/Fonu(GPL-3.0)
当前状态
Fonu 还在持续开发,功能和 UI 会继续调整。目前主要是我自己 fnOS 环境在用,也欢迎更多飞牛用户帮忙测:DDNS、IPv4/IPv6、证书续签、WebSocket、Jellyfin / MoviePilot / 青龙 / 各类 Docker Web 服务,以及不同网络环境。遇到 Bug 或功能建议,直接去 GitHub 提 Issue。
写在最后
公网访问这件事,对我来说不需要一个「全能网络中枢」,只需要把域名、证书、反代三件事做得顺手、别跟系统 Nginx 打架。Fonu 就是按这个思路写的;若你也在 fnOS 上折腾同类需求,去 GitHub 点个 Star,有问题欢迎 Issue 或评论区聊。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!

