Jeder Netzwerker kennt BGP und weiß mehr oder weniger wie es funktioniert. Man lernt wie die Nachbarschaften aufgebaut werden, dass Neuigkeiten per Update Message versandt werden und und und.
Wer mal MPLS betrieben oder gebaut hat, weiß auch dass Multiprotocol-BGP kein großes Hexenwerk ist. Es wird eine neue Address-Family erzeugt und Nachbarschaften aufgebaut. Danach können die Router ihre VRFs im BGP bekannt machen und verteilen darüber die Routen-Informationen. Soweit so gut.
Ich habe, soweit ich mich erinnere, nie richtig gelernt wie die BGP Updates eigentlich genau funktionieren, also was alles in so ein Update reingepackt wird. Gerade mit mehreren VRFs in einem MPLS Netz. Zugegeben, es hat mich auch nicht groß interessiert. Schließlich funktioniert ja alles.
Heute habe ich mal wieder ein MPLS Lab mit Route-Reflector gebaut. Nachdem VRFs verteilt und getestet waren, habe ich noch BGP Route-Leaking zwischen zwei VRFs gemacht. Also die route-targets im anderen VRF importiert, alles nix neues, alles Ok und es funktioniert. Aber es funktioniert nur auf diesem einen Router.
Dass es nur auf diesem Router geht, hatte ich irgendwie nicht so im Kopf, aber das ist richtig. Man muss das Route-Leaking auf jedem PE machen wenn man es dort benötigt. Aber wie funktioniert das jetzt im Hintergrund? Man muss ja nicht beide VRFs auf dem PE konfiguriert haben, nur das worin sich der Client befindet. Das VRF aus dem die Routen kommen, muss der PE nicht kennen.
Aber, wie funktioniert das eigentlich? Wir holen Routen die dieser Router nicht kennt, weil er kein VRF dazu hat, in ein anderes VRF. Macht erstmal wenig Sinn.
Die Lösung hat mir ein erfahrener Kollege erklärt und mir dabei die Augen geöffnet wie einfach BGP doch aufgebaut ist.
Wie werden die Routen in MPLS Netzen eigentlich verteilt? Bekommt jedes VRF seine eigenen BGP Updates? Nein. Ziehen sich die PEs die Routen von den BGP Nachbarn (in diesem Fall der RR) die sie brauchen? Ebenfalls nicht. Mischt der Route-Reflector da irgendwie mit und verteilt nur was nötig ist? Genauso wenig.
Das „Geheimnis“ ist, BGP arbeitet mit einer großen Tabelle. In dieser Tabelle sind ALLE Routen drin, ALLER VRFs. (Zumindest für die VPN-Address-Families die man im MPLS benutzt)
Aber wie jetzt, BGP verteilt eine Tabelle? Ja, seht es als eine große Textdatei in der alle Routen mit allen ihren Informationen stehen. Jeder Router bekommt diese Tabelle, ob er alle Informationen braucht oder nicht. Das heißt natürlich, dass in sehr großen Netzen die Tabelle entsprechend groß ist und an jeden PE verteilt wird, egal wie groß er ist und wie viele VRFs darauf konfiguriert sind.
Wie funktioniert dann das Route-Leaking oder andere Filter Mechanismen in BGP?
Sie filtern die nötigen Informationen aus der Tabelle, die sie benötigen.
So einfach wie es sich anhört, so ist es. Jede Route in der Tabelle hat eindeutige Eigenschaften. Ob es BGP Communities sind oder die Route Distinguisher des VRF, die Route selbst oder eine andere Eigenschaft. Man kann danach Filtern.
Also wie erhält der Router der nur VRF1 hat, die Routen für das Route-Leaking von VRF2? Man konfiguriert dort das Route-Target zum Import von VRF2 in VRF1, danach kann der Router in der BGP Tabelle filtern und die Routen in seine eigene BGP Tabelle aufnehmen und dann in seine Routing Tabelle. Und wenn man das für den Rückweg ebenfalls getan hat, kann man kommunizieren.
Irgendwie schon fast dämlich einfach, ich es mir immer viel zu kompliziert vorgestellt.