Перед тем как перейти к следующим темам, нам необходимо хорошо усвоить регулярные выражения.
Благодаря им мы сможем фильтровать AS-PATH, разрешать, запрещать препендинги и прочее прочее. Но обо всем по порядку.
Регулярные выражения это такие выражение, которые описывают правила, под которые попадает входящая строка (например AS-PATH).
Например, мы хотим описать AS-PATH, который бы начинался с 20.
С помощью регулярных выражений это будет выглядеть как: ^20
«^» — означает начало строки.
Обратное выражение — конец строки, обозначется символом $
Таким образом, мы можем написать ^20$, это нам говорит о том, что AS-PATH состоит только из 20 системы, больше в этом атрибуте ничего быть не может.
^20 — под это выражение попадает AS-PATH: 20 40 50 20 100
20$ — под это выражение попадает AS-PATH: 20 30 40 20, но не попадает 20 30 40 20 21
Думаю смысл понятен, это просто.
«.» — означает любой символ. Например 2.1 означает что это может быть 221,251,2A1 и так далее, то есть вместо точки можем подставить абсолютно любой символ.
[1-9] — в квадратных скобках обозначают диапазон, который может принимать символ, например. ^[1-3]5$ может принимать значения: 15,25,35 и никакие другие,
если не использовать ^ и $ то значений может быть очень много, например такие 215 125 и так далее, чувствуется разницу?
«_» обозначает пробел, подчеркивание, табуляцию, то есть любой разделитель. Для чего он используется в BGP? для того чтоб мы могли указать, что система например является транзитной, делается так: _20_, говорит нам о том, что маршрут прошел через 20 систему, то есть она является транзитной.
«|» — выражение или. Рассмотрим пример ^(12|21)$, этот пример говорит нам о том, что если в AS-PATH содержится 12 или 21 (и ничего более), то этот атрибут соответствует нашему регулярному выражению.
() — в скобках указывается какое-либо выражение, например как в предыдущем примере.
Теперь рассмотрим регулярные выражения повторений:
* — одно или несколько повторений.
? — ноль или одно повторений
+ — ноль или множество повторений.
Эти повторения не используются сами по себе, они используются вместе с теми, которые мы рассмотрели с Вами выше.
Например:
.* — точка указывает на любой символ, а звездочка о сколь угодно многом повторении, под это выражение попадет все что угодно.
^[0-9]+$ — говорит нам о том, что здесь может быть любой номер автономной системы, будь то 1, или будь то 100, и так далее.
^[0-9]+ [0-9]+$ — здесь тоже самое, но систем (любых) будет две.
Когда мы будем изучать конфедерации, там приватные системы обозначаются в скобка, например (65001) и так далее, что бы описать скобку регулярным выражением, нужно перед символом скобка поставить «\», выражение получится такое \(.
И рассмотрим последнюю конструкцию:
^([0-9]+)(_\1)* = говорит нам о том, что значение получившееся в первой скобке может повторяться сколько угодно много. То есть под это выражение попадает: 20 20 20, 30 30 30 30 30 30, и так далее. Используется при AS-Preppending.
Вторая скобка, говорит нам, что должен быть разделить, \1 говорит нам о том, что мы воздействуем на первую скобку, то есть на ([0-9+]) , далее звездочка говорит что мы можем это повторять от 1 до бесконечности раз.
Вот такие не сложные правила, но которые нам необходимо хорошо уяснить, с помощью них мы будем фильтровать маршруты по AS-PATH.
Мы имеем кучу маршрутов (sh ip bgp), нам нужно оставить только те маршруты, которые мы сами генерируем (то есть в AS-PATH ничего не должно быть, правильно? регулярное выражение ^$), мы можем сделать такой вывод так:
sh ip bgp regexp ^$
В рузельтате получим то что хотели.
В реале, таблицу роутинга BGP очень большие и нужно научиться правильно фильтровать используя регулярные выражения, дабы находить быстро нужную нам информацию.
Информация о регулярных выражения на сайте Cisco