Добрались мы до атрибута Community.
Если в нескольких словах, для чего используется community? Community используется для маркирования маршрутов (похоже на маркирование в QOS) для того, чтобы можно было в дальнейшем обработать эти маршруты по каким-то специальным правилам.
Например выделить сети для ЦОД, выделить их в отдельный community и назначить им привелигированный маршрут.
Есть зарезервированные Community, такие как:
NO_EXPORT (0xFFFFFF01) — community атрибут не пересылается между пирами внешних AS (тоесть между EBGP пирами)
NO_ADVERTISE (0xFFFFFF02) — при получении маршрута с атрибутом community no_advertise не пересылает этот атрибут не только EBGP но и IBGP пирам.
LOCAL_AS — рассылает только пирам своей подсистемы.
INTERNET — рассылается везде.
По умолчанию community не посылаются.
Существует два вида community:
Standart — название комьюнити словесно.
Extended — обозначается как AS:N, где N номер компьюнити.
Обычно используется стандартное компьюнити. У операторов чаще всего используется расширенное.
По умолчанию как я уже сказал, community не рассылается, для того чтобы community рассылался необходимо в секции BGP указать это для соседа, так:
neighbor 1.1.1.1 send-community {extended | both}
Где указать вид community, будет это расширенный или и стандартный и расширенный комьюнити.
Так же, для того чтоб наш роутер мог работать с новыми расширенными компьюнити нужно указать глобально в настройках роутера: ip bgp-community new-format.
Далее на соседе через route-map вешаем тот community, который нам нужен, итого конфиг будет выглядеть так:
ip bgp-community new-format
router bgp 1
neighbor 1.1.1.1 remote-as 2
neighbor 1.1.1.1 send-community
neighbor 1.1.1.1 route-map SETCOMMUNITY out
exit
route-map SETCOMMUNITY permit 10
set community no-export
Таким образом мы отправим маршруты и ко всем привяжем community no_export.
Хочется отметить еще вот что. У маршрутов может быть не одно community, а множество. И так как мы с Вами в route-map прописали set, мы удалим этот атрибут и пропишем только no_export, то есть если другой роутер добавлял свою комьюнити , то она потеряется.
Что бы этого не происходило, нужно добавить ключ additive.
set community no-export additive
Есть такое понятие как community-list, очень похоже на access-list, тоесть фильтрация на основе атрибута community.
Так же выделяют несколько типов таких листов:
— стандартный community-list, который создается так:
ip community-list [0-99] {permit|deny} value
— расширенный community-list имеет нумерацию от 100 до 199 и отличается от стандартных листов тем, что может использовать регулярные выражение, как мы это делали в случае as-path листов.
ip community-list [100-199] {permit|deny} regexp
— именованные community list
Думаю в пояснениях не требуется, вид такой:
ip extcommunity-list {standrt|extended} {community-list-name} {permit|deny} {community-number | regexp}
ip community-list {standrt|extended} {community-list-name} {permit|deny} {community-number | regexp}
Есть еще одна расширенная Community, которая называется cost community, она так же является не транзитивной, работает только внутри AS, либо в конфедерации и используется для манипулирование маршрутами внутри IBGP. Наименьший cost имеет наиболее высокие приоритет. Формат команды:
set ext community cost [igp] community-id [0-255] cost-value [0 4294967295]
В следующей заметке рассмотрим примеры настройки и использования community.