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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
services:
# Netvisor Server:自动发现并可视化记录网络基础设施
NetvisorServer:
image: mayanayza/netvisor-server:latest
container_name: NetvisorServer
restart: unless-stopped
ports:
- 8090:60072
environment:
# NetVisor-Server配置
NETVISOR_DATABASE_URL: postgresql://netvisor:netvisor@10.10.0.241:25432/netvisor # 数据库连接字符串,需要使用postgresql数据库。
NETVISOR_WEB_EXTERNAL_PATH: /app/static # 静态文件路径
NETVISOR_PUBLIC_URL: http://10.10.0.241:8090 # 服务器的公共 URL
volumes:
- ./netvisor/data:/data
networks:
- service

image

4.2 创建 Daemons API Key

Daemons 等同于Agent,Daemons 主动发起扫描并将扫描结果同步到Server组件中。

Daemons​ -> Create Daemons​ -> Generate Key

image

image

创建Daemons成功输出结果,可以看到Daemons支持二进制和Docker两种方式进行部署

4.3 部署Daemons

  1. 基于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
    24
    services:
    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
  2. 使用二进制文件部署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 实现的效果

netvisor-topology-2025-12-08


NetVisor深度解析:自动化网络发现与拓扑可视化的新方式
https://hesc.info/post/netvisor-indepth-analysis-a-new-way-to-automate-network-discovery-and-topology-visualization-z1k4qdj.html
作者
需要哈气的纸飞机
发布于
2025年12月8日
许可协议