El mismo router, tres verdades distintas
Un solo equipo físico, varias identidades de enrutamiento, y por qué un grafo de nodos y aristas no puede contenerlas
Michel Wijnberg
Las cuatro primeras entradas de esta serie trataban de la confianza: modelar la red correctamente, observarla sin riesgo, reproducir el reenvío con honestidad y negarse a adivinar. Esta empieza un segundo bloque, sobre lo que hace falta de verdad para sostener esa línea.
Y empieza con lo que rompe a la mayoría de las herramientas de topología antes de que lleguen siquiera cerca de una pregunta interesante: un router no es una sola cosa.
Un router con dos de todo
Este es nrt1-cr1, de mi laboratorio:
Mire arriba a la derecha. No hay un distintivo de rol. Hay dos:
OSPFv2 ABR·ASBR
OSPFv3 ABR·ASBR
Y debajo, en Protocols & Areas:
| Instancia de protocolo | Áreas | Rol |
|---|---|---|
| OSPFv2 · proceso 1 (ipv4) | 0.0.0.0, 14.18.20.0 | ABR · ASBR |
| OSPFv3 · proceso 1 (ipv6) | 0.0.0.0, 14.18.20.0 | ABR · ASBR |
Parece una duplicación. No lo es. Son dos instancias de protocolo independientes con
dos bases de datos de estado de enlace independientes, y nrt1-cr1 se gana el título
de ABR por separado en cada una por estar conectado a más de un área dentro de esa
instancia. Las etiquetas de área coinciden porque alguien las numeró para que
coincidieran, no porque sean el mismo objeto. En la base de datos tienen UUID
distintos, porque el área 14.18.20.0 de OSPFv2 y el área 14.18.20.0 de OSPFv3 son
áreas distintas que casualmente comparten nombre.
Esa distinción suena pedante justo hasta que las dos discrepan. Que, según resulta, siempre lo hacen.
Un cable, dos costes, el cien por cien de las veces
Este es un único enlace físico entre dos routers:
Un cable. Et0/3 a Et0/3, 10G, transportando 172.24.2.13/30 y
fddb:10:24:2::6/127. Osprey lo dibuja como una sola arista, porque físicamente es una
sola arista, y le da una pestaña por protocolo.
Ahora lea los costes:
OSPFv2 Area 12.1.24.0 cost 10
OSPFv3 Area 12.1.24.0 cost 1
El mismo cable. El mismo número de área. Métrica distinta.
No preparé eso para la captura. Después comprobé todos los enlaces de doble pila del AS 200, y el resultado es más interesante que el ejemplo suelto:
| Enlaces de doble pila en el AS 200 | 124 |
|---|---|
| …donde los costes de OSPFv2 y OSPFv3 difieren | 124 (100 %) |
| en (v2 = 10, v3 = 1) | 85 |
| en (v2 = 10000, v3 = 10) | 39 |
Todos y cada uno difieren, pero mire los dos grupos: 39 enlaces se separan por un factor 1000 y 85 por un factor 10. Esa asimetría es lo interesante, y hizo falta preguntarle al router para explicarla.
Routing Process "ospf 1" Reference bandwidth unit is 100000 mbps
Routing Process "ospfv3 1" Reference bandwidth unit is 100 mbps
Un ajuste, no dos. El coste es el ancho de banda de referencia dividido por el ancho de banda de la interfaz, así que ambos procesos están escalando los mismos cables con números que difieren exactamente en un factor 1000. En los enlaces de 10 Mbps eso llega intacto: 10000 frente a 10. En los enlaces de 10 Gbps, OSPFv3 calcula 100/10000 = 0,01, y el coste mínimo que un router anunciará es 1. El suelo se come el resto.
Así que la distorsión no es uniforme, y eso es justamente lo que la hace peligrosa. Un escalado uniforme sería inofensivo: multiplique todos los costes de una topología por la misma constante y el camino más corto no se mueve. Aquí la constante es 1000 en unos enlaces y 10 en otros, porque intervino un recorte. Los dos protocolos, por tanto, ordenan los mismos enlaces de forma distinta entre sí, y el tráfico IPv4 y el IPv6 pueden tomar caminos distintos por esta red. No hay forma de saber a ojo cuáles. Hay que calcular los dos.
Una herramienta que dibuja “un enlace, un coste” tiene que elegir uno de esos dos números. Elija el que elija, se equivoca la mitad de las veces, y nunca le dirá en qué mitad está usted.
Por qué la jerarquía soporta peso
Esta es la razón por la que el modelo de datos de Osprey no es Node, Edge,
Protocol:
Network → Autonomous System → Routing Domain → Protocol Instance → Area → Device
↳ Interface
Cada nivel existe porque algo en la red puede diferir a lo largo de él:
- Network: la frontera del inquilino. El mismo equipo físico puede monitorizarse bajo dos inquilinos con credenciales distintas y vistas distintas.
- Autonomous System: la identidad BGP, y el ámbito al que pertenece una alimentación BMP.
- Routing Domain: tabla global, un VRF o un L3VPN. El mismo router, tablas de rutas distintas, alcanzabilidad genuinamente distinta.
- Protocol Instance: único en (dominio de enrutamiento, protocolo, id de proceso,
familia de direcciones). Este es el nivel que convierte a
nrt1-cr1en dos routers. - Area: donde vive realmente la LSDB y, por tanto, donde se ejecuta realmente el SPF.
- Device: muchos a muchos con las áreas, mediante una tabla de pertenencia. No una clave foránea. Una clave foránea habría forzado la mentira de que un router vive en un área.
Y las interfaces se delimitan por (device_id, if_index, area_id), porque el mismo puerto
físico participa a la vez en varias instancias de protocolo, con un coste distinto, un
estado de vecino distinto y una familia de direcciones distinta en cada una.
Los roles derivados salen de esa estructura en lugar de almacenarse como etiquetas:
- ABR = conectado a más de un área dentro de una instancia
- ASBR = el bit E activado en el LSA propio del router (RFC 2328 §A.4.2), que es el router declarando que origina información de enrutamiento externa. No un recuento de pertenencias: un router puede ser ASBR viviendo en una sola área, y puede abarcar varias instancias sin serlo
- VRF-Lite = presente en más de un dominio de enrutamiento
Que es por lo que nrt1-cr1 puede ser ABR dos veces, y por lo que el distintivo se dibuja
dos veces. Nadie escribió “ABR” en ninguna parte. Es una consecuencia de las pertenencias,
recalculada desde las LSDB.
Todas las topologías son reales a la vez
La forma útil de pensar esto es que no existe la topología. Hay varias, todas son simultáneamente ciertas, y responden a preguntas distintas:
| Topología | Construida a partir de | Responde |
|---|---|---|
| Física | LLDP / CDP, IP-MIB | Qué está cableado con qué |
| L2 | Adyacencia de bridge/VLAN | Qué comparte dominio de difusión |
| IGP (por instancia) | LSDB por protocolo y por área | Qué cree cada protocolo |
| BGP | RIB de BMP | Qué es alcanzable y a través de quién |
| Reenvío | La tabla propia de cada router | Adónde va realmente un paquete |
“¿Están conectados A y B?” tiene cinco respuestas correctas distintas según a cuál de esas se refiriera. Dos routers pueden compartir cable y ninguna adyacencia IGP. Pueden compartir una adyacencia IGP y no reenviarse jamás un paquete. Pueden ser pares BGP por un camino que cruza tres equipos que ninguno de los dos puede ver.
La tercera entrada era en realidad un argumento sobre las dos últimas filas: que la topología IGP y la topología de reenvío no son el mismo grafo, y tratarlas como uno producía caminos ficticios una vez de cada ocho. Esta entrada es el mismo argumento un nivel más abajo: la topología física y la topología de protocolo tampoco son el mismo grafo, y 124 enlaces de mi laboratorio lo demuestran con un factor de diez.
Lo que esto cuesta
Ser honesto con esto no sale gratis. Significa:
- Dos LSDB que recorrer donde una herramienta más simple recorre una
- Una tabla de pertenencia en lugar de una clave foránea
- Roles recalculados en lugar de almacenados
- Que toda consulta de camino necesita saber por qué instancia y por qué familia de direcciones se le está preguntando
- Una interfaz que tiene que mostrar una tira de pestañas en un enlace en lugar de un número
La alternativa es un grafo que se dibuja más rápido, demuestra mejor y elige en silencio uno de dos costes en cada enlace de doble pila de su red.
He operado redes donde los caminos IPv4 e IPv6 divergían y nadie se dio cuenta durante meses, porque todas las herramientas de la pared dibujaban una sola línea entre dos routers. La línea no era incorrecta. Simplemente respondía a una pregunta que nadie había hecho.
A continuación: qué pasa cuando esas fuentes se contradicen abiertamente: Cuando la red se contradice a sí misma.