Не так давно один хороший человек попросил помочь с настройкой BGP во Vyatta 5.0.2. Этот маршрутизатор используется как граница сети провайдера VoIP. Почти все адреса и номера автономных систем заменены на абстрактные, на всякий случай. Входные данные следующие:
- Два соседа, оба принимают анонс одной подсети /24 и одного адреса. Один из них (Cogent, если кому интересно) анонсирует значительную часть интернета, второй (Digiport) только свои сети и маршрут по умолчанию.
- Cogent использует разные маршрутизаторы для приема и выдачи анонсов, и требует использования выделенного адреса в качестве источника.
- Маршрутизатору Cogent, который отдает маршруты, не должно ничего анонсироваться.
- В сети, которые анонсирует второй сосед, нужно ходить через него, даже если в анонсах первого они тоже есть.
Обозначим нашу сеть x.x.x.0/24; маршрутизатор Cogent, отдающий анонсы y.y.y.y; принимающий анонсы z.z.z.z; адрес источника для принимаемых нами маршрутов t.t.t.t; адрес второго соседа w.w.w.w. Номер нашей автономной системы обозначим 65501, второго соседа за 65502, Cogent оставим как он есть — 174.
Приступаем к настройке
Активируем процесс BGP, указываем соседей и анонсируемые сети.
edit protocols bgp 65501 set neighbor y.y.y.y remote-as 174 # Отдает нам маршруты из Cogent set neighbor z.z.z.z remote-as 174 # Принимает наши маршруты в Cogent set neighbor w.w.w.w remote-as 65502 # Второй сосед set network x.x.x.0/24 # Наша сеть set network t.t.t.t/32 # Адрес источника маршрутов из Cogent exit commit
Теперь надо что-то сделать с адресом источника маршрутов. Учитывая, что ни для чего больше он не используется, его обычно вешают на петлевой интерфейс (в Cisco это было бы единственным способом, поскольку в качестве источника анонсов там указывался интерфейс, а не адрес).
set interfaces loopback lo address t.t.t.t/32 commit
Настройка политик маршрутизации
Учитывая, что соседи хотят видеть в наших анонсах только нашу сеть, а один из соседей вовсе не должен ничего получать, нам нужно настроить политики маршрутизации. Мы сделаем это с помощью «карт маршрутов» (route-map).
Сначала нужно определить списки сетей (prefix-list), которые будут использованы. Вот список наших сетей:
edit policy prefix-list AdvertisedRoutes set rule 1 action permit set rule 1 prefix t.t.t.t/32 set rule 2 action permit set rule 2 pefix x.x.x.0/24 exit commit
И соответствующая карта маршрутов: анонсируем сети из списка AdvertisedRoutes, не анонсируем ничего другого.
edit policy route-map Advertise set rule 1 action permit set rule 1 match ip address prefix-list AdvertisedRoutes set rule 2 action deny exit commit
Карта маршрутов, запрещающая анонсирование чего бы то ни было:
edit policy route-map NoAdvertise set rule 1 action deny exit commit
Теперь создадим карту, которая будет увеличивать вес маршрутам из Digiport, чтобы при наличии в анонсах обоих маршрут через него считался приоритетным.
edit policy route-map DigiportPrioritize set rule 1 action permit set rule 1 set weight 10 # Устанавливаем вес 10, по умолчанию он 0 exit commit
Настройка соседей
Теперь мы закончили с политикой, и можно настроить самих соседей. Начнем с того, который отдает нам маршруты Cogent.
edit protocols bgp 65501 set neighbor y.y.y.y ebgp-multihop 5 set neighbor y.y.y.y route-map export NoAdvertise set neighbor y.y.y.y update-source t.t.t.t exit commit
Параметр ebgp-multihop отвечает за максимальное расстояние до маршрутизатора, если он не является соединенным напрямую. Параметр update-source определяет, какой адрес будет указан источником анонсов. Опция route-map export указывает карту маршрутов, которая будет применена к исходящим анонсам (для входящих нужно заменить там export на import).
Теперь переходим к тому, который принимает анонсы.
edit protocols bgp 65501 set neighbor z.z.z.z route-map export Advertise exit commit
И закончим это все вторым соседом.
edit protocols bgp 65501 set neighbor w.w.w.w route-map export Advertise set neighbor w.w.w.w route-map import DigiportPrioritize exit commit
Настроим маршрут по умолчанию через Cogent, чтобы ходить через него в те сети, которые он не анонсирует, хотя они через него доступны транзитом. (пусть адрес маршрутизатора будет q.q.q.q)
set protocols static route 0.0.0.0/0 next-hop q.q.q.q
Фрагмент конфига
Теперь можно полюбоваться на проделанную работу.
policy { prefix-list AdvertisedRoutes { rule 1 { action permit prefix t.t.t.t/32 } rule 2 { action permit prefix x.x.x.0/24 } } route-map Advertise { rule 1 { action permit match { ip { address { prefix-list Advertised } } } } rule 2 { action deny } } route-map DigiportPrioritize { rule 1 { action permit set { weight 10 } } } route-map NoAdvertise { rule 1 { action deny } } } protocols { bgp 65501 { neighbor y.y.y.y { ebgp-multihop 5 remote-as 174 route-map { export NoAdvertise } update-source t.t.t.t } neighbor z.z.z.z { remote-as 174 route-map { export Advertise } } neighbor w.w.w.w { remote-as 65502 route-map { export Advertise import DigiportPrioritize } } network t.t.t.t/32 { } network x.x.x.0/24 { } } static { route 0.0.0.0/0 { next-hop q.q.q.q { } } } }
Смотрим результат
Vyatta имеет ряд полезных команд операционного режима, позволяющих посмотреть на происходящее.
vyatta@vyatta:~$ show ip bgp neighbors y.y.y.y advertised-routes vyatta@vyatta:~$ show ip bgp neighbors z.z.z.z advertised-routes BGP table version is 0, local router ID is t.t.t.t 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 *> t.t.t.t/32 xx.xxx.xx.xx 1 32768 i *> x.x.x.x.0/24 xx.xxx.xx.xx 1 32768 i Total number of prefixes 2 vyatta@vyatta:~$ show ip bgp neighbors w.w.w.w advertised-routes BGP table version is 0, local router ID is t.t.t.t 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 *> t.t.t.t/32 zzz.zz.z.zzz 1 32768 35978 35978 35978 35978 i *> x.x.x.0/24 zzz.zz.z.zzz 1 32768 35978 35978 35978 35978 i Total number of prefixes 2
Как мы убедились с помощью команды show ip bgp neighbor <адрес> advertised-routes, первому не анонсируется ничего, а остальным наша подсеть и адрес источника. Всех соседей можно увидеть с помощью show ip bgp neighbors.
Список всех полученных маршрутов можно увидеть в show ip bgp. Посмотрим небольшой фрагмент.
BGP table version is 0, local router ID is t.t.t.t 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 *> 0.0.0.0 www.ww.w.www 10 31846 ? *> 4.23.112.0/24 xx.xxx.xx.xxx 5010 0 174 21889 i *> 4.23.113.0/24 xx.xxx.xx.xxx 5010 0 174 21889 i *> 4.23.114.0/24 xx.xxx.xx.xxx 5010 0 174 21889 i *> 4.36.118.0/24 xx.xxx.xx.xxx 5010 0 174 21889 i *> 4.59.23.0/24 xx.xxx.xx.xxx 36990 0 174 33042 i *> 4.79.98.8/30 www.ww.w.www 10 31846 i *> 4.79.248.0/24 xx.xxx.xx.xxx 1000 0 174 12180 12180 12180 12180 12180 i
Как видно, вес у маршрутов от второго соседа действительно поменялся.
С помощью show ip bgp summary можно узнать некоторую общую статистику.
vyatta@vyatta:~$ show ip bgp summary BGP router identifier t.t.t.t, local AS number 65501 RIB entries 73927, using 4620 KiB of memory Peers 3, using 7560 bytes of memory Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd y.y.y.y 4 174 331654 30759 0 0 0 01w1d03h 38882 z.z.z.z 4 174 30540 30764 0 0 0 01w1d03h 1 w.w.w.w 4 65502 61550 61503 0 0 0 4d07h43m 159 Total number of neighbors 3
С помощью show ip route можно убедиться, что наши маршруты действительно попали в FIB. Там они имеют префикс B.
Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF, I - ISIS, B - BGP, > - selected route, * - FIB route B 0.0.0.0/0 [20/0] via www.ww.w.www, 4d07h49m S>* 0.0.0.0/0 [1/0] via yy.yyy.yy.yyy, eth1 B>* 4.23.112.0/24 [20/5010] via xx.xxx.xx.xxx, eth1 (recursive via yy.yyy.yy.yyy), 01w1d03h B>* 4.23.113.0/24 [20/5010] via xx.xxx.xx.xxx, eth1 (recursive via yy.yyy.yy.yyy), 01w1d03h B>* 4.23.114.0/24 [20/5010] via xx.xxx.xx.xxx, eth1 (recursive via yy.yyy.yy.yyy), 01w1d03h B>* 4.36.118.0/24 [20/5010] via xx.xxx.xx.xxx, eth1 (recursive via yy.yyy.yy.yyy), 01w1d03h B>* 4.59.23.0/24 [20/36990] via xx.xxx.xx.xxx, eth1 (recursive via yy.yyy.yy.yyy), 01w1d03h
Заключение
Настроенный маршрутизатор уже несколько недель отлично выполняет свои задачи (хотя в организационном плане мы с этими провайдерами утомились общаться). Владелец заметил огромный прирост производительности в сравнении с Cisco 2621, который раньше стоял на этом месте.
Надеюсь, этот пример настройки окажется кому-то полезным.
1. все это хорошо, но если у меня допустим на цыске кроме BGP еще и NAT с роутмапами, в которых сортируется трафик по разным провайдерам, то как быть?
ОтветитьУдалить2. >> я зарегистрировал jabber-конференцию с адресом vyatta@conference.jabber.ru
зашел в конференцию, она не была зарегистрирована, сижу )
light:
ОтветитьУдалить1. Что-то я не понял суть вопроса.
2. Да, я обнаружил почти полное отсутствие интереса к ней и ушел оттуда.
суть вот в чем - имеется CISCO, подключенная к 3 провайдерам, за циской - автономная система, в циске - настроено BGP и NAT
ОтветитьУдалитьнат нужен для выхода клиентов через единственный ип, при этом роутмапами разруливается клиентский трафик, например, www через спутниковый канал, игровые порты - через наземный канал, третий - запасной, для отдельных личностей (туда направляются конкретные локальные ипы)
вопрос - как то же самое сделать на vyatta?
ну или почитать где, в стандартной документации примера не нашел
PS интерес штука такая - очень растянутая по времени, да и жабером не многие пользуются
light
ОтветитьУдалитьroute-map для трафика на Вятте нет, насколько знаю.
Имеющийся route-map используется только для протоколов маршрутизации - объявления отфильтровывать...
полезный пример
ОтветитьУдалитьпо виатте мало примеров
народ не подскажете по виатте - если нужно менять, в получаемых от соседа маршрутах, target scope на 255
ОтветитьУдалитьгде в filer-list это делается или может это в виатте где в другом месте нужно делать?