Juniper BGP export routes via route filtr community

Статическая и динамическая, протоколы

Juniper BGP export routes via route filtr community

Сообщение zaikini » 21 июн 2011, 10:59

Всем привет!

Для начала схема сети:

bgp_juniper_cisco.jpg

Описание:
Внедряется новый граничный маршрутизатор Juniper, времменно, пока не подняты новые "прямые" bgp сессии с абонентами необходимо их префиксы отдавать апстриму через новый роутер. Для того чтобы не городить новые префикс листы, было принято решение пометить префиксы получаемые от клиентов соответствующим community 1234:2001, после чего на Juniper сделать фильтр для экспорта этих префиксов провайдеру. Дополнительно провайдеру отдаются собственные префиксы, получаемые от DR по протоколу ospf. Часть конфига Juniper R1:

Код: Выделить всё
protocols {
    bgp {
        log-updown;
        remove-private;
        group PROVIDERS {
            type external;
            export ANNOUNCE-OUT;
            local-as 1234;
            neighbor x.x.x.x1 {
                description "#Prov#";
                local-preference 370;
                local-address x.x.x.x2;
                family inet {
                    unicast;
                }
                export [ prov-out ANNOUNCE-OUT ];
                peer-as 4444;
            }
        }
        group IBGP {
            type internal;
            local-address y.y.y.y1;
            log-updown;
            peer-as 1234;
            local-as 1234;
            neighbor y.y.y.y2;
        }
 ...
policy-options {                       
    prefix-list OUR-PREFIXES {         
        y.y.y.0/19;                 
        z.z.z.0/21;                 
    }
    policy-statement ANNOUNCE-OUT {     
        term OUR-PREFIXES-LONG {       
            from {                     
                protocol ospf;         
                prefix-list-filter OUR-PREFIXES exact;
            }                           
            then accept;               
        }                               
        term CLIENTS-PREFIXES-OUT {     
            from {                     
                protocol bgp;           
                community clients-prefixes;
            }                           
            then accept;               
        }                               
        term reject-all {               
            then reject;               
        }                               
    }                                   
    policy-statement prov-out {       
        then {                         
            community set prov-out;   
            as-path-prepend "1234 1234 1234 1234";
        }                               
    }                                   
    community clients-prefixes members "^1234:2001";
    community prov-out members 4444:1200;
                                   

....

Клиент отдает префикс d.d.d.0/21

Проверки:
1. Смотрим "прилетает" ли префикс с нужным коммьюнити от Cisco-R1:

Код: Выделить всё
JUNR1# run show route receive-protocol bgp y.y.y.y2 community ^1234:2001   

inet.0: 360192 destinations, 715948 routes (360189 active, 3 holddown, 0 hidden)
  Prefix        Nexthop          MED     Lclpref    AS path
* d.d.d.0/21           y.y.y.y2        0       500        5555 I


2. Проверяем активен ли наш маршрут:

Код: Выделить всё
JUNR1# run show route d.d.d.0/21                                             

inet.0: 360187 destinations, 715932 routes (360174 active, 13 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

d.d.d.0/21      *[BGP/170] 02:09:54, MED 0, localpref 500
                      AS path: 5555 I
                    > to y.y.y.y2 via xe-1/0/0.506



3. Проверяем. что мы "отдаем" провайдеру:

Код: Выделить всё
JUNR1# run show route advertising-protocol bgp x.x.x.x1                   

inet.0: 360185 destinations, 715939 routes (360185 active, 0 holddown, 0 hidden)
  Prefix        Nexthop          MED     Lclpref    AS path
* y.y.y.0/19           Self                 20                 1234 1234 1234 1234 [1234] I
* z.z.z.0/21           Self                 20                 1234 1234 1234 1234 [1234] I



Собственно в этом и проблема, не отдаются префиксы от iBGP пира, помеченные соответствующим коммьюнити. Будут полезны любые комментарии.

P.S. при измнении policy-statement ANNOUNCE-OUT:
Код: Выделить всё
 policy-statement ANNOUNCE-OUT {     
        term OUR-PREFIXES-LONG {       
            from {                     
                protocol ospf;         
                prefix-list-filter OUR-PREFIXES exact;
            }                           
            then accept;               
        }                               
        term CLIENTS-PREFIXES-OUT {     
            from {                     
                protocol bgp;           
                route-filter d.d.d.0/21 exact;
            }                           
            then accept;               
        }                               
        term reject-all {               
            then reject;               
        }                               
    }                 

все работает замечательно:
Код: Выделить всё
JUNR1# run show route advertising-protocol bgp x.x.x.x1 

inet.0: 360317 destinations, 716216 routes (360316 active, 1 holddown, 0 hidden)
  Prefix        Nexthop          MED     Lclpref    AS path
* d.d.d.0/21           Self                                    1234 1234 1234 1234 [1234] 5555 I
* y.y.y.0/19           Self                 20                 1234 1234 1234 1234 [1234] I
* z.z.z.0/21           Self                 20                 1234 1234 1234 1234 [1234] I
Аватара пользователя
zaikini
новичок
 
Сообщения: 50
Зарегистрирован: 15 май 2009, 11:32

Re: Juniper BGP export routes via route filtr community

Сообщение root » 21 июн 2011, 20:11

привет

zaikini писал(а):Будут полезны любые комментарии.

ну что ж, странно конечно, но попробую прокоментировать
0. Defining BGP Communities and Extended Communities for Use in Routing Policy Match Conditions
1. создать комъюнити без регекспа:
Код: Выделить всё
community clients-prefixes members "1234:2001"

или с ним, но добавив $ в конец:
Код: Выделить всё
community clients-prefixes members "^1234:2001$"

2. покажи что выдает команда:
Код: Выделить всё
JUNR1# run test policy ANNOUNCE-OUT d.d.d.0/21

3. покажи вывод:
Код: Выделить всё
JUNR1# run show route detail d.d.d.0/21

4. Попробуй немного дополнить term:
Код: Выделить всё
        term CLIENTS-PREFIXES-OUT {     
            from {                     
                protocol bgp;
                neighbor y.y.y.y2;
                community clients-prefixes;
            }                           
            then accept;               
        }

5. передалать логику, т.е. проверять на входе от neighbor y.y.y.y2 комъюнити и пропускать, только те что приходят с этим комъюнити, а на выход (анонс в сторону прова) матчить только протокол BGP и IP этого нейбора
С уважением, root

Изображение
------------
www.mega-net.ru - IT аутсорсинг
Аватара пользователя
root
Site Admin
 
Сообщения: 1894
Зарегистрирован: 11 июн 2008, 13:05
Откуда: Moscow, Russia

Re: Juniper BGP export routes via route filtr community

Сообщение zaikini » 21 июн 2011, 23:14

привет, спасибо за коммент
0. Спасибо за линк, был изучен
1. Сделал следующим образом:
Код: Выделить всё
community clients-prefixes members "^1234:2001$"


2.
Код: Выделить всё
JUNR1# run test policy ANNOUNCE-OUT d.d.d.0/21

inet.0: 360292 destinations, 716201 routes (360282 active, 10 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

d.d.d.0/21      *[BGP/170] 13:58:25, MED 0, localpref 500
                      AS path: 5555 I
                    > to y.y.y.y2 via xe-1/0/0.506

Policy ANNOUNCE-OUT: 1 prefix accepted, 0 prefix rejected


3.
Код: Выделить всё
JUNR1# run show route detail d.d.d.0/21

inet.0: 360285 destinations, 716192 routes (360279 active, 6 holddown, 0 hidden)
d.d.d.0/21 (1 entry, 1 announced)
        *BGP    Preference: 170/-501
                Next hop type: Indirect
                Next-hop reference count: 1071287
                Source: y.y.y.y2
                Next hop type: Router, Next hop index: 659
                Next hop: y.y.y.y2 via xe-1/0/0.506, selected
                Protocol next hop: y.y.y.y2
                Indirect next hop: 9178d20 1048778
                State: <Active Int Ext>
                Local AS:  1234 Peer AS:  1234
                Age: 13:59:45   Metric: 0       Metric2: 0
                Task: BGP_1234.y.y.y.y+58882
                Announcement bits (3): 0-KRT 4-Resolve tree 1 5-RT
                AS path: 5555 I
                AS path: Recorded
                Communities: 1234:2001
                Accepted
                Localpref: 500
                Router ID: y.y.y.y10



4. Переделал
Код: Выделить всё
    term CLIENTS-PREFIXES-OUT {
        from {
            protocol bgp;
            neighbor y.y.y.y2;
            community clients-prefixes;
        }
        then accept;



5. Логику можно переделать, но хотелось разметить клиентские префиксы, чтобы для апстримов (на разных роутерах) сделать одинаковые правила. Такая задача очень поможет при расширении до транзитного провайдера, когда в сети может быть несколько роутеров с несколькими апстримами, а клиенты например на захотят или наоборот захотят отдавать трафик только определенным апстримам.
Аватара пользователя
zaikini
новичок
 
Сообщения: 50
Зарегистрирован: 15 май 2009, 11:32

Re: Juniper BGP export routes via route filtr community

Сообщение root » 22 июн 2011, 09:29

zaikini писал(а):Сделал следующим образом

ну так а результат какой ? по прежнему не анонсится ?
а комъюнити без регекспа пробовал ?

судя по команде test policy все нормально, префикс действительно accept`ится и должен анонсится

zaikini писал(а):но хотелось разметить клиентские префиксы, чтобы для апстримов (на разных роутерах) сделать одинаковые правила

да это понятно, я просто предложил как временное решение

zaikini писал(а):а клиенты например на захотят или наоборот захотят отдавать трафик только определенным апстримам

иными словами prefix control реализовать
Вот кусок для примера, который у меня работает:
Код: Выделить всё
juniper# show policy-options policy-statement prepend
term prepend-1 {
    from community prepend-1;
    then as-path-prepend 1234;
}

Код: Выделить всё
juniper# show policy-options community prepend-1
members 1234:52011;

Код: Выделить всё
juniper# show protocols bgp group upstreams
neighbor x.x.x.x {
    import [ ...... ];
    export [ prepend ....... upstream-out ];
    peer-as 1111;
}

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

Examples: Configuring BGP Communities as Routing Policy Match Conditions
С уважением, root

Изображение
------------
www.mega-net.ru - IT аутсорсинг
Аватара пользователя
root
Site Admin
 
Сообщения: 1894
Зарегистрирован: 11 июн 2008, 13:05
Откуда: Moscow, Russia

Re: Juniper BGP export routes via route filtr community

Сообщение root » 22 июн 2011, 11:35

а покажи ещё вывод:
Код: Выделить всё
# run show bgp neighbor x.x.x.x1


попробуй так:
Код: Выделить всё
term CLIENTS-PREFIXES-OUT {     
         from {                     
                protocol bgp;
                community [ clients-prefixes ];
         }                           
        then accept;               
}


и вот так (убрав протокол):
Код: Выделить всё
term CLIENTS-PREFIXES-OUT {     
         from {                     
                community clients-prefixes;
          }                           
         then accept;               
}


чем больше я ковыряюсь по твоей проблеме, тем больше не понимаю почему у тя не работает
исходя из всего что мы видим (маршрут принимается и активен, комъюнити выставлено) и что написано в доках все должно работать
Вот например: Examples: Configuring BGP Communities as Routing Policy Match Conditions
так же полезно: show route detail Output Fields

м.б. это баг в установленном у тя Junos`е ?
покажи:
Код: Выделить всё
# run show version

и попробуй то что я написал выше

так же вопрос: а cisco R1 анонсит эти же маршруты в сторону прова ? (я понимаю что это по сути и не важно, но как говорится просто мысль)

З.Ы. к вопросу о том какое же полиси применяется если полиси указан и в группе и в пире (ты спрашивал у lehis`ного в аське)
наткнулся на документальное объяснение:Configuring BGP Routing Policy
Applying Routing Policy

You define routing policy at the [edit policy-options] hierarchy level. To apply policies you have defined for BGP, include the import and export statements within the BGP configuration. For information about defining policy, see the JUNOS Policy Framework Configuration Guide.

You can apply policies as follows:

BGP global import and export statements—Include these statements at the [edit protocols bgp] hierarchy level (for routing instances, include these statements at the [edit routing-instances routing-instance-name protocols bgp] hierarchy level).
Group import and export statements—Include these statements at the [edit protocols bgp group group-name] hierarchy level (for routing instances, include these statements at the [edit routing-instances routing-instance-name protocols bgp group group-name] hierarchy level).
Peer import and export statements—Include these statements at the [edit protocols bgp group group-name neighbor address] hierarchy level (for routing instances, include these statements at the [edit routing-instances routing-instance-name protocols bgp group group-name neighbor address] hierarchy level).

A peer-level import or export statement overrides a group import or export statement. A group-level import or export statement overrides a global BGP import or export statement.
С уважением, root

Изображение
------------
www.mega-net.ru - IT аутсорсинг
Аватара пользователя
root
Site Admin
 
Сообщения: 1894
Зарегистрирован: 11 июн 2008, 13:05
Откуда: Moscow, Russia

Re: Juniper BGP export routes via route filtr community

Сообщение zaikini » 22 июн 2011, 16:30

Друзья, всем спасибо! Спасибо root, за помощь в решение проблемы. Решение подсказано Max@Work, всех благ этому человеку. Проблема из-за порядка обработки политик при экспорте:

Код: Выделить всё
protocols {
    bgp {
        log-updown;
        remove-private;
        group PROVIDERS {
            type external;
            export ANNOUNCE-OUT;
            local-as 1234;
            neighbor x.x.x.x1 {
                description "#Prov#";
                local-preference 370;
                local-address x.x.x.x2;
                family inet {
                    unicast;
                }
                export [ prov-out ANNOUNCE-OUT ]
                peer-as 4444;
            }
        }

строка
Код: Выделить всё
export [ prov-out ANNOUNCE-OUT ]


смотрим на наши политики:
Код: Выделить всё
policy-statement ANNOUNCE-OUT {     
        term OUR-PREFIXES-LONG {       
            from {                     
                protocol ospf;         
                prefix-list-filter OUR-PREFIXES exact;
            }                           
            then accept;               
        }                               
        term CLIENTS-PREFIXES-OUT {     
            from {                     
                protocol bgp;           
                community clients-prefixes;
            }                           
            then accept;               
        }                               
        term reject-all {               
            then reject;               
        }                               
    }                                   
    policy-statement prov-out {       
        then {                         
            community set prov-out;   
            as-path-prepend "1234 1234 1234 1234";
        }                               
    }                                   
    community clients-prefixes members "^1234:2001";
    community prov-out members 4444:1200;


первой при экспорте обрабатывается "prov-out" команда
Код: Выделить всё
community set
затирает все существующие коммьюнити и устанавливает новое согласно
Код: Выделить всё
community prov-out members 4444:1200
, поэтому коммьюнити 1234:2001 уже не существует в необходимых префиксах и при обработке политики ANNOUNCE-OUT матчинг не работает.
Решения два:
1. Использование add вместо set в строке
Код: Выделить всё
community set prov-out

2. Изменение порядка обработки политик при export.
Аватара пользователя
zaikini
новичок
 
Сообщения: 50
Зарегистрирован: 15 май 2009, 11:32

Re: Juniper BGP export routes via route filtr community

Сообщение root » 22 июн 2011, 16:35

тьфу блин, как знал что дело в какой то фигне :)
слЯпой мля.... ессно set затрет.... Max@Work глазастый.

но в любом случае топик получился информативным %)

З.Ы. "человек видит то, что хочет видеть"
С уважением, root

Изображение
------------
www.mega-net.ru - IT аутсорсинг
Аватара пользователя
root
Site Admin
 
Сообщения: 1894
Зарегистрирован: 11 июн 2008, 13:05
Откуда: Moscow, Russia


Вернуться в Маршрутизация / Routing

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 12

cron