← Alle Beiträge

Derselbe Router, drei verschiedene Wahrheiten

Ein physisches Gerät, mehrere Routing-Identitäten, und warum ein Graph aus Knoten und Kanten sie nicht fassen kann

Michel Wijnberg

In den ersten vier Beiträgen dieser Reihe ging es um Vertrauen: das Netzwerk korrekt modellieren, es gefahrlos beobachten, die Weiterleitung ehrlich reproduzieren und nicht raten. Dieser Beitrag beginnt eine zweite Gruppe, und zwar darüber, was es tatsächlich kostet, diese Linie zu halten.

Und er beginnt mit dem, woran die meisten Topologie-Werkzeuge scheitern, lange bevor sie in die Nähe einer interessanten Frage kommen: Ein Router ist nicht eine Sache.


Ein Router mit zwei von allem

Hier ist nrt1-cr1 aus meinem Labor:

Das Gerätepanel für nrt1-cr1 mit getrennten ABR·ASBR-Kennzeichen für OSPFv2 und OSPFv3
Das Gerätepanel für nrt1-cr1 mit getrennten ABR·ASBR-Kennzeichen für OSPFv2 und OSPFv3

Sehen Sie oben rechts. Nicht ein Rollen-Kennzeichen. Zwei:

OSPFv2   ABR·ASBR
OSPFv3   ABR·ASBR

Und darunter, unter Protocols & Areas:

ProtokollinstanzAreasRolle
OSPFv2 · Prozess 1 (ipv4)0.0.0.0, 14.18.20.0ABR · ASBR
OSPFv3 · Prozess 1 (ipv6)0.0.0.0, 14.18.20.0ABR · ASBR

Das sieht nach Dopplung aus. Ist es aber nicht. Das sind zwei unabhängige Protokollinstanzen mit zwei unabhängigen Link-State-Datenbanken, und nrt1-cr1 verdient sich den Titel ABR in jeder von beiden getrennt, indem es in dieser Instanz an mehr als einer Area hängt. Die Area-Bezeichnungen stimmen überein, weil jemand sie passend nummeriert hat, nicht weil es dasselbe Objekt wäre. In der Datenbank haben sie unterschiedliche UUIDs, denn die OSPFv2-Area 14.18.20.0 und die OSPFv3-Area 14.18.20.0 sind verschiedene Areas, die zufällig denselben Namen tragen.

Dieser Unterschied klingt pedantisch, genau bis zu dem Moment, in dem die beiden voneinander abweichen. Und das tun sie, wie sich herausstellt, immer.


Eine Leitung, zwei Kosten, in hundert Prozent der Fälle

Hier ist ein einzelner physischer Link zwischen zwei Routern:

Das Link-Panel für lax1-gw1 zu lax1-gw2, mit den Reitern Physical, OSPFv2 und OSPFv3 und unterschiedlichen Kosten
Das Link-Panel für lax1-gw1 zu lax1-gw2, mit den Reitern Physical, OSPFv2 und OSPFv3 und unterschiedlichen Kosten

Ein Kabel. Et0/3 an Et0/3, 10G, trägt 172.24.2.13/30 und fddb:10:24:2::6/127. Osprey zeichnet das als eine Kante, weil es physisch eine Kante ist, und gibt ihr einen Reiter je Protokoll.

Lesen Sie jetzt die Kosten:

OSPFv2   Area 12.1.24.0   cost 10
OSPFv3   Area 12.1.24.0   cost 1

Dieselbe Leitung. Dieselbe Area-Nummer. Unterschiedliche Metrik.

Ich habe das nicht für den Screenshot arrangiert. Ich habe danach jeden Dual-Stack-Link in AS 200 überprüft, und das Ergebnis ist interessanter als das Einzelbeispiel:

Dual-Stack-Links in AS 200124
…bei denen die Kosten von OSPFv2 und OSPFv3 abweichen124 (100 %)
bei (v2 = 10, v3 = 1)85
bei (v2 = 10000, v3 = 10)39

Jeder einzelne weicht ab, aber sehen Sie sich die beiden Gruppen an: 39 Links liegen um den Faktor 1000 auseinander, 85 um den Faktor 10. Diese Asymmetrie ist der interessante Teil, und um sie zu erklären, musste ich den Router fragen.

Routing Process "ospf 1"     Reference bandwidth unit is 100000 mbps
Routing Process "ospfv3 1"   Reference bandwidth unit is 100 mbps

Eine Einstellung, nicht zwei. Die Kosten sind Referenzbandbreite geteilt durch Interface-Bandbreite, beide Prozesse skalieren dieselben Leitungen also mit Zahlen, die sich um exakt 1000 unterscheiden. Auf den 10-Mbps-Links kommt das unverfälscht an: 10000 gegen 10. Auf den 10-Gbps-Links rechnet OSPFv3 100/10000 = 0,01, und die kleinste Metrik, die ein Router ankündigt, ist 1. Die Untergrenze frisst den Rest.

Die Verzerrung ist also nicht gleichmäßig, und genau das macht sie gefährlich. Eine gleichmäßige Skalierung wäre harmlos: Multiplizieren Sie jede Metrik in einer Topologie mit derselben Konstanten, und der kürzeste Pfad verschiebt sich nicht. Hier ist die Konstante auf manchen Links 1000 und auf anderen 10, weil eine Begrenzung eingegriffen hat. Die beiden Protokolle ordnen dieselben Links deshalb unterschiedlich zueinander, und IPv4- und IPv6-Verkehr können in diesem Netz verschiedene Wege nehmen. Sie können nicht mit bloßem Auge sehen, welche. Sie müssen beides rechnen.

Ein Werkzeug, das “ein Link, eine Metrik” darstellt, muss sich für eine der beiden Zahlen entscheiden. Egal welche es nimmt, es liegt in der Hälfte der Fälle falsch, und es wird Ihnen nie sagen, in welcher Hälfte Sie gerade sind.


Warum die Hierarchie tragend ist

Das ist der Grund, warum Ospreys Datenmodell nicht Node, Edge, Protocol lautet:

Network → Autonomous System → Routing Domain → Protocol Instance → Area → Device
                                                                      ↳ Interface

Jede Ebene existiert, weil etwas im Netzwerk sich über sie hinweg unterscheiden kann:

  • Network: die Mandantengrenze. Dasselbe physische Gerät kann unter zwei Mandanten mit unterschiedlichen Zugangsdaten und unterschiedlichen Sichten überwacht werden.
  • Autonomous System: die BGP-Identität und der Bereich, zu dem ein BMP-Feed gehört.
  • Routing Domain: globale Tabelle, eine VRF oder ein L3VPN. Derselbe Router, andere Routing-Tabellen, wirklich andere Erreichbarkeit.
  • Protocol Instance: eindeutig über (Routing-Domäne, Protokoll, Prozess-ID, Adressfamilie). Das ist die Ebene, die aus nrt1-cr1 zwei Router macht.
  • Area: dort, wo die LSDB tatsächlich lebt, und damit dort, wo SPF tatsächlich läuft.
  • Device: viele-zu-viele mit Areas, über eine Mitgliedschaftstabelle. Kein Fremdschlüssel. Ein Fremdschlüssel hätte die Lüge erzwungen, dass ein Router in genau einer Area lebt.

Und Interfaces sind über (device_id, if_index, area_id) abgegrenzt, denn derselbe physische Port nimmt gleichzeitig an mehreren Protokollinstanzen teil, in jeder mit anderen Kosten, anderem Nachbarschaftszustand und anderer Adressfamilie.

Abgeleitete Rollen ergeben sich aus dieser Struktur, statt als Beschriftungen gespeichert zu werden:

  • ABR = an mehr als einer Area innerhalb einer Instanz angeschlossen
  • ASBR = das E-Bit im eigenen LSA des Routers (RFC 2328 §A.4.2), also die Aussage des Routers, dass er externe Routing-Informationen erzeugt. Keine Zählung von Mitgliedschaften: Ein Router kann ASBR sein und dabei in einer einzigen Area leben, und er kann sich über mehrere Instanzen erstrecken, ohne einer zu sein
  • VRF-Lite = in mehr als einer Routing-Domäne vorhanden

Deshalb kann nrt1-cr1 zweimal ABR sein, und deshalb wird das Kennzeichen zweimal gezeichnet. Niemand hat irgendwo “ABR” eingetippt. Es ist eine Folge der Mitgliedschaften, aus den LSDBs neu berechnet.


Die Topologien sind alle gleichzeitig echt

Der sinnvolle Weg, darüber nachzudenken, ist: So etwas wie die Topologie gibt es nicht. Es gibt mehrere, sie sind alle gleichzeitig wahr, und sie beantworten verschiedene Fragen:

TopologieGebaut ausBeantwortet
PhysischLLDP / CDP, IP-MIBWas ist womit verkabelt
L2Bridge-/VLAN-NachbarschaftWas teilt sich eine Broadcast-Domäne
IGP (je Instanz)LSDB je Protokoll je AreaWas jedes Protokoll glaubt
BGPBMP-RIBWas ist erreichbar und über wen
WeiterleitungDie eigene Tabelle jedes RoutersWohin ein Paket tatsächlich geht

“Sind A und B verbunden?” hat fünf verschiedene richtige Antworten, je nachdem, welche davon Sie meinten. Zwei Router können sich ein Kabel teilen und keine IGP-Nachbarschaft haben. Sie können eine IGP-Nachbarschaft haben und einander nie ein Paket schicken. Sie können BGP-Peers über einen Pfad sein, der drei Geräte überquert, die keiner von beiden sehen kann.

Beitrag drei war eigentlich ein Argument über die letzten beiden Zeilen: dass die IGP-Topologie und die Weiterleitungstopologie nicht derselbe Graph sind, und dass sie als einen zu behandeln in einem von acht Fällen erfundene Pfade erzeugte. Dieser Beitrag ist dasselbe Argument eine Ebene tiefer: Auch die physische Topologie und die Protokoll-Topologie sind nicht derselbe Graph, und 124 Links in meinem Labor belegen das mit einem Faktor zehn.


Was das kostet

Ehrlich zu sein ist nicht umsonst. Es bedeutet:

  • Zwei LSDBs ablaufen, wo ein einfacheres Werkzeug eine abläuft
  • Eine Mitgliedschaftstabelle statt eines Fremdschlüssels
  • Rollen neu berechnen statt speichern
  • Jede Pfadabfrage muss wissen, nach welcher Instanz und welcher Adressfamilie gefragt wird
  • Eine Oberfläche, die an einem Link eine Reiterleiste zeigen muss statt einer Zahl

Die Alternative ist ein Graph, der schneller rendert, sich besser vorführen lässt und auf jedem Dual-Stack-Link in Ihrem Netz stillschweigend eine von zwei Metriken auswählt.

Ich habe Netze betrieben, in denen die IPv4- und IPv6-Pfade auseinanderliefen und es monatelang niemandem auffiel, weil jedes Werkzeug an der Wand eine Linie zwischen zwei Routern zeichnete. Die Linie war nicht falsch. Sie beantwortete nur eine Frage, die niemand gestellt hatte.


Als Nächstes: was passiert, wenn diese Quellen einander unverhohlen widersprechen: Wenn das Netzwerk sich selbst widerspricht.