| 项目 | 内容 |
|---|---|
| 产品名称 | Z-Scope |
| 产品标语 | See where your ZimaOS traffic flows. |
| 文档版本 | 0.1 |
| 文档状态 | 立项草案 |
| 目标产品 | ZimaOS |
| 产品形态 | ZimaOS 内置网络可观测服务与 Web UI |
| 默认原则 | 本地优先、只采集元数据、轻量、可关闭 |
Z-Scope 是面向 ZimaOS 用户的轻量网络可观测能力,用于回答以下问题:
- ZimaOS 当前有多少入站和出站流量?
- 哪些 IP、端口、国家/地区、ASN 或云厂商占用了流量?
- 哪些域名与这些连接相关?域名信息来自哪里、是否可信?
- 哪些连接成功、失败、被重置或表现异常?
- 在能够识别时,是哪个 ZimaOS 应用、容器或进程产生了流量?
Z-Scope 不定位为 Wireshark 替代品,也不默认保存完整数据包或业务内容。产品重点是将内核观察到的网络元数据聚合成普通用户能够理解、管理员能够排障的视图。
NAS 用户通常运行下载工具、媒体服务、同步服务、远程访问、容器和第三方应用。当出现带宽占满、访问缓慢、异常外联或隐私疑虑时,现有系统监控往往只能展示网卡总流量,无法解释流量的来源和目的。
典型问题包括:
- 用户发现上行带宽持续占用,但不知道流量发往哪里。
- 某个容器无法访问外部服务,不确定 DNS、建连还是对端存在问题。
- 用户希望确认 NAS 是否连接到陌生国家、运营商或云平台。
- 用户需要知道主要访问域名,但 HTTPS、DoH、DoT、ECH 等机制限制了可见性。
- 多个物理网卡、网桥、Docker 网络和 VPN 可能导致重复统计或方向歧义。
家庭用户:希望直观看到 NAS 当前在上传、下载什么,以及目标大致位于哪里。
高级玩家:运行多个 Docker 应用,需要按 IP、域名、端口和应用排查网络行为。
小型团队管理员:需要本地审计异常外联、带宽热点和连接失败,不希望将网络元数据上传云端。
ZimaOS 支持团队:在用户授权导出后,利用标准化诊断报告定位网络问题。
- 看得见:从总带宽下钻到 Flow、Endpoint、Associated Domain 和 IP Profile。
- 说得清:展示域名证据和观察盲区,不将推测包装成事实。
- 用得起:在 ZimaOS 支持的最低硬件上保持可控的 CPU、内存和磁盘占用。
- 守隐私:默认本地处理,不保存报文正文,不向云端上传网络活动。
- 提供设备边界上的实时入站、出站 bytes/packets 和速率。
- 提供 IPv4 TCP/UDP Flow 的源/目标地址、端口、方向、持续时间和流量。
- 为公网 IP 提供国家/地区、ASN 和组织信息。
- 通过 DNS、TLS SNI 和明文 HTTP Host 尽可能关联域名。
- 清楚展示域名来源、关联可信度和不可见原因。
- 提供概览、Flow 列表、Endpoint/Domain 详情、过滤、搜索和本地导出。
- 提供数据保留、功能开关、资源上限和服务健康状态。
- 作为 ZimaOS 本地服务安装、升级、停止和卸载。
- 不保存完整数据包或 HTTP 请求/响应正文。
- 不解密 TLS,不实施中间人代理。
- 不承诺识别 DoH、DoT、ECH 或所有 QUIC/HTTP3 域名。
- 不提供防火墙阻断、流量整形或家长控制。
- 不提供跨多台 ZimaOS 设备的云端集中管理。
- 不保证城市级 IP 定位准确。
- 不在 V1 强制实现进程、容器或 ZimaOS 应用归属。
- 不替代专业 IDS/IPS、NDR 或抓包分析工具。
- 边界明确:所有方向均相对 Device Boundary 定义,不使用含糊的上传/下载代替 ingress/egress。
- 聚合优先:内核侧统计,用户态周期读取,避免逐包永久落盘。
- 证据优先:Associated Domain 必须附带 Domain Evidence。
- 诚实降级:不可观察时显示“不可见/仅推断”,不显示虚假域名。
- 本地优先:GeoIP/ASN 查询、数据库和 UI 均可完全离线运行。
- 默认安全:不暴露独立公网 API,不默认导出,不采集 payload 内容。
- 控制规模:V1 只解决网络去向和流量归因,不扩展成通用安全平台。
用户看到 NAS 上行达到 80 Mbps,打开 Z-Scope 后看到主要 Outbound Flow 的目标 IP、Associated Domain、ASN、应用端口和流量占比,从而判断是正常备份还是异常外联。
用户发现一个此前未见的公网 IP。详情页显示其国家、ASN、组织、首次/最后出现时间、相关域名、涉及端口和累计流量,帮助用户决定是否继续调查。
某条 HTTPS/QUIC Flow 只有 IP,没有域名。UI 明确显示“未观察到 DNS/SNI;可能使用缓存、DoH、ECH 或不携带域名”,而不是将反向 DNS 当作真实请求域名。
用户按目标 IP 或域名过滤,查看 TCP 建连失败、RST 或超时趋势。若 V1 无法提供完整 TCP 质量数据,则引导用户导出诊断摘要而不是报文内容。
系统自动选择承载默认路由的物理接口作为 Device Boundary。用户可在设置中调整接口,并在可能重复统计 bridge/physical 流量时收到提示。
| 编号 | 能力 | 说明 |
|---|---|---|
| P0-01 | 服务生命周期 | 随 ZimaOS 启停;支持启用、暂停、重启和卸载 |
| P0-02 | 边界接口选择 | 自动识别默认路由接口;允许手动选择;规避明显的重复挂载 |
| P0-03 | 双向流量统计 | 分别统计 Inbound/Outbound bytes、packets、当前速率和峰值 |
| P0-04 | Flow 聚合 | IPv4 TCP/UDP 五元组、方向、首次/最后时间、包数和字节数 |
| P0-05 | IP Profile | 地址范围、国家/地区、ASN、组织;内网地址标记为 Local |
| P0-06 | Associated Domain | DNS、TLS SNI、HTTP Host;展示证据、可信度和观察时间 |
| P0-07 | 概览页 | 实时趋势、Top Endpoint、Top Domain、Top ASN/国家、最近 Flow |
| P0-08 | Flow 浏览 | 搜索、过滤、排序、分页、详情和实时刷新 |
| P0-09 | 数据保留 | 默认保留详细记录 7 天;支持 1/7/30 天或关闭历史 |
| P0-10 | 本地导出 | 导出时间范围内的 JSON/CSV 诊断数据;不包含 payload |
| P0-11 | 健康状态 | 展示 attach 状态、map 使用量、丢事件、解析失败和 Observation Gap |
| P0-12 | 隐私控制 | 总开关、域名观察开关、历史记录开关、清除历史数据 |
- IPv6 TCP/UDP Flow。
- PID、进程名、可执行文件路径和 UID。
- Docker container、Compose project 和 ZimaOS App Identity。
- TCP 建连成功/失败、RST、连接耗时和重传指标。
- 首次出现的 Endpoint、Domain、国家或 ASN 提醒。
- Prometheus/OpenMetrics 本地导出。
- 更细粒度的数据保留和聚合策略。
- 对 VPN、bond、bridge、多默认路由的增强处理。
- Kubernetes Pod/namespace 归属。
- QUIC Initial 中的域名识别研究。
- 自定义规则与异常行为检测。
- 用户确认后的阻断或限速能力。
- 多设备集中视图。
- PCAP 按需短时诊断;必须独立授权、限时并明确隐私风险。
- 安装或系统升级后,Z-Scope 默认可用但允许用户关闭。
- 首次启用时检测内核、BTF、eBPF、TC 和所需 capability。
- 自动选择默认路由所在的非虚拟接口作为 Device Boundary。
- 如果存在多个候选接口,使用安全默认值并提示用户确认。
- 如果环境不支持 eBPF,UI 必须展示明确原因和建议,不得循环崩溃。
- 服务升级不能丢失用户设置;数据结构变更必须支持迁移或明确清理策略。
- 分别挂载 TC ingress 和 egress。
- V1 支持 Ethernet、可选单层 VLAN、IPv4、TCP 和 UDP。
- 每条 Flow 至少包含:方向、协议、源/目标 IP、源/目标端口、packets、bytes、first_seen、last_seen、interface。
- Flow key 必须定长且可在 eBPF 与用户态安全共享。
- 内核侧以 map 聚合;用户态默认每秒读取并生成展示快照。
- map 达到容量时使用可预测的淘汰策略,并累计 eviction 指标。
- 无法解析、截断、未知协议和 map 更新失败必须计数,但不得阻断网络流量。
- 所有 eBPF 路径默认返回放行结果;Z-Scope V1 不改变数据包。
- Inbound/Outbound 相对 Device Boundary 定义。
- UI 使用“入站/出站”,可辅以“进入 ZimaOS/离开 ZimaOS”的解释。
- 默认不同时监控物理 uplink 和其上层 bridge,以降低重复统计风险。
- 用户手动选择可能重复的接口组合时必须提示。
- Loopback 默认排除;用户可在高级设置启用。
- 支持从传统 DNS 请求和响应中观察域名、记录类型、响应 IP 和 TTL。
- 支持从可见的 TLS ClientHello 提取 SNI;不保存完整 ClientHello。
- 支持从明文 HTTP 请求提取 Host;不保存 URL path、header 集合或正文。
- 每条 DomainObservation 包含 domain、evidence、observed_at、client context、关联 IP 和过期时间。
- DNS 关联必须遵守 TTL,并允许设置合理的最短/最长缓存边界。
- SNI/HTTP Host 直接出现在 Flow 上时标记为 Direct;DNS IP 关联标记为 Inferred。
- 多域名共享同一 IP 时允许展示多个候选,不强行选定唯一域名。
- 反向 DNS 只能作为 Endpoint 名称提示,不能标记为请求域名。
- 域名规范化为小写并去除末尾点,同时保留国际化域名的可显示形式。
- UI 必须解释以下盲区:DNS 缓存、DoH、DoT、ECH、QUIC、分片、非标准端口和采集启动前已建立连接。
建议的可信度口径:
| Domain Evidence | 可信度 | UI 标签 |
|---|---|---|
| 当前 Flow 的 TLS SNI | 高 | TLS SNI |
| 当前 Flow 的 HTTP Host | 高 | HTTP Host |
| 当前客户端在 TTL 内收到的 DNS 答案 | 中 | DNS 关联 |
| 仅 IP 反向 DNS | 低 | Endpoint 名称,不作为 Associated Domain |
| 无证据 | 无 | 域名不可见 |
- 仅对公网地址执行地理和 ASN 丰富化。
- 私网、loopback、link-local、multicast、broadcast 和保留地址必须明确分类。
- 公网 IP 至少展示国家/地区代码、ASN、组织名称和数据库更新时间。
- 城市级信息如提供,必须标记为近似信息,不能显示为精确位置。
- 数据库在本地查询;更新包必须可校验版本和完整性。
- GeoIP 数据不可用时不影响基础 Flow 采集。
- UI 允许展示 CDN、云厂商或网络组织,但不得将 ASN 组织等同于域名所有者。
概览页默认展示最近 15 分钟,可切换 1 小时、24 小时和 7 天。
必须包含:
- 当前 Inbound/Outbound 速率。
- 时间范围内的累计 Inbound/Outbound 流量。
- 流量趋势图。
- Top 10 Endpoint,按总 bytes 排序。
- Top 10 Associated Domain,按总 bytes 排序。
- Top ASN/组织和国家/地区。
- 当前活跃 Flow 数。
- 域名可见率:具有 Direct/Inferred 域名证据的 Flow 占比。
- 采集健康提示和 Observation Gap。
列表字段:
- 状态:活跃/已结束/过期。
- 方向。
- Application Identity;不可用时显示未知,不隐藏 Flow。
- 源和目标 Endpoint。
- Associated Domain 与 evidence 标签。
- 国家/地区、ASN/组织。
- 协议和端口。
- 发送、接收、总 bytes/packets。
- 首次出现、最后出现、持续时间。
过滤条件:
- 时间范围。
- 入站/出站。
- IP、CIDR、端口和协议。
- Domain。
- 国家/地区、ASN、组织。
- Application Identity。
- 活跃/已结束。
- 有域名/域名不可见。
Endpoint 详情展示:IP Profile、累计流量、首次/最后出现、常用端口、关联域名、相关 Application Identity 和时间趋势。
Domain 详情展示:首次/最后观察、evidence 分布、解析到的 IP、ASN/国家分布、累计流量和相关 Application Identity。
所有详情页必须允许跳回经过过滤的 Flow 列表。
设置项至少包括:
- 启用/暂停 Z-Scope。
- Device Boundary 接口。
- 域名观察总开关。
- TLS SNI、HTTP Host 观察子开关。
- 历史记录开关与保留时间。
- GeoIP/ASN 数据库状态和更新时间。
- 最大 map 条目、磁盘配额和资源模式;高级设置。
- 导出诊断数据。
- 清除历史数据。
首次打开域名观察说明时,应提示域名属于敏感网络活动元数据,默认仅保存在本机。
- 支持按时间范围、过滤条件导出 JSON 和 CSV。
- 导出内容默认包含 Flow、Domain Evidence、IP Profile 和 AgentHealth 摘要。
- 不导出 payload、HTTP path、请求正文或认证信息。
- 导出前显示预计记录数、文件大小和敏感信息提示。
- 导出操作写入本地审计日志,但不记录导出的具体域名列表。
ZimaOS
└── Z-Scope
├── Overview
├── Flows
├── Endpoints
├── Domains
└── Settings
用户在 10 秒内应能回答:当前是否有异常流量、主要流向哪里、是否存在采集异常。
页面顺序:实时速率卡片 → 趋势图 → Top Domains/Endpoints → 地域与 ASN → 最近 Flow → AgentHealth。
默认按 last_seen 倒序。实时模式每秒增量更新,用户开始筛选、排序或查看详情后暂停自动重排,避免列表跳动。
- 无流量:提示生成测试流量和检查接口。
- eBPF 未挂载:显示具体 hook/interface/error。
- 域名不可见:解释协议盲区,不诱导用户认为功能故障。
- GeoIP 数据过期:基础数据继续展示,并提示更新。
- 数据库只读/磁盘满:实时视图继续工作,历史暂停并记录 Observation Gap。
| 字段 | 类型 | 说明 |
|---|---|---|
| id | string | 用户态生成的稳定记录 ID |
| direction | enum | inbound/outbound |
| protocol | enum | tcp/udp/other |
| src_ip/dst_ip | IP | 地址 |
| src_port/dst_port | u16 | 端口;无端口协议为 null |
| interface | string | Device Boundary 接口 |
| packets_in/out | u64 | 双向包数;方向记录可简化为 packets |
| bytes_in/out | u64 | 双向字节数;方向记录可简化为 bytes |
| first_seen/last_seen | timestamp | 观察窗口 |
| domain | string? | Associated Domain |
| domain_evidence | enum? | dns/tls_sni/http_host |
| domain_confidence | enum? | direct/inferred/none |
| ip_profile_id | string? | 目标 IP Profile |
| application_identity_id | string? | P1 |
| end_reason | enum? | timeout/fin/rst/unknown;P1 增强 |
| 字段 | 说明 |
|---|---|
| domain | 规范化域名 |
| evidence | DNS、TLS SNI 或 HTTP Host |
| observed_at | 观察时间 |
| addresses | 关联 IP 列表 |
| expires_at | DNS TTL 或产品缓存期限 |
| client_context | 用于降低共享 DNS 关联误差的本机上下文 |
包含 IP、address_scope、country、region、city_approximate、asn、organization、database_version 和 enriched_at。
包含服务状态、启动时间、接口 attach 状态、map 条目/容量、evictions、解析失败、RingBuf/PerfEvent 丢失、数据库状态、GeoIP 状态和 Observation Gap。
- 实时 Flow:内存中保存活跃项和短期关闭项。
- 详细历史:默认 7 天,可设置 1/7/30 天。
- 默认磁盘配额:由 ZimaOS 产品团队按最低硬件确认;达到 80% 提示,达到 100% 删除最旧记录。
- 长周期图表使用分钟/小时聚合,不扫描全部 FlowRecord。
- DomainObservation 遵守 TTL;历史展示可以保留“当时观察到的关联”,但不得用于推断 TTL 之后的新 Flow。
- 用户关闭历史后,只保留实时内存状态,不写 Flow 历史数据库。
- 清除历史必须删除 Flow、DomainObservation、聚合和导出临时文件。
Linux TC ingress/egress
|
Aya eBPF parser + bounded maps
|
Z-Scope daemon
├── map polling and aggregation
├── DNS/SNI/Host bounded event processing
├── domain association cache
├── offline GeoIP/ASN enrichment
├── SQLite history and rollups
└── local Unix socket API
|
ZimaOS backend/UI
- eBPF 侧使用
no_std、定长#[repr(C)]POD 结构体。 - 任何 header/payload 访问必须进行 verifier 可证明的边界检查。
- Flow 统计优先使用有界 LRU/per-CPU map,避免逐包上送用户态。
- 域名事件只复制严格受限的必要字节,立即在用户态解析并丢弃原始片段。
- daemon 不监听公网端口;ZimaOS 通过 Unix socket 或受控本地接口访问。
- 不依赖内核模块,不要求编译目标机器的 kernel headers。
- 服务退出、升级或禁用时必须清理 TC attachment,避免残留 qdisc/filter。
- 采集异常不得影响设备正常网络转发。
zimascope/
├── zimascope-ebpf/ # TC hooks, parsers, maps
├── zimascope-common/ # shared POD types
├── zimascoped/ # loader, aggregation, enrichment, storage, API
├── zimascope-ui/ # ZimaOS UI integration
├── xtask/ # build and packaging
└── tests/ # netns/veth integration and fixtures
采集架构决策见 docs/adr/0001-map-aggregation-and-single-collector.md,Rust ABI、Collector 接口与内部 struct 设计见 docs/design/rust-collector.md。
CPU 为 V1 硬性验收指标,必须在 ZimaOS 最低支持硬件上达到:
- 在默认功能开启和标准负载下,Z-Scope 总体增量 CPU 使用率最高不超过单个逻辑核的 1%。
- 总体增量 CPU 包括 daemon 用户态开销以及可归因于 eBPF 采集的内核态开销,以启用 Z-Scope 前后的基线对比测量。
- 标准负载的流量速率、PPS、Flow 数量、包大小分布和测量窗口必须在首个性能基准提交中固化,后续版本不得放宽该口径。
- 常驻内存不超过 100 MiB;默认配置目标低于 64 MiB。
- eBPF map 内存有明确上限,默认 Flow 容量不超过 65,536。
- UI 概览查询 P95 小于 500 ms;实时指标延迟小于 2 秒。
- 服务启动并完成 attach 小于 5 秒。
- 数据库写入不得对网络数据路径产生背压。
- daemon 崩溃不能影响网络连通性。
- 数据库损坏时能够隔离损坏文件并恢复实时采集。
- 接口消失、改名或默认路由变化时自动重试,并生成 Observation Gap。
- 高频流量下允许统计近似,但必须暴露 eviction/drop 指标。
- 支持 ZimaOS 官方维护的内核版本和架构矩阵。
- 发布前至少覆盖最低支持内核、当前稳定内核和下一候选内核。
- 支持常见物理网卡、bridge、Docker bridge 和 bond 的基础场景。
- 不支持的 NIC offload 或 hook 模式必须可回退并在 UI 解释。
- 默认不采集或持久化 payload。
- HTTP 只提取 Host,不记录 path、query、Cookie、Authorization 或正文。
- 域名和 IP 历史视为敏感数据,仅授权的 ZimaOS 管理员可访问。
- API 使用 ZimaOS 现有身份和权限体系,不另设弱口令。
- eBPF 加载所需 capability 应最小化;加载后尽可能降低用户态权限。
- GeoIP 更新包和 Z-Scope 发布包必须验证签名或校验值。
- 导出文件由用户主动生成,并明确提示其中包含网络活动元数据。
内部 API 建议包含:
| 方法 | 路径 | 用途 |
|---|---|---|
| GET | /v1/status |
AgentHealth 与当前配置摘要 |
| GET | /v1/overview |
指定时间范围的概览 |
| GET | /v1/flows |
Flow 搜索、过滤和分页 |
| GET | /v1/flows/{id} |
Flow 详情 |
| GET | /v1/endpoints |
Endpoint 聚合 |
| GET | /v1/endpoints/{ip} |
Endpoint 详情 |
| GET | /v1/domains |
Domain 聚合 |
| GET | /v1/domains/{domain} |
Domain 详情 |
| GET/PUT | /v1/settings |
读取或修改设置 |
| POST | /v1/export |
创建本地导出任务 |
| DELETE | /v1/history |
清除历史;需要再次确认 |
API 必须支持时间范围、排序、游标或稳定分页,并对高基数字段设置合理上限。
Z-Scope 必须能够观察自身:
- 各接口 TC hook 状态。
- map 容量、当前条目和淘汰数。
- 每类协议解析成功/失败数。
- 域名事件产生、解析、关联和丢弃数。
- 数据库队列长度、写入失败和磁盘配额。
- GeoIP 命中率和数据库版本。
- daemon CPU、RSS 和运行时间。
- 每个 Observation Gap 的开始、结束和原因。
日志默认不包含完整域名/IP 列表;调试日志必须显式启用并自动过期。
- Ethernet/VLAN/IPv4/TCP/UDP 边界解析。
- 截断包、非法 header length、IP fragmentation。
- 网络/主机字节序转换。
- POD 结构体大小、对齐和字段 offset。
- DNS name compression、TTL 和响应映射。
- TLS ClientHello/SNI 边界与分片失败路径。
- Domain 规范化与关联过期。
- IP address scope 分类。
使用 network namespace + veth 构建可重复环境:
- 产生 TCP/UDP 入站和出站流量并核对方向。
- 使用
curl、DNS 查询和 TLS 服务核对域名证据。 - 模拟 map 满、接口删除、服务重启和数据库只读。
- 验证服务停止后网络正常且 attachment 被清理。
- 验证 bridge/physical 默认配置不会明显双计数。
- 1/10/100/1000 Mbps 阶梯压测。
- 小包高 PPS 和大包吞吐测试。
- 高 Flow cardinality 与短连接风暴。
- 域名观察开启/关闭对 CPU 的差异。
- 对比启用前后的系统 CPU 基线,分别记录 daemon 和 eBPF 可归因开销,验证标准负载下最高不超过单个逻辑核的 1%。
- UI 大时间范围查询和保留清理。
- ZimaOS 支持的不同硬件与内核。
- Intel/Realtek 等主要网卡驱动。
- Docker bridge、bond、VLAN、VPN 共存。
- BTF 不可用、TC 不可用和 capability 不足的降级提示。
- 在支持的 ZimaOS 设备上安装后 5 秒内开始显示实时流量。
- 测试环境产生的 IPv4 TCP/UDP 流量方向、IP、端口、packets 和 bytes 与基准工具误差在约定范围内。
- 传统 DNS + HTTPS 测试能够显示 DNS 关联或 TLS SNI,并正确标注 evidence。
- DoH/ECH 或无域名测试不得展示伪造的“请求域名”。
- 公网 IP 可离线展示国家/地区、ASN、组织和数据库更新时间。
- 私网和保留地址不会被错误显示为公网地理位置。
- 用户可以按方向、IP、端口、协议、域名、国家和 ASN 搜索过滤。
- 默认历史保留策略和磁盘配额正常执行。
- 暂停服务后不再采集;清除历史后相关记录和聚合均被删除。
- daemon 异常退出、map 满或数据库失败时不影响网络连通。
- UI 明确显示 attach 失败、事件丢失和 Observation Gap。
- 导出不包含 payload、HTTP path、认证 header 或正文。
- 在最低支持硬件和标准负载下,Z-Scope 总体增量 CPU 使用率最高不超过单个逻辑核的 1%,并达到内存和响应时间指标。
- 启用用户中,能够成功看到 Flow 的比例。
- 从概览进入 Endpoint/Domain 详情的使用率。
- 支持工单中,通过 Z-Scope 导出缩短定位时间的比例。
- 用户在一次会话中成功回答“最大流量去向”的任务完成率。
- eBPF attach 成功率。
- Flow map eviction 率。
- Domain 可见率,按 DNS/SNI/Host 分解。
- Observation Gap 时长占比。
- daemon 崩溃率和升级失败率。
- 最高及平均增量 CPU、RSS 和每日磁盘增长量。
Domain 可见率只能作为能力指标,不能通过扩大 payload 采集或误关联来追求数值。
docs: record collector architecture and rust data model
chore: bootstrap zimascope workspace and shared types
feat(ebpf): collect ipv4 tcp udp flows at the device boundary
feat(agent): aggregate flow maps and expose health metrics
feat(domain): associate dns tls sni and http host evidence
feat(enrichment): add offline geoip and asn profiles
feat(storage): persist flow history and time rollups
feat(api): expose local status overview flow endpoint and domain APIs
feat(ui): add overview flows endpoints domains and settings views
feat(privacy): add collection controls retention cleanup and local export
test: add parser network namespace and failure-mode coverage
perf: enforce the 1 percent cpu budget on the minimum hardware profile
chore: add zimaos service packaging upgrade and uninstall cleanup
| 风险 | 影响 | 应对 |
|---|---|---|
| DoH/DoT/ECH 导致域名不可见 | 用户认为功能不准确 | 展示 evidence、可见率和具体盲区,不做虚假推断 |
| 共享 CDN IP 导致 DNS 误关联 | 错误域名展示 | 关联带 TTL 和 client context,允许多候选并标记 Inferred |
| bridge/physical 双重采集 | 流量翻倍 | Device Boundary 模型、默认排除虚拟接口、配置冲突提示 |
| 高基数 Flow 撑满 map | 数据缺失 | 有界 LRU、eviction 指标、top-N 与聚合策略 |
| 不同内核/驱动行为差异 | attach 或统计失败 | 官方兼容矩阵、自动探测、fallback 和 CI/设备测试 |
| TLS parser 增加 verifier/CPU 压力 | 性能退化 | eBPF 仅截取有限字节,用户态解析,可独立关闭 |
| 网络元数据涉及隐私 | 信任与合规风险 | 本地优先、最小采集、权限控制、明确导出提示 |
| GeoIP 不准确或过期 | 用户误判 | 强调近似位置、优先 ASN、显示数据库版本 |
| daemon 权限过高 | 安全风险 | Unix socket、最小 capability、加载后降权与安全审计 |
以下事项需要在实现相关功能前确定:
- Z-Scope 是默认启用,还是由用户首次进入后启用。
- V1 是否将 TLS SNI 纳入 P0;若延期,首版域名主要来自 DNS。
- 默认详细历史是 7 天还是 30 天,以及最低硬件磁盘配额。
- ZimaOS 当前可复用的 App/container identity 数据源。
- 最低支持硬件、内核和主要网卡型号。
- GeoIP/ASN 数据供应商、更新许可和离线分发方式。
- 是否需要支持用户选择多个 Device Boundary 接口。
- 导出诊断包是否需要内置脱敏选项,例如哈希内网 IP 或域名。
建议按以下边界控制实现规模:
- V1 只监控 ZimaOS 设备本机边界,不做全局局域网旁路分析。
- V1 只采集元数据,不保存 payload。
- V1 不承诺所有连接都有域名。
- V1 不做阻断、限速或云端管理。
- Application Identity、IPv6 和 TCP 深度质量指标进入 V1.1。
在该边界下,Z-Scope 能形成完整、可信且可交付的产品闭环,同时保留向应用归属和安全洞察演进的空间。