> 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.1.-ibgp/3.-atributy-bgp/4.-community/1.-praktika.md).

# Практика Community

Мы же в качестве примера рассмотрим следующую ситуацию.

Основная схема статьи дополняется ещё одним маршрутизатором клиента и двумя линками.

![](http://img-fotki.yandex.ru/get/9166/83739833.2f/0_c72dc_b5f04e3a_XXL.png)

R7 и R9 разнесены территориально — так называемое георезервирование. Главным является его правый сайт, левый — резервный.\
Внутри своей AS он без проблем настроил передачу исходящего трафика в нужном месте — через R3. А вот со входящим посложнее — MED не позволяет использовать религия, да и доверия ему нет.

Поэтому мы разработали схему взаимодействия, используя community. На самом деле она будет общая для всех. Например, ниже мы установим правило — если получили маршрут с коммьюнити 64500:150, увеличить Local Preference для него до 150. А потом такую политику применяем к нужным нам маршрутам.

На нашем оборудовании (на всём) мы определяем ip community-list:

```
ip community-list 1 permit 64500:150
```

Задаём правило обработки:

```
route-map LP150 permit 10
match community 1
set local-preference 150
```

Это общий блок, который будет одинаков для всех устройств. После этого клиент может сказать, что хочет воспользоваться этой функцией и мы применяем карту на BGP-соседа:\
Применяем карту к BGP-соседу на R3:

```
router bgp 64500
neighbor 100.0.0.10 remote-as 64504
neighbor 100.0.0.10 route-map LP150 in
```

Итак, если в анонсе от соседа 100.0.0.10 community совпадает со значением в условии, установить Local Preference для этих маршрутов в 150.

> Часто такие политики (route-map) применяются по умолчанию на всех внешних соседей. Клиентам остаётся только настроить передачу нужной коммьюнити и даже не нужно просить о чём-то провайдера — всё сработает автоматически.

Это наша политика по использовании коммьюнити. О ней мы сообщаем клиенту, мол, хочешь Установить для своего маршрута Local Preference в 150 в нашей AS, используй community 64500:150\
И вот он настраивает на R9:

```
router bgp 64504
neighbor 100.0.0.9 remote-as 64500
neighbor 100.0.0.9 route-map LP out
neighbor 100.0.0.9 send-community

route-map LP permit 10
set community 64500:150
```

При необходимости то же самое он может настроить на R7.\
После **clear ip bgp \* soft** в отправляемых анонсах мы можем увидеть community:\
![](http://img-fotki.yandex.ru/get/9747/83739833.36/0_d4c6c_f3bf3a6a_XXL.png)

В итоге R3 имеет маршрут с более высоким Local Preference:

![](http://img-fotki.yandex.ru/get/9062/83739833.2f/0_c72de_927369c1_XL.png)

Передаёт его рут-рефлектору (R1 и R2), который делает выбор и распространяет всем своим соседям:

![](http://img-fotki.yandex.ru/get/9171/83739833.2f/0_c72df_6de773eb_XL.png)

И даже R4, которому рукой дотянуться до R7, будет отправлять трафик на R3:

![](http://img-fotki.yandex.ru/get/9252/83739833.2f/0_c72e0_245dce0d_XL.png)

Трафик идёт именно тем путём, который мы выбрали.

![](http://img-fotki.yandex.ru/get/9161/83739833.2f/0_c72e1_25a155db_L.png)

> Пусть вас не пугает по 3 записи для каждого хопа — это говорит о балансировке трафика между равноценными линками *R1<->R2<->R3* и *R1<->R4<->R3*. Просто один раз он идёт по одному пути, второй по другому. А вот вы лучше попробуйте ответить на вопрос, почему на первом хопе 1-я и 3-я попытки идут через R4, а вот на втором хопе на R3. Почему пакет “перепрыгивает”? Как так получается?

Кстати, не стоит забывать команду **ip bgp-community new-format**, а иначе вместо этого:\
![](http://img-fotki.yandex.ru/get/9494/83739833.2f/0_c72e3_c257e926_M.png)\
вы увидите это:\
![](http://img-fotki.yandex.ru/get/6718/83739833.2f/0_c72e2_cf91a1ac_M.png)\
Отправляться будет то же самое, но в выводах show команд будет отображаться в удобном виде.

[Конфигурация устройств](https://docs.google.com/document/d/1WFjksUR5aD2KhuN_ypA1IOMFavRzOX6p5ledbhyAN8o/pub)

В приведённом примере видно, что коммьюнити позволяет работать не с отдельными анонсами и для каждого из них отдельно применять какие-то политики, а рассматривать их сразу как группу, что естественно, значительно упрощает обслуживание.\
Иными словами, коммьюнити — это группа анонсов с одинаковыми характеристиками.

При работе с community важно понимать, что настройка необходима с двух сторон — чтобы желаемое заработало, у провайдера тоже должна быть выполнена соответствующая конфигурация.

Часто у провайдеров бывает уже выработанная политика использования коммьюнити, и они просто дают вам те номера, которые необходимо использовать. То есть после того, как вы добавите к анонсу номер коммьюнити, провайдеру не придётся ничего делать руками — всё произойдёт автоматически.

Например, у Балаган-Телекома может быть такая политика:

| \*\*Значение \*\* | **Действие**                                                                |
| ----------------- | --------------------------------------------------------------------------- |
| 64501:100Х        | При анонсировании маршрута соседу A добавить Х препендов, где Х от 1 до 6   |
| 64501:101X        | При анонсировании маршрута соседу B добавить Х препендов, где Х от 1 до 6   |
| 64501:102X        | При анонсировании маршрута соседу C добавить Х препендов, где Х от 1 до 6   |
| 64501:103X        | При анонсировании маршрута в AS64503 добавить Х препендов, где Х от 1 до 6  |
| 64501:20050       | Установить Local Preference для полученных маршрутов в 50                   |
| 64501:20150       | Установить Local Preference для полученных маршрутов в 150                  |
| 64501:666         | Установить Next-Hop для маршрут в Null — создать Black Hole                 |
| 64501:3333        | Выполнить скрипт по уничтожению конфигурации BGP на всех маршрутизаторах AS |

Исходя из этой таблички, которая опубликована на сайте Балаган-телекома, мы можем сами принять решение об управлении трафиком.

Как это реально может помочь нам?

У нас Dual-homing подключение к двум различным провайдерам — Балаган Телеком и Филькин Сертификат. У датацентра подключение также к обоим провайдерам. Он принадлежит какому-то контент-генератору, допустим это оператор потового видео.

По умолчанию, в нашу сеть всё ходит через Балаган-Телеком (AS64501). Канал там хоть и широкий, но его утилизация уже достаточно высока. Мы хотим продавать домашним клиентам услугу IPTV и прогнозируем значительный рост входящего трафика. Неплохо было бы его завернуть в Филькин Сертификат и не бояться о том, что основной канал забьётся. При этом, естественно, весь другой трафик переносить не нужно.

В таблице BGP проверяем, где находится сеть 103.0.0.0. Видим, что это AS64503, которая достижима через обоих провайдеров с равным числом AS в AS-Path.

![](http://img-fotki.yandex.ru/get/9348/83739833.2f/0_c72e4_cae17b05_L.png)

Вот как видит нас маршрутизатор из AS 64503:

![](http://img-fotki.yandex.ru/get/9359/83739833.2f/0_c72e5_a81ea8d5_XL.png)

Маршрут в Балаган-Телеком выбран предпочтительным

Какие мысли?\
Анонсировать определённые сети в Филькин Сертификат, а остальные оставить в Балаган Телеком? Негибко, немасштабируемо.\
Вешать препенды на маршруты, отдаваемые в Балаган Телеком? Тогда, скорее всего, куча другого трафика перетечёт на Филькин Сертификат.\
Попросить инженера Балаган-Телекома вручную удлинить наши маршруты при передаче их в AS64503. Уже ближе к истине, и это даже сработает, но, скорее всего, инженер провайдера пошлёт вас… на сайт с табличкой, где прописана их политика Community.

Собственно, всё, что нужно сделать нам — на маршрутизаторе R1 применить route-map по добавлению коммьюнити 64500:1031 к соседу R5(напоминаем, что 103Х — это для соседа из AS 64503). Дальше всё сделает автоматика.

Вот как R5 видит маршрут сам:

![](http://img-fotki.yandex.ru/get/5012/83739833.30/0_c72e6_656200ee_XL.png)

Всё без изменений.

Вот как его видит R8:

![](http://img-fotki.yandex.ru/get/9172/83739833.30/0_c72e7_762d55ee_XL.png)

Как видите, галочка стоит напротив более короткого пути через Филькин Сертификат, чего мы и добивались.

![](http://img-fotki.yandex.ru/get/9507/83739833.30/0_c72e8_9af66ca4_L.png)
