【免费下载链接】NetworkOptimizer
Self-hosted optimization, monitoring (NMS), and security audit tool for UniFi Networks. Includes Wi-Fi Optimizer for wireless health scoring and channel optimization, advanced DNS/VLAN/firewall security checks, config optimization suggestions, centralized WAN and LAN speed test server w/ L2 tracing, CM, ONT, SFP, 5G modem stats +more.
Network Optimizer 是一款面向 UniFi 网络的自托管 NMS(网络管理系统),用 .NET 10 + Blazor 构建,提供 Wi-Fi 优化、安全审计、WAN/LAN 测速与设备健康监控等能力。这篇文章从架构视角拆解它的模块化设计:12 个功能如何被拆成职责清晰的 .NET 类库,又如何通过单向依赖和统一存储层拼装成一个可自托管、可扩展的完整系统。
为什么选择 .NET 10 + Blazor 技术栈
对于想搭一套"私有网络监控平台"的新手来说,理解一个项目的技术选型是理解架构的第一步。Network Optimizer 的完整技术栈如下:
| 技术组件 | 在架构中的角色 |
|---|---|
| .NET 10 | 全部服务端与功能模块的运行框架(TargetFramework为net10.0) |
| Blazor Server | Web UI 层,页面在服务端渲染,通过 SignalR 与后端实时通信 |
| EF Core + SQLite | 核心持久层:配置、审计历史、测速结果等结构化数据 |
| InfluxDB 2.x | 可选的时序数据库,承载 SNMP 指标、延迟探针等监控数据 |
| iperf3 / OpenSpeedTest | LAN/WAN/客户端测速引擎 |
| Go 二进制 | 运行在网关上的轻量组件(WAN 测速、WAN Steering、AP Agent) |
| Serilog | 统一日志 |
这个选型的核心思路是:单进程、少外部依赖。不装 InfluxDB 也能用(只是没有时序监控),数据库就是一个 SQLite 文件——这是"自托管"体验顺滑的关键。
模块地图:一个解决方案里的 12 个功能库
打开 NetworkOptimizer.sln,你会看到按"功能域"划分的 13 个src/项目 + 13 个对应的tests/测试项目。官方 README 中的结构总览:
src/ ├── NetworkOptimizer.Web # Blazor Web UI(组合根) ├── NetworkOptimizer.Core # 共享工具与接口 ├── NetworkOptimizer.Storage # SQLite + InfluxDB 存储层 ├── NetworkOptimizer.UniFi # UniFi Console API 客户端 ├── NetworkOptimizer.Audit # 83 项安全检查的审计引擎 ├── NetworkOptimizer.Diagnostics # 配置优化建议 ├── NetworkOptimizer.Monitoring # SNMP 轮询与时序指标 ├── NetworkOptimizer.WiFi # Wi-Fi 健康评分与信道优化 ├── NetworkOptimizer.Sqm # 自适应 SQM 拥塞管理 ├── NetworkOptimizer.Threats # 威胁情报分析 ├── NetworkOptimizer.Alerts # 告警规则与定时任务 ├── NetworkOptimizer.Reports # PDF / Markdown 报告 └── NetworkOptimizer.Agent # 远程站点轻量 Agent各模块职责一句话说明:
- src/NetworkOptimizer.UniFi/:与 UniFi Console 对话的唯一入口。UniFiApiClient.cs 封装了 Cookie 认证、CSRF Token、401 自动重登与 Polly 重试,其他模块从不直接碰 UniFi 的 HTTP API。
- src/NetworkOptimizer.Audit/:纯规则引擎。防火墙影子规则、VLAN 隔离、DNS 泄漏等 83 项检查全部是无状态的 C# 规则类,输入配置快照,输出 0–100 分——这也是它测试覆盖最厚的模块之一。
- src/NetworkOptimizer.Monitoring/:SNMP 轮询器、探针、各厂商(Cable Modem / ONT / 5G 调制解调器)的指标解析器都在这里,指标经过
MetricsAggregator归一化后写入 InfluxDB。 - src/NetworkOptimizer.Web/Services/:整个 Web 项目里最大的目录(500+ 个服务类),负责把上面的功能库编排成面向用户的业务流程,如测速调度、Agent 隧道代理、告警联动。
💡 架构要点:每个功能都是独立类库,可以单独编译、单独测试、单独演进。想只读审计引擎的代码,只需打开一个项目即可,不用在 Web 层几千个文件里大海捞针。
依赖分层:Web 是"组合根",功能库只认接口
在 NetworkOptimizer.Web.csproj 中可以看到清晰的单向依赖:Web项目引用全部 12 个功能库,而功能库之间互不引用,只依赖Core(共享模型与接口)。依赖方向严格是Web → 功能库 → Core/Storage,不存在反向或循环依赖。
真正的"组装"发生在组合根 Program.cs:
builder.Services.AddDbContext<NetworkOptimizerDbContext>((sp, options) => ...); builder.Services.AddScoped<IAuditRepository, AuditRepository>(); builder.Services.AddScoped<IMonitoringInterfaceRepository, MonitoringInterfaceRepository>(); // ... 十余个仓储与服务的注册所有数据访问都通过 src/NetworkOptimizer.Storage/ 中"接口 + 仓储"的成对文件完成(Interfaces/IxxxRepository.cs+Repositories/XxxRepository.cs),功能模块拿到的是抽象而非具体实现。这就是典型的依赖注入分层:
- 表现层:Blazor 组件(src/NetworkOptimizer.Web/Components/)
- 应用服务层:
Web/Services下的业务流程编排 - 领域功能层:12 个功能类库
- 基础设施层:Storage(SQLite/InfluxDB)、UniFi API 客户端、Agent 隧道协议
双数据库设计:SQLite 存"事实",InfluxDB 存"时序"
Storage 模块 是理解这套 NMS 数据流的钥匙:
- SQLite(EF Core):承载一切"持久事实"——设置、审计历史、测速结果、SQM 基线、Agent 配置。Migrations/ 目录下已有 300 个迁移文件,启动时自动
Migrate(),用户无需手工执行数据库升级。 - InfluxDB(可选):
MonitoringInfluxClient是全项目唯一触碰 InfluxDB 客户端的地方。SNMP 指标写入走缓冲 + 定时批量刷盘,避免高频打爆数据库;连接 Token 经ICredentialProtectionService加密存储,页面向导自动完成 bucket 与 token 的开通。
这套"结构化数据 + 时序数据分离"的设计,让监控历史(如 ISP Health 评分)既保留完整时间轴,又不污染主库:
远程站点接入:On-Site Agent 的隧道协议设计
自托管 NMS 的一个经典难题是:多站点如何安全接入而不开放入站端口?Network Optimizer 的答案是 NetworkOptimizer.Agent——一个可以直接跑在客户网关上(实测占用约 50 MB)的轻量 .NET 程序:
- 只出不进:Agent 主动拨号,单条出站 HTTPS/gRPC 隧道连回中心服务器,站点侧零入站暴露,CGNAT 后也能工作。
- 协议独立建模:隧道契约定义在 agent_tunnel.proto,协议逻辑单独抽成 AgentProtocol 项目,服务端与 Agent 共享同一份 proto,永不失配。
- 能力复用:站点内的 UniFi Console、SNMP、设备 SSH 都通过隧道 TCP 代理进来,因此安全审计、Wi-Fi 优化、LAN 测速(OpenSpeedTest 页面 + iperf3)在远程站点上功能不打折:
质量保障:每个功能库都有独立测试项目
模块化的收益在测试目录直接兑现:tests/下 13 个 xunit 测试项目与src/一一对应。由于审计、Wi-Fi、SQM 等模块是无外部依赖的纯逻辑库,测试无需 Mock 整个网络——例如 tests/NetworkOptimizer.Audit.Tests/ 覆盖分析器、规则、DNS 检测器等全部子系统。日常跑测试可用仓库脚本:
- 测试入口:scripts/test.sh
- 覆盖率:scripts/coverage.sh + scripts/coverage.runsettings
- 编码与 AI 协作规范:CODING_STANDARDS.md
新手读源码的推荐路线
结合上面的分层,建议按这条路径入门,从"数据 → 规则 → 界面"逐步深入:
- src/NetworkOptimizer.Storage/README.md —— 5 分钟理解数据存哪里
- src/NetworkOptimizer.UniFi/UniFiApiClient.cs —— 看它如何与 UniFi Console 通信
- src/NetworkOptimizer.Audit/ —— 挑一条安全规则(如
IotVlanRule.cs)看纯 C# 检查逻辑 - src/NetworkOptimizer.Web/Program.cs —— 回到组合根,看服务如何被注册
- 需要部署时参考 docker/DEPLOYMENT.md,或按 docs/MACOS-INSTALLATION.md 做原生安装
总结
Network Optimizer 的架构可以浓缩成三句话:
- 功能即类库:审计、Wi-Fi、监控、SQM、告警各自独立,单向依赖,可单独测试与演进
- 存储双轨制:SQLite 管事实、InfluxDB 管时序,且后者可选,降低自托管门槛
- Agent 打通多站点:一条出站 gRPC 隧道让远程站点获得完整功能,入站端口为零
如果你正在规划自己的 .NET 自托管 NMS 或想学习 Blazor 大型应用的组织方式,这套"组合根 + 领域功能库 + 接口仓储"的模板非常值得对照着仓库源码逐层阅读。
【免费下载链接】NetworkOptimizer
Self-hosted optimization, monitoring (NMS), and security audit tool for UniFi Networks. Includes Wi-Fi Optimizer for wireless health scoring and channel optimization, advanced DNS/VLAN/firewall security checks, config optimization suggestions, centralized WAN and LAN speed test server w/ L2 tracing, CM, ONT, SFP, 5G modem stats +more.
相关推荐
Network Traffic Analyzer 系统架构深度解析:netanal 的模块化设计与数据流全览
Network Traffic Analyzer 系统架构深度解析:netanal 的模块化设计与数据流全览 本篇技术指南围绕 Cybersecurity Pr
dat架构设计:模块化P2P文件共享系统的构建
dat架构设计:模块化P2P文件共享系统的构建 项目概述 dat是一个基于命令行的P2P(Peer to Peer,对等网络)文件共享和实时同步工具。它允许用户
数据工程开发工具Network Optimizer系列13:搭建自托管时序监控——InfluxDB+SNMP+3D实时流量地图完全教程
Network Optimizer系列13:搭建自托管时序监控——InfluxDB+SNMP+3D实时流量地图完全教程 Network Optimizer 是一
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考