最近一直在折腾飞牛 fnOS 。
NAS 上跑的服务越来越多之后,我发现公网访问这件事其实挺碎的:
- 域名要做 DDNS
- 服务要配 Nginx 反代
- HTTPS 要申请和续期证书
- 没公网 IP 的时候还得折腾 FRP
- 出问题之后又要去翻各种日志
这些东西单独拿出来其实都不复杂,但来回切几个工具、改配置文件,时间长了还是有点烦。
于是自己写了一个小工具:Fonu。
目前主要是针对 飞牛 fnOS 开发和测试的,目标比较简单:
尽量在一个 Web 页面里,把 NAS 公网访问相关的事情都处理掉。
目前已经有:
Nginx 反向代理管理
DDNS
- Cloudflare
- DNSPod
- 阿里云
- 腾讯云
- 火山引擎
Let's Encrypt HTTPS 证书自动申请 / 续期
FRP 内网穿透
公网 IP / 域名 / 证书 / 服务状态仪表盘
Nginx 访问日志、错误日志
请求量和流量统计
邮件 / Webhook / Telegram 通知
配置备份和恢复
深色模式
产品预览
仪表盘

|
DDNS

|
HTTPS 证书

|
HTTPS 证书 · 申请向导

|
反向代理

|
反向代理 · 规则详情

|
反向代理 · 规则配置

|
反向代理 · 安全设置

|
反向代理 · Nginx 配置

|
日志中心

|
内网穿透 · Web 网关

|
内网穿透 · TCP 转发

|
系统设置

|
系统设置 · 高级

|
技术栈
层级 |
技术 |
|---|
后端 |
Go 1.23 、标准库 HTTP 、SQLite ( modernc.org/sqlite ) |
反向代理 |
内置 Nginx (动态生成配置、热重载) |
证书 |
go-acme/lego ( Let's Encrypt ) |
DDNS |
Cloudflare / DNSPod / 阿里云 / 腾讯云 / 火山引擎 DNS API |
内网穿透 |
内置 frpc ( v0.71.x ); Web 网关穿透 Fonu Nginx ,另支持 TCP 远程端口映射 |
前端 |
Vue 3 、TypeScript 、Vite 、Naive UI 、ECharts |
部署 |
Docker 多架构镜像( amd64 / arm64 )、GitHub Actions CI |
部署
docker run -d \
--name fonu \
--net=host \
-v ./data:/data \
--restart unless-stopped \
muxui/fonu:latest
然后访问:
http://NAS-IP:6893
因为飞牛本身会占用 80/443 ,所以针对 fnOS 默认使用高位端口做反代,避免直接和系统 Nginx 打架。
关于没有公网 IP
这个也是我自己比较想解决的一个场景。
Fonu 现在内置了 frpc ,可以配合一台有公网 IP 的 VPS 跑 frps:
用户
↓
DNS
↓
VPS / frps
↓
NAS / frpc
↓
Fonu Nginx
↓
内网服务
也就是说即使家里没有公网 IPv4 ,域名、HTTPS 、反代规则、访问日志这些还是统一在 Fonu 里面管理。
GitHub:
https://github.com/O96u/Fonu