> For the complete documentation index, see [llms.txt](https://linkmeup.gitbook.io/sdsm/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://linkmeup.gitbook.io/sdsm/8.-bgp-i-ip-sla/2.-bgp/3.-upravlenie-marshrutami/0.-as-path-acl.md).

# AS-Path ACL

Весьма мощный, но не самый популярный механизм.

С помощью AS-Path ACL вы можете, например, запретить принимать анонсы маршрутов, принадлежащих AS 200. Ну вот просто не хотите – пусть они через другого провайдера будут известны, а через этого нет.

Самое сложное в таком подходе – запомнить все регулярные выражения и научиться их использовать. Сначала голова от них кругом:

| **Знак** | **Значение**                                       |   |
| -------- | -------------------------------------------------- | - |
| .        | любой символ, включая пробел                       |   |
| \*       | ноль или больше совпадений с выражением            |   |
| +        | одно или больше совпадений с выражением            |   |
| ?        | ноль или одно совпадение с выражением              |   |
| ^        | начало строки                                      |   |
| $        | конец строки                                       |   |
| \_       | любой разделитель (включая, начало, конец, пробел) |   |
| \\       | не воспринимать следующий символ как специальный   |   |
| \[]      | совпадение с одним из символов в диапазоне         |   |
| \|       | логическое или                                     |   |

Чтобы было чуть более понятно, приведём несколько примеров:

**1**

До и после номера AS идут знаки “\_”, означающие, что в AS-path номер 200 может стоять в начале, середине или конце, главное, чтобы он был.

**2**

“^” означает начало списка, а “$” – конец. То есть в AS-path всего лишь один номер AS – это означает, что маршрут был зарождён в AS 200 и оттуда сразу был передан нам.

**3**

“$” означает конец списка, то есть это самая первая AS, из неё маршрут и зародился, знак “\_” говорит о том, что неважно, что находится дальше, хоть ничего, хоть 7 других AS.

**4**

Знак “^” означает, что ASN 200 была добавлена последней, то есть маршрут к нам пришёл из AS 200, но это не значит, что родился он в ней же – знак “\_” говорит о том, что это может быть конец списка, а может пробел перед следующей AS.

**5**

Список 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
```

![](http://img-fotki.yandex.ru/get/6711/83739833.29/0_bc611_de380a0f_XL.png)

[Конфигурация устройств](https://docs.google.com/document/d/1IBQaTWj8u-NoJ0ecsh9vC9EHpYRoT5AWxCpPgaV8Nps/edit?usp=sharing).

[Инструкция по использованию регулярных выражений](http://img.nag.ru/projects/setup/bd7/83a2a1b381320918ced29331a0dfd53b.pdf)
