« Das ist ein Ausschnitt aus der Netzwerkstruktur von diac24.net. Dargestellt sind Astro (64616)», toidinamai (64612)», der SpaceBoyZ (64624)» und meine Wenigkeit (64602).
Ohne irgendwelche weitergehende Konfiguration besteht zwischen den beiden tiefschwarzen Pfaden im Bild keine besondere Präferenz. Nach "first-comes" würde die Route selektiert, die als erste da war. (oder beide - Multipath.)
Astros Internetanbindung ist nun aber nicht gerade die schönste, und er bekommt auch noch Traffic darauf abgerechnet. Da wäre es natürlich sinnvoll, um ihn herumzurouten. Werfen wir also einen Blick auf die gängige Selektionspraxis für Routen».
Mein Ziel ist, möglichst wenig über Astro zu routen. D.h. ich will notfalls auch längere Pfade in Kauf nehmen, damit das nicht über Astros Leitung prasselt. Also bleiben als Auswahlkriterium die Punkte 1 bis 3 auf der Liste, da Punkt vier schon die AS-Pfadlänge ist und mir die ja egal sein soll. Punkt 3 fällt auch weg, da man darauf wenig Einfluss hat. Bleiben also weight und local preference.
Der Unterschied zwischen den beiden ist, dass weight router-lokal ist. Da ich aber 2 Router in meinem AS habe, ist mir local preference lieber, die wird über iBGP-Peerings mit ausgetauscht. Schreiten wir also zur Tat:
router bgp 64602 neighbor fe80::209:5bff:fe2f:ee50 route-map astro in route-map astro permit 20 set local-preference 25
Sieht doch schon mal ganz gut aus. Konfiguration auf tethys geschmissen (in der Skizze der untere rechte Knubbel in AS64602), und los ging's...
...scheint zu funktionieren, bis auf eine Kleinigkeit, die im Bild rechts an den rot markierten aktiven Pfaden deutlich wird. Die Pakete zu Astro (64616) nehmen einen Unnötigen Umweg über den SBZ (64624).
Bedenkt man die Konfiguration recht, ist das auch wenig verwunderlich - der Pfad über den SBZ hat mit der Default-preference von 100 einfach Vorrang gegenüber der direkten Route, die ja auf 25 herunterkonfiguriert ist. Ein Blick in show ip bgp bestätigt die Theorie:
* 172.22.12.0/24 172.22.16.1 25 0 64616 64612 i *>i 172.22.24.1 100 0 64624 64612 i * 172.22.16.0/23 172.22.16.1 25 0 64616 i *>i 172.22.24.1 100 0 64624 64616 i
Für toidinamai (AS64612) funktioniert das ganze schon mal super. Aber die im Bild gestrichelte direkte Route zu Astro wird nicht selektiert. Also, noch mal überarbeiten:
router bgp 64602 neighbor fe80::209:5bff:fe2f:ee50 route-map astro in ip as-path access-list astroown permit 64616$ route-map astro permit 10 match as-path astroown route-map astro permit 20 set local-preference 25
Um die zweite Konfiguration zu verstehen, muss man wissen, dass route-maps nach dem ersten Treffer aufhören. Über AS-Path-Matching erwischt der erste route-map-Eintrag also alles, was seinen Ursprung bei Astro hat, und beendet dafür das Matching. Dadurch behalten die Routen die Default-preference von 100.
Und zur Demonstration, dass das ganze wie erwartet funktioniert:
* 172.22.12.0/24 172.22.16.1 25 0 64616 64612 i *>i 172.22.24.1 100 0 64624 64612 i *> 172.22.16.0/23 172.22.16.1 100 0 64616 i * i 172.22.24.1 100 0 64624 64616 i
Durch die gleiche preference kommt der Auswahlalgorithmus jetzt bis zum AS-Pfadlängenvergleich. Dabei gewinnt die direkte Route dank kürzeren Pfades, womit das heutige Klassenziel erreicht ist.
Für Informationen, auf was man sonst noch mit route-map matchen kann, sei auf die Dokumentation zu route-map» und zu ip as-path» verwiesen. Über communities gibts bald noch mal einen extra Post.
P.S.: Sorry an Astro fürs Zerlegen des Harvester-Layouts».
