Июл 05 2009

Quagga, BGP, регулируем отдачу с помощью local-preference.

В своем предыдущем примере мы рассматривали модель, когда по резервному каналу у нас приходит маршрут по умолчанию, схема эта вполне рабочая и жизнеспособная. Но есть одно но, я об этом уже писал, весь паразитный трафик к несуществующим адресам будет уходить на этот канал, то есть туда будет уходить паразитный, безсмысленный трафик. Вполне логично что это не совсем хорошо. То есть конечно можно работать и так, но все же. Если позволяет оборудование(маршрутизаторы), лучше всего принять два фуллвьюва и тут сбалансировать с помощью такой штуки как local-preference. Вот эту модель мы и рассмотрим. За основу берем прежнюю схему известную нам по статье BGP – route-map, as-path, prefix-list. Управляем анонсами. Мы оставляем по прежнему роутер C резервным, а роутер B приоритетным каналом, но через роутер С мы теперь примем полный список сети и сбалансируем отдачу в роутер B c помощью local-preference.

На стороне роутера B и роутера C менять ничего не надо, все изменения нужно делать на нашем роутер A.
Схема взаимодействия такая:
bgpnet
А настройки роутера B будут такие:

router bgp 65534
 bgp router-id 192.168.0.2
 network 192.168.2.0/24
 network 192.168.3.0/24
 network 192.168.4.0/24
 network 192.168.5.0/24
 network 192.168.6.0/24
 network 192.168.7.0/24
 network 192.168.8.0/24
 network 192.168.9.0/24
 network 192.168.10.0/24
 network 192.168.11.0/24
 network 192.168.12.0/24
 neighbor 192.168.0.1 remote-as 65535
 neighbor 192.168.0.1 default-originate
 neighbor 192.168.0.1 soft-reconfiguration inbound

И настройки роутера C будут такие:

router bgp 65533
 bgp router-id 192.168.0.6
 network 192.168.2.0/24
 network 192.168.3.0/24
 network 192.168.4.0/24
 network 192.168.5.0/24
 network 192.168.6.0/24
 network 192.168.7.0/24
 network 192.168.8.0/24
 network 192.168.9.0/24
 network 192.168.10.0/24
 neighbor 192.168.0.1 remote-as 65535
 neighbor 192.168.0.1 default-originate
 neighbor 192.168.0.1 soft-reconfiguration inbound

Теперь переходим к настройкам нашего основного маршрутизатора Router А, мы примем от обоих партнеров на роутер A, все что они анонсируют, исключая default router. Нам теперь не нужен маршрут по умолчанию. Для этого нам понадобится prefix-list запрещающий прием дефаулта:

ip prefix-list DEFAULT-IN-DENY seq 5 deny 0.0.0.0/0
ip prefix-list DEFAULT-IN-DENY seq 10 permit any

и назначим этот префикс лист на наши neighborы, по итогу получится такой конфиг:

router bgp 65535
 bgp router-id 192.168.0.3
 network 192.168.1.0/24
 neighbor 192.168.0.6 remote-as 65533
 neighbor 192.168.0.6 soft-reconfiguration inbound
 neighbor 192.168.0.6 prefix-list DEFAULT-IN-DENY in
 neighbor 192.168.0.6 route-map ME-OUT out
 neighbor 192.168.0.2 remote-as 65534
 neighbor 192.168.0.2 soft-reconfiguration inbound
 neighbor 192.168.0.2 prefix-list DEFAULT-IN-DENY in
 neighbor 192.168.0.2 route-map ME-OUT out
!
ip prefix-list DEFAULT-IN-DENY seq 5 deny 0.0.0.0/0
ip prefix-list DEFAULT-IN-DENY seq 10 permit any
!
ip as-path access-list ME-OUT permit ^$
!
route-map ME-OUT permit 10
 match as-path ME-OUT
!

И проверим, что мы получаем по bgp, какие маршруты.

show ip bgp

И увидим такую картину:

BGP table version is 0, local router ID is 192.168.0.3
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
              r RIB-failure, S Stale, R Removed
Origin codes: i - IGP, e - EGP, ? - incomplete
 
   Network          Next Hop            Metric LocPrf Weight Path
*> 192.168.1.0      0.0.0.0                  0         32768 i
*  192.168.2.0      192.168.0.2             0             0 65534 i
*>                  192.168.0.6             0             0 65533 i
*  192.168.3.0      192.168.0.2             0             0 65534 i
*>                  192.168.0.6             0             0 65533 i
*  192.168.4.0      192.168.0.2             0             0 65534 i
*>                  192.168.0.6             0             0 65533 i
*  192.168.5.0      192.168.0.2             0             0 65534 i
*>                  192.168.0.6             0             0 65533 i
*  192.168.6.0      192.168.0.2             0             0 65534 i
*>                  192.168.0.6             0             0 65533 i
*  192.168.7.0      192.168.0.2             0             0 65534 i
*>                  192.168.0.6             0             0 65533 i
*  192.168.8.0      192.168.0.2             0             0 65534 i
*>                  192.168.0.6             0             0 65533 i
*  192.168.9.0      192.168.0.2             0             0 65534 i
*>                  192.168.0.6             0             0 65533 i
*  192.168.10.0     192.168.0.2             0             0 65534 i
*>                  192.168.0.6             0             0 65533 i
*> 192.168.11.0     192.168.0.2             0             0 65534 i
*> 192.168.12.0     192.168.0.2             0             0 65534 i
 
Total number of prefixes 12

и в таблице маршрутизации видим такое:

B>* 192.168.2.0/24 [20/0] via 192.168.0.6, em0, 20:16:52
B>* 192.168.3.0/24 [20/0] via 192.168.0.6, em0, 20:16:52
B>* 192.168.4.0/24 [20/0] via 192.168.0.6, em0, 20:16:52
B>* 192.168.5.0/24 [20/0] via 192.168.0.6, em0, 20:16:52
B>* 192.168.6.0/24 [20/0] via 192.168.0.6, em0, 20:16:52
B>* 192.168.7.0/24 [20/0] via 192.168.0.6, em0, 20:16:52
B>* 192.168.8.0/24 [20/0] via 192.168.0.6, em0, 20:16:52
B>* 192.168.9.0/24 [20/0] via 192.168.0.6, em0, 20:16:52
B>* 192.168.10.0/24 [20/0] via 192.168.0.6, em0, 20:16:52
B>* 192.168.11.0/24 [20/0] via 192.168.0.2, em0, 01:26:06
B>* 192.168.12.0/24 [20/0] via 192.168.0.2, em0, 01:26:06

Мы видим картину, что все идет через резервный канал и причина тому, то, что bgp router принял решение самостоятельно, базируясь исключительно на том, что сессия с маршрутизатором 192.168.0.2 установлена позже и доверия ей меньше. Но нас это не устраивает — приоритетный канал должен быть приоритетным.
Для этого нужно указать что анонсы пришедшие через 192.168.0.2 имеют более высокий приоритет.
Создадим route-map в котором и будем менять приоритет:

configure terminal
route-map SET-PRIO permit 10
set local-preference 500

и теперь этот route-map припишем к neighbor:

configure terminal
router bgp 65535
neighbor 192.168.0.2 route-map SET-PRIO in

и после этого нужно дернуть сессию с 192.168.0.2

clear ip bgp 192.168.0.2 soft in

Проверяем и видим:

show ip route bgp
B>* 192.168.2.0/24 [20/0] via 192.168.0.2, em0, 00:00:02
B>* 192.168.3.0/24 [20/0] via 192.168.0.2, em0, 00:00:02
B>* 192.168.4.0/24 [20/0] via 192.168.0.2, em0, 00:00:02
B>* 192.168.5.0/24 [20/0] via 192.168.0.2, em0, 00:00:02
B>* 192.168.6.0/24 [20/0] via 192.168.0.2, em0, 00:00:02
B>* 192.168.7.0/24 [20/0] via 192.168.0.2, em0, 00:00:02
B>* 192.168.8.0/24 [20/0] via 192.168.0.2, em0, 00:00:02
B>* 192.168.9.0/24 [20/0] via 192.168.0.2, em0, 00:00:02
B>* 192.168.10.0/24 [20/0] via 192.168.0.2, em0, 00:00:02
B>* 192.168.11.0/24 [20/0] via 192.168.0.2, em0, 00:00:02
B>* 192.168.12.0/24 [20/0] via 192.168.0.2, em0, 00:00:02

Все работает как и задумывалось.
Потому что sh ip bgp показывает такую картину:

BGP table version is 0, local router ID is 192.168.0.3
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
              r RIB-failure, S Stale, R Removed
Origin codes: i - IGP, e - EGP, ? - incomplete
 
   Network          Next Hop            Metric LocPrf Weight Path
*> 192.168.1.0      0.0.0.0                  0         32768 i
*> 192.168.2.0      192.168.0.2             0    500      0 65534 i
*                   192.168.0.6             0             0 65533 i
*> 192.168.3.0      192.168.0.2             0    500      0 65534 i
*                   192.168.0.6             0             0 65533 i
*> 192.168.4.0      192.168.0.2             0    500      0 65534 i
*                   192.168.0.6             0             0 65533 i
*> 192.168.5.0      192.168.0.2             0    500      0 65534 i
*                   192.168.0.6             0             0 65533 i
*> 192.168.6.0      192.168.0.2             0    500      0 65534 i
*                   192.168.0.6             0             0 65533 i
*> 192.168.7.0      192.168.0.2             0    500      0 65534 i
*                   192.168.0.6             0             0 65533 i
*> 192.168.8.0      192.168.0.2             0    500      0 65534 i
*                   192.168.0.6             0             0 65533 i
*> 192.168.9.0      192.168.0.2             0    500      0 65534 i
*                   192.168.0.6             0             0 65533 i
*> 192.168.10.0     192.168.0.2             0    500      0 65534 i
*                   192.168.0.6             0             0 65533 i
*> 192.168.11.0     192.168.0.2             0    500      0 65534 i
*> 192.168.12.0     192.168.0.2             0    500      0 65534 i

Напротив всех маршрутах от 192.168.0.2 появился LocPrf 500 — этот маршрут имеет большую важность несмотря на стабильность сессии и тому подобное.
Настройки роутера А будут иметь такой вид:

!
router bgp 65535
 bgp router-id 192.168.0.3
 network 192.168.1.0/24
 neighbor 192.168.0.6 remote-as 65533
 neighbor 192.168.0.6 prefix-list DEFAULT-IN-DENY in
 neighbor 192.168.0.6 route-map ME-OUT out
 neighbor 192.168.0.6 remote-as 65534
 neighbor 192.168.0.2 prefix-list DEFAULT-IN-DENY in
 neighbor 192.168.0.2 route-map SET-PRIO in
 neighbor 192.168.0.2 route-map ME-OUT out
!
ip prefix-list DEFAULT-IN-DENY seq 5 deny 0.0.0.0/0
ip prefix-list DEFAULT-IN-DENY seq 10 permit any
!
ip as-path access-list ME-OUT permit ^$
!
route-map SET-PRIO permit 10
 set local-preference 500
!
route-map ME-OUT permit 10
 match as-path ME-OUT
!

Эта схема так же вполне жизнеспособна и применяется для реальных систем.

Добавить в закладки:

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

Украинская Баннерная Сеть