Network Topology
Network Topology
Módulo de visualización y análisis de la topología de red L3 (y L2 inferida). Construye un grafo dirigido a partir de telemetría local e integraciones.
Qué muestra el grafo
| Elemento | Representación | Fuente de datos |
|---|---|---|
| Nodo Gateway | Hexágono grande (centro) | Sensor: default route + ARP gateway MAC |
| Nodo Subred | Círculo agrupador | Sensor: interfaces IP + máscara + rutas |
| Nodo Host/Asset | Círculo pequeño | Assets & Inventory (merged) |
| Nodo Segmento VLAN | Rectángulo punteado | Inferido: misma subred + mismo gateway |
| Arista Ruta | Línea sólida | Sensor: tabla de rutas (next-hop) |
| Arista Enlace L2 | Línea discontinua | Inferido: misma subred, ARP mutuo |
| Arista Integración | Línea punteada coloreada | FortiGate/Palo Alto: route table, VPN, HA |
Construcción del grafo (Pipeline)
1. RECOLECCIÓN ├── Sensor local: interfaces, ARP, tabla de rutas, gateway ├── FortiGate/Palo Alto: route table, interface list, VPN tunnels ├── SNMP: ipRouteTable, ipNetToMedia, dot1dTpFdbTable └── Zabbix/Wazuh: host interfaces, network maps
2. NORMALIZACIÓN ├── Parse a esquema interno: Node {id, label, type, subnet, metadata} └── Parse a esquema interno: Edge {source, target, type, metadata}
3. FUSIÓN (MERGE) ├── Deduplicar nodos por IP+CIDR+MAC ├── Fusionar subredes solapadas (agregar máscara más amplia) └── Resolver gateway por defecto único por segmento
4. CLASIFICACIÓN ├── type = 'gateway' si es next-hop de ruta default ├── type = 'subnet' si agrega ≥2 hosts ├── type = 'segment' si VLAN inferida (misma subnet + gateway) ├── type = 'host' / 'router' / 'switch' / 'firewall' / 'server' por heurística └── type = 'unknown' si no clasifica
5. ENRIQUECIMIENTO ├── Vendor por OUI (MAC) / sysObjectID (SNMP) ├── Reachable = último ARP/ICMP/TCP success < 2× polling ├── Stale = sin actualización > 24h └── Confidence = ponderado por fuentes (ver Assets)
6. PERSISTENCIA ├── topology_nodes (id, label, type, subnet, metadata_json) ├── topology_edges (source, target, type, metadata_json) └── topology_snapshots (timestamp, nodes_json, edges_json) — para historial
7. RENDER ├── Cytoscape.js (canvas) — layout: cose-bilkent / fcose / concentric ├── Nodos: tamaño ∝ confidence, color ∝ type, badge ∝ reachable/stale └── Aristas: grosor ∝ confianza, estilo ∝ tipo, tooltip metadataControles de UI
| Control | Función |
|---|---|
| Layout selector | cose-bilkent (defecto), fcose, concentric, breadthfirst |
| Zoom / Pan | Rueda / Click-arrastre |
| Filtro por tipo | Checkboxes: Gateway, Subred, Host, Segmento, Desconocido |
| Filtro por estado | 🟢 Reachable, 🟡 Stale, 🔴 Unreachable, ⚫ Unknown |
| Filtro por fuente | Sensor, FortiGate, Palo Alto, SNMP, Merged |
| Búsqueda | ip:10.0, label:core, type:gateway → resalta nodos |
| Clic nodo | Panel lateral: metadata, IPs, MACs, vendor, últimos eventos, enlaces |
| Clic arista | Detalle: tipo, fuentes, métricas (latencia, uso si SNMP) |
| Clic derecho | Menú: Ver en Assets, Crear incidente, Consultar ARGUS, Exportar subgrafo |
| Minimapa | Esquina inferior derecha (navegación rápida) |
| Fullscreen | Tecla F o botón [⛶] |
Datos inferidos vs. observados
| Dato | Observado (fuente directa) | Inferido (heurística) |
|---|---|---|
| Gateway IP/MAC | Sensor: default route + ARP | — |
| Subredes locales | Sensor: interfaces IP/mask | — |
| Hosts en subred | Sensor: ARP table + integracciones | — |
| Rutas L3 | Sensor: route table / FW: route table | — |
| VLAN ID | SNMP: dot1qVlanCurrentTable | Inferido: misma subred + mismo gateway → mismo segmento |
| Enlaces L2 (switch ports) | SNMP: dot1dTpFdbTable (MAC→puerto) | — |
| Segmentos DMZ / Mgmt / Users | Naming convention / firewall zones | Inferido: subnet + gateway + zona FW |
| VPN tunnels | FortiGate/Palo Alto: IPsec/SSL VPN tables | — |
⚠️ Limitación: VLANs solo inferidas por subred/gateway. Sin consulta a switches (SNMP dot1q), no hay visibilidad real de VLAN ID ni trunking. Ver Limitaciones.
Métricas de calidad del grafo
| Métrica | Cálculo | Objetivo |
|---|---|---|
| Cobertura gateway | gateways_detectados / gateways_esperados | 100% (al menos 1 default) |
| Cobertura subredes | subnets_en_grafo / subnets_en_sensor | ≥ 95% |
| Hosts reachable | hosts_reachable / hosts_totales | ≥ 90% |
| Edges con fuente múltiple | edges_merged / edges_totales | > 30% (corroboración) |
| Ciclos de actualización | snapshot_interval (defecto 5 min) | < 10 min |
Exportación
| Formato | Uso |
|---|---|
| GraphML | Import en Gephi, yEd, NetworkX |
| JSON (Cytoscape.js) | Re-import en otra instancia / backup |
| PNG / SVG | Captura visual para reportes |
| CSV (nodos/aristas) | Análisis en Excel / SIEM |
Limitaciones conocidas
| Limitación | Detalle | Roadmap |
|---|---|---|
| VLAN ID real | Solo inferida; sin SNMP dot1q | SNMP switch integration |
| L2 topology completa | Requiere LLDP/CDP + FDB tables | LLDP/CDP parser + SNMP FDB |
| Rutas asimétricas | Grafo dirigido; no muestra return path | Bidirectional edge rendering |
| Escalabilidad | > 5k nodos → lag en Cytoscape canvas | WebGL renderer / clustering |
| Historial temporal | Snapshots cada 5 min; no animación nativa | Time-slider playback |
| Multi-gateway | Un gateway por segmento por defecto | Multi-next-hop support |
Páginas relacionadas
- Assets & Inventory — Fuente primaria de nodos host
- Exposure Intelligence — Targets de escaneo desde topología
- Command Center — Mini-grafo en dashboard
- Local Sensor — Fuente de interfaces, ARP, rutas
- Integraciones: FortiGate / Palo Alto — Route tables, VPN
- Integraciones: SNMP — ipRouteTable, FDB
- Configuración: Retención — TTL de snapshots topología
- Solución de problemas: Topología vacía