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

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
!


из примера видно что мы можем настроить тип пакетов передаваемых по 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 и его корректной работы.
Дополнительные фишки достигаются применением различных политик меняющих принцип маршрутизации и работы протокола.