GreyWizardPublic/network-traffic-monitor
GitHub: GreyWizardPublic/network-traffic-monitor
自托管的隐私优先网络流量聚合监控系统,通过多平台抓包代理采集元数据并在自有服务器上统一可视化。
Stars: 0 | Forks: 0
# 网络流量监控器
[](LICENSE)
一个自托管、隐私优先的网络流量聚合系统。抓包代理在你的设备上运行,仅将元数据发送到中央服务器,并在浏览器或原生 iOS 应用中可视化流量——任何数据都不会离开你自己的基础设施。
## 系统概述
```
┌─────────────────────────────────────────────────────────────┐
│ Your infrastructure │
│ │
│ ┌──────────────┐ Wire protocol ┌──────────────────┐ │
│ │ ntm-client │ ─────────────────► │ │ │
│ │ (Linux / Win)│ TCP/TLS + Ed25519│ ntm-server │ │
│ └──────────────┘ │ (aggregation + │ │
│ │ HTTPS API) │ │
│ ┌──────────────┐ │ │ │
│ │ ntm-client │ ─────────────────► │ │ │
│ │ (another │ └────────┬─────────┘ │
│ │ machine) │ │ │
│ └──────────────┘ │ HTTPS API │
│ │ │
│ ┌────────────────────┼──────────┐ │
│ │ Dashboard clients │ │ │
│ │ ▼ │ │
│ │ ┌──────────────────────────┐ │ │
│ │ │ Web browser (built-in) │ │ │
│ │ └──────────────────────────┘ │ │
│ │ ┌──────────────────────────┐ │ │
│ │ │ NTM Dashboard (iOS app) │ │ │
│ │ └──────────────────────────┘ │ │
│ └───────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
```
## 组件
### ntm-server
中央聚合引擎。接受来自任意数量 `ntm-client` 实例的连接,在可配置的滚动时间窗口内,将数据包元数据聚合为按接口、按流和按实体(ASN)统计的总计,并通过 HTTPS REST API 提供结果。
还内置了 Web 仪表板,因此任何浏览器都可以显示实时流量数据,而无需安装单独的软件。
**关键特性:**
- 强制要求 TLS 和 Ed25519 客户端身份验证
- 仪表板的 WebAuthn 通行密钥身份验证(FIDO2 — Face ID、Touch ID、硬件密钥)
- 传统模式下仅限 LAN 过滤;WebAuthn 模式下进行基于会话的身份验证
- 使用基于 CC0 许可的 iptoasn.com 数据进行 IP → ASN/国家解析(无需 MaxMind 账户)
- 运行于 Linux;使用 C++17 编写
→ **[服务器部署指南](SERVER_DEPLOYMENT.md)**
### ntm-client
轻量级抓包代理。运行在每个受监控的设备上,通过身份验证的 TLS 连接,嗅探每个接口上的所有 IPv4/IPv6 流量,并将元数据(接口名称、源 IP、目的 IP、字节数)流式传输到 `ntm-server`。
**关键特性:**
- 无 GUI;设计为作为守护进程或后台服务运行
- 仅发送元数据 — 不包含负载、端口、主机名
- 每个客户端拥有独立的 Ed25519 身份密钥 — 每个代理都有稳定、可验证的身份
- 支持 Linux(libpcap,RTNETLINK 变更检测)和 Windows(Npcap,NotifyIpInterfaceChange)
- 在网络变更时自动重新通告其外部 IP 和 LAN 地址
- 可选自动更新:每天检查一次服务器并原子化替换自身的二进制文件(选择启用)
→ **[客户端部署指南](CLIENT_DEPLOYMENT.md)**
### NTM 仪表板 — iOS 应用
适用于 iPhone 和 iPad 的原生 SwiftUI 监控应用。使用 FIDO2 通行密钥(Face ID / Touch ID)与服务器进行身份验证,并显示与 Web 仪表板相同的流量数据:接口总计、实体流、LAN 设备详情以及客户端健康状态。
**关键特性:**
- iOS 18+ / Xcode 16+;Swift 6 严格并发
- 通过 `ASAuthorizationController` 进行通行密钥身份验证 — 绝不发送密码
- 会话 Bearer token 存储在 Keychain 中
- 可选 TLS 证书锁定,支持自签名服务器证书
- 可配置的轮询间隔;下拉刷新
- 要求服务器端处于 WebAuthn 模式(已设置 `webauthn_rp_id`)
→ **[iOS 仪表板部署指南](IOS_DEPLOYMENT.md)**
### NTM 客户端 — iOS 抓包代理
在 iPhone 和 iPad 上充当通信协议客户端的原生 SwiftUI 应用。使用 Ed25519 密钥对通过 TLS 连接到 `ntm-server`,并流式传输流量观察结果(与 Linux/Windows 上的 `ntm-client` 协议相同)。
**关键特性:**
- iOS 18+ / Xcode 16+;Swift 6 严格并发
- Ed25519 密钥对在 Keychain 中生成并存储;通过 HTTPS API 在服务器上注册
- 与 ntm-server 端口 5555 建立 TCP/TLS 通信协议连接
- 显示在服务器仪表板的 **客户端健康状态** 部分
- 自我恢复:采用指数退避算法自动重连
→ **[iOS 客户端部署指南](IOS_CLIENT_DEPLOYMENT.md)**
### Web 浏览器仪表板(内置)
`ntm-server` 内嵌了一个自包含的 HTML/JS 仪表板,直接通过 HTTPS 提供服务。
无需单独安装或构建步骤 — 在任何浏览器中打开服务器 URL 即可。
- **WebAuthn 模式:** `https://your.domain.com`(Cloudflare Tunnel 或反向代理)
- **传统 LAN 模式:** `https://:8443`
## 协议
这两种协议均独立进行版本控制并配有文档。只要组件保持在各自支持的版本范围内,就可以以不同的速度演进。
| 协议 | 参与方 | 传输方式 | 文档 |
|---|---|---|---|
| **通信协议** | ntm-client → ntm-server | TCP/TLS + Ed25519 | [docs/wire-protocol.md](docs/wire-protocol.md) |
| **API 协议** | 浏览器 / iOS 应用 → ntm-server | HTTPS REST + WebAuthn | [docs/api-protocol.md](docs/api-protocol.md) |
### 当前版本
| | 版本 | 引入于 |
|---|---|---|
| 通信协议 | 参见源码中的 `kWireProtoVersion` | — |
| API 协议 | 14 | ntm-server 2.0.0 |
| 软件 | 参见 `src/version.hpp` | — |
## 快速构建
**服务器 + Linux 客户端:**
```
cmake -B build-linux -DCMAKE_BUILD_TYPE=Release .
cmake --build build-linux -j$(nproc)
# 产生:build-linux/ntm-server build-linux/ntm-client
```
**Windows 客户端**(使用 MinGW-w64 和 Npcap SDK 从 Linux 交叉编译):
```
cmake -B build-windows \
-DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-mingw64.cmake \
-DNPCAP_SDK=/opt/npcap-sdk \
-DCMAKE_BUILD_TYPE=Release .
cmake --build build-windows -j$(nproc)
# 产生:build-windows/ntm-client.exe
```
**iOS 应用:** 需要配备 Xcode 16+ 的 macOS 以及 [XcodeGen](https://github.com/yonaskolb/XcodeGen)。
```
cd ios/NTMDashboard
xcodegen generate
open NTMDashboard.xcodeproj
```
请参阅下方的部署指南,了解包含 TLS、身份验证和服务配置在内的完整生产环境设置。
## 部署指南
| 指南 | 描述 |
|---|---|
| [SERVER_DEPLOYMENT.md](SERVER_DEPLOYMENT.md) | 完整的服务器设置:TLS、Ed25519、WebAuthn、systemd、安全强化检查清单 |
| [CLIENT_DEPLOYMENT.md](CLIENT_DEPLOYMENT.md) | 适用于 Linux(systemd)和 Windows(任务计划程序)的客户端设置 |
| [IOS_DEPLOYMENT.md](IOS_DEPLOYMENT.md) | NTM 仪表板:构建、通行密钥注册、证书锁定 |
| [IOS_CLIENT_DEPLOYMENT.md](IOS_CLIENT_DEPLOYMENT.md) | NTM 客户端:构建、密钥注册、通信协议代理 |
| [docs/auto-update.md](docs/auto-update.md) | 自动更新操作员指南:服务器设置、二进制文件命名、管理页面 |
| [docs/wire-protocol.md](docs/wire-protocol.md) | 通信协议规范(ntm-client ↔ ntm-server) |
| [docs/api-protocol.md](docs/api-protocol.md) | API 协议规范(仪表板客户端 ↔ ntm-server) |
## 安全模型
| 边界 | 机制 |
|---|---|
| 客户端 → 服务器数据接入 | 双向 TLS + Ed25519 密钥身份验证(均为强制要求) |
| 浏览器 → 仪表板 | WebAuthn 通行密钥会话(推荐)或仅限局域网的 HTTPS(无身份验证) |
| iOS → 仪表板 | WebAuthn 通行密钥(Face ID / Touch ID);会话 token 存储在 Keychain 中 |
| 传输中的数据 | 所有链路强制使用 TLS 1.2+ |
| 静态数据 | 流量统计仅存在于内存中;WebAuthn 凭据和 IP→ASN 数据库位于磁盘上 |
## 许可证
源代码:MIT — 参见 [`LICENSE`](LICENSE)。
第三方库和数据源:参见 [`LICENSES.md`](LICENSES.md)。
标签:Bash脚本, C++17, HTTP头分析, iOS, TLS加密, WebAuthn, 底层编程, 自托管