Auswertung von BGP-Communities und erweiterten Communities in Übereinstimmungsbedingungen für Routing-Richtlinien
Wenn Sie BGP-Communities und erweiterte Communities als Übereinstimmungsbedingungen in einer Routing-Richtlinie verwenden, wertet die Richtlinien-Framework-Software diese wie folgt aus:
Jede Route wird anhand jeder benannten Community in einer Routingrichtlinienanweisung ausgewertet.
from
Wenn eine Route mit einer der in der Anweisung genannten Gemeinden übereinstimmt, wird die Auswertung des aktuellen Begriffs fortgesetzt.from
Wenn eine Route nicht übereinstimmt, endet die Auswertung des aktuellen Terms.Die Route wird für jedes Mitglied einer benannten Community ausgewertet. Die Evaluierung aller Mitglieder muss erfolgreich sein, damit die benannte Community-Evaluierung erfolgreich ist.
Jedes Mitglied in einer benannten Community wird entweder durch einen literalen Communitywert oder einen regulären Ausdruck identifiziert. Jedes Mitglied wird anhand jeder Community ausgewertet, die der Route zugeordnet ist. (Communities sind eine ungeordnete Eigenschaft einer Route. Zum Beispiel ist 1:2 3:4 dasselbe wie 3:4 1:2.) Es ist nur eine Community aus der Route erforderlich, damit die Mitgliederbewertung erfolgreich ist.
Reguläre Community-Ausdrücke werden Zeichen für Zeichen ausgewertet. Wenn eine Route z. B. die Community 1234:5678 enthält, sehen die regulären Ausdrücke neun diskrete Zeichen, einschließlich des Doppelpunkts (:), anstelle von zwei Zahlengruppen (1234 und 5678), die durch einen Doppelpunkt getrennt sind. Hier einige Zahlen zum Generationswechsel:
[edit] policy-options { policy-statement one { from { community [comm-one comm-two]; } } community comm-one members [ 1:2 "^4:(5|6)$" ]; community comm-two members [ 7:8 9:10 ]; }
Wenn es sich bei einem Community-Mitglied um einen regulären Ausdruck handelt, wird eine Zeichenfolgenübereinstimmung anstelle einer numerischen Übereinstimmung erstellt.
Hier einige Zahlen zum Generationswechsel:
community example1 members 100:100 community example2 members 100:1..
Bei einer gegebenen Route mit einem Community-Wert von 1100:100 stimmt diese Route überein , aber nicht .
community example2
example1
Um der Routing-Richtlinie zu entsprechen, muss die Route entweder mit oder übereinstimmen.
one
comm-one
comm-two
Für einen Abgleich muss die Route eine Community aufweisen, die 1:2 entspricht, und eine Community, die 4:5 oder 4:6 entspricht.
comm-one
Um eine Übereinstimmung zu erzielen, muss die Route eine Community haben, die mit 7:8 übereinstimmt, und eine Community, die mit 9:10 übereinstimmt.
comm-two
Mehrere Übereinstimmungen
Wenn mehrere Übereinstimmungen gefunden werden, findet keine Label-Aggregation statt. Betrachten Sie die folgende Konfiguration:
family inet-vpn { unicast { aggregate-label { community community-name; } } }
family inet-vpn { labeled-unicast { aggregate-label { community community-name; } } }
Angenommen, es werden zwei Routen mit Community-Attributen empfangen und der Community-Name lautet .target:65000:1000 origin:65200:2000
"5...:.*"
In diesem Fall stimmen sowohl die erweiterten Community-Attribute als auch mit dem regulären Ausdruck des Community-Namens überein.target:65000:1000
origin:65200:2000
In diesem Fall findet keine Label-Aggregation statt. Im folgenden Beispiel zeigt das Feld, dass die Beschriftungen nicht aggregiert sind.Label operation
user@host> show route table VPN detail | match "^10 | Communities | Push" 10.1.1.0/30 (1 entry, 1 announced) Label operation: Push 101040 Push 101040 Communities: target:65000:1000 origin:65200:2000 10.1.1.4/30 (1 entry, 1 announced) Label operation: Push 101056 Push 101056 Communities: target:65000:1000 origin:65200:2000
Sie können dieses Problem auf eine der folgenden Arten beheben:
Seien Sie im regulären Ausdruck genauer, wenn sich das erweiterte Community-Attribut des Ursprungsortes nicht mit dem Zielattribut überschneidet.
Geben Sie den Ursprungsort im Community-Namen an.
Beide Methoden werden in den folgenden Beispielen veranschaulicht.
Seien Sie spezifischer im regulären Ausdruck
user@host# set policy-options community community-name members "52..:.*" user@host# commit
user@host> show route table VPN detail | match "^10 | Communities | Push" 10.1.1.0/30 (1 entry, 1 announced) Label operation: Push 101040 Push 101040 Communities: target:65000:1000 origin:65200:2000 10.1.1.4/30 (1 entry, 1 announced) Label operation: Push 101040 Push 101040 Communities: target:65000:1000 origin:65200:2000
Geben Sie den Ursprungsort im Community-Namen an
user@host# set policy-options community community-name members "origin:65...:.*" user@host# commit
user@host> show route table VPN detail | match "^10 | Communities | Push" 10.1.1.0/30 (1 entry, 1 announced) Label operation: Push 101040 Push 101040 Communities: target:65000:1000 origin:65200:2000 10.1.1.4/30 (1 entry, 1 announced) Label operation: Push 101040 Push 101040 Communities: target:65000:1000 origin:65200:2000
Community-Matches umkehren
Die Übereinstimmungsbedingung definiert einen regulären Ausdruck, und wenn er mit dem Community-Attribut des empfangenen Präfixes übereinstimmt, gibt Junos OS ein TRUE-Ergebnis zurück.community
Ist dies nicht der Fall, gibt Junos OS das Ergebnis FALSE zurück. Die Aussage führt dazu, dass sich Junos OS gegenteilig verhält.invert-match
Wenn es eine Übereinstimmung gibt, gibt Junos OS das Ergebnis FALSE zurück. Wenn es keine Übereinstimmung gibt, gibt Junos OS ein TRUE-Ergebnis zurück. Um die Ergebnisse des Community-Ausdrucksabgleichs umzukehren, schließen Sie die Anweisung in die Community-Konfiguration ein.invert-match
[edit policy-options community name] invert-match;
Erweiterter Community-Typ
Der erweiterte Community-Typ wird von regulären Ausdrücken nicht berücksichtigt. Betrachten Sie z. B. die folgenden Community-Attribute und den Community-Namen.
Ihre Rolle in der Gesellschaft:
-
5200:1000
-
target:65000:1000
-
origin:65200:2000
Community-Attribut:
-
Community-Name Mitglieder "5...:.*"
In diesem Fall stimmen sowohl das erweiterte Community-Attribut als auch das erweiterte Community-Attribut mit dem regulären Ausdruck des Community-Namens überein.5200:1000
origin:65200:2000
Daher findet die Label-Aggregation nicht statt, wie hier gezeigt:
user@host> show route table VPN detail | match "^10 | Communities | Push" 10.1.1.0/30 (1 entry, 1 announced) Label operation: Push 101040 Push 101040 Communities: 5200:1000 target:65000:1000 origin:65200:2000 10.1.1.4/30 (1 entry, 1 announced) Label operation: Push 101056 Push 101056 Communities: 5200:1000 target:65000:1000 origin:65200:2000
Sie können dieses Problem beheben, indem Sie einen spezifischeren regulären Ausdruck verwenden. Sie können z. B. das Ankerzeichen () verwenden, um die Position der Ziffern zu binden, wie hier gezeigt:^
user@host# set policy-options community community-name members "^5...:.*" user@host# commit
user@host> show route table VPN detail | match "^10 | Communities | Push" 10.1.1.0/30 (1 entry, 1 announced) Label operation: Push 101040 Push 101040 Communities: 5200:1000 target:65000:1000 origin:65200:2000 10.1.1.4/30 (1 entry, 1 announced) Label operation: Push 101040 Push 101040 Communities: 5200:1000 target:65000:1000 origin:65200:2000
Mit der Implementierung der Funktion für große Communitys in Version 17.3 prüft Junos OS, ob der Abgleich von erweiterten oder großen Communitys mit Basis-BGP- oder Basis-BGP-Communitys mit regulären Ausdrücken verhindert wird. Mit anderen Worten, eine empfangene Community kann nur mit dem entsprechenden Wild-Community-Muster abgeglichen werden, wie normale Communities gegen Simple-Wild, erweiterte Communities gegen Extended-Wild und große Communities gegen Large-Wild-Muster. Verwenden Sie z. B. den Ausdruck, um die Ankündigung von Routen zu ermöglichen, die die erweiterte Ursprungscommunity enthalten.origin:*:65020
Mehrere Communities werden mit Ex-OP-Logik abgeglichen
Dies unterscheidet sich von der UND-Abgleichslogik, die für nicht erweiterte Communities in BGP verwendet wird.
Wenn z. B. vier Routen mit zwei Sätzen von Community-Attributen empfangen werden, kann der reguläre Ausdruck mit beiden Community-Attributen übereinstimmen. Betrachten Sie das folgende Beispiel:
Gemeinden—5200:1000 Ziel:65000:1000
Gemeinden—Ziel:65000:1000 origin:65200:2000
Community-Attribut – Community-Community-Name member [ "^5...:.*" origin:65.*:.* ]
Beide Beschriftungen werden aggregiert, wie hier gezeigt:
user@host> show route table VPN detail | match "^10 | Communities | Push" 10.1.1.0/30 (1 entry, 1 announced) Label operation: Push 101040 Push 101040 Communities: target:65000:1000 origin:65200:2000 10.1.1.4/30 (1 entry, 1 announced) Label operation: Push 101040 Push 101040 Communities: target:65000:1000 origin:65200:2000 10.1.1.16/30 (1 entry, 1 announced) Label operation: Push 121104 Push 101104 Communities: 5200:1000 target:65000:1000 10.1.1.20/30 (1 entry, 1 announced) Label operation: Push 121104 Push 101104 Communities: 5200:1000 target:65000:1000
Ein ausführlicheres Beispiel für Community-Werte finden Sie hier:
user@host> show policy-options community community-name members [ "(^1...:*)|(^3...:*)|(^4...:*)" origin:2.*:* origin:3.*:* origin:6.*:* ]
Dieser reguläre Ausdruck stimmt mit Community-Werten überein, die mit 1, 3 oder 4 beginnen, sowie mit erweiterten Community-Werten vom Typ origin, deren administrativer Wert mit 2, 3 oder 6 beginnt.
Einbeziehen von BGP-Communities und erweiterten Communities in Übereinstimmungsbedingungen für Routing-Richtlinien
Um eine BGP-Community oder erweiterte Community in eine Routing-Richtlinienübereinstimmungsbedingung einzuschließen, fügen Sie die Bedingung in die Anweisung eines Richtlinienbegriffs ein:community
from
from { community [ names ]; }
Darüber hinaus können Sie BGP-Community-Informationen mit einer statischen Route explizit ausschließen, indem Sie die Option verwenden.none
Schließen Sie diese Option ein, wenn Sie eine einzelne Route im Teil konfigurieren, um eine im Teil angegebene Community-Option zu überschreiben.route
defaults
Sie können die Namen mehrerer Communitys in die Übereinstimmungsbedingung aufnehmen.community
Wenn Sie dies tun, muss nur eine Community übereinstimmen, damit eine Übereinstimmung auftritt (der Abgleich ist im Grunde eine logische ODER-Operation).