NetVisor深度解析:自动化网络发现与拓扑可视化的新方式
NetVisor深度解析:自动化网络发现与拓扑可视化的新方式
01 介绍
自动发现并可视化记录网络基础设施。
在传统网络管理中,维护一份准确、可持续更新的网络拓扑几乎是一项“不可能完成的任务”。尤其在 容器化、虚拟化、多 VLAN、多子网、混合环境 已经成为常态的今天,靠人工绘图维护网络文档不仅低效,而且注定无法长期保持一致。
NetVisor(mayanayza/netvisor) 正是在这样的背景下出现的。它不是交换机 OS、不是 SDN 平台,也不是所谓的“网络 hypervisor”。它是一套面向现代基础设施的自动化网络发现(Discovery)+ 拓扑可视化(Visualization)+ 网络文档化(Documentation)平台。
本文将深入解析 NetVisor 的架构、运行方式、优势与局限,并给出可落地的部署建议。
02 NetVisor 是什么?
特征:
- 自动发现 :扫描网络以识别主机、服务及其关系
- 200+ 服务定义 :自动检测数据库、网络服务器、容器、网络基础设施、监控工具和企业应用
- 交互式拓扑 :生成具有丰富自定义选项的可视化网络图
- 多 VLAN 支持 :部署守护进程并扫描跨网络段,映射复杂拓扑
- Docker 集成 :自动发现容器化服务
- 组织管理:多用户支持,支持基于角色的权限(所有者、管理员、成员、可视化工具)
- 定时发现 : 自动扫描以保持文档最新
- 导出与分享: 下载拓扑图为 PNG 图片、
支持 Docker 快速部署的轻量级网络可视化与文档工具。相比传统 SNMP/CMDB 工具,NetVisor 在复杂环境(尤其是 homelab、小型企业、DevOps 场景)中更具优势:它能识别容器、虚拟化平台、Web 服务、数据库等 200+ 常用服务类型,并将其自动关联到拓扑图中。
03 系统架构与技术栈解析
NetVisor 的架构是典型的“三层结构”,但每一层针对现代网络管理进行了专门优化。
| 序号 | 组件名称 | 技术栈 | 主要职责 | 描述 | |
|---|---|---|---|---|---|
| 1 | Server(后端服务) | Rust + Axum + PostgreSQL 17 | - 处理业务逻辑 - 存储扫描结果 - 管理组织、用户、权限 - 提供 REST API 给前端和 Daemon |
Rust 带来的性能与安全性,使 Server 能够支撑多网络、多用户的场景。 | |
| 2 | Daemon(扫描代理) | 独立组件,支持二进制和Docker运行 | - IP 扫描 - Ping / 端口扫描 - HTTP 探针 - Docker Socket 采集(容器识别) - 服务类型自动匹配 - 扫描结果上传给 Server |
每个 VLAN / 子网可部署一个 Daemon,用类似“探针节点”的方式覆盖整个网络。 | |
| 3 | UI(Web 前端) | Svelte 5 + SvelteKit,使用 @xyflow/svelte 渲染拓扑图 | - 主机/服务列表 - 拓扑可视化 - 服务分组 - 自定义布局 - 导出 PNG - 用户、组织、角色管理 |
UI 交互体验优秀,拓扑操作非常直观。 |
04 NetVisor 部署
4.1 部署NetVisor Server
使用Docker compose部署NetVisor Server,NetVisor部署完成后,通过使用浏览器访问http://NAS:8090打开应用,首次使用需要注册管理员账号并完成初始化配置。
1 | |

4.2 创建 Daemons API Key
Daemons 等同于Agent,Daemons 主动发起扫描并将扫描结果同步到Server组件中。
Daemons -> Create Daemons -> Generate Key


创建Daemons成功输出结果,可以看到Daemons支持二进制和Docker两种方式进行部署
4.3 部署Daemons
基于Docker Compose部署Daemons
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24services:
netvisor-daemon:
image: mayanayza/netvisor-daemon:latest
container_name: netvisor-daemon
network_mode: host
privileged: true
restart: unless-stopped
environment:
# NetvisorServer URL connection
- NETVISOR_SERVER_URL=http://10.10.0.241:8090
# Daemon configuration,自动生成
- NETVISOR_DAEMON_API_KEY=a1d02b4e8d854fef86b8f6fd462932ae
- NETVISOR_PORT=60073
- NETVISOR_MODE=Pull
- NETVISOR_BIND_ADDRESS=0.0.0.0
- NETVISOR_NAME=netvisor-daemon
- NETVISOR_LOG_LEVEL=info
- NETVISOR_HEARTBEAT_INTERVAL=30
- NETVISOR_NETWORK_ID=366b4f33-487c-4b87-a432-caf1ea1c92a5
volumes:
- ./netvisor-daemon/config:/root/.config/daemon
# Comment out the line below to disable docker discovery
- /var/run/docker.sock:/var/run/docker.sock:ro使用二进制文件部署Daemons
1
2~] bash -c "$(curl -fsSL https://raw.githubusercontent.com/mayanayza/netvisor/refs/heads/main/install.sh)"
~] sudo netvisor-daemon --server-url http://10.10.0.241:8090 --network-id 366b4f33-487c-4b87-a432-caf1ea1c92a5 --daemon-api-key fe74521bf48b48f1bcf6e77713ed88c7 --mode pull
05 实现的效果
