При работе с BGP community есть особенности которые следует учитывать , постараюсь изложить важные моменты .
Для чего может понадобится community ? Для многого , во первых можно с его помощью просто маркировать маршрутную информацию , но ничего не мешает использовать community для того чтобы с этой маршрутный информацией затем делать разные интересные вещи.
Существует несколько типов community
community standart — стандартное комьюнити , у него в свою очередь есть зарезервированные значения (Well-known Communities )
NO_EXPORT (0xFFFFFF01) маршруты которые передаются с таким значением атрибута community не должны анонсироваться за пределы конфедерации (автономная система, которая не является частью конфедерации считается конфедерацией). То есть, маршруты не анонсируются EBGP-соседям, но анонсируются внешним соседям в конфедерации.
NO_ADVERTISE (0xFFFFFF02) — при получении маршрута с атрибутом community no_advertise не пересылает этот маршрут не только EBGP но и IBGP пирам.
LOCAL_AS — рассылает только пирам своей подсистемы.
INTERNET — рассылается везде. используется у Cisco.
community standart new-format — формат community изменен с 32 битного числа на пару 16 битных чисел. Для использования нового формата, его надо явно включать в настройках:
если мы создадим комьюнити-лист:
ip community-list 10 permit 10затем переведем комьюнити в новый формат : Router1(config)# ip bgp-community new-formatранее созданный комьюнити лист примет следующий вид: ip community-list 10 permit 0:10Well-known Communities так же доступны в этом формате.
community extended — используются при настройке L3VPN (подробнее разберу в следующих статьях )
По умолчанию комьюнити не пересылаются соседям, для того чтобы community пересылался, необходимо в настройках BGP явно прописывать опцию send-community {extended | both} для соседа. Настройки комьюнити, для простой маркировки всех маршрутов передаваемых соседу, будут выглядеть так :
router bgp 65000
neighbor 10.0.0.1 remote-as 65000
neighbor 10.0.0.1 route-reflector-client
neighbor 10.0.0.1 send-community
neighbor 10.0.0.1 route-map SET_COMMUNITY out
exit
route-map SET_COMMUNITY permit 10
set community 500
Мы так же можем маркировать не все маршруты, а избранные :
создадим префикс лист : ip prefix-list PREFIX_LIST seq 10 permit 10.10.25.0/24далее создадим роут-мап, которая будет вешать комьюнити NO_ADVERTISE на маршрут удовлетворяющий префикс листу : route-map SET_COMMUNITY permit 10
match ip address prefix-list PREFIX_LIST
set community no-advertaiseсоздадим еще одно правило для этой роут-мап, которое будет на все остальные маршруты вешать комьюнити 500 : route-map SET_COMMUNITY permit 20
set community 500далее в настройках BGP вешаем созданную роут-мап на нужного соседа. Весь блок конфига выглядит так : router bgp 65000
neighbor 10.0.0.1 remote-as 65000
neighbor 10.0.0.1 route-reflector-client
neighbor 10.0.0.1 send-community
neighbor 10.0.0.1 route-map SET_COMMUNITY out
exitip prefix-list PREFIX_LIST seq 10 permit 10.10.25.0/24route-map SET_COMMUNITY permit 10
match ip address prefix-list PREFIX_LIST
set community no-advertaise
route-map SET_COMMUNITY permit 20
set community 500Таким образом наш сосед(обратите внимание что сосед является RR-клиентом, поэтому ему будут отсылаться маршруты полученные как от EBGP соседей, так же и маршруты полученные от IBGP соседей ) получит разные маршруты с разным комьюнити , маршрут до сети 10.10.25.0/24 будет получен с комьюнити NO_ADVERTISE, это значит что этот маршрут не будет передаваться дальше. Остальные маршруты будут получены с комьюнити 500.
Как создавать комьюнити-листы мы уже видели в примере выше . Для того чтобы управлять полученными маршрутами используя комьюнити, должны быть задействованы эти самые комьюнити-листы. Так же для того чтобы появилась возможность изменять атрибуты у полученных маршрутов необходимо в настройках BGP прописать опцию allow-policy для BGP соседа . В общем настройки будут выглядеть так :
router bgp 65000
neighbor 192.168.1.1 remote-as 65000
neighbor 192.168.1.1 send-community
neighbor 192.168.1.1 allow-policy
neighbor 192.168.1.1 route-map MATCH_COMMUNITY in
exitip community-list COMMUNITY_500 permit 500route-map MATCH_COMMUNITY permit 10
match community COMMUNITY_500
set community local preference 1000
route-map MATCH_COMMUNITY permit 20
Таким образом в примере выше мы будем получать два типа маршрутов , один маршрут с комьюнити no-advertise , остальные маршруты придут с комьюнити 500 , далее роут-мап назначит этим маршрутам Local preference 1000 .
По умолчанию когда мы назначаем комьюнити, то оно затирает старое значение комьюнити (если конечно оно там было) , если же нам необходимо добавить новое значение не затирая старого, то необходимо добавить ключ additive :
set community no-export additive
Как видим используя комьюнити и роут-мап , у нас появляется возможность гибкого управления маршрутизацией.