ISP`s IT Аутсорсинг
Быстрый переход: Главная блога Главная сайта Форум
Если Вы чего то недопоняли или не нашли - задайте
вопрос на нашем форуме и мы попробуем Вам помочь.
Subnets.ru Регистрация IP и Автономных систем mega-net.ru

Итак, вы в качестве пограничного маршрутизатора своей AS выбрали маршрутизатор Juniper.

Поздравляю вас ! Вы сделали отличный выбор ! 😉

В этой статье я постараюсь рассказать как настроить протокол BGP на оборудовании этого производителя.

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

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

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

Наш префикс: 1.1.0.0/20

Схема подключения:

Два апстрима: AS200 (2.2.2.1/30) и AS300 (3.3.3.1/30)

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

Схема подключения

Схема подключения

Будем подразумевать, что соответствующие IP интерфейсы на маршрутизаторе вы уже настроили. Пример настройки интерфейсов можно посмотреть в этой статье и сделать по аналогии.

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

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

root@juniper> configure

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

[edit]
root@juniper#
edit protocols bgp

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

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

Зададим логирование изменений состояния «соседей» (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 50

Теперь можно приступить к настройке соседей (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
2.2.2.1 description Prov-1

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

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

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

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

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

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

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

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

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

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

[edit protocols bgp group upstreams]
root@juniper# set neighbor
3.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

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

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

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

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

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

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

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

[edit protocols bgp group peers]
root@juniper# set neighbor
4.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 1.1.1.1

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

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

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

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

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

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

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

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

Т.к. это пограничный маршрутизатор, а значит «серые» сети не должны выходить за его пределы, выполним следущее (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 1.1.0.0/20 discard

Посмотрим что получилось в этой секции:

[edit routing-options]
root@juniper# show

Настало время создать маршрутные карты. Начнем с 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).

Итак Prov-1-in:

[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, то я и задал регулярное выражение которое ищет AS200 в конце 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 100

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

Для примера для нашего прямого пира AS400 мы создадим маршрутку с его префиксами, а не с 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, допустим это будут префиксы:

  • 195.128.0.0/16
  • 77.87.224.0/21

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

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

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

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

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

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

[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 AS100-prefix from route-filter 1.1.0.0/20 exact

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

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

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

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

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

[edit policy-options]
root@juniper# set
policy-statement Peer-1-out term AS100-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 AS100-prefixes from route-filter 1.1.0.0/21 exact

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

[edit policy-options]
root@juniper# set
policy-statement our-CIDR-blocks term AS100-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 добавлять уже не нужно:

root@juniper> show bgp summary

Другие команды для просмотра состояний соседей, пришедших/отправленных им маршрутах и т.п. я рассмотрю в другой статье.

Мануал, по всем командам, вы можете прочитать в технической документации по вашей версии Junos на сайте производителя: www.juniper.net

Рекомендую полистать книгу:

JUNOS Cookbook
By Aviva Garrett
………………………………………..
Publisher: O’Reilly
Pub Date: April 2006
Print ISBN-10: 0-596-10014-0
Print ISBN-13: 978-0-59-610014-8
Pages: 682

Заранее прошу прощения за оЧепЯтки и неточности. По мере нахождения багов и замечаний статья будет изменяться.

З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !

Автор: Николаев Дмитрий (virus (at) subnets.ru)

Похожие статьи:

    Не найдено

Прочитано: 56 838 раз(а)
Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 15, среднее: 4,87 из 5)
Загрузка...
Отправить на почту Отправить на почту

Добавить комментарий

Вам следует авторизоваться для размещения комментария.