Ich versuche, den elegantesten Weg zu finden, um einen RTBH- Filter für von einem Kunden empfangene Routen zu implementieren .
Der Filter sollte:
- Akzeptieren Sie nur die eigenen Präfixe des Kunden aus einer Präfixliste
- Akzeptiere nur / 32 Präfixe
- Nur Präfixe mit der Blackhole-Community
- Stellen Sie den nächsten Hop auf den nächsten RTBH-Hop (192.0.2.1).
Zu Beginn habe ich mir das Dokument " Konfigurieren von Übereinstimmungsbedingungen in Routing-Richtlinienbedingungen " von Juniper angesehen.
Zuerst dachte ich darüber nach, a so prefix-list-filter
zu kombinieren , dass nur Routen aus der Präfixliste des Kunden übereinstimmen, und a route-filter
, um die akzeptierten Präfixe auf / 32 zu beschränken, wie folgt:
from {
as-path customer;
community blackhole;
prefix-list-filter customer-prefixes orlonger;
route-filter 0.0.0.0/0 prefix-length-range /32-/32;
}
Aber dann bin ich über diese Informationen im Dokument gestolpert:
Wenn Sie eine Richtlinie konfigurieren, die eine Kombination aus Routenfiltern, Präfixlisten und Quelladressfiltern enthält, werden diese gemäß einer logischen ODER-Operation oder einer Suche nach Übereinstimmungen mit der längsten Route ausgewertet.
Wie ich verstehe diese (und ich es ein bisschen unklar finden), wenn ich verwende prefix-list-filter
, route-filter
und / oder source-address-filter
in dem gleichen Begriff wäre es mit einem längsten Match ODER zwischen alle von ihnen ausgewertet werden, was dieser Ansatz macht unbrauchbar .
Was ich mir ausgedacht habe, ist der folgende Filter. Der hostroutes-only
Begriff leitet alle Präfixe, die kürzer als / 32 sind, zur nächsten Richtlinie um. Danach prefixes
stimmt der Begriff überein, wenn sich die / 32 im Bereich des Kunden befindet, mit seinem As-Path übereinstimmt und die Blackhole-Community festgelegt ist:
term hostroutes-only {
from {
route-filter 0.0.0.0/0 prefix-length-range /0-/31;
}
then next policy;
}
term prefixes {
from {
as-path customer;
community blackhole;
prefix-list-filter customer-prefixes orlonger;
}
then {
next-hop 192.0.2.1;
accept;
}
}
Ist dies die eleganteste Art, damit umzugehen? Irgendwelche anderen Lösungen?