В прошлой статье мы рассмотрели манипулирование атрибутом LOCAL_PREFERENCE, а теперь перейдем к AS-PATH.
AS-PATH’ом мы можем регулировать свой входящий трафик, через какую AS он будет входить в нам. Ниодин из рассмотренных атрибутов, это не позволял, ведь weight и LP не являются транзитными (то есть атрибуты не передаются в EBGP).
AS-PATH нам позволит это сделать.
Мы уже знаем, что после того как BGP проверил NEXT_HOP, вес, LP далее проверяется поле AS-PATH, и используется самый короткий путь.
На этот путь мы можем с Вами повлиять, например послать нашему соседу, что поражденный в нашей системе 50 AS-PATH не просто равен 50, а равен 50 50 50 50 50. Эта технология называется AS-PATH Prepending.
Давайте рассмотрим, как это делается. Рассмотрим топологию из прошлой статьи:
AS1.1(config-route-map)#do sh run | s bgp
router bgp 1
no synchronization
bgp log-neighbor-changes
network 1.1.1.0 mask 255.255.255.0
network 1.1.10.0 mask 255.255.255.0
network 1.1.12.0 mask 255.255.255.0
neighbor 1.1.1.2 remote-as 1
neighbor 1.1.1.2 next-hop-self
neighbor 1.1.10.2 remote-as 2
neighbor 1.1.10.2 route-map AS-PREP out
neighbor 1.1.12.3 remote-as 1
neighbor 1.1.12.3 next-hop-self
no auto-summary
AS1.1(config-route-map)#
Будем использовать тот же роутер AS1.1 и сделаем так, что бы AS2 и AS3 входили в нашу систему AS1 через роутер As1.2.
Описываем route-map:
route-map AS-PREP permit 10
set as-path prepend 1 1 1 1 1
Проверяем sh ip bgp на AS2 и AS3.
Видим поле Path, и видим что препендинг у нас работает, а так же видим, что выбирается короткий маршрут по AS-PATH, то есть на данный момент в AS1 трафик идет через AS1.2, что и требовалось.
В AS-Prepend есть подводные камни, такие как:
— Провайдер может не разрешать препендинг (и по умолчанию правильный провайдер делает специальный фильтр, [0-9]+ , который говорит нам о том, что можно использовать только одно число для AS-PATH, соответственно препендинг у нас не заработает).
Об этом нужно согласовывать с оператором, чтоб он «повесил» на вас определенное правило, которое разрешит сделать препенд ровно столько раз, сколько вы договорились.
— Если вы договорились с оператором, это вовсе не гарантирует Вам того что препендинг дальше будет благополучно распространяться. Маршрут может быть суммаризован, и тогда все данные потеряются, или может просто переписан полностью AS-PATH одним из транзитных оператором (как это делается мы еще с Вами рассмотрим). И тут придется общаться с каждым оператором, который будет строить «козни» 🙂
Что еще хотелось бы отметить, в route-map вы через set as-path prepend указали через 1 1 1 1, провайдер получит на 1 больше (так как одна генирируется по-любому) и к ней добавляется то, что вы прописали в route-map, нужно помнить об этом.
Давайте рассмотрим, что транзитный оператор может сделать с AS-PATH и с Вашим препендингом.
— может взять и удалить все что было у вас в AS-PATH и переписать на свой AS:
neighbor {ip} as-averride
Эта опция доступна в address-family ipv4 vrf vpn1.
— препендинг запрещен фильтрами.
Можно отключить проверку AS-PATH так:
neighbor {ip} allowas-in
Используется например при MPLS VPN (потом будем рассматривать).
Стоит аккуратно относиться к таким фичам, так как возможны образования петель (если не полностью знать топологию).