С точки зрения BGP интернет представляет из себя совокупность автономных систем взаимодействующих между собой. При этом можно разделить два вида автономных систем, это транзитные, через которые проходит путь к другим автономным системам и тупиковые, которые только принимают маршруты, но не ретранслируют маршруты к другим автономным системам. Как мы уже говорили, все маршруты которые приходят от партнеров по BGP, будут, по умолчанию, переданы и другим партнерам. Но если у вас тупиковая автономная система, предоставляющая доступ к интернет своим клиентам в своем адресном пространстве, то анонсы пришедшие от внешних автономных систем передавать не нужно, для этого нужно используя директиву route-map установить фильтр на исходящие анонсы используя директиву as-path.
Подключение будет теперь выглядеть так:
Согласно схемы наша автономная система AS65535 настроена на маршрутизаторе Router A и он будет анонсировать сеть 192.168.1.0/24 и принимать full-view от Router B AS65534 и default от Router C. Такая схема позволяет нам использовать Router B как приоритетный канал, а на Router C пойдет трафик в случае аварии на канале к Router B, то есть канал на Router C является резервным каналом. В Router B и Router C мы анонсируем только свою автономную систему AS65535 и сеть 192.168.1.0/24
Для начала мы просто поднимем 2 сессии и анонсируем сети, исходя из этого настройки на маршрутизаторе Router A будут такие:
router bgp 65535
bgp router-id 192.168.0.1
network 192.168.1.0/24
neighbor 192.168.0.2 remote-as 65533
neighbor 192.168.0.2 soft-reconfiguration inbound
neighbor 192.168.0.6 remote-as 65534
neighbor 192.168.0.6 soft-reconfiguration inbound
У нас добавился второй bgp партнер.
На Router 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
Удаленный маршрутизатор вам не прийдется в реальных условиях настраивать, но тут я должен привести настройку этого, удаленного маршрутизатора, для того, чтобы было понятно что происходит. А происходит тут вот что, удаленный маршрутизатор(по условиям задачи мы администрируем автономную систему AS65535, и приведены настройки удаленного по отношению к нашей автономке маршрутизатора) анонсирует нам ряд сетей, на самом деле, в реальной жизни, тут описывваются только свои сетки, а те анонсы которые передаются партнерам приходят тоже по bgp и анонсируем маршрут по умолчанию.
Настройки маршрутизатора Router 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 B сетей и default.
Сессии установились и вроде бы все хорошо, но в этой ситуации во первых мы не контролируем исход трафика, таблица маршрутов по bgp выглядит так:
B>* 0.0.0.0/0 [20/0] via 192.168.0.1, em0, 00:28:28
B>* 192.168.2.0/24 [20/0] via 192.168.0.1, em0, 00:28:27
B>* 192.168.3.0/24 [20/0] via 192.168.0.1, em0, 00:28:27
B>* 192.168.4.0/24 [20/0] via 192.168.0.1, em0, 00:28:27
B>* 192.168.5.0/24 [20/0] via 192.168.0.1, em0, 00:28:27
B>* 192.168.6.0/24 [20/0] via 192.168.0.1, em0, 00:28:27
B>* 192.168.7.0/24 [20/0] via 192.168.0.1, em0, 00:28:27
B>* 192.168.8.0/24 [20/0] via 192.168.0.1, em0, 00:28:27
B>* 192.168.9.0/24 [20/0] via 192.168.0.1, em0, 00:28:27
B>* 192.168.10.0/24 [20/0] via 192.168.0.1, em0, 00:28:27
B>* 192.168.11.0/24 [20/0] via 192.168.0.6, em0, 00:15:56
B>* 192.168.12.0/24 [20/0] via 192.168.0.6, em0, 00:15:56
мы видим часть сетей через один маршрутизатор, часть сетей, анонсы которых отсутствуют на Router C видны через Router B и что самое неприятное эта ситуация может поменяться в любой момент по решению маршрутизатора. То есть если произойдет любой сбой, маршрутизатор выкенет анонсы через один роутер и развернется на второй и будет гнать через него трафик пока не произойдет следующий сбой на текущем роутере. Идеологически это правильно, но с практической стороны часто не приемлемо. Начнем с того, что применим фильтр на default, со стороны наших партнеров AS65534 и AS65533 править не надо, а нам нужно сделать два prefix-listа, один для основного канала, по нему мы запретим прием deault, то есть примем префиксы и для резервного канала, по нему мы разрешим прием только default.
Для этого выполним во vtysh такие команды:
vtysh
configure terminal
ip prefix-list DEFAULT-IN-PERMIT seq 5 permit 0.0.0.0/0
ip prefix-list DEFAULT-IN-DENY seq 5 deny 0.0.0.0/0
ip prefix-list DEFAULT-IN-DENY seq 10 permit any
первый префикс лист DEFAULT-IN-PERMIT – разрешающий прием дефаулта и второй DEFAULT-IN-DENY – запрещающий. За запрет отвечает слово deny, а за разрешение соответсвенно permit.
А теперь назначим каждому из neighborов свой префикс лист. Для этого в командной строке vtysh выполним такие команды:
configure terminal
router bgp 65535
neighbor 192.168.0.6 prefix-list DEFAULT-IN-PERMIT in
neighbor 192.168.0.94 prefix-list DEFAULT-IN-DENY in
После добавления префикс листов, ничего не поменяется, нужно отдать команду quagga на перечитку префикcов neighborов, а именно нужно выполнить команды:
clear ip bgp 192.168.0.2 soft in
clear ip bgp 192.168.0.6 soft in
Теперь таблица маршрутов будет выглядеть так:
B>* 0.0.0.0/0 [20/0] via 192.168.0.6, em0, 1d00h18m
B>* 192.168.2.0/24 [20/0] via 192.168.0.2, em0, 00:00:06
B>* 192.168.3.0/24 [20/0] via 192.168.0.2, em0, 00:00:06
B>* 192.168.4.0/24 [20/0] via 192.168.0.2, em0, 00:00:06
B>* 192.168.5.0/24 [20/0] via 192.168.0.2, em0, 00:00:06
B>* 192.168.6.0/24 [20/0] via 192.168.0.2, em0, 00:00:06
B>* 192.168.7.0/24 [20/0] via 192.168.0.2, em0, 00:00:06
B>* 192.168.8.0/24 [20/0] via 192.168.0.2, em0, 00:00:06
B>* 192.168.9.0/24 [20/0] via 192.168.0.2, em0, 00:00:06
B>* 192.168.10.0/24 [20/0] via 192.168.0.2, em0, 00:00:06
B>* 192.168.11.0/24 [20/0] via 192.168.0.2, em0, 00:00:06
B>* 192.168.12.0/24 [20/0] via 192.168.0.2, em0, 00:00:06
С префиксами у нас все замечательно, но есть один нюанс, который не виден на нашей quagga, зато замечательно виден на Router C, я специально для иллюстрации этой ситуации на Router B для анонсов сделал несколько больше префиксов, и вот таблица роутинга на Router C будет выглядеть так:
show ip route bgp
B>* 192.168.11.0/24 [20/0] via 192.168.0.2, em0, 00:10:51
B>* 192.168.12.0/24 [20/0] via 192.168.0.2, em0, 00:10:51
А в sh ip bgp мы видим такую картину:
show ip bgp
BGP table version is 0, local router ID is 192.168.0.6
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 192.168.0.1 0 0 65535 i
* 192.168.2.0 192.168.0.2 0 65535 65534 i
*> 0.0.0.0 0 32768 i
* 192.168.3.0 192.168.0.2 0 65535 65534 i
*> 0.0.0.0 0 32768 i
* 192.168.4.0 192.168.0.2 0 65535 65534 i
*> 0.0.0.0 0 32768 i
* 192.168.5.0 192.168.0.2 0 65535 65534 i
*> 0.0.0.0 0 32768 i
* 192.168.6.0 192.168.0.2 0 65535 65534 i
*> 0.0.0.0 0 32768 i
* 192.168.7.0 192.168.0.2 0 65535 65534 i
*> 0.0.0.0 0 32768 i
* 192.168.8.0 192.168.0.2 0 65535 65534 i
*> 0.0.0.0 0 32768 i
* 192.168.9.0 192.168.0.2 0 65535 65534 i
*> 0.0.0.0 0 32768 i
* 192.168.10.0 192.168.0.2 0 65535 65534 i
*> 0.0.0.0 0 32768 i
*> 192.168.11.0 192.168.0.2 0 65535 65534 i
*> 192.168.12.0 192.168.0.2 0 65535 65534 i
Total number of prefixes 12
Пришли анонсы сетей от 192.168.0.2, и это значит что AS65535 стала транзитной AS, через нее проходят маршруты к сторонним автономным системам. В свзя с этим, нужно запретить транслировать нейджборам анонсы чужих автономных систем. Для этого воспользуемся route-map и as-path. Настройки будем делать так:
vtysh
configure terminal
ip as-path access-list ME-OUT permit ^$
Это мы определили регексп ^$ – он означает локальный AS, точнее AS у которого отсутствует AS-path.
А теперь этот ip as-path припишем к route-map, route-map этот атрибут в дальнейшем приписывается к партнеру(neighbor) и позволяет управлять исходящими и входящими анонсами по различным критериям, в нашем случае критерием является AS-path попадающий под наш регексп. Определим route-map:
vtysh
configure terminal
route-map ME-OUT
match as-path ME-OUT
То что имена у меня и AS-path и route-map совпали ничего собственно не значат – они могут быть разные, просто мне так удобней. и теперь приписываем route-map к neighbor:
vtysh
configure terminal
router bgp 65535
neighbor 192.168.0.2 route-map ME-OUT out
neighbor 192.168.0.6 route-map ME-OUT out
и теперь заставим наш bgp router передавать правильные анонсы:
clear ip bgp 192.168.0.2 soft out
clear ip bgp 192.168.0.6 soft out
И смотрим что приходит на Router B:
B>* 192.168.1.0/24 [20/0] via 192.168.0.1, em0, 00:45:56
и на Router C:
B>* 192.168.1.0/24 [20/0] via 192.168.0.1, em0, 00:47:33
И проверим анонсы:
На Router B:
show ip bgp
BGP table version is 0, local router ID is 192.168.0.6
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 192.168.0.1 0 0 65535 i
*> 192.168.2.0 0.0.0.0 0 32768 i
*> 192.168.3.0 0.0.0.0 0 32768 i
*> 192.168.4.0 0.0.0.0 0 32768 i
*> 192.168.5.0 0.0.0.0 0 32768 i
*> 192.168.6.0 0.0.0.0 0 32768 i
*> 192.168.7.0 0.0.0.0 0 32768 i
*> 192.168.8.0 0.0.0.0 0 32768 i
*> 192.168.9.0 0.0.0.0 0 32768 i
*> 192.168.10.0 0.0.0.0 0 32768 i
Total number of prefixes 10
и на Router C:
show ip bgp
BGP table version is 0, local router ID is 192.168.0.2
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 192.168.0.1 0 0 65535 i
*> 192.168.2.0 0.0.0.0 0 32768 i
*> 192.168.3.0 0.0.0.0 0 32768 i
*> 192.168.4.0 0.0.0.0 0 32768 i
*> 192.168.5.0 0.0.0.0 0 32768 i
*> 192.168.6.0 0.0.0.0 0 32768 i
*> 192.168.7.0 0.0.0.0 0 32768 i
*> 192.168.8.0 0.0.0.0 0 32768 i
*> 192.168.9.0 0.0.0.0 0 32768 i
*> 192.168.10.0 0.0.0.0 0 32768 i
*> 192.168.11.0 0.0.0.0 0 32768 i
*> 192.168.12.0 0.0.0.0 0 32768 i
Total number of prefixes 12
Все настроено правильно, полная конфигурация нашего bgp роутера выглядит так:
!
router bgp 65535
bgp router-id 192.168.0.1
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-PERMIT 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 seq 5 permit 0.0.0.0/0
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 prefix-list DEFAULT-IN-PERMIT seq 5 permit 0.0.0.0/0
!
ip as-path access-list ME-OUT permit ^$
!
route-map ME-OUT permit 10
match as-path ME-OUT
!
Это вполне работоспособная схема, подходящая для мелкого провайдера или небольшой частной конторы, которой нет необходимости гибко балансировать трафик и ретранслировать анонсы сторонних AS.
Еще следует помнить, что clear ip bgp вызывает обрыв bgp сессии, частые обрывы bgp сессии влекут за собой санкции, так называемы penalty и временное исключение AS из ретрансляции. Вызваны такие меры тем, что при каждом изменении анонсов AS, всем маршрутизаторам приходится пересчитывать маршруты, что на магистральных маршрутизаторах может вызывать излишнюю нагрузку и нарушать работу всей сети в целом, поэтому проще временно, на 10-20 минут, а при частых повторах подобных флапов и на несколько часов исключить одну автономную систему, чем нарушить работу сети в целом.
копипаст с hilik.org.ua что бы не потерялось
Комментариев нет:
Отправить комментарий