| Fabricante | LSA1 | LSA2 | LSA5 | Opaque-area (TE) |
|---|---|---|---|---|
| Cisco | show ip ospf database router | show ip ospf database network | show ip ospf database external | — |
| Cisco NX-OS | show ip ospf database router detail | show ip ospf database network detail | show ip ospf database external detail | — |
| Fortinet | get router info ospf database router lsa | get router info ospf database network lsa | get router info ospf database external lsa | — |
| FRR/Quagga | show ip ospf database router | show ip ospf database network | show ip ospf database external | show ip ospf database opaque-area |
| Ruckus | show ip ospf database link-state router | show ip ospf database link-state network | show ip ospf database external-link-state | — |
| Juniper | show ospf database router extensive | no-more | show ospf database network extensive | no-more | show ospf database external extensive | no-more | — |
| Bird | show ospf state all | show ospf state all | show ospf state all | — |
| Nokia | show router ospf database type router detail | show router ospf database type network detail | show router ospf database type external detail | — |
| Mikrotik | /routing ospf lsa print detail file=lsa.txt | /routing ospf lsa print detail file=lsa.txt | /routing ospf lsa print detail file=lsa.txt | — |
| Huawei | display ospf lsdb router | display ospf lsdb network | display ospf lsdb ase | — |
| Paloalto | show routing protocol ospf dumplsdb | show routing protocol ospf dumplsdb | show routing protocol ospf dumplsdb | — |
| — | ||||
| Ubiquiti | show ip ospf database router | show ip ospf database network | show ip ospf database external | — |
| Allied Telesis | show ip ospf database router | show ip ospf database network | show ip ospf database external | — |
| Extreme | show ospf lsdb detail lstype router | show ospf lsdb detail lstype network | show ospf lsdb detail lstype as-external | — |
| Ericsson | show ospf database router detail | show ospf database network detail | show ospf database external detail | — |
| Obligatoriedad | YES | YES | NO | Opcional (TE) |
Visualización de topología LSDB OSPFv3 (RFC 5340). Guarda el resultado del comando en un archivo con extensión .txt o .log y súbelo a Topolograph.
| Fabricante | Comando | Soporte API |
|---|---|---|
| Arista | show ipv6 ospf database detail | YES |
Guarda el resultado de al menos dos comandos OSPF (para obtener LSA1 y LSA2) o un único comando IS-IS y súbelo a Topolograph con extensión .txt o .log.
| Fabricante | Comando | Soporte API |
|---|---|---|
| Cisco | show isis database detail | YES |
| Juniper | show isis database extensive | YES |
| Nokia | show router isis database detail | YES |
| Huawei | display isis lsdb verbose | YES |
| FRR | show isis database detail* (router-isis#no hostname dynamic) | YES |
*FRR mezcla LSPIDs y nombres de host dinámicos en la LSDB IS-IS, por lo que solo se admite la construcción de topología IS-IS sin nombres de host. «no hostname dynamic» desactiva los nombres de host dinámicos en la LSDB IS-IS local.
| Nombre del TLV | Número de TLV | Cisco | Juniper | Nokia | FRR | Huawei | ZTE |
|---|---|---|---|---|---|---|---|
| IS Reachability | 2 | YES | YES | YES | YES | YES | |
| Extended IS Reachability (new) | 22 | YES | YES | YES | YES | YES | YES |
| IPv4 Internal Reachability (old) | 128 | YES | YES | YES | YES | YES | |
| IPv4 External Reachability (old) | 130 | ||||||
| Extended IPv4 Reachability (new) | 135 | YES | YES | YES | YES | YES | YES |
| IPv6 Reachability | 2 | YES | YES | YES | YES | YES | YES |
La red de demostración ya está cargada para todos. Pulsa «Load dynamic graph» para cargarla. Una vez cargada, verás la topología; las líneas en negrita indican enlaces ECMP.
Pulsa sobre la línea en negrita para desplegar el ECMP y ver todos los enlaces anidados.
Es posible construir el camino más corto desde un nodo. Haz clic derecho sobre un nodo. La descripción con todos los nodos y el coste del camino aparece encima de la topología.
Una vez establecidos el origen y el destino, el camino más corto quedará resaltado.
Nueva función de la versión v2.11. MST permite ver todos los caminos más cortos hacia o desde un nodo. Actívalo desde este selector.
Nueva función de v2.11. Todos los caminos más cortos entrantes están construidos hacia el nodo.
Nueva función de v2.11. Todos los caminos más cortos salientes están construidos desde el nodo.
Nueva función de v2.13. Diferencia entre los caminos más cortos entrantes y salientes del nodo seleccionado.
¿Cómo saber qué redes terminan en un nodo concreto? Hay dos formas. La primera: empieza a escribir el ID del nodo en el campo «Find node by RID/IP. Find network» y verás todas las redes terminadas en ese nodo.
El segundo método es hacer clic sobre un nodo. Aparece un formulario con la lista de todas las redes con y sin respaldo. Una red se considera con respaldo si está terminada en al menos dos nodos.
Para encontrar el camino de respaldo, pulsa sobre la arista resaltada. Simularás un fallo de enlace y el camino más corto se reconstruirá evitando la arista «caída».
Es posible cambiar el coste OSPF de cualquier enlace. Haz clic derecho sobre una arista y aparecerá un formulario. Escribe el nuevo coste. Imagina que necesitas redirigir el tráfico del enlace 123.10.10.10 - 123.30.30.30 a otro enlace.
Haz clic derecho sobre la arista resaltada y establece 12. Obtendremos un nuevo flujo de tráfico con el nuevo coste OSPF.
Cuando realizas cambios de configuración (añadir una nueva red, redistribuir otro protocolo en OSPF o cambiar filtros en route-maps) es muy recomendable verificar que los resultados coinciden con lo esperado. Para ello, sube el estado de la red antes y después de los cambios y compáralos. Se mostrará:
En este modo es posible simular la caída de un enlace o router. La topología se repintará con el flujo de tráfico esperado evitando el elemento fallido.
Carga un grafo si aún no lo has hecho y pulsa NetworkReactionOnFailure.
Como puede verse, la tasa de disminución de tráfico del nodo 123.30.30.30 hacia 123.123.30.30 y 123.123.31.31 difiere de la dirección opuesta [de 123.123.30.30 a 123.30.30.30] hasta ~2 veces. Esto ocurre debido a la ruta de tráfico asimétrica.
También podemos ver el aumento esperado de tráfico en la arista pintada de azul.
Topolograph construye la topología basándose en la adyacencia OSPF y la conectividad física está oculta. En algunos casos podemos asumir que los vecinos comparten el mismo medio. Por ejemplo, si los vecinos tienen un DR común, asumimos que están conectados por medio físico compartido y al emular el fallo de una arista entre esos vecinos, se emulan todas las aristas como caídas.
Marcar todos los enlaces de medio compartido (con DR común) como habilitados
Si los vecinos no tienen DR, o lo tienen pero solo hay dos vecinos en el enlace, al emular el fallo de arista se elimina únicamente el enlace entre esos dos vecinos concretos.
Marcar todos los enlaces de medio compartido (con DR común) como deshabilitados
Haz clic derecho sobre un nodo y elige «shutdown this node». El algoritmo excluye ese nodo.
La reacción de la red ante la caída del nodo 123.123.101.101.
En la pestaña NetworkReactionOnFailure es posible ver la reacción de la red ante un cambio de coste OSPF al vuelo. Establece el nuevo coste OSPF en el menú contextual de la arista (clic derecho).
OSPF/IS-IS LSDB <-> YAML son intercambiables en ambas direcciones: permite diseñar un dominio IGP desde cero o basándose en una LSDB cargada, añadir nuevos enlaces o cambiar costes, y comprobar la reacción de la red.
Construye un grafo con nodos y aristasdefinidos.
El nombre del nodo es obligatorio. Debe estar en formato de dirección IP. Para cambiarlo a otro valor usa label
Las etiquetas de nodo son opcionales. Cualquier par clave (cadena): valor (str, int, float, diccionario, lista).
Hay un grafo con 6 nodos. Selecciona todos los nodos primarios (ha_role: primary) en el primer DC (dc1)
src, dst son obligatorios.
cost es opcional. El valor por defecto es 1. Equivale al coste OSPF/IS-IS.
directed es opcional. El valor por defecto es false.
Las etiquetas de arista son opcionales. Cualquier par clave (cadena): valor (str, int, float, diccionario, lista).
Selecciona todas las aristas del ISP verizon entre 10.10.10.2 y 10.10.10.4
Añadamos un nuevo enlace con coste 1 entre los dispositivos R3 (10.10.10.3) y R4 (10.10.10.4) y veamos cómo reacciona la red.
Como es evidente, el tráfico aumenta en el enlace directo R3<->R4 y disminuye hacia R2 (10.10.10.2) y R5 (10.10.10.5).
En este modo es posible ejecutar algoritmos para verificar tu red OSPF.
Muestra todos los enlaces unidireccionales (el número de enlaces IN y OUT entre dos vecinos no es igual)
La arista aparece marcada en rojo por tener métricas OSPF distintas: coste 1 y coste 10
Muestra todos los caminos asimétricos desde distintos puntos de vista.
Obtenemos una lista de nodos con caminos asimétricos. Al revisarlos se puede ver la diferencia entre caminos entrantes y salientes.
Suponemos que si varios enlaces están agrupados en ECMP y el enlace principal cae, el camino de respaldo debe pasar por el segundo enlace del mismo ECMP.
Comprobación superada
Si el camino de respaldo no pasa por el ECMP y elige una ruta completamente diferente, el informe se considera fallido.
Comprobación fallida
Este informe verifica que si dos ubicaciones están directamente conectadas, los caminos de respaldo deben ser únicamente entre esas dos ubicaciones y no transitar por una tercera. Antes de ejecutarlo, es necesario crear grupos (~nombres de sitios/ubicaciones) y asignar dispositivos a los grupos. Por ejemplo, hay dos ubicaciones en Francia: la principal (EU_FRA) y la remota (EU_FRA1). El mismo esquema con oficinas en Italia. Las oficinas principales de Francia e Italia están conectadas entre sí con un enlace principal (coste OSPF 10) y uno de respaldo (coste OSPF 20).
Las oficinas remotas tienen el enlace principal (coste OSPF 1) a sus oficinas principales y el enlace de respaldo (coste OSPF 10) a la oficina extranjera.

Comprobación fallida
En la pestaña Analytics es posible ver cuántas subredes terminadas tienen respaldo mediante la terminación de la misma subred en distintos dispositivos.
Haz clic sobre un nodo para descubrir qué redes tienen respaldo y cuáles no.
Como se puede ver, solo el loopback del propio dispositivo no tiene respaldo, lo cual es normal.
"Analítica/Redes terminadas duplicadas. El problema que MPLS tiene con las duplicaciones de IP en la red se debe a que las etiquetas se generan en función de bloques IP, que pueden duplicarse. Como resultado, el mismo bloque IP puede asociarse a etiquetas distintas. Esto lleva a que el mismo bloque, con etiquetas diferentes, se propague a otros routers, incluido el que tiene la IP duplicada. Resulta especialmente problemático al implementar MPLS Traffic Engineering (MPLS-TE) o RSVP-TE, ya que puede degradar el rendimiento y provocar errores de enrutamiento. Por tanto, la duplicación de bloques es crítica en entornos MPLS, principalmente por la generación de etiquetas duplicadas para el mismo bloque. En los routers, esto provoca confusión al recalcular rutas TE o RSVP-TE."
| Red | Número de nodos terminadores | Nombres de nodos |
|---|---|---|
| 10.0.0.0/24 | 4 | [172.16.1.2, 172.26.1.2], [172.30.2.1, 178.20.3.1] |
La red 10.0.0.0/24 está terminada en cuatro nodos: 172.16.1.2 y 172.26.1.2 están directamente conectados, 172.30.2.1 y 178.20.3.1 están directamente conectados, pero no entre sí.
Puedes usar tu herramienta NetDevOps favorita (Ansible, netmiko, Nornir, Topolograph SDK, etc.) para subir el grafo de red OSPF a Topolograph mediante una solicitud POST. Una vez subido, recibirás la diferencia con los grafos subidos anteriormente, concretamente:
Es necesario crear una cuenta con email y contraseña en la página Login/Registro, así como añadir tu IP/red de origen a la lista de redes autorizadas en la pestaña API.
Guarda el resultado de los comandos con LSA1, LSA2, LSA5 en un único archivo - cisco_lsdb_output.txt
import requests
from pprint import pprint as pp
with open('cisco_lsdb_output.txt') as f:
lsdb_output = f.read()
r_post = requests.post('https://topolograph.com/api/graph', auth=('youraccount@domain.com', 'your-pass'),
json={'lsdb_output': lsdb_output, 'vendor_device': 'Cisco'})
pp(r_post.json())
Con Python leemos el contenido del archivo y lo enviamos (solicitud POST) a Topolograph.
La respuesta contiene:
>>> pp(r_post.json())
{'diff': {'compared_with_graph_time': '02Jun2021_21h18m04s_13_hosts',
'graphs_diff': {'all_edges_stats_ll': [{'dst_node': '123.123.110.110',
'link_cost': 10,
'link_status': 'old',
'src_node': '123.123.100.100'},
{'dst_node': '123.123.111.111',
'link_cost': 10,
'link_status': 'old',
'src_node': '123.123.101.101'},
{'dst_node': '123.123.100.100',
'link_cost': 10,
'link_status': 'old',
'src_node': '123.123.110.110'},
{'dst_node': '123.123.101.101',
'link_cost': 10,
'link_status': 'old',
'src_node': '123.123.111.111'}],
'new_nodes': [],
'old_nodes': []},
'networks_diff': {'new_subnets_attr_dd_ll': [{'rid': '123.30.30.30',
'subnet': '30.30.30.30/32'}],
'old_subnets_attr_dd_ll': [{'rid': '123.10.10.10',
'subnet': '1.2.3.0/30'}]}},
'graph_time': '08Jun2021_20h15m26s_13_hosts',
'hosts': {'count': 12},
'networks': {'backuped': 14,
'count': 38,
'notbackuped': 24,
'url_link': 'https://topolograph.com/api/network/08Jun2021_20h15m26s_13_hosts'},
'reports': {'asym_edges_pass_status': False},
'timestamp': '2021-06-8T20:15:26.265000'}
Diferencia visual entre estados OSPF.
>>> pp(r_post.json())
{'diff': {'compared_with_graph_time': '02Jun2021_21h18m04s_13_hosts',
'graphs_diff': {'all_edges_stats_ll': [{'dst_node': '123.123.110.110',
'link_cost': 10,
'link_status': 'old',
'src_node': '123.123.100.100'},
{'dst_node': '123.123.111.111',
'link_cost': 10,
'link_status': 'old',
'src_node': '123.123.101.101'},
{'dst_node': '123.123.100.100',
'link_cost': 10,
'link_status': 'old',
'src_node': '123.123.110.110'},
{'dst_node': '123.123.101.101',
'link_cost': 10,
'link_status': 'old',
'src_node': '123.123.111.111'}],
'new_nodes': [],
'old_nodes': []},
'networks_diff': {'new_subnets_attr_dd_ll': [{'rid': '123.30.30.30',
'subnet': '30.30.30.30/32'}],
'old_subnets_attr_dd_ll': [{'rid': '123.10.10.10',
'subnet': '1.2.3.0/30'}]}},
'graph_time': '08Jun2021_20h15m26s_13_hosts',
'hosts': {'count': 12},
'networks': {'backuped': 14,
'count': 38,
'notbackuped': 24,
'url_link': 'https://topolograph.com/api/network/08Jun2021_20h15m26s_13_hosts'},
'reports': {'asym_edges_pass_status': False},
'timestamp': '2021-06-8T20:15:26.265000'}
La topología se construye a partir de LSA1 y LSA2, que son específicos de cada área. Para redes con múltiples áreas, es necesario guardar el resultado de la LSDB de varios dispositivos en archivos separados con el formato Nombre del fabricante_nombre del protocolo.txt
Por ejemplo, dos LSDBs: Cisco_ospf.txt, Juniper_ospf.txt
Las LSDBs se guardan en la carpeta lsdb_samples y se envuelven en un diccionario de atributos LSDB
{'lsdb_output': '...lsdb output...', 'vendor_device': 'Cisco, Juniper...', 'igp_protocol': 'ospf|isis'}
Ejemplo completo:
import requests
TOPOLOGRAPH_HOST="127.0.0.1"
TOPOLOGRAPH_PORT=5000
TOPOLOGRAPH_WEB_API_USERNAME_EMAIL="your login"
TOPOLOGRAPH_WEB_API_PASSWORD="your password"
from pprint import pprint as pp
lsdbs_attr_ll = []
lsdb_dir = os.path.join(os.getcwd(), 'lsdb_samples')
for vendor_name, protocol_name in [('Cisco', 'ospf'), ('Juniper', 'ospf')]:
f_name = os.path.join(lsdb_dir, f"{vendor_name}_{protocol_name}.txt")
with open(f_name) as f:
lsdbs_attr_ll.append({'lsdb_output': f.read(), 'vendor_device': vendor_name, 'igp_protocol': protocol_name})
r_post = requests.post(f'http://{TOPOLOGRAPH_HOST}:{TOPOLOGRAPH_PORT}/api/graphs', auth=(TOPOLOGRAPH_WEB_API_USERNAME_EMAIL, TOPOLOGRAPH_WEB_API_PASSWORD), json=lsdbs_attr_ll, timeout=(5, 30))
pp(r_post.json())
La respuesta contiene:
Pueden existir múltiples instancias de enrutamiento OSPF en un mismo dispositivo en distintas VRFs, lo que provoca duplicación de nodos en el grafo. La pestaña VRF permite apuntar varias instancias OSPF a una sola y evitar la duplicación.
Hay tres VRFs y tres instancias OSPF en un router. Para evitar la duplicación, crea las VRFs (o impórtalas mediante CSV), asocia el nodo a la VRF y apunta las instancias duplicadas al RID OSPF maestro.