Меню

Juniper mx240 bgp настроить

BGP как это работает на оборудовании Juniper

BGP — Border Gateway Protocol — динамический протокол маршрутизации, используется для передачи маршрутной информации между автономными системами, или в пределах одной автономной системы ( iBGP ), на ядре сети, для обеспечения сервисов MPLS — TE.

На оборудовании Juniper Networks настройка протокола BGP выглядит следующим образом:
!
protocols <
bgp <
local-as ASxxxx;
group groupname <
type internal;
neighbor 10.10.10.1 <
description Description;
import [ policy-list ];
export [policy-list];
peer-as ASxxxx;
>
>
!
Это минимальная конфигурация, которая позволит вашему протоколу BGP начать работать.

Теперь рассмотрим как это все настраивается, какие частные случаи бывают, и как с ними работать.

Существует два варианта объявления двух важных параметров протокола BGP: номера нашей автономной системы, и параметра RiD ( адрес от которого наше оборудование будет строить все сессии с соседями).
Настроить непосредственно:
под уровнем protocols bgp/group/neighbor для частных случаев
под уровнем routing-options глобально для всей железки.
Рассмотрим сначала второй вариант:
!
lab@mxA-1# edit routing-options
[edit routing-options]
lab@mxA-1#set local-as 65535
[edit routing-options]
lab@mxA-1#set router-id 10.10.10.3
!
В данном случае мы указали что глобально наш маршрутизатор имеет номер автономной системы 65535 и параметр RiD 10.10.10.3
Теперь рассмотрим первый вариант, настройка на уровне protocols:
!
lab@mxA-1# edit protocols bgp

[edit protocols bgp]
lab@mxA-1#
!
Мы находимся на уровне конфигурирования протокола BGP начнем настройку с объявления, номера нашей AS:
!
[edit protocols bgp]
lab@mxA-1# set local-as 65535

[edit protocols bgp]
lab@mxA-1#
!
Мы указали что наш маршрутизатор будет общаться от номера AS65535 со всеми соседями указанными под данным уровнем конфигурации.
Зададим параметр RID
!
[edit protocols bgp]
lab@mxA-1# set local-address 10.10.10.10.3
!
Данный параметр может быть настроен так же на уровне Group и уровне Neigbor об этом так же будет сказано ниже.
Теперь нам необходимо описать соседей с которыми будет общаться наш маршрутизатор посредством BGP. В OS Junos все соседи объединяются в группы (в данном случае группа, в конфигурации протокола — необходимый раздел, без него нельзя настраивать соседа), которым присваиваются свои общие свойства.
!
lab@mxA-1# edit group MAIN

[edit protocols bgp group MAIN]
lab@mxA-1# edit neighbor 10.10.10.1

[edit protocols bgp group MAIN neighbor 10.10.10.1]
lab@mxA-1#
!
мы находимся на уровне конфигурирования соседа, который имеет адрес 10.10.10.1. Так же есть возможность настройки параметров целой группы, или целиком протокола. Приоритет настроек идет следующим образом: сосед, группа, протокол.
В данном случае все параметры, настроенные на этом уровне будут более приоритетными чем те, которые настроены на уровне группы или самого протокола.

Настроим номер автономной системы в которой находится сосед:
!
[edit protocols bgp group MAIN neighbor 10.10.10.1]
lab@mxA-1# set peer-as 65534

[edit protocols bgp group MAIN neighbor 10.10.10.1]
lab@mxA-1#
!
Так же можно указать следующие параметры:
!
[edit protocols bgp group MAIN neighbor 10.10.10.1]
lab@mxA-1# set as-override

[edit protocols bgp group MAIN neighbor 10.10.10.1]
lab@mxA-1# set remove-private

[edit protocols bgp group MAIN neighbor 10.10.10.1]
lab@mxA-1# set multipath

[edit protocols bgp group MAIN neighbor 10.10.10.1]
lab@mxA-1# set export Export

[edit protocols bgp group MAIN neighbor 10.10.10.1]
lab@mxA-1# set import Import

[edit protocols bgp group MAIN neighbor 10.10.10.1]
lab@mxA-1# set advertise-inactive

[edit protocols bgp group MAIN neighbor 10.10.10.1]
lab@mxA-1# set multihop

[edit protocols bgp group MAIN neighbor 10.10.10.1]
lab@mxA-1# set passive

[edit protocols bgp group MAIN neighbor 10.10.10.1]
lab@mxA-1# set type
!

as-override — используется для замены номера AS соседа в параметре AS-PATH на свой собственный номер AS
remove-private используется для того, что бы убрать все известные номера private AS из параметра AS-PATH
multipath — данный параметр позволяет отключить проверку параметра RiD при выборе активных маршрутов принимаемых по BGP. если указать параметр multiple-as то это позволит отключить проверку того, что маршрут приходит от двух различных AS. Данный функционал необходим для организации балансировки трафика приходящего двум различным путям.

export, import [polycy name] — позволяет использовать различные политики для обработки трафика, приходящего от данного соседа. Все политики выбираются и настраиваются в разделе политик.
advertise-inactive — говорит маршрутизатору передавать через BGP все маршруты, даже те, которые не отмечены как активные и не находятся в таблице маршрутизации.

multihop — данный параметр указывает что сосед не является подключенным напрямую к нашему маршрутизатору, а находится за несколько hop от него. Данный параметр дает возможность установить ttl hello пактов bgp сессии больше чем 1, и позволить сессии подняться.

passive — данный параметр позволят нам сказать, что к данному соседу не будут отправляться сообщения о начале установки BGP сессии.

type — internal /external, протокол BGP имеет два вида: eBgp и iBgp. eBgp работает между автономными системами, iBgp работает внутри одной автономной системы. В зависимости от вида протокола, необходимо указать внешний это сосед (external) или внутренний (internal).

Есть еще один интересный параметр, такой как family. В OS Junos под family понимается тип NLRI пакетов обрабатываемых в OS например IPv4 или IPv6.
[edit protocols bgp group MAIN neighbor 10.10.10.1]
!
lab@mxA-1# set family ?
Possible completions:
> inet IPv4 NLRI parameters
> inet-mdt IPv4 Multicast Distribution Tree (MDT) NLRI parameters
> inet-mvpn IPv4 MVPN NLRI parameters
> inet-vpn IPv4 Layer 3 VPN NLRI parameters
> inet6 IPv6 NLRI parameters
> inet6-mvpn IPv6 MVPN NLRI parameters
> inet6-vpn IPv6 Layer 3 VPN NLRI parameters
> iso-vpn ISO Layer 3 VPN NLRI parameters
> l2vpn MPLS-based Layer 2 VPN and VPLS NLRI parameters
> route-target Route target NLRI used for VPN route filtering
[edit protocols bgp group MAIN neighbor 10.10.10.1]
lab@mxA-1# set family
!

Читайте также:  Sjcam 4000 не работает

из примера видно что мы можем настроить тип пакетов передаваемых по BGP сессии в зависимости от того, для чего будет использоваться данная сессия. Например для передачи информации VPN L2 или VPN L3. Через данный параметр можно настроить передачу меток MPLS между AS посредством BGP или ограничить количество префиксов, приходящих от соседа.
!
[edit protocols bgp group MAIN neighbor 10.10.10.1]
lab@mxA-1# set family inet labeled-unicast prefix-limit maximum 20 teardown
!
Этот простой пример показал что мы настроили максимально возможное количество префиксов от соседа 20 штук, и что сессия используется для передачи MPLS меток IPv4.
Детальный разбор как работает и когда необходима данная настройка это отдельная задача.

В конце хотелось бы сказать что, на любом уровне настройки протокола BGP есть такой важный параметр как Description: который позволяет нам оставить небольшие комментарии, описывающие данную группу соседей или конкретного соседа, для того что бы нам самим потом не потеряться в нашей конфигурации.
Я рассказал про основные параметры которые могут потребоваться при базовой настройке протокола BGP и его корректной работы.
Дополнительные фишки достигаются применением различных политик меняющих принцип маршрутизации и работы протокола.

Источник

Настройка протокола BGP на оборудовании Juniper

Это не how-to на все случаи в жизни, а пример, с которого можно хоть как-то начать постигать замечательное железо от Juniper.

В качестве примера буду использовать:

Наша автономная система: AS1000

Наш префикс: 10.1.0.0/16

Два апстрима: AS2000 (20.2.2.1/30) и AS3000 (30.3.3.1/30)

И один прямой пиринг с AS4000 (40.4.4.1/30)

Настройка протокола BGP начинается с секции protocols.

Войдем в режим конфигурации:

перейдем в раздел protocols bgp

[edit]
root@juniper# edit protocols bgp

Начнем с того, что укажем номер своей автономной системы:

[edit protocols bgp]
root@juniper# set local-as 1000

Зададим логирование изменений состояния «соседей» (peer):

[edit protocols bgp]
root@juniper# set log-updown

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

[edit protocols bgp]
root@juniper# set advertise-inactive

Зададим route flap damping (так называемые «хлопающие» маршруты):

[edit protocols bgp]
root@juniper# set damping

Укажем лог файл:

[edit protocols bgp]
root@juniper# set traceoptions file bgp.log size 1m files 5

Теперь можно приступить к настройке соседей (peer). Как мы условились выше у нас два апстрима. Для удобства создадим группу upstreams:

[edit protocols bgp]
root@juniper# set group upstreams

перейдем в конфигурировние созданной группы:

[edit protocols bgp]
root@juniper# edit group upstreams

Укажем некоторые параметры для всей группы, например тип:

[edit protocols bgp group upstreams]
root@juniper# set type external

И несколько других параметров:

[edit protocols bgp group upstreams]
root@juniper# set description «Upstreams peers»

[edit protocols bgp group upstreams]
root@juniper# no-advertise-peer-as

Для Load-balancing включим multiple-as

[edit protocols bgp group upstreams]
root@juniper# set multipath multiple-as

Создадим первого соседа:

[edit protocols bgp group upstreams]
root@juniper# set neighbor 20.2.2.1 description Prov-1

Зададим его автомномную систему:

[edit protocols bgp group upstreams]
root@juniper# set neighbor 20.2.2.1 peer-as 2000

Зададим маршрутные карты, которые будут отрабатываться при импорте маршрутов от этого соседа. У Juniper можно задавать «конвеер» маршрутных карт:

[edit protocols bgp group upstreams]
root@juniper# set neighbor 20.2.2.1 import [ bogus-reject bogus-ases default-route-reject Prov-1-in ]

Зададим маршрутные карты, которые будут отрабатываться при экспорте маршрутов от нас к соседу:

[edit protocols bgp group upstreams]
root@juniper# set neighbor 20.2.2.1 export Prov-1-out

Тоже самое сделаем и по второму апстриму:

[edit protocols bgp group upstreams]
root@juniper# set neighbor 30.3.3.1 description Prov-2

[edit protocols bgp group upstreams]
root@juniper# set neighbor 30.3.3.1 peer-as 3000

[edit protocols bgp group upstreams]
root@juniper# set neighbor 30.3.3.1 import [ bogus-reject bogus-ases default-route-reject Prov-2-in ]

[edit protocols bgp group upstreams]
root@juniper# set neighbor 30.3.3.1 export Prov-2-out

Если вы собираетесь оглашать всем соседям этой группы одно и то же, то можно поступить немного проще, задав export сразу для всей группы (но это будет неудобно, т.к. в процессе использования BGP линков вы поймете, что не всегда всем апстримам нужно слать одно и то же):

[edit protocols bgp group upstreams]
root@juniper# set export upstreams-out

С апстримами разобрались, теперь создадим группу для прямого пиринга:

[edit protocols bgp group upstreams]
root@juniper# up

[edit protocols bgp]
root@juniper# set group peers

[edit protocols bgp]
root@juniper# edit group peers

[edit protocols bgp group peers]
root@juniper# set type external

Читайте также:  Не работает веб интерфейс модема huawei

[edit protocols bgp group peers]
root@juniper# set description «Our peers»

[edit protocols bgp group peers]
root@juniper# no-advertise-peer-as

Создадим запись о прямом пиринге с AS4000:

[edit protocols bgp group peers]
root@juniper# set neighbor 40.4.4.1 description Peer-1

[edit protocols bgp group peers]
root@juniper# set neighbor 40.4.4.1 peer-as 400

Т.к. это прямой пиринг, то и принимать от этого соседа мы будем только те маршруты которые относятся к его AS, а не full-view, поэтому в данном случае мы не делаем «конвеер».

[edit protocols bgp group peers]
root@juniper# set neighbor 40.4.4.1 import Peer-1-in

[edit protocols bgp group peers]
root@juniper# set neighbor 40.4.4.1 export Peer-1-out

Так мы выполнили первую часть. Можете взглянуть на свои труды:

[edit protocols bgp group peers]
root@juniper# up

[edit protocols bgp]
root@juniper# show group upstreams

[edit protocols bgp]
root@juniper# show group peers

Для меня оборудование Juniper сильно выделяется на фоне оборудования Cisco Systems тем, что измененная конфигурация вступает в силу только в одном случае, когда вы даете команду commit. До этого момента на маршрутизаторе действует предыдущая «закомиченная» (commited) конфигурация. Перед тем как применять/комитить конфигурацию, можно проверить её на ошибки:

[edit protocols bgp group upstreams]
root@juniper# commit check

Если вы сделали commit check на данном этапе, то Juniper обязательно ругнется на отсутвие маршрутных карт, т.к. мы их прописали у соседей, но ещё не создавали. Вот именно это, кстати не единственное, что меня очень радует в этом оборудовании, т.к. у Cisco Systems можно указать маршрутную карту на соседа, но забыть её создать и Cisco ничего не скажет по этому поводу, а Juniper не даст вам «закомитить» (выполнить команду commit) пока в конфигурации есть ошибки, в данном случае отсутствие маршрутных карт.

Теперь нужно заняться своими префиксами и маршрутными картами.

Перейдем в другую секцию конфигурации и разберемся с нашими маршрутами:

[edit protocols bgp]
root@juniper# top

[edit]
root@juniper# edit routing-options

Укажем свой router-id, обычно это IP адрес из вашего блока который есть на этом маршрутизаторе:

[edit routing-options]
root@juniper# set router-id 10.1.1.1

Снова укажем номер своей AS:

[edit routing-options]
root@juniper# set autonomous-system 1000

Тут же зададим название маршрутной карты с политикой для load-balance:

[edit routing-options]
root@juniper# set forwarding-table export per-flow-load-balancing

Создадим статические маршруты для нашего блока /16, (т.к. вы должны уже знать то, что протокол BGP не будет оглашать те маршруты, для которых он не знает next-hop адреса) но разбив его на две части. Сделаем это для того, что бы каким-либо другим соседям, например при установке прямого пиринга с AS4000 которая не является вашим апстримом, чтобы оглашать ей маршуты с большей маской и соответвенно они будут иметь больший приоритет при выборе маршрута из данной AS к вам:

[edit routing-options]
root@juniper# set static route 10.1.0.0/21 next-hop 10.1.1.2 retain readvertise

[edit routing-options]
root@juniper# set static route 10.1.8.0/21 next-hop 10.1.1.2 retain readvertise

IP-адрес 10.1.1.2 это следующий маршрутизатор внутри нашей AS1000.

Т.к. это пограничный маршрутизатор, а значит «серые» сети не должны выходить за его пределы, выполним следущее (discard):

[edit routing-options]
root@juniper# set route 10.0.0.0/8 discard

[edit routing-options]
root@juniper# set route 172.16.0.0/12 discard

[edit routing-options]
root@juniper# set route 192.168.0.0/16 discard

Не будем «насиловать» лишними маршрутами своих апстримов и будем им оглашать весь блок /20 целиком. Для этого сделаем агрегирование:

[edit routing-options]
root@juniper# set aggregate route 10.1.0.0/20 discard

Настало время создать маршрутные карты. Начнем с per-flow-load-balancing.

Перейдем в другую секцию:

[edit routing-options]
root@juniper# top

[edit]
root@juniper# edit policy-options

Создадим для per-flow-load-balancing:

[edit policy-options]
root@juniper# set policy-statement per-flow-load-balancing term balance then load-balance per-packet

Приступим к дефолтным маршрутным картам для соседей.

Для начала bogus-reject:

[edit policy-options]
root@juniper# set policy-statement bogus-reject from route-filter 127.0.0.0/8 orlonger

[edit policy-options]
root@juniper# set policy-statement bogus-reject from route-filter 10.0.0.0/8 orlonger

[edit policy-options]
root@juniper# set policy-statement bogus-reject from route-filter 172.16.0.0/12 orlonger

[edit policy-options]
root@juniper# set policy-statement bogus-reject from route-filter 192.168.0.0/16 orlonger

[edit policy-options]
root@juniper# set policy-statement bogus-reject from route-filter 169.254.0.0/16 orlonger

[edit policy-options]
root@juniper# set policy-statement bogus-reject from route-filter 224.0.0.0/4 orlonger

[edit policy-options]
root@juniper# set policy-statement bogus-reject from route-filter 240.0.0.0/4 orlonger

Так мы задали список маршрутов, теперь укажем что мы с ними хотим сделать, в т.ч., и не принимать такие маршруты:

[edit policy-options]
root@juniper# set policy-statement bogus-reject then reject

Создадим default-route-reject для запрета приема default gateway по протоколу BGP:

[edit policy-options]
root@juniper# set policy-statement default-route-reject from route-filter 0.0.0.0/0 exact

[edit policy-options]
root@juniper# set policy-statement default-route-reject then reject

Создадим bogus-ases для запрета приема «серых» (private) номеров AS:

[edit policy-options]
root@juniper# set policy-statement bogus-ases from as-path grey-as

[edit policy-options]
root@juniper# set policy-statement bogus-ases then reject

[edit policy-options]
root@juniper# set policy-statement as-path grey-as 64512-65535

Пришло время для карт для соседей. В маршрутных картах на in (input) вы можете «играться» с теми или иными маршрутами приходящими от соседей. Фильтровать что-то, поднимать local-prefence и т.п. Для примера покажу как поднять local-prefence на маршрутах, для которых ваш апстрим является origin (т.е. те маршруты, которые принадлежат его AS).

Читайте также:  Не работает свет brp

[edit policy-options]
root@juniper# set policy-statement Prov-1-in term own-as from as-path prov-1-as

[edit policy-options]
root@juniper# set policy-statement Prov-1-in term own-as then local-preference 200

[edit policy-options]
root@juniper# set policy-statement Prov-1-in term own-as then accept

Теперь создадим as-path:

[edit policy-options]
root@juniper# set as-path prov-1-as «.*200»

Т.к. orign AS для маршрута всегда находится в конце as-path, то я и задал регулярное выражение которое ищет AS2000 в конце as-path. Подробнее о регулярных выражениях читайте в технической документации по вашей версии JUNOS. Вы можете использовать не только as-path, но и префиксы которые принадлежат данному апстриму. Это на ваш выбор. Я выбрал as-path потому, что бы каждый раз не лазать и не изменять конфиг когда у этого апстрима появится новый блок IP-адресов.

Теперь зададим последний этап обработки приходящих от этого апстрима маршутов и действий с ними. Т.к. у нас full-view, то логично, что мы разрешим все остальное:

[edit policy-options]
root@juniper# set policy-statement Prov-1-in term final-accept then accept

Тут же вы можете выставить default local-preference для этого апстрима:

[edit policy-options]
root@juniper# set policy-statement Prov-1-in term final-accept then local-preference 1000

Проделайте тоже самое и для Prov-2-in подставив туда его значения создав policy-statement Prov-2-in и as-path с AS3000.

Для примера для нашего прямого пира AS4000 мы создадим маршрутку с его префиксами, а не с as-path:

[edit policy-options]
root@juniper# set policy-statement Peer-1-in term own-prefix from prefix-list-filter peer-1-prefix exact

[edit policy-options]
root@juniper# set policy-statement Peer-1-in term own-prefix then accept

Поднимем local-preference для этих маршрутов выше, чем все остальное:

[edit policy-options]
root@juniper# set policy-statement Peer-1-in term own-prefix then local-preference 210

Теперь запретим все остальное (т.к. как я уже говорил это прямой пир, а не апстрим, а раз так то принимаем только те префиксы, которые ему принадлежат):

[edit policy-options]
root@juniper# set policy-statement Peer-1-in term final-reject then reject

Ну и осталось создать peer-1-prefix который мы прописали выше и указать в нем префиксы, которые принадлежат AS400, допустим это будут префиксы:

[edit policy-options]
root@juniper# set prefix-list peer-1-prefix 195.64.0.0/16

[edit policy-options]
root@juniper# set prefix-list peer-1-prefix 77.88.224.0/21

Итак с приемом маршрутов разобрались, приступим к оглашению наших. Эта задача состоит из двух частей:

  • оглашение агрегированного маршрута для апстримов
  • оглашение разделенного блока /16 для прямого пира

При прописывании всех наших соседей мы использовали разные маршрутные карты для того, что бы у нас была возможность управлять анонсами для каждого соседа по разному. Это вам пригодится для управления входящим в вашу AS трафиком, например prepend`ом.

Начнем с AS2000 (первый апстрим) и как мы условились апстримам мы оглашаем агрегированный маршрут:

[edit policy-options]
root@juniper# set policy-statement Prov-1-out term my-prefix from protocol aggregate

[edit policy-options]
root@juniper# set policy-statement Prov-1-out term my-prefix from policy our-CIDR-blocks-aggregated

[edit policy-options]
root@juniper# set policy-statement Prov-1-out term my-prefix then accept

Создадим сам фильтр policy our-CIDR-blocks-aggregated:

[edit policy-options]
root@juniper# set policy-statement our-CIDR-blocks-aggregated term AS1000-prefix from route-filter 10.1.0.0/20 exact

[edit policy-options]
root@juniper# set policy-statement our-CIDR-blocks-aggregated term AS1000-prefix then accept

Т.к. на данном этапе мы всем апстримам оглашаем одно и тоже, то создайте Prov-2-out сами.

Теперь нужно сделать out для нашего прямого пира и оглашать мы ему будем две сети /21:

[edit policy-options]
root@juniper# set policy-statement Peer-1-out term AS1000-prefix from protocol static

[edit policy-options]
root@juniper# set policy-statement Peer-1-out term AS1000-prefix from policy our-CIDR-blocks

[edit policy-options]
root@juniper# set policy-statement Peer-1-out term AS1000-prefix then accept

[edit policy-options]
root@juniper# set policy-statement Peer-1-out term final-reject then reject

[edit policy-options]
root@juniper# set policy-statement our-CIDR-blocks term AS1000-prefixes from route-filter 10.1.0.0/21 exact

[edit policy-options]
root@juniper# set policy-statement our-CIDR-blocks term AS1000-prefixes from route-filter 10.1.8.0/21 exact

[edit policy-options]
root@juniper# set policy-statement our-CIDR-blocks term AS1000-prefixes then accept

Ну вот вроде на первый взляд и все. Проверим все ли в порядке:

[edit policy-options]
root@juniper# commit check

Если в ответ вы получили сообщение:

configuration check succeeds

значит ошибок в конфигурации нет и вы можете применять её на маршрутизаторе. Сделаем это и добавим комментарий к этому конфигу:

[edit policy-options]
root@juniper# commit comment «My first configuration»

Juniper может хранить до 50-ти «закомиченных» конфигураций и вы всегда можете откатываться к любой их них, поэтому я рекомендую всегда добавлять комментарий к конфигу, чтобы потом различать их 🙂

Посмотреть состояние всех соседей можно командой:

[edit policy-options]
root@juniper# run show bgp summary

Т.к. мы все ещё находимся в режиме конфигурирования нам приходится добавлять ключевое слово run чтобы команда show отработала не на конфигурации.

Если мы выйдем из режима конфигурирования:

[edit policy-options]
root@juniper# exit

то тут слово run добавлять уже не нужно:

Источник

Adblock
detector