Весьма мощный, но не самый популярный механизм.
С помощью AS-Path ACL вы можете, например, запретить принимать анонсы маршрутов, принадлежащих AS 200. Ну вот просто не хотите – пусть они через другого провайдера будут известны, а через этого нет.
Самое сложное в таком подходе – запомнить все регулярные выражения и научиться их использовать. Сначала голова от них кругом:
Знак | Значение | |
---|---|---|
. | любой символ, включая пробел | |
* | ноль или больше совпадений с выражением | |
+ | одно или больше совпадений с выражением | |
? | ноль или одно совпадение с выражением | |
^ | начало строки | |
$ | конец строки | |
_ | любой разделитель (включая, начало, конец, пробел) | |
\ | не воспринимать следующий символ как специальный | |
[] | совпадение с одним из символов в диапазоне | |
| | логическое или |
Чтобы было чуть более понятно, приведём несколько примеров:
1
_200_ | Маршруты проходящие через AS 200 |
---|
До и после номера AS идут знаки “_”, означающие, что в AS-path номер 200 может стоять в начале, середине или конце, главное, чтобы он был.
2
^200$ | Маршруты из соседней AS 200 |
---|
“^” означает начало списка, а “$” – конец. То есть в AS-path всего лишь один номер AS – это означает, что маршрут был зарождён в AS 200 и оттуда сразу был передан нам.
3
_200$ | Маршруты отправленные из AS 200 |
---|
“$” означает конец списка, то есть это самая первая AS, из неё маршрут и зародился, знак “_” говорит о том, что неважно, что находится дальше, хоть ничего, хоть 7 других AS.
4
^200_ | Сети находящиеся за AS 200 |
---|
Знак “^” означает, что ASN 200 была добавлена последней, то есть маршрут к нам пришёл из AS 200, но это не значит, что родился он в ней же – знак “_” говорит о том, что это может быть конец списка, а может пробел перед следующей AS.
5
^$ | Маршруты локальной AS |
---|
Список AS-path пуст, значит маршрут локальный, сгенерированный внутри нашей AS.
Вот в нашей сети отфильтруем маршруты, которые зародились в AS 64501. То есть мы будем от соседа 101.0.0.1 получать все интернетовские маршруты, но не будем получать их локальные.
ip as-path access-list 100 deny ^64501$
ip as-path access-list 100 permit .*
router bgp 64500
neighbor 101.0.0.1 filter-list 100 in