最近一直在折腾飞牛 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

DDNS |

HTTPS 证书

HTTPS 证书 |
HTTPS 证书 · 申请向导

证书申请 |

反向代理

反向代理 |
反向代理 · 规则详情

反向代理规则详情 |

反向代理 · 规则配置

反向代理规则配置 |
反向代理 · 安全设置

反向代理安全设置 |

反向代理 · Nginx 配置

反向代理 Nginx 配置 |
日志中心

日志中心 |

内网穿透 · Web 网关

内网穿透 Web 网关 |
内网穿透 · TCP 转发

内网穿透 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

主楼