<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://juniper-exam.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D0%B8%D1%8F+%D0%91%D0%BE%D0%B1%D0%BA%D0%BE%D0%B2%D0%B0</id>
	<title>Juniper Exam Wiki - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://juniper-exam.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D0%B8%D1%8F+%D0%91%D0%BE%D0%B1%D0%BA%D0%BE%D0%B2%D0%B0"/>
	<link rel="alternate" type="text/html" href="https://juniper-exam.ru/wiki/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/%D0%9D%D0%B0%D1%82%D0%B0%D0%BB%D0%B8%D1%8F_%D0%91%D0%BE%D0%B1%D0%BA%D0%BE%D0%B2%D0%B0"/>
	<updated>2026-04-09T21:30:12Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.36.0</generator>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=BGP&amp;diff=2081</id>
		<title>BGP</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=BGP&amp;diff=2081"/>
		<updated>2022-09-14T08:08:06Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: /* Возможные операции с MED */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#description2:BGP в Juniper. Состояния соседства BGP. Сообщения. Атрибуты BGP. Local preference. AS Path. Next-hop. Communities. Механизмы управления трафиком. Multipath. Multihop. Route Reflection. Confederations. Route damping. Blackhole. }}&lt;br /&gt;
BGP - протокол маршрутизации между AS. Path-vector protocol. &lt;br /&gt;
&lt;br /&gt;
'''IBGP''' - соседство внутри AS. Соседство строится обычно на Lo адресах.&lt;br /&gt;
&lt;br /&gt;
'''EBGP''' - соседство между разными AS. Соседство строится на p2p адресах.&lt;br /&gt;
&lt;br /&gt;
Поддерживает аутентификацию: MD5. Можно настроить key-chain, с указанием когда какой ключ использовать. Аутентификация применяется на разных уровнях protocols bgp. &lt;br /&gt;
=Состояния соседства=&lt;br /&gt;
http://habrastorage.org/getpro/habr/post_images/442/780/549/442780549c2f45cdda10773121b2800d.png&lt;br /&gt;
&lt;br /&gt;
Для установления соседства используется TCP:179.&lt;br /&gt;
*'''Idle''': all incoming connections - refused. Инициализация BGP ресурсов и подготовка к установлению TCP. Если роутер завис в состоянии Idle - проверить наличие маршрута к соседу.&lt;br /&gt;
*'''Connect''': процесс установления TCP сессии. Роутер слушает TCP 179. Если сессия установилась, то роутер отправляет Open message и переходит в OpenSent состояние. Если TCP не установилась, то роутер переходит в Active состояние и запускает заново ConnectRetryTimer.&lt;br /&gt;
*'''Active''': local router становится активным инициатором TCP-сессии. В состоянии Active - когда ответил на прилетевший TCP. Если роутер завис в Active, проверяем: связность, прохождение по tcp:179, корректность настройки BGP с двух сторон.&lt;br /&gt;
*'''OpenSent''': Open отправлен локальным роутером и роутер ждет ответа (Open) от соседа. &lt;br /&gt;
*'''OpenConfirm''': Open сообщение получено от соседа и роутер ждет Keepalive или Notification message. Если от соседа не приходит keepalive до истечения hold timer, то роутер генерирует Notification message, с инфо, что hold timer expired и переведет сессию в Idle. Если keepalive получен, то соседство переходит в Established state.&lt;br /&gt;
*'''Established''': BGP сессия установлена, пиры начинают обмениваться информацией, используя: Update, Keepalive, Notification сообщений. &lt;br /&gt;
&lt;br /&gt;
Hold timer может быть разным у пиров. При установлении сессии будет выбран наименьший.&lt;br /&gt;
&lt;br /&gt;
==Tips==&lt;br /&gt;
Если сессия установилась в Established, но через какое-то время перешла в Idle по Hold timer expared (скорее всего через 90sec = 3*keepalive), то первым делом проверьте MTU на канале между роутерами. &lt;br /&gt;
&lt;br /&gt;
Если MTU где-то по пути зарезан/не соответствует MTU на интерфейсах bgp-пиров, можно либо решить вопрос с MTU на найденном проблемном участке, либо можно установить для сессии вручную размер mss (maximum segment size):&lt;br /&gt;
 set protocols bgp group clients neighbor 1.1.1.1 tcp-mss 1470&lt;br /&gt;
&lt;br /&gt;
Признаки подобной проблемы в логах:&lt;br /&gt;
 Jan 1 00:18:18.553797 bgp_io_mgmt_cb:1777: NOTIFICATION sent to 1.1.1.1 (Internal AS 64777): code 4 (Hold Timer Expired Error), Reason: holdtime expired for 1.1.1.1 (Internal AS 64777), socket buffer sndcc: 0 rcvcc: 0 TCP state: 4, snd_una: 733415251 snd_nxt: 733415251 snd_wnd: 16384 rcv_nxt: 4248562819 rcv_adv: 4248579203, hold timer 90s, hold timer remain 0s, last sent 6s, TCP port (local 52746, remote 179)&lt;br /&gt;
 Jan 1 00:18:18.553889 BGP SEND message type 3 (Notification) length 21&lt;br /&gt;
 Jan 1 00:18:18.553901 BGP SEND Notification code 4 (Hold Timer Expired Error) subcode 0 (unused)&lt;br /&gt;
 Jan 1 00:18:18.554014 bgp_peer_close_and_restart: closing peer 1.1.1.1 (Internal AS 64777), state is 7 (Established) event HoldTime&lt;br /&gt;
 Jan 1 00:18:18.554064 RPD_BGP_NEIGHBOR_STATE_CHANGED: BGP peer 1.1.1.1 (Internal AS 64777) changed state from Established to Idle (event HoldTime) (instance master)&lt;br /&gt;
&lt;br /&gt;
=Сообщения=&lt;br /&gt;
Все сообщения имеют '''Header'''&lt;br /&gt;
 0                   1                   2                   3&lt;br /&gt;
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1&lt;br /&gt;
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
 |                                                               |&lt;br /&gt;
 +                                                               +&lt;br /&gt;
 |                                                               |&lt;br /&gt;
 +                                                               +&lt;br /&gt;
 |                           Marker                              |&lt;br /&gt;
 +                                                               +&lt;br /&gt;
 |                                                               |&lt;br /&gt;
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
 |          Length               |      Type     |&lt;br /&gt;
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
&lt;br /&gt;
BGP header содержит: &lt;br /&gt;
:*'''marker''' - 16 октетов, установлены в &amp;quot;1&amp;quot;. Обозначает, что это bgp-пакет&lt;br /&gt;
:*'''lenght''' - размер пакета (16bit)&lt;br /&gt;
:*'''type''' - тип сообщения&lt;br /&gt;
:** 1 - OPEN&lt;br /&gt;
:** 2 - UPDATE&lt;br /&gt;
:** 3 - NOTIFICATION&lt;br /&gt;
:** 4 - KEEPALIVE&lt;br /&gt;
:**5 - ROUTE-REFRESH [определен в RFC 2918]&lt;br /&gt;
&lt;br /&gt;
'''Типы пакетов:'''&lt;br /&gt;
*'''Open''' (type 1) - отправляется только на стадии установления соседства. Содержит параметры BGP соседа: AS, auth-type (+ ключ, если есть аутентификация).&lt;br /&gt;
*'''Update''' (type 2) - передает info о добавлении или удалении маршрутов между соседями. Update содержит в себе Path, его атрибуты и вложенные префиксы, у которых эти атрибуты одинаковые. Не отправляются по таймеру, приходят, только когда изменился сам префикс, его атрибуты или BGP-сессия. В зависимости от policy, на локальном роутере, часть routing info может быть отброшена и помещена в hidden.&lt;br /&gt;
*'''Notification''' (type 3) - в случае если что-то пошло не так: не прошел keepalive или update, пришла не поддерживаемая опция, ... Существуют стандартизированные коды ошибок (operation code | opcode). Пакет состоит из header + opcode+subcode + data (описание ошибки - для диагностики).&lt;br /&gt;
*'''Keepalive''' (type 4)- для удостоверения, что с соседством все ok. Отправляется каждые 30 sec. По дефолту hold-timer = 3 * keepalive = 90sec - время, после которого соседи рушат соседство (если в это время не пролетело ни одного keepalive). Можно выставить holdtimer = 0. Если у одного соседа = 0, у другого нет, то будет согласовано ненулевое значение holdtimer для сессии.&lt;br /&gt;
{{note|text=keepalive message = BGP header без payload}}&lt;br /&gt;
*'''Refresh''' - soft clearing BGP сессии.&lt;br /&gt;
&lt;br /&gt;
=BGP Operations=&lt;br /&gt;
BGP хранит маршруты в трех местах:&lt;br /&gt;
*Adjacency-RIB-IN: все полученные маршруты от пиров&lt;br /&gt;
*RIB-Local: маршруты локального роутера, используемые для передачи трафика. Тут хранятся только активные маршруты.&lt;br /&gt;
*Adjacency-RIB-OUT: маршруты, которые будут отправляться пирам. Передаваться могут только активные маршруты. ('''advertise-inactive''' исправляет данную ситуацию).&lt;br /&gt;
&lt;br /&gt;
Передача маршрутов производится по правилам (чтобы избежать routing loops):&lt;br /&gt;
#IBGP пиры передают маршруты, полученные от EBGP другим IBGP пирам.&lt;br /&gt;
#EBGP пиры передают маршруты, полученные от EBGP и IBGP другим EBGP пирам&lt;br /&gt;
#IBGP пиры не передают маршруты, полученные от других IBGP пиров. Поэтому для того, чтобы получить всю маршрутную информацию, требуется full-mesh связность. Либо использование RR.&lt;br /&gt;
&lt;br /&gt;
По умолчанию IBGP пиры не меняют next-hop для маршрутов, полученных от EBGP.&lt;br /&gt;
&lt;br /&gt;
Решается:&lt;br /&gt;
* настройкой '''next-hop self''' в рамках export policy к remote PE/RR.&lt;br /&gt;
* добавить p2p интерфейс с EBGP пиром в IGP как passive.&lt;br /&gt;
* анонс p2p сети по IGP. Export policy для IGP протокола.&lt;br /&gt;
* настройки статического маршрута на каждом IBGP до удаленного EBGP пира.&lt;br /&gt;
* настроить IGP соседство с EBGP пиром.&lt;br /&gt;
&lt;br /&gt;
=Атрибуты (BGP attributes)=&lt;br /&gt;
Включаются в Update сообщения и описывают BGP префиксы. Атрибуты используются для выбора активного пути.&lt;br /&gt;
 Атрибуты, при выборе best, считаются лучшими с наименьшими значением&lt;br /&gt;
 Это правило касается всех атрибутов, кроме Local Preference&lt;br /&gt;
&lt;br /&gt;
Атрибуты пути разделены на 4 категории:&lt;br /&gt;
# '''Well-known mandatory''' — все маршрутизаторы, работающие по протоколу BGP, должны распознавать эти атрибуты. Должны присутствовать во всех обновлениях (update).&lt;br /&gt;
# '''Well-known discretionary''' — все маршрутизаторы, работающие по протоколу BGP, должны распознавать эти атрибуты. Могут присутствовать в обновлениях (update), но их присутствие не обязательно.&lt;br /&gt;
# '''Optional transitive''' — могут не распознаваться всеми реализациями BGP. Если маршрутизатор не распознал атрибут, он помечает обновление как частичное (partial) и отправляет его дальше соседям, сохраняя не распознанный атрибут.&lt;br /&gt;
# '''Optional non-transitive''' — могут не распознаваться всеми реализациями BGP. Если маршрутизатор не распознал атрибут, то атрибут игнорируется и при передаче соседям отбрасывается.&lt;br /&gt;
&lt;br /&gt;
==Local preference==&lt;br /&gt;
 '''✔️Well-known Discretionary'''&lt;br /&gt;
* Указывает маршрутизаторам внутри автономной системы как выйти за её пределы. &lt;br /&gt;
* Больший приоритет выигрывает.&lt;br /&gt;
* Этот атрибут передается только в пределах одной автономной системы =&amp;gt; работает только для IBGP.&lt;br /&gt;
* На маршрутизаторах Cisco и Juniper по умолчанию значение атрибута — 100.&lt;br /&gt;
* Если EBGP-сосед получает обновление с выставленным значением local preference, он игнорирует этот атрибут.&lt;br /&gt;
* В Junos lpf можно задать через policy и в protocol bgp. Если задан обоими способами, то будет назначен lpf из policy.&lt;br /&gt;
* Обычно используется на бордерах.&lt;br /&gt;
{{note|text=Когда в сети есть 2 бордера, которые получают один и тот же маршрут извне, и бордеры навешивают одинаковый повышенный lpf через export policy, в таком случае  соседи IBGP получат маршрут с измененным lpf, но трафик не сможет по-правильному пути выйти из AS. Из-за того что бордеры тоже друг от друга будут получать маршрут с повышенным lpf. Решение: правильно менять lpf через import policy. }}&lt;br /&gt;
&lt;br /&gt;
==Autonomous system path==&lt;br /&gt;
 '''✔️Well-known Mandatory'''&lt;br /&gt;
* Описывает через какие автономные системы надо пройти, чтобы дойти до сети назначения. &lt;br /&gt;
* Номер AS добавляется при передаче обновления из одной AS eBGP-соседу в другой AS.&lt;br /&gt;
&lt;br /&gt;
Используется для:&lt;br /&gt;
* обнаружения петель&lt;br /&gt;
* влияние на path selection с помощью prepending (делается через export policy)&lt;br /&gt;
 set protocols bgp group int export longer-as-path&lt;br /&gt;
 set policy-options policy-statement longer-as-path term 1 then as-path-prepend &amp;quot;1111 1111 1111&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 show route advertising-protocol bgp 10.200.86.2 &lt;br /&gt;
 inet.0: 32 destinations, 32 routes (32 active, 0 holddown, 0 hidden)&lt;br /&gt;
  Prefix		  Nexthop	       MED     Lclpref    AS path&lt;br /&gt;
 * 172.17.0.0/24           Self                         100        '''1111 1111 1111 [1111] I'''&lt;br /&gt;
&lt;br /&gt;
'''Обозначение:'''&lt;br /&gt;
* [] - local AS&lt;br /&gt;
* {} - AS sets - группы AS, порядок не имеет значение. Возникает при агрегировании маршрутов.&lt;br /&gt;
* () - confederation&lt;br /&gt;
* ([]) - confederation sets&lt;br /&gt;
&lt;br /&gt;
Каждый сегмент атрибута AS path представлен в виде поля TLV (path segment type, path segment length, path segment value):&lt;br /&gt;
* '''path segment type''' — поле размером 1 байт для которого определены такие значения:&lt;br /&gt;
** 1 — AS_SET: неупорядоченное множество автономных систем, через которые прошел маршрут в сообщении Update,&lt;br /&gt;
** 2 — AS_SEQUENCE: упорядоченное множество автономных систем, через которые прошел маршрут в сообщении Update&lt;br /&gt;
* '''path segment length''' — поле размером 1 байт. Указывает сколько автономных систем указано в поле path segment value&lt;br /&gt;
* '''path segment value''' — номера автономных систем, каждая представлена полем размером 2 байта.&lt;br /&gt;
&lt;br /&gt;
===Операторы регулярных выражений===&lt;br /&gt;
{{re|title=&amp;lt;sub&amp;gt;Список регулярных выражений для AS Path&amp;lt;/sub&amp;gt;|Список регулярных выражений для AS Path}}&lt;br /&gt;
. - любой знак (одна точка - один любой знак, 3 точки - три любых символа).&lt;br /&gt;
&lt;br /&gt;
==Next-hop==&lt;br /&gt;
 '''✔️Well-known Mandatory'''&lt;br /&gt;
* Это IP-адрес eBGP-маршрутизатора, через который идет путь к сети назначения.&lt;br /&gt;
* Атрибут меняется при передаче префикса в другую AS (по-умолчанию подставляется ip-адрес bgp-соседа)&lt;br /&gt;
* Атрибут не меняется при передаче префикса в ту же AS&lt;br /&gt;
&lt;br /&gt;
===Next-hop resolution===&lt;br /&gt;
* '''Next-hop self'''&lt;br /&gt;
* '''Export direct into IGP:''' проанонсировать p2p сеть с EBGP peer, который прислал префикс.&lt;br /&gt;
* '''IGP passive interface:''' интерфейс в сторону EBGP соседа.&lt;br /&gt;
* '''Static routes:''' тут возникает проблема с тем, что придется на всех IBGP роутерах прописывать этот маршрут. Лучше выбрать другой способ.&lt;br /&gt;
* '''IGP adjacency on inter-AS links to EBGP peers:''' тоже плохой вариант. Опсано и зачем тогде вообще разные AS. Лучше выбрать другой способ.&lt;br /&gt;
&lt;br /&gt;
Можно изменить с помощью policy на выходе (export к IBGP):&lt;br /&gt;
 set policy-options policy-statement nexthop-self term localpref then next-hop self&lt;br /&gt;
&lt;br /&gt;
Или же на входе (import от EBGP peer):&lt;br /&gt;
 set policy-options policy-statement nexthop-peer term localpref then next-hop ''peer-address''&lt;br /&gt;
&lt;br /&gt;
==Origin==&lt;br /&gt;
 '''✔️Well-known Mandatory'''&lt;br /&gt;
Атрибут '''Origin''' — указывает на то, каким образом был получен маршрут в обновлении. Меняется с помощью policy.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Возможные значения атрибута&lt;br /&gt;
|-&lt;br /&gt;
|'''0'''&lt;br /&gt;
|IGP&lt;br /&gt;
|NLRI получена внутри исходной автономной системы&lt;br /&gt;
|-&lt;br /&gt;
|'''1'''&lt;br /&gt;
| EGP&lt;br /&gt;
| NLRI выучена по протоколу Exterior Gateway Protocol (EGP) - протокол уже давно не используется.&lt;br /&gt;
|-&lt;br /&gt;
|'''2'''&lt;br /&gt;
| Incomplete&lt;br /&gt;
| NLRI была выучена каким-то другим образом, скорей  всего через redistribution.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Atomic aggregate==&lt;br /&gt;
 '''✔️Well-known Discretionary'''&lt;br /&gt;
&lt;br /&gt;
==Aggregator==&lt;br /&gt;
 '''✔️Optional Transitive'''&lt;br /&gt;
&lt;br /&gt;
==Communities==&lt;br /&gt;
 '''✔️Optional Transitive'''&lt;br /&gt;
* Тегирование маршрутов&lt;br /&gt;
* Существуют предопределенные значения (well-known), которые не требуется определять локально на своем оборудовании&lt;br /&gt;
* По умолчанию не пересылаются соседям&lt;br /&gt;
* Одному маршруту может быть присвоено несколько communities&lt;br /&gt;
*Community могут быть критерием в policy для изменения других атрибутов BGP, например lpf.&lt;br /&gt;
* Один из вариантов применения: передается соседней AS для управления входящим трафиком&lt;br /&gt;
&lt;br /&gt;
Значения от 0x00000000 до 0x0000FFFF и от 0xFFFF0000 до 0xFFFFFFFF зарезервированы.&lt;br /&gt;
&lt;br /&gt;
Как правило community отображаются в формате ASN:VALUE.&lt;br /&gt;
В таком формате, доступны для использования community от 1:0 до 65534:65535.&lt;br /&gt;
В первой части указывается номер автономной системы, а во второй значение community, которое определяет политику маршрутизации трафика.&lt;br /&gt;
&lt;br /&gt;
Некоторые значения communities предопределены. RFC1997 определяет три значения таких community. Эти значения должны одинаково распознаваться и обрабатываться всеми реализациями BGP, которые распознают атрибут community.&lt;br /&gt;
&lt;br /&gt;
Если маршрутизатор получает маршрут, в котором указано предопределенное значение communities, то он выполняет специфическое, предопределенное действие основанное на значении атрибута.&lt;br /&gt;
&lt;br /&gt;
Предопределенные значения communities (Well-known Communities):&lt;br /&gt;
&lt;br /&gt;
===no-export (0xFFFFFF01)===&lt;br /&gt;
Все маршруты которые передаются с таким значением атрибута community не должны анонсироваться за пределы AS.&lt;br /&gt;
То есть, маршруты не анонсируются EBGP-соседям, но анонсируются внешним соседям в конфедерации.&lt;br /&gt;
&lt;br /&gt;
'''Пример использования'''&lt;br /&gt;
{{note|text=AS1 подключена к AS2 двумя линками (multinoming). AS1 анонсирует '''172.17.0/16''' в AS2. Для оптимальной маршрутизации, AS1 хочет посылать некоторые более специфичные маршруты через один из этих линков, при этом остальному интернету вовсе не обязательно получать эти специфики. Для этой цели AS1 использует community no-export, и посылает '''172.17.0/17''' в один из стыков с AS2, и '''172.17.128/17''' во второй стык. AS2 видит эти маршруты и выбирает их как более специфичные. Кроме того, эти маршруты видят все iBGP-соседи в пределах AS2. Тем не менее, за пределы AS2 в Интернет анонсируется только '''172.17.0/16'''.}}&lt;br /&gt;
{{note|text= AS customer имеет 2 ISP (AS1, AS2).  AS1 - основной. Если AS customer хочет получать выход в инет только через AS1, то в сторону AS2 можно просто посылать маршруты с no-export. Но при этом важно, что при падении AS1, AS customer будет доступна только локальным пользователям AS2, но не всему интернету.}}&lt;br /&gt;
===no-advertise (0xFFFFFF02)=== &lt;br /&gt;
Все маршруты которые передаются с таким значением атрибута community не должны анонсироваться другим BGP-соседям.&lt;br /&gt;
&lt;br /&gt;
===no-export-subconfed (0xFFFFFF03)===&lt;br /&gt;
Все маршруты которые передаются с таким значением атрибута community не должны анонсироваться внешним BGP-соседям (ни внешним для конфедерации, ни настоящим внешним соседям). В Cisco это значение встречается и под названием local-as.&lt;br /&gt;
{{note|text=Маршрутизаторы, которые не поддерживают атрибут community, будут передавать его далее, так как это transitive атрибут.}}&lt;br /&gt;
&lt;br /&gt;
 set policy-options policy-statement community ''test-community'' members ''[65510:555 65610:999]''     - [x and y]&lt;br /&gt;
 set policy-options policy-statement ''test'' term ''1'' then community (add|set|delete) ''test-community''&lt;br /&gt;
&lt;br /&gt;
 set policy-options policy-statement community ''all-community'' members '' &amp;quot;*:*&amp;quot; ''&lt;br /&gt;
&lt;br /&gt;
С communities широко используются регулярные выражения.&lt;br /&gt;
&lt;br /&gt;
===Примеры===&lt;br /&gt;
&lt;br /&gt;
100:* - all posible community values with AS 100.&lt;br /&gt;
&lt;br /&gt;
11.1:666 - 1101:666, 1111:666, 1121:666, etc.&lt;br /&gt;
&lt;br /&gt;
 show route community *:20&lt;br /&gt;
 show route community-name ''community-test'' detail&lt;br /&gt;
&lt;br /&gt;
===Список операторов регулярных выражений для Community===&lt;br /&gt;
{{re|title=Список операторов регулярных выражений для Community}}&lt;br /&gt;
&lt;br /&gt;
===Действия с community===&lt;br /&gt;
*add - добавляет к текущим community префикса указанное community&lt;br /&gt;
*delete - удаляет только указанное community&lt;br /&gt;
*set - заменяет существующие community на указанное&lt;br /&gt;
&lt;br /&gt;
==Multi exit discriminator (MED)==&lt;br /&gt;
&lt;br /&gt;
 '''✔️Optional Non-transitive'''&lt;br /&gt;
&lt;br /&gt;
* Используется для информирования eBGP-соседей о том, какой путь в автономную систему более предпочтительный. &lt;br /&gt;
* Атрибут передается между автономными системами, но в Junos передается только EBGP пиру и не распространяется дальше по AS.&lt;br /&gt;
* Маршрутизаторы внутри соседней автономной системы используют этот атрибут, но, как только обновление выходит за пределы AS, атрибут MED отбрасывается.&lt;br /&gt;
* Чем меньше значение атрибута, тем более предпочтительна точка входа в автономную систему.&lt;br /&gt;
* Исходя из названия - используется только в тех случаях, когда между AS есть несколько линков.&lt;br /&gt;
*Можно использовать для балансировки.&lt;br /&gt;
&lt;br /&gt;
Сравнение MED (при прочих равных) происходит если один и тот же префикс приходит от одной AS. &lt;br /&gt;
&lt;br /&gt;
Если будет анонс этого префикса с более низким MED, но из другой AS, то он не будет рассматриваться как вероятный вариант для использования. &lt;br /&gt;
&lt;br /&gt;
Это дефолтное поведение, которое можно изменить с помощью:&lt;br /&gt;
*''always-compare-med'': при этом не будет иметь значение разные AS или одна, просто активным станет маршрут с самым низким MED.&lt;br /&gt;
*''cisco-non-determenistic'': выбор основан на том, когда маршрут пришел. Juniper не рекомендует использовать.&lt;br /&gt;
&lt;br /&gt;
MED назначается с помощью policy.&lt;br /&gt;
===Возможные операции с MED===&lt;br /&gt;
Внутри policy ''metric'' - это обозначение MED атрибута.&lt;br /&gt;
&lt;br /&gt;
Можно использовать как в ''from'', так и в ''then''. ''Then'': назначение метки - ''metric 50'', добавить к существующей метки - ''metric add 50'', вычесть из ''metric subtract 50''.&lt;br /&gt;
&lt;br /&gt;
MED можно назначить внутри ''protocols bgp'':&lt;br /&gt;
&lt;br /&gt;
 [edit protocols bgp group AS-100]&lt;br /&gt;
    type external&lt;br /&gt;
    local-as 200&lt;br /&gt;
    neighbor 1.1.1.1 metric-out 50                    &amp;lt;= определенное значение&lt;br /&gt;
    neighbor 2.2.2.2 metric-out igp                   &amp;lt;= текущая IGP метрика&lt;br /&gt;
    neighbor 3.3.3.3 metric-out minimum-igp           &amp;lt;= минимальная IGP мтерика, когда-либо изученная&lt;br /&gt;
    neighbor 4.4.4.4 metric-out igp 5                 &amp;lt;= добавить или вычесть из IGP метрики&lt;br /&gt;
&lt;br /&gt;
MED также можно назначить аналогичным образом через policy:&lt;br /&gt;
&lt;br /&gt;
 [edit policy-optinos policy-sttement new-metric]&lt;br /&gt;
    term IGP&lt;br /&gt;
       then metric igp ''offset''&lt;br /&gt;
    term minimum-igp&lt;br /&gt;
       then metric minimum-igp ''offset''&lt;br /&gt;
&lt;br /&gt;
При использовании ''metric igp'' на префикс вешается MED, равный IGP метрики до роутера, который прислал этот префикс. При изменениях IGP metric, будет меняться и MED.&lt;br /&gt;
&lt;br /&gt;
При использовании ''metric minimum-igp'' MED не будет меняться при изменениях IGP метрики.&lt;br /&gt;
&lt;br /&gt;
При агрегировании маршрутов - MED становится = 0.&lt;br /&gt;
&lt;br /&gt;
Если между роутерами передаются агрегированный маршрут и вложенный в него в MED, то вложенный будет передан с MED, а агрегированный - с MED = 0.&lt;br /&gt;
&lt;br /&gt;
Это дефолтное поведение и альтернатив этому нет.&lt;br /&gt;
&lt;br /&gt;
==Weight (проприетарный атрибут Cisco)==&lt;br /&gt;
Атрибут '''Weight''': &lt;br /&gt;
* Позволяет назначить &amp;quot;вес&amp;quot; различным путям локально на маршрутизаторе. &lt;br /&gt;
* Используется в тех случаях, когда у одного маршрутизатора есть несколько выходов из автономной системы (сам маршрутизатор является точкой выхода). &lt;br /&gt;
* Имеет значение только локально, в пределах маршрутизатора. &lt;br /&gt;
* Не передается в обновлениях.&lt;br /&gt;
* Чем больше значение атрибута, тем более предпочтителен путь выхода.&lt;br /&gt;
&lt;br /&gt;
=Механизмы управления трафиком=&lt;br /&gt;
==Входящим==&lt;br /&gt;
*AS path prepend&lt;br /&gt;
*Community (если поддерживает провайдер)&lt;br /&gt;
*MED (подключение к одной и той же AS)&lt;br /&gt;
*Анонс разных префиксов через разных ISP&lt;br /&gt;
&lt;br /&gt;
==Исходящим==&lt;br /&gt;
*Проприетарный атрибут Cisco weight (локально на маршрутизаторе)&lt;br /&gt;
*Local Preference (локально в AS)&lt;br /&gt;
*Косвенно можно политикой навешивать med на префиксы от пира и в зависимости от этого будет также регулироваться исходящий трафик.&lt;br /&gt;
&lt;br /&gt;
=Выбор лучшего пути (BGP Active Route Selection)=&lt;br /&gt;
# Проверяем, что резолвится next-hop (без это маршрут и активным то не будет :/ )&lt;br /&gt;
# Route Preference (Admin distance)&lt;br /&gt;
# БОльший local preference (''Inactive reason: '''Local Preference''''')&lt;br /&gt;
# Кратчайший AS-path (''Inactive reason: '''AS path''''')&lt;br /&gt;
# Меньший Origin value (''Inactive reason: '''Origin''''')&lt;br /&gt;
# Меньший MED value (''Inactive reason: '''Route Metric or MED comparison''''')&lt;br /&gt;
# EBGP peer предпочтительней IBGP peer (''Inactive reason: '''Interior &amp;gt; Exterior &amp;gt; Exterior via Interior''''')&lt;br /&gt;
# C кратчайшей IGP метрикой к Protocol next-hop (''Inactive reason: '''Not Best in its group – IGP metric''''')&lt;br /&gt;
# Если префикс получен по IBGP, то используем префикс от пира с наименьшим RID (''Inactive reason: '''Not Best in its group – Router ID''''')&lt;br /&gt;
# Если префикс получен по EBGP, то используем более старый активный префикс (считается более стабильным) (''Inactive reason: '''Not Best in its group – Active preferred''''')&lt;br /&gt;
# При использовании RR: кратчайший cluster list length (''Inactive reason: '''Not Best in its group – Cluster list length''''')&lt;br /&gt;
# Наименьший router-ID (''Inactive reason: '''Not Best in its group – Router ID''''')&lt;br /&gt;
# Наименьший Source IP address (''Inactive reason: '''Not Best in its group - Update source''''') &lt;br /&gt;
&lt;br /&gt;
В Juniper можно посмотреть причину неактивности маршрута: ''Inactive reason'' в выводе ''sh route protocol bgp x.x.x.x extensive''&lt;br /&gt;
&lt;br /&gt;
Дефолтное поведение для EBGP маршрутов может быть изменено: '''path-selection external-router-id'''. При включении этой функции для роутера выбор активного EBGP маршрута от разных роутеров будет делаться по наименьшему router-id.&lt;br /&gt;
&lt;br /&gt;
*Route Preference (Admin distance) - не передается по ibgp, ebgp. Может только навешиваться через import-policy или в настройках bgp на любом уровне иерархии.&lt;br /&gt;
&lt;br /&gt;
=Multipath=&lt;br /&gt;
Один и тот же маршрут прилетает с двух пиров одной AS или несколько копий маршрута прилетает с одного пира. Активный маршрут будет вставлен в routing table с несколькими next-hop и трафик будет балансироваться между двумя пирами (в forwarding table все же будет вставляться один next-hop). Для inactive маршрутов будет указан один next-hop. Multipath не вставит маршруты с одинаковым MED-plus-IGP cost, при разных IGP метриках до пиров. На роутере глобально должен быть включен load-balancing.&lt;br /&gt;
&lt;br /&gt;
При включенном multipath, алгоритм выбора лучшего пути игнорирует router ID и peer ID. &lt;br /&gt;
&lt;br /&gt;
До включения:&lt;br /&gt;
 mortlach&amp;gt; show route protocol bgp terse    &lt;br /&gt;
 inet.0: 30 destinations, 34 routes (30 active, 0 holddown, 0 hidden)&lt;br /&gt;
 + = Active Route, - = Last Active, * = Both&lt;br /&gt;
 A Destination        P Prf   Metric 1   Metric 2  Next hop	AS path&lt;br /&gt;
 	* 172.17.0.0/24	B 170	100	&amp;gt;192.168.86.21	I&lt;br /&gt;
 			B 170	100	&amp;gt;192.168.86.42	I&lt;br /&gt;
 	* 172.17.1.0/24	B 170	100	&amp;gt;192.168.86.21	I&lt;br /&gt;
 			B 170	100	&amp;gt;192.168.86.42	I&lt;br /&gt;
 	* 172.17.2.0/24	B 170	100	&amp;gt;192.168.86.21	I&lt;br /&gt;
 			B 170	100	&amp;gt;192.168.86.42	I&lt;br /&gt;
 	* 172.17.3.0/24	B 170	100	&amp;gt;192.168.86.21	I&lt;br /&gt;
 			B 170	100	&amp;gt;192.168.86.42	I&lt;br /&gt;
 mortlach&amp;gt; show route forwarding-table destination 172.17.0.0/24    &lt;br /&gt;
 Routing table: default.inet&lt;br /&gt;
 Internet:&lt;br /&gt;
 Destination	Type	RtRef	Next hop	Type Index NhRef Netif&lt;br /&gt;
 172.17.0.0/24	user	0			indr 262142     5&lt;br /&gt;
 				192.168.86.21      ucst   547     5 '''ge-0/0/0.90 - выбран активным, из-за меньшего router-ID (10.200.86.4 vs 10.200.86.8)'''&lt;br /&gt;
&lt;br /&gt;
После:&lt;br /&gt;
 mortlach&amp;gt; show route protocol bgp terse&lt;br /&gt;
 inet.0: 30 destinations, 34 routes (30 active, 0 holddown, 0 hidden)&lt;br /&gt;
 + = Active Route, - = Last Active, * = Both&lt;br /&gt;
 A Destination        P Prf   Metric 1   Metric 2 Next hop AS path&lt;br /&gt;
 	* 172.17.0.0/24	B 170	100	192.168.86.21	I&lt;br /&gt;
 					&amp;gt;192.168.86.42&lt;br /&gt;
 			B 170	100	&amp;gt;192.168.86.42	I&lt;br /&gt;
 	* 172.17.1.0/24	B 170	100	192.168.86.21	I&lt;br /&gt;
 					&amp;gt;192.168.86.42&lt;br /&gt;
 			B 170	100	&amp;gt;192.168.86.42	I&lt;br /&gt;
 	* 172.17.2.0/24	B 170	100	192.168.86.21	I&lt;br /&gt;
 					&amp;gt;192.168.86.42&lt;br /&gt;
 			B 170	100	&amp;gt;192.168.86.42	I&lt;br /&gt;
 	* 172.17.3.0/24	B 170	100	192.168.86.21	I&lt;br /&gt;
 					&amp;gt;192.168.86.42&lt;br /&gt;
 			B 170	100	&amp;gt;192.168.86.42	I&lt;br /&gt;
 &lt;br /&gt;
 mortlach&amp;gt; show route forwarding-table destination 172.17.0.0/24    &lt;br /&gt;
 Routing table: default.inet&lt;br /&gt;
 Internet:&lt;br /&gt;
 Destination        Type RtRef Next hop           Type Index NhRef Netif&lt;br /&gt;
 172.17.0.0/24      user     0      indr 262143     5&lt;br /&gt;
  192.168.86.42      ucst   588     7 '''ge-0/0/0.50''' - '''изменился, т.к. router ID уже не влияет на выбор лучшего пути'''&lt;br /&gt;
&lt;br /&gt;
==Link Bandwidth Extended Community==&lt;br /&gt;
При включенном multipath можно задать желаемую балансировку между линками через extended community.&lt;br /&gt;
Это механизм описан в draft-ietf-idr-link-bandwidth-06, и не является стандартизированным, следовательно, возможно, он не будет работать с некоторыми вендорами. В JunOS поддерживается.&lt;br /&gt;
&lt;br /&gt;
Позволяет делать балансировку пропорционально заданным в community скоростям.&lt;br /&gt;
&lt;br /&gt;
Пример использования:&lt;br /&gt;
&lt;br /&gt;
R1 и R2 соединены напрямую через два сабинтерфейса, на каждом из которых висит своя /30 сеть&lt;br /&gt;
&lt;br /&gt;
 |     | ge-0/0/0.10 ----- ge-0/0/0.10 |    |&lt;br /&gt;
 |  R1 |                               | R2 |&lt;br /&gt;
 |     | ge-0/0/0.20 ----- ge-0/0/0.20 |    |&lt;br /&gt;
&lt;br /&gt;
Конфиг R1:&lt;br /&gt;
 R1&amp;gt; show configuration protocols bgp &lt;br /&gt;
 group ebgp {&lt;br /&gt;
     multipath;&lt;br /&gt;
     neighbor 10.1.0.2 {&lt;br /&gt;
         description R2;&lt;br /&gt;
         export from-direct;&lt;br /&gt;
         peer-as 2222;}&lt;br /&gt;
     neighbor 10.2.0.2 {&lt;br /&gt;
         description R2;&lt;br /&gt;
         export from-direct;&lt;br /&gt;
         peer-as 2222;}}&lt;br /&gt;
&lt;br /&gt;
Конфиг R2:&lt;br /&gt;
 set interfaces lo0 unit 0 family inet address 2.2.2.2/32&lt;br /&gt;
 &lt;br /&gt;
 set policy-options policy-statement bw20 then community add bw20&lt;br /&gt;
 set policy-options policy-statement bw80 then community add bw80&lt;br /&gt;
&lt;br /&gt;
 set policy-options policy-statement from-direct term redistribute-direct from protocol direct&lt;br /&gt;
 set policy-options policy-statement from-direct term redistribute-direct then accept&lt;br /&gt;
 set policy-options policy-statement from-direct term default then reject&lt;br /&gt;
&lt;br /&gt;
 set policy-options community bw20 members bandwidth:2222:2500000; '''// 2500000 байт в секунду — это 20% от 100Мегабит'''&lt;br /&gt;
 set policy-options community bw80 members bandwidth:2222:10000000; '''// 10000000 байт в секунду — это 80% от 100Мегабит'''&lt;br /&gt;
 &lt;br /&gt;
 R2&amp;gt; show configuration protocols bgp &lt;br /&gt;
 group ebgp {&lt;br /&gt;
     neighbor 10.1.0.1 {&lt;br /&gt;
         description R1;&lt;br /&gt;
         export [ bw20 from-direct ]; '''// На одно из  соседств навешивается community bw20'''&lt;br /&gt;
         peer-as 1111;}&lt;br /&gt;
     neighbor 10.2.0.1 {&lt;br /&gt;
         description R1;&lt;br /&gt;
         export [ bw80 from-direct ]; '''// На второе соседство навешивается community bw80'''&lt;br /&gt;
         peer-as 1111;}}&lt;br /&gt;
&lt;br /&gt;
Что получилось:&lt;br /&gt;
&lt;br /&gt;
 R1&amp;gt; show route 2.2.2.2 extensive        &lt;br /&gt;
 &lt;br /&gt;
 inet.0: 11 destinations, 19 routes (11 active, 0 holddown, 0 hidden)&lt;br /&gt;
 2.2.2.2/32 (2 entries, 1 announced)&lt;br /&gt;
 TSI:&lt;br /&gt;
 KRT in-kernel 2.2.2.2/32 -&amp;gt; {10.2.0.2, 10.1.0.2}&lt;br /&gt;
        *BGP    Preference: 170/-101&lt;br /&gt;
                Next hop type: Router, Next hop index: 262145&lt;br /&gt;
                Address: 0x9404010&lt;br /&gt;
                Next-hop reference count: 8&lt;br /&gt;
                Source: 10.1.0.2&lt;br /&gt;
                '''Next hop: 10.2.0.2 via ge-0/0/0.20 balance 80%'''&lt;br /&gt;
                '''Next hop: 10.1.0.2 via ge-0/0/0.10 balance 20%, selected'''&lt;br /&gt;
                State: &amp;lt;Active Ext&amp;gt;&lt;br /&gt;
                Local AS:  1111 Peer AS:  2222&lt;br /&gt;
                Age: 1:20:49 &lt;br /&gt;
                Task: BGP_2222.10.1.0.2+179&lt;br /&gt;
                Announcement bits (1): 0-KRT &lt;br /&gt;
                AS path: 2222 I&lt;br /&gt;
                '''Communities: bandwidth:2222:2500000'''&lt;br /&gt;
                '''Accepted Multipath'''&lt;br /&gt;
                Localpref: 100&lt;br /&gt;
                Router ID: 2.2.2.2&lt;br /&gt;
&lt;br /&gt;
=Multihop=&lt;br /&gt;
Возможность поднять EBGP peering между роутерами, не имеющих прямого физического соединения. Сессия устанавливается на lo интерфейсах.&lt;br /&gt;
&lt;br /&gt;
Важно в конфиге задать multihop. В таблице маршрутизации должен быть маршрут до пира.&lt;br /&gt;
&lt;br /&gt;
При поднятии сессии на Lo интерфейсах используем:&lt;br /&gt;
*''set system default-address-selection'' - будет браться адрес lo автоматически&lt;br /&gt;
*local-address (bgp, group или neighbor) - более специфичен, поэтому если надо будет - перебьет уже настроенный default-address-selection&lt;br /&gt;
&lt;br /&gt;
TTL = 1 задаем, чтобы соседство установилось точно с одним ближайшим роутером. (либо другое значение, если роутер далеко)&lt;br /&gt;
&lt;br /&gt;
 blair&amp;gt; show route 10.200.86.4    &lt;br /&gt;
 10.200.86.4/32	*[IS-IS/18] 00:00:03, metric 10&lt;br /&gt;
 		  to 192.168.86.49 via ge-0/0/0.80&lt;br /&gt;
 		&amp;gt; to 192.168.86.17 via ge-0/0/0.100&lt;br /&gt;
Config&lt;br /&gt;
 set protocols bgp group int type internal&lt;br /&gt;
 set protocols bgp group int multihop ttl 1&lt;br /&gt;
 set protocols bgp group int local-address 10.200.86.1&lt;br /&gt;
 set protocols bgp group int neighbor 10.200.86.4 &lt;br /&gt;
&lt;br /&gt;
Т.к. между роутерами теперь 2 физических линка, то можно балансировать трафик между ними.&lt;br /&gt;
&lt;br /&gt;
=Modifying AS Path=&lt;br /&gt;
==Option 1: remove-private==&lt;br /&gt;
Диапазон: 64512 - 65534&lt;br /&gt;
&lt;br /&gt;
Роутер, на котором настроен remove-private перед передачей префиксов удаляет из AS path AS из указанного выше диапазона.&lt;br /&gt;
&lt;br /&gt;
Можно настраивать на всех уровнях: protocols bgp, group, neighbor.&lt;br /&gt;
&lt;br /&gt;
==Option 2: local-as==&lt;br /&gt;
 set routing-options autonomous-system 1111&lt;br /&gt;
 set protocols bgp group ebgp neighbor 10.1.0.2 peer-as 2222&lt;br /&gt;
 set protocols bgp group ebgp neighbor 10.1.0.2 local-as 3333&lt;br /&gt;
&lt;br /&gt;
При такой конфигурации R1, EBGP-сосед, который '''ожидает''', что у R1 будет AS3333 сможет установить соседство с R1, хотя, по факту R1 принадлежит AS1111.&lt;br /&gt;
Результат:&lt;br /&gt;
 R1&amp;gt; show bgp neighbor &lt;br /&gt;
 Peer: 10.1.0.2+179 AS 2222     Local: 10.1.0.1+62745 '''AS 3333''' &lt;br /&gt;
   Type: External    State: Established    Flags: &amp;lt;Sync&amp;gt;&lt;br /&gt;
   Last State: OpenConfirm   Last Event: RecvKeepAlive&lt;br /&gt;
   ...&lt;br /&gt;
   Holdtime: 90 Preference: 170 Localpref: 110 '''Local AS: 3333 Local System AS: 1111'''&lt;br /&gt;
   Number of flaps: 0&lt;br /&gt;
   Peer ID: 2.2.2.2         Local ID: 1.1.1.1           Active Holdtime: 90&lt;br /&gt;
   ...&lt;br /&gt;
&lt;br /&gt;
'''Зачем это нужно'''&lt;br /&gt;
&lt;br /&gt;
Предположим, оператор с AS1111 купил сеть оператора с AS3333. У AS3333 были свои клиенты, подключенные по BGP, которые не готовы или не хотят изменять конфигурацию на своих роутерах. В таком случае можно временно применить опцию local-as, чтобы выступить для них от лица предыдущей AS (в примере - 3333), но внутри сети перевести инфораструктуру на AS1111.&lt;br /&gt;
&lt;br /&gt;
Если добавить ключевое слово private:&lt;br /&gt;
 set protocols bgp group ebgp neighbor 10.1.0.2 peer-as 2222&lt;br /&gt;
 set protocols bgp group ebgp neighbor 10.1.0.2 local-as 3333 '''private'''&lt;br /&gt;
&lt;br /&gt;
То R1 вообще не будет добавлять AS3333 при анонсе маршрутов, получаемых от 10.1.0.2 своим соседям.&lt;br /&gt;
&lt;br /&gt;
==as-override==&lt;br /&gt;
 CE1 '''(AS 65500)''' &amp;lt;&amp;gt; PE (AS 1111) &amp;lt;&amp;gt; P (AS 1111) &amp;lt;&amp;gt; PE (AS 1111) &amp;lt;&amp;gt; CE2 '''(AS 65500)'''&lt;br /&gt;
&lt;br /&gt;
Если на сети ISP есть 2 сессии с пирами из одной AS, то при передаче маршрутов, полученных от одного site этой AS второму site'у, второй site не примет такой префикс, потому что в AS path будет дважды указана его AS - это routing loop. &lt;br /&gt;
 65500 1111 I   - '''роутер с AS 65500 не примет префикс с таким AS path.'''&lt;br /&gt;
&lt;br /&gt;
 set protocols bgp group int neighbor 10.200.86.4 as-override&lt;br /&gt;
Можно конфигурировать для группы или соседа.&lt;br /&gt;
&lt;br /&gt;
Роутер ISP на полученном префиксе смотрит в AS path, AS пира заменяем на свою. При передаче префикса второму site ISP делает стандартный prepend своей AS. В итоге пиру в AS 65500 прилетит префикс с таким AS path: &lt;br /&gt;
 1111 1111 I&lt;br /&gt;
&lt;br /&gt;
==loops==&lt;br /&gt;
Еще один способ решения ситуации, описанной в примере выше - чтобы CE2 получил маршрут своего удаленного site: &lt;br /&gt;
&lt;br /&gt;
На CE2:&lt;br /&gt;
 set routing-options autonomous-system 65500 loops 2&lt;br /&gt;
Тогда на CE2 прилетит префикс с AS path:&lt;br /&gt;
 1111 65500 I &lt;br /&gt;
и роутер это сожрет.&lt;br /&gt;
&lt;br /&gt;
=Опции настройки для пиров=&lt;br /&gt;
*'''passive''' - локальный роутер перестает слать open message. Чтобы сессия поднялась, open message теперь должно прийти от удаленного пира.&lt;br /&gt;
 blair# top show | compare &lt;br /&gt;
 set protocols bgp group int neighbor 10.200.86.4 passive&lt;br /&gt;
&lt;br /&gt;
 Feb 11 22:07:58.812668 BGP SEND message type 1 (Open) length 59&lt;br /&gt;
 Feb 11 22:07:58.856999 BGP RECV message type 1 (Open) length 59&lt;br /&gt;
После задания passive для пира:&lt;br /&gt;
 Feb 11 22:12:22.128876 BGP RECV message type 1 (Open) length 59&lt;br /&gt;
* '''allow''' - принимает open message только из указанной сети. Можно указать только для определенной группы:&lt;br /&gt;
 set protocols bgp group int allow 10.200.86.0/24&lt;br /&gt;
*'''prefix-limit''': ограничивает значение полученных префиксов от пира. Можно применять на разных уровнях иерархии.&lt;br /&gt;
 set protocols bgp group int neighbor 10.200.86.4 family inet unicast prefix-limit maximum 1500&lt;br /&gt;
 set protocols bgp group int neighbor 10.200.86.4 family inet unicast prefix-limit teardown 100 ('''%''') idle-timeout 10 ('''min''');}}}&lt;br /&gt;
*'''hold-time''': меняем hold timer. По дефолту 90 sec. Можно применять на разных уровнях иерархии.&lt;br /&gt;
 set protocols bgp hold-time 120&lt;br /&gt;
*'''advertise-peer-as''': позволяет EBGP маршруты передавать обратно EBGP пиру. Но тогда и у пира должен быть настроен as loops, чтобы он не отбросил префикс с лупом в AS-Path.&lt;br /&gt;
 set protocols bgp group int advertise-peer-as&lt;br /&gt;
&lt;br /&gt;
=Route Reflection=&lt;br /&gt;
Описан в RFC 4456&lt;br /&gt;
&lt;br /&gt;
'''Концепция'''&lt;br /&gt;
&lt;br /&gt;
Заменяем full-mesh на сети между PE.&lt;br /&gt;
*Позволяет iBGP-спикеру анонсировать другим iBGP-маршрутизаторам маршруты, полученные через iBGP&lt;br /&gt;
*RR пересылает только активные маршруты клиентам (это iBGP соседи RR, которые не являются RR)&lt;br /&gt;
*RR по умолчанию не меняет IBGP атрибуты.&lt;br /&gt;
*Для предотвращения петель существуют два новых атрибута: &lt;br /&gt;
:*'''Cluster List''' (1 или более cluster ID)&lt;br /&gt;
:*'''Originator ID''' - ID роутера, который первым переслал маршрут в AS.&lt;br /&gt;
&lt;br /&gt;
==Распространение маршрутов при использовании RR==&lt;br /&gt;
[[Файл:RR.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Будем использовать следующие обозначения:&lt;br /&gt;
*IBGP rr-client - IBGP сосед в кластере&lt;br /&gt;
*IBGP NON-rr-client - IBGP сосед не в кластере&lt;br /&gt;
*EBGP - EBGP сосед&lt;br /&gt;
&lt;br /&gt;
Распространение маршрутов происходит следующим образом:&lt;br /&gt;
*IBGP rr-client &amp;gt; IBGP rr-client + IBGP NON-rr-client&lt;br /&gt;
*IBGP NON-rr-client &amp;gt; IGBP rr-client&lt;br /&gt;
*IBGP NON-rr-client &amp;lt;&amp;gt; IBGP NON-rr-client - '''не передается'''&lt;br /&gt;
&lt;br /&gt;
*EGBP &amp;gt; IBGP rr-client + NON-rr-client&lt;br /&gt;
&lt;br /&gt;
Если включить '''no-client-reflect''', то это запретит анонсить префиксы между клиентами кластера. В таком случае, если требуется сохранить связность между этими клиентами - нужно настроить между ними full-mesh. Такой вариант развитий по идее может понадобиться только при иерархичном роут-рефлектинге (о нем ниже). &lt;br /&gt;
&lt;br /&gt;
RR добавляет/изменяет атрибуты (без политик по дефолту):&lt;br /&gt;
*'''Originator ID'''&lt;br /&gt;
Router ID первого роутера, который заслал маршрут в AS.&lt;br /&gt;
&lt;br /&gt;
*'''Cluster List (Cluster ID)'''&lt;br /&gt;
Список, включающий ID всех RR, которые обрабатывали данный префикс.&lt;br /&gt;
Если RR получит маршрут, у которого в cluster list будет ID этого RR, то он его дропнет.&lt;br /&gt;
Участвует при выборе активного маршрута (активным становится с наименьшим cluster list).&lt;br /&gt;
Cluster ID добавляется к cluster list, когда маршрут отправляется. Cluster ID должен быть уникальным в рамках AS.&lt;br /&gt;
При использовании нескольких RR, можно для всех использовать одинаковый cluster ID.&lt;br /&gt;
&lt;br /&gt;
+ такой схемы: в таблице будет меньше маршрутов и при такой схеме можно добиться хорошей отказоустойчивости в сети.&lt;br /&gt;
&lt;br /&gt;
Правила работы с Originator и Cluster List:&lt;br /&gt;
*для EBGP или любого другого протокола, отличного от IBGP, originator и сluster list не добавляются &lt;br /&gt;
*для IBGP client&amp;lt;&amp;gt;client / client&amp;lt;&amp;gt;non-client:&lt;br /&gt;
:*originator добавится только если до этого его не существовало. &lt;br /&gt;
:*Cluster list дополнится новым cluster ID. &lt;br /&gt;
:*Cluster ID будет установлен, если его не было ранее.&lt;br /&gt;
&lt;br /&gt;
'''2 RR в кластере'''&lt;br /&gt;
&lt;br /&gt;
Соседство между RR можно устанавливать как внутри отдельной группы для кластера, так и в отдельной группе.&lt;br /&gt;
В обоих случаях при передаче маршрутов между RR петель не будет, т.к. cluster ID будет одинаковыми.&lt;br /&gt;
Каждый из RR в кластере устанавливает IBGP с другими RR, не входящих в кластер.&lt;br /&gt;
В подобных схемах все-таки тоже стараются использовать уникальные cluster ID.&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
&lt;br /&gt;
Если на сети несколько RR, то соседство между ними может быть как в отдельной группе от RR-clients (IBGP), так и в той же группе что и клиенты. &lt;br /&gt;
Между RR - full-mesh.&lt;br /&gt;
&lt;br /&gt;
 set protocols bgp group RR type internal&lt;br /&gt;
 set protocols bgp group RR peer-as 65513&lt;br /&gt;
 set protocols bgp group RR neighbor 2.2.2.2&lt;br /&gt;
 set protocols bgp group RR neighbor 3.3.3.3&lt;br /&gt;
&lt;br /&gt;
RR-clients конфигурируются в отдельной группе, где должен быть включен: &amp;quot;cluster x.x.x.x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 set protocols bgp group RR-clients cluster 1.1.1.1&lt;br /&gt;
&lt;br /&gt;
Со стороны клиентов конфигурация стандартная для IBGP - простое соседство с RR на lo0 адресах (с включенным multihop!!)&lt;br /&gt;
&lt;br /&gt;
==Hierarchical Route Reflection==&lt;br /&gt;
[[Файл:Hierarch_RR.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Отличие от предыдущих: в схеме появляются не только RR и client, но еще и роутеры, выполняющие обе функции в рамках разных кластеров.&lt;br /&gt;
Clients могут устанавливать IBPG между собой full-mesh. Это удобно использовать, чтобы clients могли использовать маршруты от других clients нативно, без обработки RR. &lt;br /&gt;
Чтобы RR не флудил копиями маршрутов, на нем можно включить '''no-client-reflect''', это отключит пересылку маршрутов, полученных внутри кластера. Внешние маршруты при этом продолжают пересылаться.&lt;br /&gt;
&lt;br /&gt;
==Modifying Attributes on the RR==&lt;br /&gt;
&lt;br /&gt;
Все атрибуты BGP изменяются через policy.&lt;br /&gt;
Если на RR есть EBGP, то с большой вероятностью будет активна ф-ия: next-hop-self. При этом, у маршрутов, полученных от client, также next-hop будет меняться.&lt;br /&gt;
Что приведет к не оптимальному форвардингу трафика (должен идти напрямую к original роутеру, а будет идти через RR).&lt;br /&gt;
Чтобы менять next-hop только у external: в policy матчим по interface ли neighbor.&lt;br /&gt;
&lt;br /&gt;
 set policy-option policy-statement nhs term EBGP from protocol bgp&lt;br /&gt;
 set policy-option policy-statement nhs term EBGP from neighbor 2.2.2.2&lt;br /&gt;
 set policy-option policy-statement nhs term EBGP the next-hop self&lt;br /&gt;
&lt;br /&gt;
=Fake-group=&lt;br /&gt;
Данная проблема описана в KB20870 (https://kb.juniper.net/InfoCenter/index?page=content&amp;amp;id=KB20870).&lt;br /&gt;
&lt;br /&gt;
Более подробное описание и рекомендации по предотвращению https://www.juniper.net/documentation/en_US/junos/topics/example/bgp-vpn-session-flap-prevention.html&lt;br /&gt;
&lt;br /&gt;
По факту функционал RR включается/выключается только при добавлении/удалении соседу в группе с клиентами (с '''cluster''').&lt;br /&gt;
&lt;br /&gt;
Если на маршрутизаторе настроены '''EBGP с клиентами''' или '''IBGP c RR''', для которых в конфигурации группы '''включены vpn-address-family''', (inet-vpn, inet6 inet-mpvn, inet-mdt, inet6-mpvn, l2vpn, iso-vpn) и на маршрутизаторе в этих группах производится добавления первого соседа или удаления последнего, Juniper рестартует BGP сессии с RR и c EBGP пирами в VPN-address-family для отсылки NLRI с новой (удалением старой) address-family.&lt;br /&gt;
&lt;br /&gt;
Для предотвращения подобных ситуаций можно предпринять следующие шаги:&lt;br /&gt;
* на каждом RR создана fake группа (для исключения проблемы удаления последнего соседа в группе).&lt;br /&gt;
* на каждом PE создана fake группа (для исключения проблемы включения нового клиента с EBGP + vpn-family)&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
Fake группа имеет следующий вид для '''RR и PE''':&lt;br /&gt;
 group fake-vpn {&lt;br /&gt;
    type '''external''';&lt;br /&gt;
    description &amp;quot;-- Preventing mpbgp sessions flap --&amp;quot;;&lt;br /&gt;
    '''passive''';&lt;br /&gt;
    family inet {&lt;br /&gt;
        any;&lt;br /&gt;
    family inet-vpn {&lt;br /&gt;
        any;&lt;br /&gt;
    family iso-vpn {&lt;br /&gt;
        unicast;&lt;br /&gt;
    family l2vpn {&lt;br /&gt;
        signaling;&lt;br /&gt;
    family evpn {&lt;br /&gt;
        signaling;&lt;br /&gt;
    family inet-mvpn {&lt;br /&gt;
        signaling;&lt;br /&gt;
    family inet-mdt {&lt;br /&gt;
        signaling;&lt;br /&gt;
    '''neighbor 101.101.101.101''' {&lt;br /&gt;
        '''peer-as 101''';&lt;br /&gt;
&lt;br /&gt;
=IPv6 (6PE)=&lt;br /&gt;
Если у нас есть настроенная ipv4 сеть и мы захотели передавать трафик и для ipv6 адресов (используя MPLS), то:&lt;br /&gt;
&lt;br /&gt;
- требуется настроить family inet6 labeled-unicast explicit-null на сессии pe&amp;lt;&amp;gt;rr&lt;br /&gt;
 set protocols bgp group ibgp-rr family inet6 labeled-unicast explicit-null&lt;br /&gt;
эта family навешивает на ipv6 префикс '''label 2''' (explicit-null для ipv6), что позволяет на сети в качестве транспорта использовать mpls, а на последнем роутере делать lookup в таблице inet6.0.&lt;br /&gt;
&lt;br /&gt;
- на сети у нас скорей всего уже будет включен mapping ipv4 адресов в ipv6:&lt;br /&gt;
 set system allow-v4mapped-packets &lt;br /&gt;
- при передаче префиксов pe-&amp;gt;rr должен быть настроен в политике hext-hop self. При этом для ipv6 префиксов будет подставляться mapped ipv6 адрес lo0.&lt;br /&gt;
 rr&amp;gt; show route receive-protocol bgp 172.30.5.5 &lt;br /&gt;
 inet.0: 56 destinations, 58 routes (55 active, 0 holddown, 1 hidden)&lt;br /&gt;
  Prefix		  Nexthop	       MED     Lclpref    AS path&lt;br /&gt;
 * 192.168.31.0/24         '''172.30.5.5'''                   100        64514 I&lt;br /&gt;
 * 192.168.32.0/24         '''172.30.5.5'''                   200        64514 I&lt;br /&gt;
 inet6.0: 7 destinations, 8 routes (7 active, 0 holddown, 0 hidden)&lt;br /&gt;
  Prefix		  Nexthop	       MED     Lclpref    AS path&lt;br /&gt;
  fd17:f0f4:f691:5::31/128&lt;br /&gt;
 *                         '''::ffff:172.30.5.5'''            100        64514 I&lt;br /&gt;
- на rr адреса '''::ffff:172.30.5.5''' не будет, поэтому полученный префикс будет в hidden, из-за неотрезовленного next-hop. Чтобы решить эту проблему прописываем статику:&lt;br /&gt;
 rr&amp;gt; show configuration routing-options &lt;br /&gt;
 rib inet6.0 static route ::ffff:172.30.5.0/124 receive;&lt;br /&gt;
'''receive''' в данном случае позволяет сделать маршрут активным, не прибегая к форвардингу трафика.&lt;br /&gt;
&lt;br /&gt;
- после этого рефлектор спокойно рефлектит маршрут своим клиентам.&lt;br /&gt;
&lt;br /&gt;
- далее, pe получит префикс, но с принятым next-hop   '''::ffff:172.30.5.5''' это префикс опять же не станет активным в таблице. Тут решение static с next-hop receive - не проканает, ибо нам нужно передавать трафик к префиксу, а не просто вставить его в таблицу маршрутизации. Тут прибегнем к варианту, который маршруты ldp для desct-ipv4 замапит в dest-ipv6 из inet.3 и поместит их в inet6.3 (для резолва ipv6 префиксов):&lt;br /&gt;
 set protocols mpls ipv6-tunneling&lt;br /&gt;
&lt;br /&gt;
 rigel-r7&amp;gt; show route protocol ldp 172.30.5.5 &lt;br /&gt;
 '''inet.3''': 25 destinations, 32 routes (8 active, 0 holddown, 22 hidden)&lt;br /&gt;
 '''172.30.5.5/32'''      *[LDP/9] 01:17:08, metric 20&lt;br /&gt;
                      to 172.30.0.41 via ge-0/0/0.240, Push 319216&lt;br /&gt;
                    &amp;gt; to 172.30.0.46 via ge-0/0/3.244, Push 340912&lt;br /&gt;
&lt;br /&gt;
 rigel-r7&amp;gt; show route protocol ldp ::ffff:172.30.5.5 &lt;br /&gt;
 '''inet6.3:''' 8 destinations, 10 routes (8 active, 0 holddown, 0 hidden)&lt;br /&gt;
 '''::ffff:172.30.5.5/128'''   *[LDP/9] 01:17:20, metric 20&lt;br /&gt;
                      to 172.30.0.41 via ge-0/0/0.240, Push 319216&lt;br /&gt;
                    &amp;gt; to 172.30.0.46 via ge-0/0/3.244, '''Push 340912'''&lt;br /&gt;
&lt;br /&gt;
ну и проверяем, что и сам префикс стал активным:&lt;br /&gt;
 rigel-r7&amp;gt; show route fd17:f0f4:f691:5::31/128 &lt;br /&gt;
 inet6.0: 20 destinations, 22 routes (20 active, 0 holddown, 0 hidden)&lt;br /&gt;
 fd17:f0f4:f691:5::31/128 *[BGP/170] 00:50:51, localpref 100, from 172.30.5.41 AS path: 64514 I&lt;br /&gt;
                      to 172.30.0.41 via ge-0/0/0.240, '''Push 2''', Push 319216(top)&lt;br /&gt;
                    &amp;gt; to 172.30.0.46 via ge-0/0/3.244, '''Push 2, Push 340912(top)'''&lt;br /&gt;
&lt;br /&gt;
Кстати, ipv6 tunneling перетаскивает как ldp, так и rsvp маршруты в inet6.3.&lt;br /&gt;
&lt;br /&gt;
=Confederations=&lt;br /&gt;
 Описан в RFC 3065&lt;br /&gt;
&lt;br /&gt;
'''Принципы'''&lt;br /&gt;
&lt;br /&gt;
Цель: разбить global AS на sub-AS.&lt;br /&gt;
*sub-AS должна иметь уникальный номер (зачастую берут приватные AS).&lt;br /&gt;
*Внутри sub-AS между роутерами: full-mesh IBGP. Если внутри sub-AS будет слишком большая сеть, то в нее можно внедрить RR.&lt;br /&gt;
*Между sub-AS - EBGP = confederation BGP = CBGP. При прохождении маршрута через CBGP линк, роутер меняет AS path, включая туда AS sub-AS - этот метод - защита от петель. Другие атрибуты BGP не меняются.&lt;br /&gt;
&lt;br /&gt;
Также в отличие от стандартного EBGP, в CBGP обычно соседство строится на loopback (добавляем multihop в настройки).&lt;br /&gt;
&lt;br /&gt;
==AS-path segment==&lt;br /&gt;
*AS Confederation Sequence&lt;br /&gt;
При прохождение через CBGP линк, роутер добавляет sub-AS к AS-path в &amp;quot;()&amp;quot; в последовательности, как шел маршрут по сети.&lt;br /&gt;
&lt;br /&gt;
AS Confederation Sequence не используется при выборе активного пути.&lt;br /&gt;
&lt;br /&gt;
Этот атрибут имеет type code 3.&lt;br /&gt;
&lt;br /&gt;
 AS-path: (65000 65001 65002) 100 200&lt;br /&gt;
&lt;br /&gt;
*AS Confederation Set&lt;br /&gt;
При агрегировании маршрутов внутри конфедерации, AS confederation sequence становится AS confederation set.&lt;br /&gt;
&lt;br /&gt;
Этот атрибут имеет type code 4.&lt;br /&gt;
&lt;br /&gt;
 10.10.10.0/24 (65000 65001) 100 &lt;br /&gt;
 10.10.20.0/24 (65000 65002) 100&lt;br /&gt;
 10.10.0.0/16 ({65000 65001 65002}) 100 &lt;br /&gt;
&lt;br /&gt;
Оба атрибута используются только для предотвращения петель внутри конфедерации.&lt;br /&gt;
&lt;br /&gt;
При анонсировании маршрутов из конфедерации дальше по сети по EBGP, private AS (sub-AS) стираются, поэтому все конфедерации извне видны как одна большая глобальная AS.&lt;br /&gt;
При этом не требуется отдельно включать (remove-private). В случае с конфедерациями, все приватные AS итак сотрутся.&lt;br /&gt;
&lt;br /&gt;
Но все роутеры внутри конфедерации обязательно должны знать номер глобальной AS.&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
Включение самой конфедерации на роутере - определяется в routing-options:&lt;br /&gt;
&lt;br /&gt;
 set routing-options autonomus-system 65000&lt;br /&gt;
 set routing-options confederation 100 members [65000 65001 65002]&lt;br /&gt;
&lt;br /&gt;
confederation ''&amp;lt;&amp;gt;'' - это номер public AS.&lt;br /&gt;
&lt;br /&gt;
в качестве members - определяются все AS, включенные в конфедерацию.&lt;br /&gt;
&lt;br /&gt;
R1&lt;br /&gt;
 внутри конфедерации: &lt;br /&gt;
 set protocols bgp group sub-AS-65001 type '''internal'''&lt;br /&gt;
 set protocols bgp group sub-AS-65001 local-address 192.168.1.3&lt;br /&gt;
 set protocols bgp group sub-AS-65001 neighbor 192.168.1.1&lt;br /&gt;
 set protocols bgp group sub-AS-65001 neighbor 192.168.1.2&lt;br /&gt;
 set protocols bgp group sub-AS-65001 neighbor 192.168.1.4&lt;br /&gt;
&lt;br /&gt;
CBGP-link 1:&lt;br /&gt;
 set protocols bgp group sub-AS-65000 type '''external'''&lt;br /&gt;
 set protocols bgp group sub-AS-65000 '''multihop'''&lt;br /&gt;
 set protocols bgp group sub-AS-65000 local-address 192.168.1.3&lt;br /&gt;
 set protocols bgp group sub-AS-65000 peer-as 65000&lt;br /&gt;
 set protocols bgp group sub-AS-65000 neighbor 192.168.0.3&lt;br /&gt;
&lt;br /&gt;
CBGP-link 2:&lt;br /&gt;
 set protocols bgp group sub-AS-65002 type '''external '''&lt;br /&gt;
 set protocols bgp group sub-AS-65002 '''multihop'''&lt;br /&gt;
 set protocols bgp group sub-AS-65002 local-address 192.168.1.3&lt;br /&gt;
 set protocols bgp group sub-AS-65002 peer-as 65002&lt;br /&gt;
 set protocols bgp group sub-AS-65002 neighbor 192.168.2.4&lt;br /&gt;
&lt;br /&gt;
=Route damping (flapping)=&lt;br /&gt;
При различных обстоятельствах на сети могут возникать флапы маршрутов, что приводит к загрузке CPU на роутерах.&lt;br /&gt;
&lt;br /&gt;
Чтобы избежать подобного поведения есть некоторые механизмы защиты от флапов, например: '''BGP route flap damping'''.&lt;br /&gt;
&lt;br /&gt;
Damping игнорируется IBGP и работает только с EBGP и CBGP (confederation BGP).&lt;br /&gt;
&lt;br /&gt;
Damping уменьшает кол-во update message, путем обозначения флапающих маршрутов непригодными стать активными маршрутами.&lt;br /&gt;
&lt;br /&gt;
'''Принцип работы:'''&lt;br /&gt;
&lt;br /&gt;
Когда маршрут прилетает на наш роутер (на котором настроен route damping), на префикс назначается значение merit = 0. &lt;br /&gt;
&lt;br /&gt;
Как только роутер распознает некую нестабильность маршрута (префикс просто перестает долетать до роутера (или линк упал)):&lt;br /&gt;
*назначается merit = 1000, включается счетчик decay half-life. Если на роутер снова прилетит префикс, до того, как истечет таймер, то значение merit увеличится еще на 1000 +1000. И подобное поведение будет повторяться до превышения значения merit до supress (3000) - префикс в таком случае будет признан непригодным для использования.&lt;br /&gt;
&lt;br /&gt;
После того, как префикс пропал и заново прилетел на роутер по BGP, его значение merit = 2000 (при дефолтных настройках) &lt;br /&gt;
 Merit (last update/now): 1969/1938&lt;br /&gt;
                Default damping parameters used&lt;br /&gt;
                Last update:       00:00:27 First update:       00:00:49&lt;br /&gt;
                Flaps: 2&lt;br /&gt;
&lt;br /&gt;
После этого при исчезновении маршрута с роутера, его не будет видно в inet.0, но инфо можно будет посмотреть в &lt;br /&gt;
 blair&amp;gt; show route damping history detail    &lt;br /&gt;
&lt;br /&gt;
После того, как будет превышен supress threshold, инфо о маршруте можно будет посмотреть:&lt;br /&gt;
 blair&amp;gt; show route damping suppressed detail    &lt;br /&gt;
&lt;br /&gt;
Либо в hidden, если маршрут приходит от пира.&lt;br /&gt;
&lt;br /&gt;
*если префикс передается от роутера, то он передается со значением merit = 1000.&lt;br /&gt;
*если изменяется path attribute, то префиксу ставится значение 500.&lt;br /&gt;
*decay half-life - кол-во минут после которого значение merit уменьшается вдвое, при поведении маршрута более стабильно. default = 15 min.&lt;br /&gt;
*max-supress - максимальное кол-во минут, которое маршрут проводит в состоянии hold-down. default = 60 min.&lt;br /&gt;
*reuse threshold - произвольное значение, после которого маршрут снова можно использовать. default = 750.&lt;br /&gt;
*supress threshold- произвольное значение, после которого маршрут больше нельзя использовать. default = 3000.&lt;br /&gt;
==Config==&lt;br /&gt;
Как только включаем на роутере damping, без заданных параметров, для работы будут использоваться дефолтные значения.&lt;br /&gt;
&lt;br /&gt;
Параметры задаются через policy. '''Disable''' - для определенных префиксов удаляет merit, и убирает префикс из damping процесса (могут быть например public DNS).&lt;br /&gt;
&lt;br /&gt;
 set policy-options damping c11 half-life 30&lt;br /&gt;
 set policy-options damping c11 reuse 1000&lt;br /&gt;
 set policy-options damping c11 max-suppress 500&lt;br /&gt;
&lt;br /&gt;
 set policy-options policy-statement c11-damping then damping c11&lt;br /&gt;
&lt;br /&gt;
 set protocols bgp group c11 type external&lt;br /&gt;
 set protocols bgp group c11 damping&lt;br /&gt;
 set protocols bgp group c11 import c11-damping&lt;br /&gt;
&lt;br /&gt;
=Blackhole=&lt;br /&gt;
Когда на сети определено специальное community для blackhole, и клиент посылает префикс, помеченный этим community, нужно реализовать блокировку трафика на нашей сети к этом префиксу. И желательно разослать этот префикс другим пирам и апстримам с их blackhole-community.&lt;br /&gt;
&lt;br /&gt;
Блокировку трафика можно организовать несколькими способами.&lt;br /&gt;
&lt;br /&gt;
1. зарулить трафик на префикс, у которого next-hop = discard. &lt;br /&gt;
 set policy-options policy-statement blackhole from protocol bgp&lt;br /&gt;
 set policy-options policy-statement blackhole from community blackhole&lt;br /&gt;
 set policy-options policy-statement blackhole then next-hop 192.168.0.101&lt;br /&gt;
 set policy-options policy-statement blackhole then accept&lt;br /&gt;
 set routing-options static route 192.168.0.101/32 discard&lt;br /&gt;
 set routing-options static route 192.168.0.102/32 discard&lt;br /&gt;
&lt;br /&gt;
здесь без accept - видимо не происходит еще один lookup и next-hop остается unusable.&lt;br /&gt;
Либо resolve происходит, но с next-hop discard маршрут не считается активным и остается в hidden.&lt;br /&gt;
&lt;br /&gt;
Тема discard не раскрыта :)&lt;br /&gt;
 &lt;br /&gt;
2. зарулить на discard interface (dsc). - подробно лучше смотреть в документации Juniper.&lt;br /&gt;
&lt;br /&gt;
3. сделать у префикса сразу next-hop discard.&lt;br /&gt;
&lt;br /&gt;
 set policy-options policy-statement blackhole from protocol bgp &lt;br /&gt;
 set policy-options policy-statement blackhole from community blackhole&lt;br /&gt;
 set policy-options policy-statement blackhole then '''next-hop''' discard&lt;br /&gt;
 set policy-options policy-statement blackhole then '''accept'''&lt;br /&gt;
 set policy-options community blackhole members &amp;quot;6451[0-9]:666&amp;quot;&lt;br /&gt;
&lt;br /&gt;
без accept маршрут будет в hidden и не передастся своим ibgp соседям. (в hidden, так как next-hop unusable)&lt;br /&gt;
&lt;br /&gt;
Политику применяем на клиентов и на ibgp сессии в рамках нашей aAS (+cbgp, если используем конфедерации)&lt;br /&gt;
&lt;br /&gt;
Чтобы разослать префикс другим ebgp пирам добавляем еще одну строчку в политику:&lt;br /&gt;
 set policy-options policy-statement blackhole then community add upstream-blackhole&lt;br /&gt;
&lt;br /&gt;
TIPS:&lt;br /&gt;
*если в политике делать только then discard - это заблочит распространение префикса на сети, что не совсем решает проблему. Через нашу сеть все-равно будет идти трафик до этого dest, просто обходными путями.&lt;br /&gt;
*обычно клиенты шлют /32 префиксы с blackhole-community, а на import фильтрах у уважающих себя операторов есть ограничение по длине префикса (&amp;lt;24).&lt;br /&gt;
&lt;br /&gt;
Поэтому, чтобы получить /32, добавляем в политику условие:&lt;br /&gt;
 set policy-options policy-statement blackhole from route-filter 0.0.0.0/0 prefix-length-range /32-/32&lt;br /&gt;
&lt;br /&gt;
=BFD=&lt;br /&gt;
Как известно, этот механизм используется в качестве обмена hello сообщениями с заданным интервалом, ниже, чем дефолтный интервал в других протоколах. Что позволяет протоколу быстрее обнаружить падение сессии.&lt;br /&gt;
&lt;br /&gt;
Сильно нагружает CPU RE, поэтому с ним сильно перебарщивать не стоит.&lt;br /&gt;
&lt;br /&gt;
Хосты устанавливают сессию и обмениваются hello.&lt;br /&gt;
&lt;br /&gt;
Если перестали приходить hello, то BFD дает знать протоколу, что пропала связность между хостами.&lt;br /&gt;
&lt;br /&gt;
*minimum-interval - минимальный интервал получения и отправления &amp;quot;hello&amp;quot; BFD. То есть это интервал с которым локальный роутер отправляет hello и интервал, с которым локальный роутер ждет ответа на свой hello. Также в конфиге можно отдельно задать transmit и receive minimum interval.&lt;br /&gt;
* multiplier - значение кол-ва пропущенных hello.&lt;br /&gt;
&lt;br /&gt;
 set protocols bgp group upstream neighbor 1.1.1.1 bfd-liveness-detection minimum-interval 500  ''[transmit+receive]''&lt;br /&gt;
 set protocols bgp group upstream neighbor 1.1.1.1 bfd-liveness-detection multiplier 4&lt;br /&gt;
&lt;br /&gt;
или &lt;br /&gt;
 set protocols bgp group upstream neighbor 1.1.1.1 bfd-liveness-detection minimum-receive-interval 500  ''[receive]''&lt;br /&gt;
 set protocols bgp group upstream neighbor 1.1.1.1 bfd-liveness-detection transmit-interval minimum-interval 500  ''[transmit]''&lt;br /&gt;
&lt;br /&gt;
BFD + graceful restart - не рекомендуется.&lt;br /&gt;
&lt;br /&gt;
BFD + Routing Engine switchover event - не рекомендуется ниже 5000мс.&lt;br /&gt;
&lt;br /&gt;
BFD + NSR - не рекомендуется ниже 2500мс.&lt;br /&gt;
&lt;br /&gt;
для очень больших сетей с большим кол-вом bfd сессий - не ниже 300мс&lt;br /&gt;
&lt;br /&gt;
Если значения таймеров у пиров не совпадают, то BFD использует наибольшее значение (используется режим adaptive-mode). &lt;br /&gt;
&lt;br /&gt;
Это поведение по умолчанию можно выключить: no-adaptation.&lt;br /&gt;
 set protocols bgp group upstream neighbor 1.1.1.1 bfd-liveness-detection no-adaptation&lt;br /&gt;
&lt;br /&gt;
'''Проверка:'''&lt;br /&gt;
 &amp;gt; show bfd session extensive&lt;br /&gt;
&lt;br /&gt;
=IPv6=&lt;br /&gt;
Есть несколько способов настраивать BGP между роутерами, работающими с ipv6.&lt;br /&gt;
*Прямая ipv6 сессия на ipv6 адресах:&lt;br /&gt;
&lt;br /&gt;
На интерфейсах обычные p2p адреса из /126 (/30) сеточки. Это самый примитивный вариант.&lt;br /&gt;
 group r7-ipv6 {&lt;br /&gt;
    type external;&lt;br /&gt;
    export export-direct;&lt;br /&gt;
    peer-as 54591;&lt;br /&gt;
    neighbor fc09:c0:ffee::1;}&lt;br /&gt;
&lt;br /&gt;
Настраиваем сессию на ipv6 адресах в отдельной группе. Если настраивать в группе, в которой настроены также сессии на ipv4-адресах, то сессия на ipv6 поднимется, но роутеры маршрутами обмениваться не будут.&lt;br /&gt;
&lt;br /&gt;
*Сессия на ipv4 адресах, передающая ipv6 префиксы. ipv6 адреса на интерфейсах ipv4-compatible, то есть вида &lt;br /&gt;
 a-centauri-r5&amp;gt; show configuration interfaces ge-0/0/0.304 &lt;br /&gt;
 description --c32;&lt;br /&gt;
 vlan-id 304;&lt;br /&gt;
 family inet {&lt;br /&gt;
    address 192.168.0.13/30;}&lt;br /&gt;
 family inet6 {&lt;br /&gt;
    '''address ::ffff:192.168.0.13/126;'''&lt;br /&gt;
- сессия строится на ipv4 адресах. в группе или на neighbor настроена передача family inet6 unicast.&lt;br /&gt;
 a-centauri-r5&amp;gt; show configuration protocols bgp group c31-c32 &lt;br /&gt;
 type external;&lt;br /&gt;
 family inet unicast&lt;br /&gt;
 family inet6 unicast&lt;br /&gt;
 export export-ipv6&lt;br /&gt;
 peer-as 64514&lt;br /&gt;
 neighbor 192.168.0.10&lt;br /&gt;
- глобально требуется также включить:&lt;br /&gt;
 a-centauri-r5&amp;gt; show configuration system&lt;br /&gt;
 allow-v4mapped-packets&lt;br /&gt;
*Для IPv6 eBGP в рамках VRF нужно указывать ''routing-instance &amp;lt;&amp;gt; routing-options router-id &amp;lt;&amp;gt;''. Иначе сессия не поднимется. Будет прилетать ошибка:&lt;br /&gt;
 May 21 00:16:05.676938 BGP RECV version 4 as 54591 holdtime 90 id '''0.0.0.0''' parmlen 30&lt;br /&gt;
Либо использовать отдельные lo, который будет выступать в роли router-id для сессии.&lt;br /&gt;
*На link-local адресах&lt;br /&gt;
&lt;br /&gt;
=Дополнительная информация=&lt;br /&gt;
*[[OSPF]]&lt;br /&gt;
*[[IS-IS]]&lt;br /&gt;
*[[L3VPN]]&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=MediaWiki:Bottom-notice-ns-0&amp;diff=2080</id>
		<title>MediaWiki:Bottom-notice-ns-0</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=MediaWiki:Bottom-notice-ns-0&amp;diff=2080"/>
		<updated>2022-02-05T13:33:06Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;padding: 6px 16px; background: #f5faff; color: #333333; border: solid 1px #a1c3e6; margin-top: 30px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;© [[Участница:Наталия_Бобкова | Наталия Бобкова]] 2014—2022 &amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=DC&amp;diff=2079</id>
		<title>DC</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=DC&amp;diff=2079"/>
		<updated>2021-12-25T19:16:32Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: /* Принцип работы */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#description2:Overlay Networks. Fabric Design. IP Fabrics. VXLAN. EVPN-VXLAN. BGP Route Types for EVPN. Distributed Layer 3 Gateway. Информация для подготовки к экзаменам Juniper.}}&lt;br /&gt;
=Overlay Networks=&lt;br /&gt;
Разделяют 2 вида сетей: overlay и underlay.&lt;br /&gt;
&lt;br /&gt;
Underlay - физическая IP сеть. Это база (транспорт) поверх которого уже строится overlay netw.&lt;br /&gt;
&lt;br /&gt;
Примеры underlay: MPLS, IP-сеть построенная на IGP/EGP.&lt;br /&gt;
&lt;br /&gt;
Также в underlay входят bare metal servers (или могу ошибаться и это не так). Подразумевается, что underlay - это прям железо-железо в голом виде.&lt;br /&gt;
&lt;br /&gt;
Overlay - это наложенная сеть на underlay. Виртуальные свитчи, серверы и другие VM соединены virt logical links (VTEPs - virtual tunnel endpoints).&lt;br /&gt;
&lt;br /&gt;
*''host machine'' - сервер, на котором запущен hypervisor. &lt;br /&gt;
*''guest machine'' - каждая VM.&lt;br /&gt;
Hypervisor предоставляет OS с virt платформой для guest и далее управляет работой guest OS. Несколько разных guest OS будут делать hardware ресурсы сервера.&lt;br /&gt;
&lt;br /&gt;
VXLAN - overlay technology, которая строит virt туннели на основе IP/MPLS netw (VTEPs)&lt;br /&gt;
&lt;br /&gt;
VM на одном хосте будут коммуницировать между собой через virt switch - L2.&lt;br /&gt;
VM на разных хостах будут коммуницировать между собой через VTEP - L3. То есть прибегать к инкапсуляции L2 в L3 и передаче трафика через underlay сеть.&lt;br /&gt;
&lt;br /&gt;
VTEP - располагаются на hypervisor или есть брать сервера, включенные с обычные access switches, то на свитчах тоже можно создавать VTEP. VTEP - туннель между хостами &lt;br /&gt;
VTEP имеет 2 iface: &lt;br /&gt;
*switching interface - в сторону VM&lt;br /&gt;
*IP interface - в сторону IP сети (L3 netw)&lt;br /&gt;
&lt;br /&gt;
Для инкапсуляции используется обычно VXLAN. О нем ниже.&lt;br /&gt;
&lt;br /&gt;
Положительные особенности overlay network (наложенных сетей):&lt;br /&gt;
# Отделение сети от физического оборудования позволяет сетям дата-центров быть развернутыми за считанные секунды.&lt;br /&gt;
# Поддержка L2 и L3 между VM и серверами.&lt;br /&gt;
# В отличие от стандартной сети поддерживает до 16,4 млн &amp;quot;заказчиков&amp;quot; (вланов).&lt;br /&gt;
 &lt;br /&gt;
Чем приходится платить за использование overlay network:&lt;br /&gt;
:- virtual tunnel endpoints (VTEPs) ипользует MAC и route. В отличие от традиционной модели, где каждая VM и каждый сервер использует MAC и route. В overlay трафик от VM и сервером инкапсулируется между VTEP. mac и route каждого сервера теперь не виден для оборудования overlay сети. mac и route теперь перенесены с физического уровня на уровень hypervisor.&lt;br /&gt;
&lt;br /&gt;
=Bare metal server=&lt;br /&gt;
Редко в каких сетях получится найти полностью виртуализированую сеть. Какая-то часть серверов все-равно останется железной (в основном из-за производительности).&lt;br /&gt;
&lt;br /&gt;
Как не бросить те самые железные сервачки и сохранить с ними сетевую связность?&lt;br /&gt;
&lt;br /&gt;
Один из методов: соединить VTEP с физическим access switch.&lt;br /&gt;
&lt;br /&gt;
Каждый гипервизор имеет VTEP. VTEP передает инкапсулированный трафик data plane между VM. Также VTEP делает mac-learning, предоставляет новые virt netw и другие изменения конфигурации.&lt;br /&gt;
&lt;br /&gt;
На железных серверах нет VTEP. Чтобы железный сервер включить в overlay netw архитектуру, нужно чтобы кто-то инкапсулировал трафик от сервера и делал mac-learning. Пусть это делает обычный access-switch от имени сервера. Сервер при этом просто думает, что посылает от себя трафик дальше в сеть.&lt;br /&gt;
&lt;br /&gt;
=Fabric Design=&lt;br /&gt;
*'''Traditional – MC-LAG (multichassis link aggregation group)'''&lt;br /&gt;
[[Файл:MC-LAG.png|мини|без]]&lt;br /&gt;
*'''Virtual Chassis'''&lt;br /&gt;
[[Файл:VC 1.png|мини|слева|top-of-rack topology]] &lt;br /&gt;
[[Файл:VC 2.png|мини|центр|end-of-row topology]]&lt;br /&gt;
&lt;br /&gt;
*'''Virtual Chassis Fabric'''&lt;br /&gt;
[[Файл:VC_fabric_1.png|мини|слева|top-of-rack topology]]&lt;br /&gt;
[[Файл:VC fabric_2.png|мини|центр|end-of-row topology]].&lt;br /&gt;
Большое приемущество в том, что между каждыми двумя host в фабрике есть только 2 hops. В отличие от VC, где число hops может достигать до 9.&lt;br /&gt;
&lt;br /&gt;
Limitations:&lt;br /&gt;
:-Virtual Chassis = 10 members&lt;br /&gt;
:-Virtual Chassis Fabric = 20 members [2-4 spine + 16-18 leaf]&lt;br /&gt;
&lt;br /&gt;
Master + backup используют один и тот же MAC + IP для GW.&lt;br /&gt;
&lt;br /&gt;
Можно легко вставлять/вытаскивать членов VC. На них автоматически будет сделан upgrade софта если нужно, подъедет конфиг, новый член будет назначен linecard.&lt;br /&gt;
&lt;br /&gt;
В VC для вычисления кратчайшего пути используется Dejkstra и путь выбирается один.&lt;br /&gt;
&lt;br /&gt;
В VC fabric VCCP отвчечает за эту процедуру и при возникновении нескольких равнозначных путей трафик балансируется. &lt;br /&gt;
&lt;br /&gt;
Virtual Chassis Fabric works really well for a top-of-rack based solution, but for end-of-row it becomes a little more problematic.&lt;br /&gt;
*'''Junos Fusion'''&lt;br /&gt;
[[Файл:JF.png|мини|без|top-of-row topology]]&lt;br /&gt;
&lt;br /&gt;
*'''IP CLOS Fabrics'''&lt;br /&gt;
[[Файл:CLOS.png|мини|без|finely grained failure domains]]&lt;br /&gt;
&lt;br /&gt;
=IP Fabrics=&lt;br /&gt;
Самое важное условие для IP Fabric: VTEP должны соединяться по L3.&lt;br /&gt;
&lt;br /&gt;
Clos придумал распределенную топологию для L3, при которой возможно достаточно хорошее масштабирование сети. В такой сети есть разделение на уровни: ingress, middle, egress.&lt;br /&gt;
&lt;br /&gt;
На основе CLOS произошла топология spine anf leaf, которую иногда называют сложенной CLOS сетью. То ест тут ingress и egress уровни сложены друг на друга (если можно так выразиться).&lt;br /&gt;
&lt;br /&gt;
Spine - это L3 свитчи.&lt;br /&gt;
&lt;br /&gt;
Leaf - это top-of-the-rack свитчи, который связывают сервер и VTEP.&lt;br /&gt;
&lt;br /&gt;
Масштабируемость определяется двумя параметрами: &amp;quot;толщиной&amp;quot; spine, коэффициентов переподключенийleaf светчей.&lt;br /&gt;
&lt;br /&gt;
Spine L3 свитчи можно собирать в кластер, а можно и нет. Причем говорится про кластре, в котором будут и SPINE и LEAF, все вместе.&lt;br /&gt;
&lt;br /&gt;
Если я правильно поняла, то обычно, когда требуется особо большая масштабируемость сети, то VChassis не собирают.&lt;br /&gt;
&lt;br /&gt;
При фабрике без VChassis емкость рассчитывается как умножение кол-во портов под серверы на кол-во LEAF, используемых на SPINE.&lt;br /&gt;
&lt;br /&gt;
Пример: &lt;br /&gt;
 При использовании такого оборудования:&lt;br /&gt;
 SPINE = QFX5100-24Q ['''32''' x 40GbE]&lt;br /&gt;
 LEAF = QFX5100-96S ['''96''' x 10G + 8 x 40GbE]&lt;br /&gt;
 получаем фабрику размерностью = (32*96) x 10GbE = 3072 x 10GbE и oversubscription ratio 3:1&lt;br /&gt;
&lt;br /&gt;
==Control Plane==&lt;br /&gt;
Для фабрик с VChassis беспокоиться о Control Plane не приходится. Она прост работает. Но если требуется более масштабируемся сеть, то придется отойти от VChassis и подумать о ControlPlane.&lt;br /&gt;
&lt;br /&gt;
В фабрике каждому LEAF потребуется отправлять и получать маршрутную инфу вместе с остальными LEAF.&lt;br /&gt;
&lt;br /&gt;
В той или иной степени для ControlPlane фабрики могут подойти следующие протоколы: BGP, OSPF, ISIS. Сравним их по разным параметрам:&lt;br /&gt;
&lt;br /&gt;
'''Scale + Advertise Prefixes:''' Adveritse prefixes - у всех протоколов - норм, но OSFP и ISIS флудят префиксами. Чем больше префиксов в сети, тем больше флуда. Для уменьшения флуда можно и нужно в данном случае разбивать сегменты на area. Но при этом утратятся возможности CSPF. При этом BGP специально был придуман для работы с большим кол-вом префиксов. В плане масштабируемости он значительно выигрывает!&lt;br /&gt;
&lt;br /&gt;
'''Traffic engineering + traffic tagging:''' иногда нужно управлять трафиком в фабриках, например, чтобы пустить его в обход какого-то SPINE. Тут понятно, что OSPF и ISIS сильно проигрывают. В отличие от них у BGP есть дофига атрибутов, которыми можно управлять трафиком.&lt;br /&gt;
&lt;br /&gt;
'''Multivendor stability:''' Вроде и OSPF и ISIS неплохо себя должны вести, но кто знает, кто проверял. Гораздо чаще разные компании, использующие разное оборудование настраивают взаимодействие между собой именно посредством BGP. Так что именно BGP можно считать самым неприхотливым в работе в разными вендорами.&lt;br /&gt;
&lt;br /&gt;
Ну в итоге для IP Fabric самый адекватный протокол - '''BGP'''.&lt;br /&gt;
&lt;br /&gt;
==BGP Design==&lt;br /&gt;
*Using '''EBGP''' in an IP fabric: каждому свитчу свою AS. Каждый LEAF пирится с каждым SPINE. Тут все просто и понятно и красиво. И также с помощью LPF и AS-PATH можем спокойно рулить трафиком. Защита от петель, напомню в том, что при отправке префикса проверяется AS-path. Префикс не отправляется пиру, если в AS-path есть AS пира.&lt;br /&gt;
[[Файл:Ebgp-1.png|мини|слева|top-of-the-rack]]&lt;br /&gt;
[[Файл:Ebgp_2.png|мини|без|end-of-the-rack]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Using '''IBGP''' in an IP fabric: все свитчи в одной AS. Для получения полной маршрутной информации - full mesh. Ну или более разумно использовать route reflector (или conederation - реже). RR втискиваем в уровень SPINE. Делаем пару RR, для резервирования. Все нормально НО! при таком раскладе не выйдет делать балансировку (использовать multipath), т.к. RR выбирает и отдает своим пирам только лучший маршрут. Для восстановления справедливости потребуется заморочиться с AddPath на RR (draft-ietf-idr-add-paths). Плюсом IBGP считается еще защита от петель: имеется ввиду, что IBGP пиры при любом раскладе не будут флудить префиксами.&lt;br /&gt;
[[Файл:Ibgp_1.png|мини|слева|top-of-the-rack]]&lt;br /&gt;
[[Файл:Ibgp_2.png|мини|без|end-of-the-rack]].&lt;br /&gt;
&lt;br /&gt;
[[Файл:IBGP-eBGP CLOS.png|750px|без]]&lt;br /&gt;
ECMP - equal-cost multi-path - технология, когда один поток (один source + один dest) передается между двумя равнозначными линками. Подразумевается включение обычной балансировки, то есть:&lt;br /&gt;
 protocols {&lt;br /&gt;
    bgp {&lt;br /&gt;
        group CLOS {&lt;br /&gt;
            ...&lt;br /&gt;
            multipath multiple-as;&lt;br /&gt;
&lt;br /&gt;
 policy-options {&lt;br /&gt;
    policy-statement PFE-LB {&lt;br /&gt;
        then {&lt;br /&gt;
            load-balance per-packet;&lt;br /&gt;
&lt;br /&gt;
 routing-options {&lt;br /&gt;
    forwarding-table {&lt;br /&gt;
        export PFE-LB;&lt;br /&gt;
&lt;br /&gt;
Хорошей практикой для IP Fabric также считается использование следующих фич:&lt;br /&gt;
 protocols {&lt;br /&gt;
    bgp {&lt;br /&gt;
        log-updown;&lt;br /&gt;
        graceful-restart;&lt;br /&gt;
        group CLOS {&lt;br /&gt;
            mtu-discovery;&lt;br /&gt;
            bfd-liveness-detection { &lt;br /&gt;
                minimum-interval 350;&lt;br /&gt;
                multiplier 3;&lt;br /&gt;
                session-mode single-hop;&lt;br /&gt;
Подробно на каждой из них в этой главе останавливаться не буду.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
Для того, чтобы построить IP Fabric с BGP, придерживайтесь следующих требований:&lt;br /&gt;
*Base IP prefix. Один пул адресов для служебных целей (p2p, loopback, ...). Лучше сразу прикинуть размеры фабрики и выделить достаточный пул адресов.&lt;br /&gt;
*P2P network. Экономно и удобно использовать /31.&lt;br /&gt;
*P2P addresses. Удобно, когда при построении фабрики придерживаются одного принципа назначение ip. Первый - не spine, второй - на leaf.&lt;br /&gt;
*Loopback. Выделить из большого пула. Лучше использовать loopback, это облегчает диагностику.&lt;br /&gt;
*Server facing network. Сеть для  сервачков. Leaf выступает как шлюз. Все зависит от масштабов фабрики, но понятно, что будет удобно использовать, например: /24 на один leaf, в ней работают только сервера, включенные к этому leaf. В фабрике 8 leaf, соответственно можно выделить 8*/24 = /21 сеть на фабрику. Подразумевается, что server facing netw и base ip netw - разные.&lt;br /&gt;
*AS num. Для каждого свитча (SPINE или LEAF) отдельная AS num - для работы EBGP. Выбор использовать 32-bit/16-bit. '''16-bit''': диапазон приватных: 64512 - 65535 то есть 1023 шт, то есть максимум 1023 свитчей в фабрике. Если этого мало, то можно переходить либо в public диапазон, либо на 32-bit AS num. &lt;br /&gt;
*BGP export. LEAF передает свой loopback и server facing netw.&lt;br /&gt;
*BGP import. Разрешаем только Base IP prefix и Server facing network.&lt;br /&gt;
*ECMP. Включаем load balancing на SPINE и LEAF.&lt;br /&gt;
&lt;br /&gt;
==Edge connect==&lt;br /&gt;
Речь про связность с внешним миром и фабриками в других локациях, если такие есть.&lt;br /&gt;
&lt;br /&gt;
В идеальном мире каждый дата-центр с IP Fabric должен:&lt;br /&gt;
*на всех фабриках иметь одинаковую структуру и даже распределение AS. &lt;br /&gt;
*иметь 2 edge роутера с уникальными AS num.&lt;br /&gt;
*быть подключенным к двум разным ISP.&lt;br /&gt;
*быть подключенным в внутренней MPLS сети.&lt;br /&gt;
&lt;br /&gt;
Одинаковые AS num внутри фабрик разных дата-центров могут немного вводить в смятение. Можно с edge роутеров просто анонсировать агрегат своей фабрики.&lt;br /&gt;
&lt;br /&gt;
Для ISP подключения: edge роутер к IP Fabric передает default, к ISP передает агрегаты фабрик. Все остальное - reject. От ISP на Edge лучше получать full view.&lt;br /&gt;
&lt;br /&gt;
=VXLAN=&lt;br /&gt;
Virtual Extensible LAN protocol (VXLAN) инкапсулирует L2 Ethernet frame в L3 UDP packets.&lt;br /&gt;
*Позволяет использовать бОльшее кол-во вланов.&lt;br /&gt;
*Пригоден для огромных сетей облаков и ДЦ с большим кол-вом клиентов.&lt;br /&gt;
*Можно мигрировать VM через туннелирование трафика в L3, даже если VM включены в разные L2-домены. Это позволяет использовать ресурсы сети не учитывать границы L2. Также использование VXLAN убирает необходимость создавать огромные (в том числе по географии) L2-домены.&lt;br /&gt;
*Использование VXLAN дает возможность отказаться от STP и использовать более надежные и развитые протоколы маршрутизации для быстрой сходимости сети. Отсутствие STP дает возможность использовать полную пропускную способность сети (нет заблокированных портов). &lt;br /&gt;
*Использование L3 между L2-доменами дает возможность эффективнее балансировать трафик и опять же использовать максимально возможную пропускную способность.&lt;br /&gt;
&lt;br /&gt;
MX series и EX9200: поддерживают до 32 000 VXLAN, 32 000 multicast groups, 8 000 VTEP (virtual tunnel endpoint). Это позволяет использовать MX для очень больших сетей.&lt;br /&gt;
&lt;br /&gt;
QFX10000 поддерживают до 4000 VXLANs, 2000 VTEPs.&lt;br /&gt;
&lt;br /&gt;
QFX5100, QFX5110, QFX5200, QFX5210, EX4600 поддерживают до 4000 VXLANs, до 2000 remote VTEPs.&lt;br /&gt;
&lt;br /&gt;
EX4300-48MP поддреживают до 4000 VXLANs.&lt;br /&gt;
&lt;br /&gt;
Более подробно можно узнать на сайте производителя.&lt;br /&gt;
&lt;br /&gt;
==Принцип работы==&lt;br /&gt;
VXLAN инкапсулирует Ethernet-frame (L2) в UDP-пакет (L3). Из-за такой инкапсуляции VXLAN считают overlay технологией.&lt;br /&gt;
&lt;br /&gt;
Свитчи или роутеры, которые используют VXLAN называются VTEP (virtual tunnel endpoints). &lt;br /&gt;
&lt;br /&gt;
VTEPs инкапсулируют и декапсулирует VXLAN-трафик на входе и выходе из VXLAN-туннеля. &lt;br /&gt;
&lt;br /&gt;
В случае, когда hardware сервер включается напрямую в Juniper и сам не умеет создавать VXLAN туннели: в качестве VTEP выступают свитчи или маршрутизаторы Juniper.&lt;br /&gt;
&lt;br /&gt;
В случае с VM (virtual machine), гипервизор будет участвовать в роли VTEP, сам создавать VXLAN tunnel, а Juniper будет транзитным девайсом.&lt;br /&gt;
&lt;br /&gt;
[[Файл:VXLAN пакет.png|600px|центр]]&lt;br /&gt;
Во время инкапсуляции VTEP добавляет к фрейму поля:&lt;br /&gt;
:- outer MAC dst MAC (mac endpoint VTEP)&lt;br /&gt;
:- outer MAC src MAC (mac source VTEP)&lt;br /&gt;
:- outer dst IP&lt;br /&gt;
:- outer src IP&lt;br /&gt;
:- outer UDP header&lt;br /&gt;
:- VXLAN header: 24-битное поле VNI (VXLAN netw indentifier), уникально идентифицирующее VXLAN. Похоже на VLANID, только побольше.&lt;br /&gt;
&lt;br /&gt;
Передаем frame от VM1 к Server1.&lt;br /&gt;
[[Файл:VTEP аппаратный и програмный.png|600px|центр]]&lt;br /&gt;
#VTEP3 получает Eth-frame от VM1 (с dst addr Server1).&lt;br /&gt;
#В Forwarding Table уже есть изученный mac-add Server1 + инфа об исх интерфейсе (VTEP)&lt;br /&gt;
#VTEP3 добавляет заголовок VXLAN, который содержит VNI. VTEP3 инкапсулирует Eth-frame в UDP-пакет (L3).&lt;br /&gt;
#VTE3 маршрутизирует пакет через underlay L3-сеть к VTEP1.&lt;br /&gt;
#VTEP1 делает декапсуляцию и отдает Eth-frame к Server1.&lt;br /&gt;
&lt;br /&gt;
VM и сервера при этом ничего не знают про VXLAN и протоколы на L3. Для серверов всё выглядит, как-будто они сидят в одном L2-домене.&lt;br /&gt;
&lt;br /&gt;
{{note|text=VXLAN добавляет 50-54 дополнительных bytes! В ответ потребуется увеличить MTU на underlay. А именно на интерфейсах, которые участвуют в VXLAN сети, а не на логическом src VTEP interface.}}&lt;br /&gt;
&lt;br /&gt;
==Learning==&lt;br /&gt;
*''Как VTEPs будут находить друг друга?''&lt;br /&gt;
&lt;br /&gt;
Есть 2 способа обнаружения:&lt;br /&gt;
*data plane learning [like ethernet switch = L2 learning]&lt;br /&gt;
*control plane learning&lt;br /&gt;
&lt;br /&gt;
*''Как будет обрабатываться BUM traffic [broadcast, unknown unicast, multicast]:''&lt;br /&gt;
'''Multicast''' - common solution, когда каждому VNI приравнивается какая-то multicast group. На underlay сети должен быть развернут mcast. :) [для лабы достаточно просто добавить pim на iface и назначить anycast RP].&lt;br /&gt;
&lt;br /&gt;
VTEP знает какой VNI (mcast group) у него =&amp;gt; шлет igmp-join, чтобы подписаться в домен этого VNI. Когда какой-то VTEP шлет пакет с dest mcast, остальные VTEP его получают.&lt;br /&gt;
&lt;br /&gt;
Когда VTEP должен отправить BUM traffic, он шлет его с dest ip = mcast address.&lt;br /&gt;
&lt;br /&gt;
===Data plane Learning [L2 learning | Flooding learning]===&lt;br /&gt;
Когда VTEP получает пакет, он записывает в fw table:&lt;br /&gt;
*IP-source VTEP&lt;br /&gt;
*MAC VM&lt;br /&gt;
*VNI&lt;br /&gt;
Когда приходит пакет с назначением к этой VM в этом же VNI, то VTEP уже будет знать что делать.&lt;br /&gt;
&lt;br /&gt;
Если dest mac - не известен, то VTEP начинает флудить, вдруг кто другой знает такой адрес. Но чтобы уменьшить флуд, каждому VNI будет соответствовать своя multicast группа. И флуд будет распространен только в рамках этой группы.&lt;br /&gt;
&lt;br /&gt;
Пример: 2 VM на разных хостах.&lt;br /&gt;
&lt;br /&gt;
VNI 100 = mcast group: 239.1.1.100.&lt;br /&gt;
&lt;br /&gt;
#VM1 шлет arp-request к VM2 (who has 192.168.0.11?)&lt;br /&gt;
#VTEP1 инкапсулирует в arp-request в mcast packet и шлет пакет к mcast group 239.1.1.100.&lt;br /&gt;
#Все VTEP в группе 239.1.1.100 получают пакет, декапсулируют его проверяет VNI. Если совпадает, то шлет arp в VXLAN сегмент, если не совпадает, то дропает пакет. При этом локальный VTEP также добавляет инфу: IP VTEP1 &amp;lt;&amp;gt; MAC VM1 в свою локальную VXLAN table.&lt;br /&gt;
#VM2 получила arp и ответила на него, раскрыв свой MAC.&lt;br /&gt;
#VTEP2 инкапсулировала ответ и передала его к VTEP1.&lt;br /&gt;
#VTEP1 получила arp-response, декапсулировала и отдала его VM1. И еще записала в VXLAN table IP VTEP2 &amp;lt;&amp;gt; MAC VM2.&lt;br /&gt;
#Далее VM1 и VM2 общаются via unicast.&lt;br /&gt;
&lt;br /&gt;
Можно для нескольких VNI назначать одну группу. VTEP все-равно при передаче пакета проверяет VNI, а флуд при этом все-равно уменьшится.&lt;br /&gt;
&lt;br /&gt;
Подходит только для девайсов, находящихся в одном L2 домене - это главный минус такой системы.&lt;br /&gt;
&lt;br /&gt;
Кстати, VTEP не поддерживают аутентификацию, поэтому злоумышленник запросто может вторгнуться в ваш домен. Поэтому рекомендовано все-же использовать control plane learning.&lt;br /&gt;
&lt;br /&gt;
===Control plane learning [BGP-EVPN]===&lt;br /&gt;
Подразумевается, что switches learning делается до того, как начинается процесс передачи трафика. Работает аналогично протоколам маршрутизации.&lt;br /&gt;
&lt;br /&gt;
Свитчи пирятся по BGP и делятся своими префиксами. Для обмена используется evpn family. &lt;br /&gt;
&lt;br /&gt;
Некоторые свитчи будут иметь VTEPs и понятно, что по BGP проанонсятся их адреса.&lt;br /&gt;
&lt;br /&gt;
В control plane learning и VTEP появляется &amp;quot;аутентификация&amp;quot;. Когда адреса VTP анонсятся по BGP, они также заносятся в white list. Когда кто-то левый захочет приконнектиться - он не сможет этого сделать до тех пор, пока он не появится в white-list.&lt;br /&gt;
&lt;br /&gt;
VM MAC добавляются в процесс BGP. Соответственно, когда одна VM передает другой фрейм, роутинг к нужному хосту происходит на основании BGP. {это все подробно описано в EVPN}&lt;br /&gt;
&lt;br /&gt;
При использовании control plane learning - появляется и arp suppression. VM посылает ARP-req, который доходит до свитча. А свитч уже по BGP знает соответствие IP&amp;lt;&amp;gt;mac, и отдает mac удаленной VM.&lt;br /&gt;
&lt;br /&gt;
Для BUM трафика советуют также использовать Multicast, как хорошо масштабируемый.&lt;br /&gt;
&lt;br /&gt;
==VXLAN Routing==&lt;br /&gt;
Заставляем общаться разные VNI при помощи L3 gateway.&lt;br /&gt;
&lt;br /&gt;
L3 gateway можно делать как на LEAF, так и на SPINE.&lt;br /&gt;
&lt;br /&gt;
Могут использоваться: L2VNI, L3VNI.&lt;br /&gt;
&lt;br /&gt;
'''L2VNI''': для бриджей. То есть когда трафик остается внутри одного LAN-сегмента.&lt;br /&gt;
&lt;br /&gt;
'''L3VNI''': для роутинга. То есть когда трафик должен выйти за переделы LAN. L3VNI опциональны, но если хотите роутить на локальном свитче - придется воспользоваться.&lt;br /&gt;
&lt;br /&gt;
VTEPs должны знать только про локальные L2VNI, которые они локально обслуживают. С другой стороны ВСЕ VTEPs должны знать обо всех L3VNI, что называется '''anycast gateway'''.&lt;br /&gt;
&lt;br /&gt;
В этом случает каждый свитч - это GW в VNI [10.1.1.1]. На соседнем физическом свитче с тем же VNI настраивается такой же адрес шлюза [10.1.1.1]. И все свитчи в этом VNI будут иметь одинаковый virt mac-add для шлюза. Это приемущество по сравнению с VRRP/HSRP в том, что: не нужны какие-то таймеры или hello-massages для синхронизации между двумя свитчами. &lt;br /&gt;
&lt;br /&gt;
То есть для одного VNI, все VM, которые ему принадлежат - имеют один и тот же шлюз! Все зависимости от того к какому свитчу физически включен сервер.&lt;br /&gt;
&lt;br /&gt;
Это способствует быть VM - мобильной и перемещаться на другие сервачки! &lt;br /&gt;
&lt;br /&gt;
L3VNI связаны с VRF. То есть один VNI = один Customer = один RD+RT.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
На одном свитче будет настроен VRF с двумя irb интерфейсами: irb.100 [10.1.100.1], irb.101 [10.1.101.1]. Каждый будет обслуживать свой L2 домен: VTEP with VLAN100, a VNI1000 и VTEP with VLAN101, a VNI1001 соответственно.&lt;br /&gt;
&lt;br /&gt;
#QFX получает VXLAN пакет с outer dest ip. Декапсулирует его. &lt;br /&gt;
#QFX делает lookup dest mac-адреса, который = IRB VIP MAC.&lt;br /&gt;
#Делает L3 lookup внутри VRF для IP-dest.&lt;br /&gt;
#Далее делается ARP lookup для IP dest. Если есть mapping, то шлется в iface. Если нет, то выясняется куда слать by looking at the MAC table of the other VNI.&lt;br /&gt;
#QFX генерирует новый L2 header с dest-mac для dest server. Потом шлет инкапсулированный VXLAN к remote VTEP.&lt;br /&gt;
&lt;br /&gt;
=EVPN-VXLAN=&lt;br /&gt;
EVPN решает две проблемы:&lt;br /&gt;
#MAC learning control plane for overlay networks&lt;br /&gt;
#the need for workload mobility. Приложениям требуется L2 для взаимодействия друг с другом. Когда речь про app в разных DC, обычным вланом не обойтись.&lt;br /&gt;
&lt;br /&gt;
EVPN относится а BGP family. Он использует MP BGP для MAC learning. Благодаря этому роутеры/свитчи обрабатывают MAC как маршруты. Что позволяет использовать несколько path одновременно (без физического гашения избыточных портов).&lt;br /&gt;
&lt;br /&gt;
EVPN позволяет маршрутизировать не только MAC, но и ARP (IP + MAC). В дальнейшем ARP можно будет привязать и к VLAN-tag.&lt;br /&gt;
&lt;br /&gt;
По сравнению с VPLS - тут явно больше преимуществ для использования.&lt;br /&gt;
&lt;br /&gt;
Немного новой терминологии для EVPN в IP Fabric:&lt;br /&gt;
*Ethernet Tags = VLAN-ID&lt;br /&gt;
*MAC-VRF = Mac-table [в EVPN можно использовать import/export policies]&lt;br /&gt;
*export-policy = обычная политика, которая на все изученные местные (local) mac-addr навешивает target и отправляет route к remote sites.&lt;br /&gt;
*import-policy = обычная политика, которая по наличию правильного target кладет route в MAC-VFR.&lt;br /&gt;
*RD - uniq ID, который назначается на MAC-VRF. Уникальный в пределах IP Fabric.&lt;br /&gt;
*RT community - навешивается на routes посредством политик. На роутерах обозначает принадлежность к той или иной routing-table.&lt;br /&gt;
*EVPN services = включает в себя разные vlan-mapping options.&lt;br /&gt;
&lt;br /&gt;
==VLAN Services==&lt;br /&gt;
*'''VLAN-based service''' - один влан на весь EVPN. То есть все девайсы на всех sites работают в одном влане. Можно делать vlan-map vlan-id 1 на vlan-id 2. Когда, например на разных фабриках используются разные vlan-id.  It's ok. Плюс такого метода - ограничение broadcast. Но он не сильно масштабируем.&lt;br /&gt;
*'''VLAN bundle service''' - в одном EVPN много разных вланов. Полезно, когда услуга одна для нескольких арендаторов. У арендаторов используются разные вланы и никак по-другому. Плюсы: удобно для конфига. Но брадакст в таком домене будет влиять на ВСЕ вланы в нем.&lt;br /&gt;
*'''VLAN aware service''' - тут, кажется, используются bridge-domain внутри одного EVPN instance. Каждый со своим vlan-id внутри. То есть это дает возможность использовать в ENI (EVPN instance) несколько vlan-id, но которые не будут в одном broadcast домене. При флудах будут страдать конкретные вланы.&lt;br /&gt;
==Data Plane==&lt;br /&gt;
В качестве dataplane для EVPN из близкого к теме могут быть: MPLS, VXLAN. Есть еще и другие: PBB, STT, NVGRE..&lt;br /&gt;
&lt;br /&gt;
VXLAN encapsulation метод основан на VNIs, тогда ваши vlan-id 1, vlan-id 2 &amp;gt; vni-1, vni-2 &amp;gt; vxlan-1, vxlan-2 (с изученными Mac-addr) &amp;gt; в EVPN instance-1 с uniq RD.&lt;br /&gt;
&lt;br /&gt;
===BGP Route Types for EVPN===&lt;br /&gt;
:-'''Ethernet Auto-Discovery (AD) Route''': когда новый свитч вступает в EVPN, он пользуется этими роутами, чтобы объявить о себе.&lt;br /&gt;
   RD [8], _ESI [10], _ET [4], MPLS LBL [3]&lt;br /&gt;
&lt;br /&gt;
Передается flag, указывающий сколько линков можно использовать для передачи.&lt;br /&gt;
[[Файл:EVPN routes type1.png|мини|без]]&lt;br /&gt;
Например, у нас один сервер включен двумя ногами в разные свитчи. Когда LEAF4 получит auto-discovery route от LEAF1 и LEAF2, то route будет вставлен в таблицу, но также, LEAF4 будет знать, что до данного сервера у него '''два''' VXLAN, которые можно использовать.&lt;br /&gt;
&lt;br /&gt;
Это как раз различие в active/active links [flag set to 0] и single link [flag is set to 1].&lt;br /&gt;
&lt;br /&gt;
Auto-discovery process отрабатывает намного быстрее, так как при стандартном включении в свитч при падении линка (за которым были тысячи mac-addr) таблица будет чистить эти тысячи маков гораздо дольше, чем один route, который соответствует (ассоциирован с) линку.&lt;br /&gt;
&lt;br /&gt;
:-'''MAC/IP Advertisement Route''': MAC advertisement (также может передавать IP+MAC).&lt;br /&gt;
    RD [8], ESI [10], _ET [4],&lt;br /&gt;
    _MAC Addr Lenght [1], _MAC Addr [6],&lt;br /&gt;
    _IP Addr Lenght [1], _IP Addr [0|4|16]&lt;br /&gt;
    MPLS LBL1 [3]&lt;br /&gt;
    MPLS LBL2 [0|3]&lt;br /&gt;
&lt;br /&gt;
[[Файл:EVPN routes type2.png|мини|без]]&lt;br /&gt;
&lt;br /&gt;
LEAF4 изучил Mac server2. Начал передавать его другим sites EVPN с соответствующим community, которое навешивается согласно export policy.&lt;br /&gt;
&lt;br /&gt;
LEAF1 исходя из import policy решает принять ли маршрут. Если import policy отсутствует - это равнозначно discard.&lt;br /&gt;
&lt;br /&gt;
:-'''Inclusive Multicast Ethernet Tag Route''': BUM flooding.&lt;br /&gt;
    ET [4], IP Addr Lenght [1], Originating Router's IP Addr [4|16]&lt;br /&gt;
&lt;br /&gt;
В Juniper EVPN/VXLAN свитчи поддерживают ingress replication BUM. То есть свитч получил BUM, создал unicast копии этого трафик и отправил remote sites этого EVPN.&lt;br /&gt;
&lt;br /&gt;
Route информирует remote PE - как обработать BUM traffic и PMSI аттрибуты. Он определяет следует использовать PIM или PMSI и на какой dst adddr отправлять BUM traffic.  &lt;br /&gt;
&lt;br /&gt;
LEAF2 передает инфу, что он ждет и использует ingress replication и что LEAF1 должен использовать 4.4.4.4 как dst addr VXLAN пакетов, которые передают BUM.&lt;br /&gt;
&lt;br /&gt;
:-'''Ethernet Segment Route''': ES and DF election.&lt;br /&gt;
    _ESI [10], _IP Addr Lenght [1], _IP Addr [4|16]&lt;br /&gt;
&lt;br /&gt;
Решает проблемы:&lt;br /&gt;
*выбор designated forwarder (DF)&lt;br /&gt;
*split-horizont - preventing routing loops in the routing protocol. Not to advertise route to it's origin iface.&lt;br /&gt;
В EVPN есть стандартные правила split-horizont:&lt;br /&gt;
#Локальный свитч получил BUM от сервера. Свитч перешлет BUM только серверам в том же влане и remote sites EVPN instance. Но не обратно в интерфейс сервера, откуда он пришел.&lt;br /&gt;
#Свитч получи BUM от remote site. Свитч отправит BUM локальным серверам. Но не будет передавать его другим remote sites.&lt;br /&gt;
&lt;br /&gt;
При использовании active/active у нас могут возникнуть проблемы и петли все-таки могут возникнуть.&lt;br /&gt;
&lt;br /&gt;
Как избавиться от этого?&lt;br /&gt;
&lt;br /&gt;
Для одного EVPN instance выбрать одного DF для EVPN для передачи BUM traffic. Все остальные будут дропать BUM.&lt;br /&gt;
&lt;br /&gt;
:-'''IP Prefix Route''': IP route advertisement&lt;br /&gt;
Обычно можно увидеть при DC interconnect.&lt;br /&gt;
&lt;br /&gt;
LEAF1 получил трафик от Server 1. Инкапсулировал Eth в VXLAN и отправил на EDGE router DC1 (GW for LEAF1 with irb iface). &lt;br /&gt;
&lt;br /&gt;
EDGE снимет Eth header, и IP пакет смаршрутизирует согласно ip routing table.&lt;br /&gt;
&lt;br /&gt;
В таблице будет route type 5, который был получен от remote PE DC2. EDGE засунет IP в VXLAN к DC2.&lt;br /&gt;
&lt;br /&gt;
EDGE DC2 снимет VXLAN header, смаршрутизирует ip пакет. Засунет его в Eth заголовок с dst MAC Server 2. Отправит фрейм.&lt;br /&gt;
&lt;br /&gt;
===Distributed Layer 3 Gateway===&lt;br /&gt;
[[Файл:EVPN gateway.png|мини|без]]&lt;br /&gt;
&lt;br /&gt;
На SPINE1 и SPINE2 настроен одинаковый Virtual ip gateway address 10.0.1.254 и одинаковый Virtual MAC 00:01:8d:00:01:02. &lt;br /&gt;
&lt;br /&gt;
SPINE1 и SPINE2 передают в EVPN type 1 auto-discovery и type 2 Mac+ip learning. &lt;br /&gt;
&lt;br /&gt;
LEAF1 получит равнозначные по стоимости маршруты к одному MAC в том же сегменте. И начнет балансить трафик между ними.&lt;br /&gt;
&lt;br /&gt;
==Design==&lt;br /&gt;
Как это все ляжет на сеть?&lt;br /&gt;
&lt;br /&gt;
Серверы включены в LEAF в своих вланах. &lt;br /&gt;
&lt;br /&gt;
VLAN связаны с VXLAN VTEP на портах свитчей.&lt;br /&gt;
&lt;br /&gt;
VTEP сопоставляются в соответствующие EVPN (которые делают L2 связность для VTEP).&lt;br /&gt;
&lt;br /&gt;
Как говорили выше: можно сопоставлять несколько VTEP одному EVPN instance (c one-to-one mapping или many-to-one mapping).&lt;br /&gt;
&lt;br /&gt;
=Controllers=&lt;br /&gt;
Речь про SDN контроллеры&lt;br /&gt;
=Дополнительная информация=&lt;br /&gt;
*[[EVPN]]&lt;br /&gt;
*[[Traffic engineering]]&lt;br /&gt;
*[[Глава 1. Основы MPLS и VPN]]&lt;br /&gt;
*[[Глава 2. Label Distribution Protocols (RSVP, LDP)]]&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=DC&amp;diff=2078</id>
		<title>DC</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=DC&amp;diff=2078"/>
		<updated>2021-12-25T19:16:15Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: /* Data plane Learning [L2 learning | Flooding learning] */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#description2:Overlay Networks. Fabric Design. IP Fabrics. VXLAN. EVPN-VXLAN. BGP Route Types for EVPN. Distributed Layer 3 Gateway. Информация для подготовки к экзаменам Juniper.}}&lt;br /&gt;
=Overlay Networks=&lt;br /&gt;
Разделяют 2 вида сетей: overlay и underlay.&lt;br /&gt;
&lt;br /&gt;
Underlay - физическая IP сеть. Это база (транспорт) поверх которого уже строится overlay netw.&lt;br /&gt;
&lt;br /&gt;
Примеры underlay: MPLS, IP-сеть построенная на IGP/EGP.&lt;br /&gt;
&lt;br /&gt;
Также в underlay входят bare metal servers (или могу ошибаться и это не так). Подразумевается, что underlay - это прям железо-железо в голом виде.&lt;br /&gt;
&lt;br /&gt;
Overlay - это наложенная сеть на underlay. Виртуальные свитчи, серверы и другие VM соединены virt logical links (VTEPs - virtual tunnel endpoints).&lt;br /&gt;
&lt;br /&gt;
*''host machine'' - сервер, на котором запущен hypervisor. &lt;br /&gt;
*''guest machine'' - каждая VM.&lt;br /&gt;
Hypervisor предоставляет OS с virt платформой для guest и далее управляет работой guest OS. Несколько разных guest OS будут делать hardware ресурсы сервера.&lt;br /&gt;
&lt;br /&gt;
VXLAN - overlay technology, которая строит virt туннели на основе IP/MPLS netw (VTEPs)&lt;br /&gt;
&lt;br /&gt;
VM на одном хосте будут коммуницировать между собой через virt switch - L2.&lt;br /&gt;
VM на разных хостах будут коммуницировать между собой через VTEP - L3. То есть прибегать к инкапсуляции L2 в L3 и передаче трафика через underlay сеть.&lt;br /&gt;
&lt;br /&gt;
VTEP - располагаются на hypervisor или есть брать сервера, включенные с обычные access switches, то на свитчах тоже можно создавать VTEP. VTEP - туннель между хостами &lt;br /&gt;
VTEP имеет 2 iface: &lt;br /&gt;
*switching interface - в сторону VM&lt;br /&gt;
*IP interface - в сторону IP сети (L3 netw)&lt;br /&gt;
&lt;br /&gt;
Для инкапсуляции используется обычно VXLAN. О нем ниже.&lt;br /&gt;
&lt;br /&gt;
Положительные особенности overlay network (наложенных сетей):&lt;br /&gt;
# Отделение сети от физического оборудования позволяет сетям дата-центров быть развернутыми за считанные секунды.&lt;br /&gt;
# Поддержка L2 и L3 между VM и серверами.&lt;br /&gt;
# В отличие от стандартной сети поддерживает до 16,4 млн &amp;quot;заказчиков&amp;quot; (вланов).&lt;br /&gt;
 &lt;br /&gt;
Чем приходится платить за использование overlay network:&lt;br /&gt;
:- virtual tunnel endpoints (VTEPs) ипользует MAC и route. В отличие от традиционной модели, где каждая VM и каждый сервер использует MAC и route. В overlay трафик от VM и сервером инкапсулируется между VTEP. mac и route каждого сервера теперь не виден для оборудования overlay сети. mac и route теперь перенесены с физического уровня на уровень hypervisor.&lt;br /&gt;
&lt;br /&gt;
=Bare metal server=&lt;br /&gt;
Редко в каких сетях получится найти полностью виртуализированую сеть. Какая-то часть серверов все-равно останется железной (в основном из-за производительности).&lt;br /&gt;
&lt;br /&gt;
Как не бросить те самые железные сервачки и сохранить с ними сетевую связность?&lt;br /&gt;
&lt;br /&gt;
Один из методов: соединить VTEP с физическим access switch.&lt;br /&gt;
&lt;br /&gt;
Каждый гипервизор имеет VTEP. VTEP передает инкапсулированный трафик data plane между VM. Также VTEP делает mac-learning, предоставляет новые virt netw и другие изменения конфигурации.&lt;br /&gt;
&lt;br /&gt;
На железных серверах нет VTEP. Чтобы железный сервер включить в overlay netw архитектуру, нужно чтобы кто-то инкапсулировал трафик от сервера и делал mac-learning. Пусть это делает обычный access-switch от имени сервера. Сервер при этом просто думает, что посылает от себя трафик дальше в сеть.&lt;br /&gt;
&lt;br /&gt;
=Fabric Design=&lt;br /&gt;
*'''Traditional – MC-LAG (multichassis link aggregation group)'''&lt;br /&gt;
[[Файл:MC-LAG.png|мини|без]]&lt;br /&gt;
*'''Virtual Chassis'''&lt;br /&gt;
[[Файл:VC 1.png|мини|слева|top-of-rack topology]] &lt;br /&gt;
[[Файл:VC 2.png|мини|центр|end-of-row topology]]&lt;br /&gt;
&lt;br /&gt;
*'''Virtual Chassis Fabric'''&lt;br /&gt;
[[Файл:VC_fabric_1.png|мини|слева|top-of-rack topology]]&lt;br /&gt;
[[Файл:VC fabric_2.png|мини|центр|end-of-row topology]].&lt;br /&gt;
Большое приемущество в том, что между каждыми двумя host в фабрике есть только 2 hops. В отличие от VC, где число hops может достигать до 9.&lt;br /&gt;
&lt;br /&gt;
Limitations:&lt;br /&gt;
:-Virtual Chassis = 10 members&lt;br /&gt;
:-Virtual Chassis Fabric = 20 members [2-4 spine + 16-18 leaf]&lt;br /&gt;
&lt;br /&gt;
Master + backup используют один и тот же MAC + IP для GW.&lt;br /&gt;
&lt;br /&gt;
Можно легко вставлять/вытаскивать членов VC. На них автоматически будет сделан upgrade софта если нужно, подъедет конфиг, новый член будет назначен linecard.&lt;br /&gt;
&lt;br /&gt;
В VC для вычисления кратчайшего пути используется Dejkstra и путь выбирается один.&lt;br /&gt;
&lt;br /&gt;
В VC fabric VCCP отвчечает за эту процедуру и при возникновении нескольких равнозначных путей трафик балансируется. &lt;br /&gt;
&lt;br /&gt;
Virtual Chassis Fabric works really well for a top-of-rack based solution, but for end-of-row it becomes a little more problematic.&lt;br /&gt;
*'''Junos Fusion'''&lt;br /&gt;
[[Файл:JF.png|мини|без|top-of-row topology]]&lt;br /&gt;
&lt;br /&gt;
*'''IP CLOS Fabrics'''&lt;br /&gt;
[[Файл:CLOS.png|мини|без|finely grained failure domains]]&lt;br /&gt;
&lt;br /&gt;
=IP Fabrics=&lt;br /&gt;
Самое важное условие для IP Fabric: VTEP должны соединяться по L3.&lt;br /&gt;
&lt;br /&gt;
Clos придумал распределенную топологию для L3, при которой возможно достаточно хорошее масштабирование сети. В такой сети есть разделение на уровни: ingress, middle, egress.&lt;br /&gt;
&lt;br /&gt;
На основе CLOS произошла топология spine anf leaf, которую иногда называют сложенной CLOS сетью. То ест тут ingress и egress уровни сложены друг на друга (если можно так выразиться).&lt;br /&gt;
&lt;br /&gt;
Spine - это L3 свитчи.&lt;br /&gt;
&lt;br /&gt;
Leaf - это top-of-the-rack свитчи, который связывают сервер и VTEP.&lt;br /&gt;
&lt;br /&gt;
Масштабируемость определяется двумя параметрами: &amp;quot;толщиной&amp;quot; spine, коэффициентов переподключенийleaf светчей.&lt;br /&gt;
&lt;br /&gt;
Spine L3 свитчи можно собирать в кластер, а можно и нет. Причем говорится про кластре, в котором будут и SPINE и LEAF, все вместе.&lt;br /&gt;
&lt;br /&gt;
Если я правильно поняла, то обычно, когда требуется особо большая масштабируемость сети, то VChassis не собирают.&lt;br /&gt;
&lt;br /&gt;
При фабрике без VChassis емкость рассчитывается как умножение кол-во портов под серверы на кол-во LEAF, используемых на SPINE.&lt;br /&gt;
&lt;br /&gt;
Пример: &lt;br /&gt;
 При использовании такого оборудования:&lt;br /&gt;
 SPINE = QFX5100-24Q ['''32''' x 40GbE]&lt;br /&gt;
 LEAF = QFX5100-96S ['''96''' x 10G + 8 x 40GbE]&lt;br /&gt;
 получаем фабрику размерностью = (32*96) x 10GbE = 3072 x 10GbE и oversubscription ratio 3:1&lt;br /&gt;
&lt;br /&gt;
==Control Plane==&lt;br /&gt;
Для фабрик с VChassis беспокоиться о Control Plane не приходится. Она прост работает. Но если требуется более масштабируемся сеть, то придется отойти от VChassis и подумать о ControlPlane.&lt;br /&gt;
&lt;br /&gt;
В фабрике каждому LEAF потребуется отправлять и получать маршрутную инфу вместе с остальными LEAF.&lt;br /&gt;
&lt;br /&gt;
В той или иной степени для ControlPlane фабрики могут подойти следующие протоколы: BGP, OSPF, ISIS. Сравним их по разным параметрам:&lt;br /&gt;
&lt;br /&gt;
'''Scale + Advertise Prefixes:''' Adveritse prefixes - у всех протоколов - норм, но OSFP и ISIS флудят префиксами. Чем больше префиксов в сети, тем больше флуда. Для уменьшения флуда можно и нужно в данном случае разбивать сегменты на area. Но при этом утратятся возможности CSPF. При этом BGP специально был придуман для работы с большим кол-вом префиксов. В плане масштабируемости он значительно выигрывает!&lt;br /&gt;
&lt;br /&gt;
'''Traffic engineering + traffic tagging:''' иногда нужно управлять трафиком в фабриках, например, чтобы пустить его в обход какого-то SPINE. Тут понятно, что OSPF и ISIS сильно проигрывают. В отличие от них у BGP есть дофига атрибутов, которыми можно управлять трафиком.&lt;br /&gt;
&lt;br /&gt;
'''Multivendor stability:''' Вроде и OSPF и ISIS неплохо себя должны вести, но кто знает, кто проверял. Гораздо чаще разные компании, использующие разное оборудование настраивают взаимодействие между собой именно посредством BGP. Так что именно BGP можно считать самым неприхотливым в работе в разными вендорами.&lt;br /&gt;
&lt;br /&gt;
Ну в итоге для IP Fabric самый адекватный протокол - '''BGP'''.&lt;br /&gt;
&lt;br /&gt;
==BGP Design==&lt;br /&gt;
*Using '''EBGP''' in an IP fabric: каждому свитчу свою AS. Каждый LEAF пирится с каждым SPINE. Тут все просто и понятно и красиво. И также с помощью LPF и AS-PATH можем спокойно рулить трафиком. Защита от петель, напомню в том, что при отправке префикса проверяется AS-path. Префикс не отправляется пиру, если в AS-path есть AS пира.&lt;br /&gt;
[[Файл:Ebgp-1.png|мини|слева|top-of-the-rack]]&lt;br /&gt;
[[Файл:Ebgp_2.png|мини|без|end-of-the-rack]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Using '''IBGP''' in an IP fabric: все свитчи в одной AS. Для получения полной маршрутной информации - full mesh. Ну или более разумно использовать route reflector (или conederation - реже). RR втискиваем в уровень SPINE. Делаем пару RR, для резервирования. Все нормально НО! при таком раскладе не выйдет делать балансировку (использовать multipath), т.к. RR выбирает и отдает своим пирам только лучший маршрут. Для восстановления справедливости потребуется заморочиться с AddPath на RR (draft-ietf-idr-add-paths). Плюсом IBGP считается еще защита от петель: имеется ввиду, что IBGP пиры при любом раскладе не будут флудить префиксами.&lt;br /&gt;
[[Файл:Ibgp_1.png|мини|слева|top-of-the-rack]]&lt;br /&gt;
[[Файл:Ibgp_2.png|мини|без|end-of-the-rack]].&lt;br /&gt;
&lt;br /&gt;
[[Файл:IBGP-eBGP CLOS.png|750px|без]]&lt;br /&gt;
ECMP - equal-cost multi-path - технология, когда один поток (один source + один dest) передается между двумя равнозначными линками. Подразумевается включение обычной балансировки, то есть:&lt;br /&gt;
 protocols {&lt;br /&gt;
    bgp {&lt;br /&gt;
        group CLOS {&lt;br /&gt;
            ...&lt;br /&gt;
            multipath multiple-as;&lt;br /&gt;
&lt;br /&gt;
 policy-options {&lt;br /&gt;
    policy-statement PFE-LB {&lt;br /&gt;
        then {&lt;br /&gt;
            load-balance per-packet;&lt;br /&gt;
&lt;br /&gt;
 routing-options {&lt;br /&gt;
    forwarding-table {&lt;br /&gt;
        export PFE-LB;&lt;br /&gt;
&lt;br /&gt;
Хорошей практикой для IP Fabric также считается использование следующих фич:&lt;br /&gt;
 protocols {&lt;br /&gt;
    bgp {&lt;br /&gt;
        log-updown;&lt;br /&gt;
        graceful-restart;&lt;br /&gt;
        group CLOS {&lt;br /&gt;
            mtu-discovery;&lt;br /&gt;
            bfd-liveness-detection { &lt;br /&gt;
                minimum-interval 350;&lt;br /&gt;
                multiplier 3;&lt;br /&gt;
                session-mode single-hop;&lt;br /&gt;
Подробно на каждой из них в этой главе останавливаться не буду.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
Для того, чтобы построить IP Fabric с BGP, придерживайтесь следующих требований:&lt;br /&gt;
*Base IP prefix. Один пул адресов для служебных целей (p2p, loopback, ...). Лучше сразу прикинуть размеры фабрики и выделить достаточный пул адресов.&lt;br /&gt;
*P2P network. Экономно и удобно использовать /31.&lt;br /&gt;
*P2P addresses. Удобно, когда при построении фабрики придерживаются одного принципа назначение ip. Первый - не spine, второй - на leaf.&lt;br /&gt;
*Loopback. Выделить из большого пула. Лучше использовать loopback, это облегчает диагностику.&lt;br /&gt;
*Server facing network. Сеть для  сервачков. Leaf выступает как шлюз. Все зависит от масштабов фабрики, но понятно, что будет удобно использовать, например: /24 на один leaf, в ней работают только сервера, включенные к этому leaf. В фабрике 8 leaf, соответственно можно выделить 8*/24 = /21 сеть на фабрику. Подразумевается, что server facing netw и base ip netw - разные.&lt;br /&gt;
*AS num. Для каждого свитча (SPINE или LEAF) отдельная AS num - для работы EBGP. Выбор использовать 32-bit/16-bit. '''16-bit''': диапазон приватных: 64512 - 65535 то есть 1023 шт, то есть максимум 1023 свитчей в фабрике. Если этого мало, то можно переходить либо в public диапазон, либо на 32-bit AS num. &lt;br /&gt;
*BGP export. LEAF передает свой loopback и server facing netw.&lt;br /&gt;
*BGP import. Разрешаем только Base IP prefix и Server facing network.&lt;br /&gt;
*ECMP. Включаем load balancing на SPINE и LEAF.&lt;br /&gt;
&lt;br /&gt;
==Edge connect==&lt;br /&gt;
Речь про связность с внешним миром и фабриками в других локациях, если такие есть.&lt;br /&gt;
&lt;br /&gt;
В идеальном мире каждый дата-центр с IP Fabric должен:&lt;br /&gt;
*на всех фабриках иметь одинаковую структуру и даже распределение AS. &lt;br /&gt;
*иметь 2 edge роутера с уникальными AS num.&lt;br /&gt;
*быть подключенным к двум разным ISP.&lt;br /&gt;
*быть подключенным в внутренней MPLS сети.&lt;br /&gt;
&lt;br /&gt;
Одинаковые AS num внутри фабрик разных дата-центров могут немного вводить в смятение. Можно с edge роутеров просто анонсировать агрегат своей фабрики.&lt;br /&gt;
&lt;br /&gt;
Для ISP подключения: edge роутер к IP Fabric передает default, к ISP передает агрегаты фабрик. Все остальное - reject. От ISP на Edge лучше получать full view.&lt;br /&gt;
&lt;br /&gt;
=VXLAN=&lt;br /&gt;
Virtual Extensible LAN protocol (VXLAN) инкапсулирует L2 Ethernet frame в L3 UDP packets.&lt;br /&gt;
*Позволяет использовать бОльшее кол-во вланов.&lt;br /&gt;
*Пригоден для огромных сетей облаков и ДЦ с большим кол-вом клиентов.&lt;br /&gt;
*Можно мигрировать VM через туннелирование трафика в L3, даже если VM включены в разные L2-домены. Это позволяет использовать ресурсы сети не учитывать границы L2. Также использование VXLAN убирает необходимость создавать огромные (в том числе по географии) L2-домены.&lt;br /&gt;
*Использование VXLAN дает возможность отказаться от STP и использовать более надежные и развитые протоколы маршрутизации для быстрой сходимости сети. Отсутствие STP дает возможность использовать полную пропускную способность сети (нет заблокированных портов). &lt;br /&gt;
*Использование L3 между L2-доменами дает возможность эффективнее балансировать трафик и опять же использовать максимально возможную пропускную способность.&lt;br /&gt;
&lt;br /&gt;
MX series и EX9200: поддерживают до 32 000 VXLAN, 32 000 multicast groups, 8 000 VTEP (virtual tunnel endpoint). Это позволяет использовать MX для очень больших сетей.&lt;br /&gt;
&lt;br /&gt;
QFX10000 поддерживают до 4000 VXLANs, 2000 VTEPs.&lt;br /&gt;
&lt;br /&gt;
QFX5100, QFX5110, QFX5200, QFX5210, EX4600 поддерживают до 4000 VXLANs, до 2000 remote VTEPs.&lt;br /&gt;
&lt;br /&gt;
EX4300-48MP поддреживают до 4000 VXLANs.&lt;br /&gt;
&lt;br /&gt;
Более подробно можно узнать на сайте производителя.&lt;br /&gt;
&lt;br /&gt;
==Принцип работы==&lt;br /&gt;
VXLAN инкапсулирует Ethernet-frame (L2) в UDP-пакет (L3). Из-за такой инкапсуляции VXLAN считают overlay технологией.&lt;br /&gt;
&lt;br /&gt;
Свитчи или роутеры, которые используют VXLAN называются VTEP (virtual tunnel endpoints). &lt;br /&gt;
&lt;br /&gt;
VTEPs инкапсулируют и декапсулирует VXLAN-трафик на входе и выходе из VXLAN-туннеля. &lt;br /&gt;
&lt;br /&gt;
В случае, когда hardware сервер включается напрямую в Juniper и сам не умеет создавать VXLAN туннели: в качестве VTEP выступают свитчи или маршрутизаторы Juniper.&lt;br /&gt;
&lt;br /&gt;
В случае с VM (virtual machine), гипервизор будет участвовать в роли VTEP, сам создавать VXLAN tunnel, а Juniper будет транзитным девайсом.&lt;br /&gt;
&lt;br /&gt;
[[Файл:VXLAN пакет.png|600px|центр]]&lt;br /&gt;
Во время инкапсуляции VTEP добавляет к фрейму поля:&lt;br /&gt;
:- outer MAC dst MAC (mac endpoint VTEP)&lt;br /&gt;
:- outer MAC src MAC (mac source VTEP)&lt;br /&gt;
:- outer dst IP&lt;br /&gt;
:- outer src IP&lt;br /&gt;
:- outer UDP header&lt;br /&gt;
:- VXLAN header: 24-битное поле VNI (VXLAN netw indentifier), уникально идентифицирующее VXLAN. Похоже на VLANID, только побольше.&lt;br /&gt;
&lt;br /&gt;
Передаем frame от VM1 к Server1.&lt;br /&gt;
[[Файл:VTEP аппаратный и програмный.png|600px|центр]]&lt;br /&gt;
#VTEP3 получает Eth-frame от VM1 (с dst addr Server1).&lt;br /&gt;
#В Forwarding Table уже есть изученный mac-add Server1 + инфа об исх интерфейсе (VTEP)&lt;br /&gt;
#VTEP3 добавляет заголовок VXLAN, который содержит VNI. VTEP3 инкапсулирует Eth-frame в UDP-пакет (L3).&lt;br /&gt;
#VTE3 маршрутизирует пакет через underlay L3-сеть к VTEP1.&lt;br /&gt;
#VTEP1 делает деинкапсуляцию и отдает Eth-frame к Server1.&lt;br /&gt;
&lt;br /&gt;
VM и сервера при этом ничего не знают про VXLAN и протоколы на L3. Для серверов всё выглядит, как-будто они сидят в одном L2-домене.&lt;br /&gt;
&lt;br /&gt;
{{note|text=VXLAN добавляет 50-54 дополнительных bytes! В ответ потребуется увеличить MTU на underlay. А именно на интерфейсах, которые участвуют в VXLAN сети, а не на логическом src VTEP interface.}}&lt;br /&gt;
&lt;br /&gt;
==Learning==&lt;br /&gt;
*''Как VTEPs будут находить друг друга?''&lt;br /&gt;
&lt;br /&gt;
Есть 2 способа обнаружения:&lt;br /&gt;
*data plane learning [like ethernet switch = L2 learning]&lt;br /&gt;
*control plane learning&lt;br /&gt;
&lt;br /&gt;
*''Как будет обрабатываться BUM traffic [broadcast, unknown unicast, multicast]:''&lt;br /&gt;
'''Multicast''' - common solution, когда каждому VNI приравнивается какая-то multicast group. На underlay сети должен быть развернут mcast. :) [для лабы достаточно просто добавить pim на iface и назначить anycast RP].&lt;br /&gt;
&lt;br /&gt;
VTEP знает какой VNI (mcast group) у него =&amp;gt; шлет igmp-join, чтобы подписаться в домен этого VNI. Когда какой-то VTEP шлет пакет с dest mcast, остальные VTEP его получают.&lt;br /&gt;
&lt;br /&gt;
Когда VTEP должен отправить BUM traffic, он шлет его с dest ip = mcast address.&lt;br /&gt;
&lt;br /&gt;
===Data plane Learning [L2 learning | Flooding learning]===&lt;br /&gt;
Когда VTEP получает пакет, он записывает в fw table:&lt;br /&gt;
*IP-source VTEP&lt;br /&gt;
*MAC VM&lt;br /&gt;
*VNI&lt;br /&gt;
Когда приходит пакет с назначением к этой VM в этом же VNI, то VTEP уже будет знать что делать.&lt;br /&gt;
&lt;br /&gt;
Если dest mac - не известен, то VTEP начинает флудить, вдруг кто другой знает такой адрес. Но чтобы уменьшить флуд, каждому VNI будет соответствовать своя multicast группа. И флуд будет распространен только в рамках этой группы.&lt;br /&gt;
&lt;br /&gt;
Пример: 2 VM на разных хостах.&lt;br /&gt;
&lt;br /&gt;
VNI 100 = mcast group: 239.1.1.100.&lt;br /&gt;
&lt;br /&gt;
#VM1 шлет arp-request к VM2 (who has 192.168.0.11?)&lt;br /&gt;
#VTEP1 инкапсулирует в arp-request в mcast packet и шлет пакет к mcast group 239.1.1.100.&lt;br /&gt;
#Все VTEP в группе 239.1.1.100 получают пакет, декапсулируют его проверяет VNI. Если совпадает, то шлет arp в VXLAN сегмент, если не совпадает, то дропает пакет. При этом локальный VTEP также добавляет инфу: IP VTEP1 &amp;lt;&amp;gt; MAC VM1 в свою локальную VXLAN table.&lt;br /&gt;
#VM2 получила arp и ответила на него, раскрыв свой MAC.&lt;br /&gt;
#VTEP2 инкапсулировала ответ и передала его к VTEP1.&lt;br /&gt;
#VTEP1 получила arp-response, декапсулировала и отдала его VM1. И еще записала в VXLAN table IP VTEP2 &amp;lt;&amp;gt; MAC VM2.&lt;br /&gt;
#Далее VM1 и VM2 общаются via unicast.&lt;br /&gt;
&lt;br /&gt;
Можно для нескольких VNI назначать одну группу. VTEP все-равно при передаче пакета проверяет VNI, а флуд при этом все-равно уменьшится.&lt;br /&gt;
&lt;br /&gt;
Подходит только для девайсов, находящихся в одном L2 домене - это главный минус такой системы.&lt;br /&gt;
&lt;br /&gt;
Кстати, VTEP не поддерживают аутентификацию, поэтому злоумышленник запросто может вторгнуться в ваш домен. Поэтому рекомендовано все-же использовать control plane learning.&lt;br /&gt;
&lt;br /&gt;
===Control plane learning [BGP-EVPN]===&lt;br /&gt;
Подразумевается, что switches learning делается до того, как начинается процесс передачи трафика. Работает аналогично протоколам маршрутизации.&lt;br /&gt;
&lt;br /&gt;
Свитчи пирятся по BGP и делятся своими префиксами. Для обмена используется evpn family. &lt;br /&gt;
&lt;br /&gt;
Некоторые свитчи будут иметь VTEPs и понятно, что по BGP проанонсятся их адреса.&lt;br /&gt;
&lt;br /&gt;
В control plane learning и VTEP появляется &amp;quot;аутентификация&amp;quot;. Когда адреса VTP анонсятся по BGP, они также заносятся в white list. Когда кто-то левый захочет приконнектиться - он не сможет этого сделать до тех пор, пока он не появится в white-list.&lt;br /&gt;
&lt;br /&gt;
VM MAC добавляются в процесс BGP. Соответственно, когда одна VM передает другой фрейм, роутинг к нужному хосту происходит на основании BGP. {это все подробно описано в EVPN}&lt;br /&gt;
&lt;br /&gt;
При использовании control plane learning - появляется и arp suppression. VM посылает ARP-req, который доходит до свитча. А свитч уже по BGP знает соответствие IP&amp;lt;&amp;gt;mac, и отдает mac удаленной VM.&lt;br /&gt;
&lt;br /&gt;
Для BUM трафика советуют также использовать Multicast, как хорошо масштабируемый.&lt;br /&gt;
&lt;br /&gt;
==VXLAN Routing==&lt;br /&gt;
Заставляем общаться разные VNI при помощи L3 gateway.&lt;br /&gt;
&lt;br /&gt;
L3 gateway можно делать как на LEAF, так и на SPINE.&lt;br /&gt;
&lt;br /&gt;
Могут использоваться: L2VNI, L3VNI.&lt;br /&gt;
&lt;br /&gt;
'''L2VNI''': для бриджей. То есть когда трафик остается внутри одного LAN-сегмента.&lt;br /&gt;
&lt;br /&gt;
'''L3VNI''': для роутинга. То есть когда трафик должен выйти за переделы LAN. L3VNI опциональны, но если хотите роутить на локальном свитче - придется воспользоваться.&lt;br /&gt;
&lt;br /&gt;
VTEPs должны знать только про локальные L2VNI, которые они локально обслуживают. С другой стороны ВСЕ VTEPs должны знать обо всех L3VNI, что называется '''anycast gateway'''.&lt;br /&gt;
&lt;br /&gt;
В этом случает каждый свитч - это GW в VNI [10.1.1.1]. На соседнем физическом свитче с тем же VNI настраивается такой же адрес шлюза [10.1.1.1]. И все свитчи в этом VNI будут иметь одинаковый virt mac-add для шлюза. Это приемущество по сравнению с VRRP/HSRP в том, что: не нужны какие-то таймеры или hello-massages для синхронизации между двумя свитчами. &lt;br /&gt;
&lt;br /&gt;
То есть для одного VNI, все VM, которые ему принадлежат - имеют один и тот же шлюз! Все зависимости от того к какому свитчу физически включен сервер.&lt;br /&gt;
&lt;br /&gt;
Это способствует быть VM - мобильной и перемещаться на другие сервачки! &lt;br /&gt;
&lt;br /&gt;
L3VNI связаны с VRF. То есть один VNI = один Customer = один RD+RT.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
На одном свитче будет настроен VRF с двумя irb интерфейсами: irb.100 [10.1.100.1], irb.101 [10.1.101.1]. Каждый будет обслуживать свой L2 домен: VTEP with VLAN100, a VNI1000 и VTEP with VLAN101, a VNI1001 соответственно.&lt;br /&gt;
&lt;br /&gt;
#QFX получает VXLAN пакет с outer dest ip. Декапсулирует его. &lt;br /&gt;
#QFX делает lookup dest mac-адреса, который = IRB VIP MAC.&lt;br /&gt;
#Делает L3 lookup внутри VRF для IP-dest.&lt;br /&gt;
#Далее делается ARP lookup для IP dest. Если есть mapping, то шлется в iface. Если нет, то выясняется куда слать by looking at the MAC table of the other VNI.&lt;br /&gt;
#QFX генерирует новый L2 header с dest-mac для dest server. Потом шлет инкапсулированный VXLAN к remote VTEP.&lt;br /&gt;
&lt;br /&gt;
=EVPN-VXLAN=&lt;br /&gt;
EVPN решает две проблемы:&lt;br /&gt;
#MAC learning control plane for overlay networks&lt;br /&gt;
#the need for workload mobility. Приложениям требуется L2 для взаимодействия друг с другом. Когда речь про app в разных DC, обычным вланом не обойтись.&lt;br /&gt;
&lt;br /&gt;
EVPN относится а BGP family. Он использует MP BGP для MAC learning. Благодаря этому роутеры/свитчи обрабатывают MAC как маршруты. Что позволяет использовать несколько path одновременно (без физического гашения избыточных портов).&lt;br /&gt;
&lt;br /&gt;
EVPN позволяет маршрутизировать не только MAC, но и ARP (IP + MAC). В дальнейшем ARP можно будет привязать и к VLAN-tag.&lt;br /&gt;
&lt;br /&gt;
По сравнению с VPLS - тут явно больше преимуществ для использования.&lt;br /&gt;
&lt;br /&gt;
Немного новой терминологии для EVPN в IP Fabric:&lt;br /&gt;
*Ethernet Tags = VLAN-ID&lt;br /&gt;
*MAC-VRF = Mac-table [в EVPN можно использовать import/export policies]&lt;br /&gt;
*export-policy = обычная политика, которая на все изученные местные (local) mac-addr навешивает target и отправляет route к remote sites.&lt;br /&gt;
*import-policy = обычная политика, которая по наличию правильного target кладет route в MAC-VFR.&lt;br /&gt;
*RD - uniq ID, который назначается на MAC-VRF. Уникальный в пределах IP Fabric.&lt;br /&gt;
*RT community - навешивается на routes посредством политик. На роутерах обозначает принадлежность к той или иной routing-table.&lt;br /&gt;
*EVPN services = включает в себя разные vlan-mapping options.&lt;br /&gt;
&lt;br /&gt;
==VLAN Services==&lt;br /&gt;
*'''VLAN-based service''' - один влан на весь EVPN. То есть все девайсы на всех sites работают в одном влане. Можно делать vlan-map vlan-id 1 на vlan-id 2. Когда, например на разных фабриках используются разные vlan-id.  It's ok. Плюс такого метода - ограничение broadcast. Но он не сильно масштабируем.&lt;br /&gt;
*'''VLAN bundle service''' - в одном EVPN много разных вланов. Полезно, когда услуга одна для нескольких арендаторов. У арендаторов используются разные вланы и никак по-другому. Плюсы: удобно для конфига. Но брадакст в таком домене будет влиять на ВСЕ вланы в нем.&lt;br /&gt;
*'''VLAN aware service''' - тут, кажется, используются bridge-domain внутри одного EVPN instance. Каждый со своим vlan-id внутри. То есть это дает возможность использовать в ENI (EVPN instance) несколько vlan-id, но которые не будут в одном broadcast домене. При флудах будут страдать конкретные вланы.&lt;br /&gt;
==Data Plane==&lt;br /&gt;
В качестве dataplane для EVPN из близкого к теме могут быть: MPLS, VXLAN. Есть еще и другие: PBB, STT, NVGRE..&lt;br /&gt;
&lt;br /&gt;
VXLAN encapsulation метод основан на VNIs, тогда ваши vlan-id 1, vlan-id 2 &amp;gt; vni-1, vni-2 &amp;gt; vxlan-1, vxlan-2 (с изученными Mac-addr) &amp;gt; в EVPN instance-1 с uniq RD.&lt;br /&gt;
&lt;br /&gt;
===BGP Route Types for EVPN===&lt;br /&gt;
:-'''Ethernet Auto-Discovery (AD) Route''': когда новый свитч вступает в EVPN, он пользуется этими роутами, чтобы объявить о себе.&lt;br /&gt;
   RD [8], _ESI [10], _ET [4], MPLS LBL [3]&lt;br /&gt;
&lt;br /&gt;
Передается flag, указывающий сколько линков можно использовать для передачи.&lt;br /&gt;
[[Файл:EVPN routes type1.png|мини|без]]&lt;br /&gt;
Например, у нас один сервер включен двумя ногами в разные свитчи. Когда LEAF4 получит auto-discovery route от LEAF1 и LEAF2, то route будет вставлен в таблицу, но также, LEAF4 будет знать, что до данного сервера у него '''два''' VXLAN, которые можно использовать.&lt;br /&gt;
&lt;br /&gt;
Это как раз различие в active/active links [flag set to 0] и single link [flag is set to 1].&lt;br /&gt;
&lt;br /&gt;
Auto-discovery process отрабатывает намного быстрее, так как при стандартном включении в свитч при падении линка (за которым были тысячи mac-addr) таблица будет чистить эти тысячи маков гораздо дольше, чем один route, который соответствует (ассоциирован с) линку.&lt;br /&gt;
&lt;br /&gt;
:-'''MAC/IP Advertisement Route''': MAC advertisement (также может передавать IP+MAC).&lt;br /&gt;
    RD [8], ESI [10], _ET [4],&lt;br /&gt;
    _MAC Addr Lenght [1], _MAC Addr [6],&lt;br /&gt;
    _IP Addr Lenght [1], _IP Addr [0|4|16]&lt;br /&gt;
    MPLS LBL1 [3]&lt;br /&gt;
    MPLS LBL2 [0|3]&lt;br /&gt;
&lt;br /&gt;
[[Файл:EVPN routes type2.png|мини|без]]&lt;br /&gt;
&lt;br /&gt;
LEAF4 изучил Mac server2. Начал передавать его другим sites EVPN с соответствующим community, которое навешивается согласно export policy.&lt;br /&gt;
&lt;br /&gt;
LEAF1 исходя из import policy решает принять ли маршрут. Если import policy отсутствует - это равнозначно discard.&lt;br /&gt;
&lt;br /&gt;
:-'''Inclusive Multicast Ethernet Tag Route''': BUM flooding.&lt;br /&gt;
    ET [4], IP Addr Lenght [1], Originating Router's IP Addr [4|16]&lt;br /&gt;
&lt;br /&gt;
В Juniper EVPN/VXLAN свитчи поддерживают ingress replication BUM. То есть свитч получил BUM, создал unicast копии этого трафик и отправил remote sites этого EVPN.&lt;br /&gt;
&lt;br /&gt;
Route информирует remote PE - как обработать BUM traffic и PMSI аттрибуты. Он определяет следует использовать PIM или PMSI и на какой dst adddr отправлять BUM traffic.  &lt;br /&gt;
&lt;br /&gt;
LEAF2 передает инфу, что он ждет и использует ingress replication и что LEAF1 должен использовать 4.4.4.4 как dst addr VXLAN пакетов, которые передают BUM.&lt;br /&gt;
&lt;br /&gt;
:-'''Ethernet Segment Route''': ES and DF election.&lt;br /&gt;
    _ESI [10], _IP Addr Lenght [1], _IP Addr [4|16]&lt;br /&gt;
&lt;br /&gt;
Решает проблемы:&lt;br /&gt;
*выбор designated forwarder (DF)&lt;br /&gt;
*split-horizont - preventing routing loops in the routing protocol. Not to advertise route to it's origin iface.&lt;br /&gt;
В EVPN есть стандартные правила split-horizont:&lt;br /&gt;
#Локальный свитч получил BUM от сервера. Свитч перешлет BUM только серверам в том же влане и remote sites EVPN instance. Но не обратно в интерфейс сервера, откуда он пришел.&lt;br /&gt;
#Свитч получи BUM от remote site. Свитч отправит BUM локальным серверам. Но не будет передавать его другим remote sites.&lt;br /&gt;
&lt;br /&gt;
При использовании active/active у нас могут возникнуть проблемы и петли все-таки могут возникнуть.&lt;br /&gt;
&lt;br /&gt;
Как избавиться от этого?&lt;br /&gt;
&lt;br /&gt;
Для одного EVPN instance выбрать одного DF для EVPN для передачи BUM traffic. Все остальные будут дропать BUM.&lt;br /&gt;
&lt;br /&gt;
:-'''IP Prefix Route''': IP route advertisement&lt;br /&gt;
Обычно можно увидеть при DC interconnect.&lt;br /&gt;
&lt;br /&gt;
LEAF1 получил трафик от Server 1. Инкапсулировал Eth в VXLAN и отправил на EDGE router DC1 (GW for LEAF1 with irb iface). &lt;br /&gt;
&lt;br /&gt;
EDGE снимет Eth header, и IP пакет смаршрутизирует согласно ip routing table.&lt;br /&gt;
&lt;br /&gt;
В таблице будет route type 5, который был получен от remote PE DC2. EDGE засунет IP в VXLAN к DC2.&lt;br /&gt;
&lt;br /&gt;
EDGE DC2 снимет VXLAN header, смаршрутизирует ip пакет. Засунет его в Eth заголовок с dst MAC Server 2. Отправит фрейм.&lt;br /&gt;
&lt;br /&gt;
===Distributed Layer 3 Gateway===&lt;br /&gt;
[[Файл:EVPN gateway.png|мини|без]]&lt;br /&gt;
&lt;br /&gt;
На SPINE1 и SPINE2 настроен одинаковый Virtual ip gateway address 10.0.1.254 и одинаковый Virtual MAC 00:01:8d:00:01:02. &lt;br /&gt;
&lt;br /&gt;
SPINE1 и SPINE2 передают в EVPN type 1 auto-discovery и type 2 Mac+ip learning. &lt;br /&gt;
&lt;br /&gt;
LEAF1 получит равнозначные по стоимости маршруты к одному MAC в том же сегменте. И начнет балансить трафик между ними.&lt;br /&gt;
&lt;br /&gt;
==Design==&lt;br /&gt;
Как это все ляжет на сеть?&lt;br /&gt;
&lt;br /&gt;
Серверы включены в LEAF в своих вланах. &lt;br /&gt;
&lt;br /&gt;
VLAN связаны с VXLAN VTEP на портах свитчей.&lt;br /&gt;
&lt;br /&gt;
VTEP сопоставляются в соответствующие EVPN (которые делают L2 связность для VTEP).&lt;br /&gt;
&lt;br /&gt;
Как говорили выше: можно сопоставлять несколько VTEP одному EVPN instance (c one-to-one mapping или many-to-one mapping).&lt;br /&gt;
&lt;br /&gt;
=Controllers=&lt;br /&gt;
Речь про SDN контроллеры&lt;br /&gt;
=Дополнительная информация=&lt;br /&gt;
*[[EVPN]]&lt;br /&gt;
*[[Traffic engineering]]&lt;br /&gt;
*[[Глава 1. Основы MPLS и VPN]]&lt;br /&gt;
*[[Глава 2. Label Distribution Protocols (RSVP, LDP)]]&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=DC&amp;diff=2077</id>
		<title>DC</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=DC&amp;diff=2077"/>
		<updated>2021-12-25T19:13:21Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: /* VXLAN Routing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#description2:Overlay Networks. Fabric Design. IP Fabrics. VXLAN. EVPN-VXLAN. BGP Route Types for EVPN. Distributed Layer 3 Gateway. Информация для подготовки к экзаменам Juniper.}}&lt;br /&gt;
=Overlay Networks=&lt;br /&gt;
Разделяют 2 вида сетей: overlay и underlay.&lt;br /&gt;
&lt;br /&gt;
Underlay - физическая IP сеть. Это база (транспорт) поверх которого уже строится overlay netw.&lt;br /&gt;
&lt;br /&gt;
Примеры underlay: MPLS, IP-сеть построенная на IGP/EGP.&lt;br /&gt;
&lt;br /&gt;
Также в underlay входят bare metal servers (или могу ошибаться и это не так). Подразумевается, что underlay - это прям железо-железо в голом виде.&lt;br /&gt;
&lt;br /&gt;
Overlay - это наложенная сеть на underlay. Виртуальные свитчи, серверы и другие VM соединены virt logical links (VTEPs - virtual tunnel endpoints).&lt;br /&gt;
&lt;br /&gt;
*''host machine'' - сервер, на котором запущен hypervisor. &lt;br /&gt;
*''guest machine'' - каждая VM.&lt;br /&gt;
Hypervisor предоставляет OS с virt платформой для guest и далее управляет работой guest OS. Несколько разных guest OS будут делать hardware ресурсы сервера.&lt;br /&gt;
&lt;br /&gt;
VXLAN - overlay technology, которая строит virt туннели на основе IP/MPLS netw (VTEPs)&lt;br /&gt;
&lt;br /&gt;
VM на одном хосте будут коммуницировать между собой через virt switch - L2.&lt;br /&gt;
VM на разных хостах будут коммуницировать между собой через VTEP - L3. То есть прибегать к инкапсуляции L2 в L3 и передаче трафика через underlay сеть.&lt;br /&gt;
&lt;br /&gt;
VTEP - располагаются на hypervisor или есть брать сервера, включенные с обычные access switches, то на свитчах тоже можно создавать VTEP. VTEP - туннель между хостами &lt;br /&gt;
VTEP имеет 2 iface: &lt;br /&gt;
*switching interface - в сторону VM&lt;br /&gt;
*IP interface - в сторону IP сети (L3 netw)&lt;br /&gt;
&lt;br /&gt;
Для инкапсуляции используется обычно VXLAN. О нем ниже.&lt;br /&gt;
&lt;br /&gt;
Положительные особенности overlay network (наложенных сетей):&lt;br /&gt;
# Отделение сети от физического оборудования позволяет сетям дата-центров быть развернутыми за считанные секунды.&lt;br /&gt;
# Поддержка L2 и L3 между VM и серверами.&lt;br /&gt;
# В отличие от стандартной сети поддерживает до 16,4 млн &amp;quot;заказчиков&amp;quot; (вланов).&lt;br /&gt;
 &lt;br /&gt;
Чем приходится платить за использование overlay network:&lt;br /&gt;
:- virtual tunnel endpoints (VTEPs) ипользует MAC и route. В отличие от традиционной модели, где каждая VM и каждый сервер использует MAC и route. В overlay трафик от VM и сервером инкапсулируется между VTEP. mac и route каждого сервера теперь не виден для оборудования overlay сети. mac и route теперь перенесены с физического уровня на уровень hypervisor.&lt;br /&gt;
&lt;br /&gt;
=Bare metal server=&lt;br /&gt;
Редко в каких сетях получится найти полностью виртуализированую сеть. Какая-то часть серверов все-равно останется железной (в основном из-за производительности).&lt;br /&gt;
&lt;br /&gt;
Как не бросить те самые железные сервачки и сохранить с ними сетевую связность?&lt;br /&gt;
&lt;br /&gt;
Один из методов: соединить VTEP с физическим access switch.&lt;br /&gt;
&lt;br /&gt;
Каждый гипервизор имеет VTEP. VTEP передает инкапсулированный трафик data plane между VM. Также VTEP делает mac-learning, предоставляет новые virt netw и другие изменения конфигурации.&lt;br /&gt;
&lt;br /&gt;
На железных серверах нет VTEP. Чтобы железный сервер включить в overlay netw архитектуру, нужно чтобы кто-то инкапсулировал трафик от сервера и делал mac-learning. Пусть это делает обычный access-switch от имени сервера. Сервер при этом просто думает, что посылает от себя трафик дальше в сеть.&lt;br /&gt;
&lt;br /&gt;
=Fabric Design=&lt;br /&gt;
*'''Traditional – MC-LAG (multichassis link aggregation group)'''&lt;br /&gt;
[[Файл:MC-LAG.png|мини|без]]&lt;br /&gt;
*'''Virtual Chassis'''&lt;br /&gt;
[[Файл:VC 1.png|мини|слева|top-of-rack topology]] &lt;br /&gt;
[[Файл:VC 2.png|мини|центр|end-of-row topology]]&lt;br /&gt;
&lt;br /&gt;
*'''Virtual Chassis Fabric'''&lt;br /&gt;
[[Файл:VC_fabric_1.png|мини|слева|top-of-rack topology]]&lt;br /&gt;
[[Файл:VC fabric_2.png|мини|центр|end-of-row topology]].&lt;br /&gt;
Большое приемущество в том, что между каждыми двумя host в фабрике есть только 2 hops. В отличие от VC, где число hops может достигать до 9.&lt;br /&gt;
&lt;br /&gt;
Limitations:&lt;br /&gt;
:-Virtual Chassis = 10 members&lt;br /&gt;
:-Virtual Chassis Fabric = 20 members [2-4 spine + 16-18 leaf]&lt;br /&gt;
&lt;br /&gt;
Master + backup используют один и тот же MAC + IP для GW.&lt;br /&gt;
&lt;br /&gt;
Можно легко вставлять/вытаскивать членов VC. На них автоматически будет сделан upgrade софта если нужно, подъедет конфиг, новый член будет назначен linecard.&lt;br /&gt;
&lt;br /&gt;
В VC для вычисления кратчайшего пути используется Dejkstra и путь выбирается один.&lt;br /&gt;
&lt;br /&gt;
В VC fabric VCCP отвчечает за эту процедуру и при возникновении нескольких равнозначных путей трафик балансируется. &lt;br /&gt;
&lt;br /&gt;
Virtual Chassis Fabric works really well for a top-of-rack based solution, but for end-of-row it becomes a little more problematic.&lt;br /&gt;
*'''Junos Fusion'''&lt;br /&gt;
[[Файл:JF.png|мини|без|top-of-row topology]]&lt;br /&gt;
&lt;br /&gt;
*'''IP CLOS Fabrics'''&lt;br /&gt;
[[Файл:CLOS.png|мини|без|finely grained failure domains]]&lt;br /&gt;
&lt;br /&gt;
=IP Fabrics=&lt;br /&gt;
Самое важное условие для IP Fabric: VTEP должны соединяться по L3.&lt;br /&gt;
&lt;br /&gt;
Clos придумал распределенную топологию для L3, при которой возможно достаточно хорошее масштабирование сети. В такой сети есть разделение на уровни: ingress, middle, egress.&lt;br /&gt;
&lt;br /&gt;
На основе CLOS произошла топология spine anf leaf, которую иногда называют сложенной CLOS сетью. То ест тут ingress и egress уровни сложены друг на друга (если можно так выразиться).&lt;br /&gt;
&lt;br /&gt;
Spine - это L3 свитчи.&lt;br /&gt;
&lt;br /&gt;
Leaf - это top-of-the-rack свитчи, который связывают сервер и VTEP.&lt;br /&gt;
&lt;br /&gt;
Масштабируемость определяется двумя параметрами: &amp;quot;толщиной&amp;quot; spine, коэффициентов переподключенийleaf светчей.&lt;br /&gt;
&lt;br /&gt;
Spine L3 свитчи можно собирать в кластер, а можно и нет. Причем говорится про кластре, в котором будут и SPINE и LEAF, все вместе.&lt;br /&gt;
&lt;br /&gt;
Если я правильно поняла, то обычно, когда требуется особо большая масштабируемость сети, то VChassis не собирают.&lt;br /&gt;
&lt;br /&gt;
При фабрике без VChassis емкость рассчитывается как умножение кол-во портов под серверы на кол-во LEAF, используемых на SPINE.&lt;br /&gt;
&lt;br /&gt;
Пример: &lt;br /&gt;
 При использовании такого оборудования:&lt;br /&gt;
 SPINE = QFX5100-24Q ['''32''' x 40GbE]&lt;br /&gt;
 LEAF = QFX5100-96S ['''96''' x 10G + 8 x 40GbE]&lt;br /&gt;
 получаем фабрику размерностью = (32*96) x 10GbE = 3072 x 10GbE и oversubscription ratio 3:1&lt;br /&gt;
&lt;br /&gt;
==Control Plane==&lt;br /&gt;
Для фабрик с VChassis беспокоиться о Control Plane не приходится. Она прост работает. Но если требуется более масштабируемся сеть, то придется отойти от VChassis и подумать о ControlPlane.&lt;br /&gt;
&lt;br /&gt;
В фабрике каждому LEAF потребуется отправлять и получать маршрутную инфу вместе с остальными LEAF.&lt;br /&gt;
&lt;br /&gt;
В той или иной степени для ControlPlane фабрики могут подойти следующие протоколы: BGP, OSPF, ISIS. Сравним их по разным параметрам:&lt;br /&gt;
&lt;br /&gt;
'''Scale + Advertise Prefixes:''' Adveritse prefixes - у всех протоколов - норм, но OSFP и ISIS флудят префиксами. Чем больше префиксов в сети, тем больше флуда. Для уменьшения флуда можно и нужно в данном случае разбивать сегменты на area. Но при этом утратятся возможности CSPF. При этом BGP специально был придуман для работы с большим кол-вом префиксов. В плане масштабируемости он значительно выигрывает!&lt;br /&gt;
&lt;br /&gt;
'''Traffic engineering + traffic tagging:''' иногда нужно управлять трафиком в фабриках, например, чтобы пустить его в обход какого-то SPINE. Тут понятно, что OSPF и ISIS сильно проигрывают. В отличие от них у BGP есть дофига атрибутов, которыми можно управлять трафиком.&lt;br /&gt;
&lt;br /&gt;
'''Multivendor stability:''' Вроде и OSPF и ISIS неплохо себя должны вести, но кто знает, кто проверял. Гораздо чаще разные компании, использующие разное оборудование настраивают взаимодействие между собой именно посредством BGP. Так что именно BGP можно считать самым неприхотливым в работе в разными вендорами.&lt;br /&gt;
&lt;br /&gt;
Ну в итоге для IP Fabric самый адекватный протокол - '''BGP'''.&lt;br /&gt;
&lt;br /&gt;
==BGP Design==&lt;br /&gt;
*Using '''EBGP''' in an IP fabric: каждому свитчу свою AS. Каждый LEAF пирится с каждым SPINE. Тут все просто и понятно и красиво. И также с помощью LPF и AS-PATH можем спокойно рулить трафиком. Защита от петель, напомню в том, что при отправке префикса проверяется AS-path. Префикс не отправляется пиру, если в AS-path есть AS пира.&lt;br /&gt;
[[Файл:Ebgp-1.png|мини|слева|top-of-the-rack]]&lt;br /&gt;
[[Файл:Ebgp_2.png|мини|без|end-of-the-rack]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Using '''IBGP''' in an IP fabric: все свитчи в одной AS. Для получения полной маршрутной информации - full mesh. Ну или более разумно использовать route reflector (или conederation - реже). RR втискиваем в уровень SPINE. Делаем пару RR, для резервирования. Все нормально НО! при таком раскладе не выйдет делать балансировку (использовать multipath), т.к. RR выбирает и отдает своим пирам только лучший маршрут. Для восстановления справедливости потребуется заморочиться с AddPath на RR (draft-ietf-idr-add-paths). Плюсом IBGP считается еще защита от петель: имеется ввиду, что IBGP пиры при любом раскладе не будут флудить префиксами.&lt;br /&gt;
[[Файл:Ibgp_1.png|мини|слева|top-of-the-rack]]&lt;br /&gt;
[[Файл:Ibgp_2.png|мини|без|end-of-the-rack]].&lt;br /&gt;
&lt;br /&gt;
[[Файл:IBGP-eBGP CLOS.png|750px|без]]&lt;br /&gt;
ECMP - equal-cost multi-path - технология, когда один поток (один source + один dest) передается между двумя равнозначными линками. Подразумевается включение обычной балансировки, то есть:&lt;br /&gt;
 protocols {&lt;br /&gt;
    bgp {&lt;br /&gt;
        group CLOS {&lt;br /&gt;
            ...&lt;br /&gt;
            multipath multiple-as;&lt;br /&gt;
&lt;br /&gt;
 policy-options {&lt;br /&gt;
    policy-statement PFE-LB {&lt;br /&gt;
        then {&lt;br /&gt;
            load-balance per-packet;&lt;br /&gt;
&lt;br /&gt;
 routing-options {&lt;br /&gt;
    forwarding-table {&lt;br /&gt;
        export PFE-LB;&lt;br /&gt;
&lt;br /&gt;
Хорошей практикой для IP Fabric также считается использование следующих фич:&lt;br /&gt;
 protocols {&lt;br /&gt;
    bgp {&lt;br /&gt;
        log-updown;&lt;br /&gt;
        graceful-restart;&lt;br /&gt;
        group CLOS {&lt;br /&gt;
            mtu-discovery;&lt;br /&gt;
            bfd-liveness-detection { &lt;br /&gt;
                minimum-interval 350;&lt;br /&gt;
                multiplier 3;&lt;br /&gt;
                session-mode single-hop;&lt;br /&gt;
Подробно на каждой из них в этой главе останавливаться не буду.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
Для того, чтобы построить IP Fabric с BGP, придерживайтесь следующих требований:&lt;br /&gt;
*Base IP prefix. Один пул адресов для служебных целей (p2p, loopback, ...). Лучше сразу прикинуть размеры фабрики и выделить достаточный пул адресов.&lt;br /&gt;
*P2P network. Экономно и удобно использовать /31.&lt;br /&gt;
*P2P addresses. Удобно, когда при построении фабрики придерживаются одного принципа назначение ip. Первый - не spine, второй - на leaf.&lt;br /&gt;
*Loopback. Выделить из большого пула. Лучше использовать loopback, это облегчает диагностику.&lt;br /&gt;
*Server facing network. Сеть для  сервачков. Leaf выступает как шлюз. Все зависит от масштабов фабрики, но понятно, что будет удобно использовать, например: /24 на один leaf, в ней работают только сервера, включенные к этому leaf. В фабрике 8 leaf, соответственно можно выделить 8*/24 = /21 сеть на фабрику. Подразумевается, что server facing netw и base ip netw - разные.&lt;br /&gt;
*AS num. Для каждого свитча (SPINE или LEAF) отдельная AS num - для работы EBGP. Выбор использовать 32-bit/16-bit. '''16-bit''': диапазон приватных: 64512 - 65535 то есть 1023 шт, то есть максимум 1023 свитчей в фабрике. Если этого мало, то можно переходить либо в public диапазон, либо на 32-bit AS num. &lt;br /&gt;
*BGP export. LEAF передает свой loopback и server facing netw.&lt;br /&gt;
*BGP import. Разрешаем только Base IP prefix и Server facing network.&lt;br /&gt;
*ECMP. Включаем load balancing на SPINE и LEAF.&lt;br /&gt;
&lt;br /&gt;
==Edge connect==&lt;br /&gt;
Речь про связность с внешним миром и фабриками в других локациях, если такие есть.&lt;br /&gt;
&lt;br /&gt;
В идеальном мире каждый дата-центр с IP Fabric должен:&lt;br /&gt;
*на всех фабриках иметь одинаковую структуру и даже распределение AS. &lt;br /&gt;
*иметь 2 edge роутера с уникальными AS num.&lt;br /&gt;
*быть подключенным к двум разным ISP.&lt;br /&gt;
*быть подключенным в внутренней MPLS сети.&lt;br /&gt;
&lt;br /&gt;
Одинаковые AS num внутри фабрик разных дата-центров могут немного вводить в смятение. Можно с edge роутеров просто анонсировать агрегат своей фабрики.&lt;br /&gt;
&lt;br /&gt;
Для ISP подключения: edge роутер к IP Fabric передает default, к ISP передает агрегаты фабрик. Все остальное - reject. От ISP на Edge лучше получать full view.&lt;br /&gt;
&lt;br /&gt;
=VXLAN=&lt;br /&gt;
Virtual Extensible LAN protocol (VXLAN) инкапсулирует L2 Ethernet frame в L3 UDP packets.&lt;br /&gt;
*Позволяет использовать бОльшее кол-во вланов.&lt;br /&gt;
*Пригоден для огромных сетей облаков и ДЦ с большим кол-вом клиентов.&lt;br /&gt;
*Можно мигрировать VM через туннелирование трафика в L3, даже если VM включены в разные L2-домены. Это позволяет использовать ресурсы сети не учитывать границы L2. Также использование VXLAN убирает необходимость создавать огромные (в том числе по географии) L2-домены.&lt;br /&gt;
*Использование VXLAN дает возможность отказаться от STP и использовать более надежные и развитые протоколы маршрутизации для быстрой сходимости сети. Отсутствие STP дает возможность использовать полную пропускную способность сети (нет заблокированных портов). &lt;br /&gt;
*Использование L3 между L2-доменами дает возможность эффективнее балансировать трафик и опять же использовать максимально возможную пропускную способность.&lt;br /&gt;
&lt;br /&gt;
MX series и EX9200: поддерживают до 32 000 VXLAN, 32 000 multicast groups, 8 000 VTEP (virtual tunnel endpoint). Это позволяет использовать MX для очень больших сетей.&lt;br /&gt;
&lt;br /&gt;
QFX10000 поддерживают до 4000 VXLANs, 2000 VTEPs.&lt;br /&gt;
&lt;br /&gt;
QFX5100, QFX5110, QFX5200, QFX5210, EX4600 поддерживают до 4000 VXLANs, до 2000 remote VTEPs.&lt;br /&gt;
&lt;br /&gt;
EX4300-48MP поддреживают до 4000 VXLANs.&lt;br /&gt;
&lt;br /&gt;
Более подробно можно узнать на сайте производителя.&lt;br /&gt;
&lt;br /&gt;
==Принцип работы==&lt;br /&gt;
VXLAN инкапсулирует Ethernet-frame (L2) в UDP-пакет (L3). Из-за такой инкапсуляции VXLAN считают overlay технологией.&lt;br /&gt;
&lt;br /&gt;
Свитчи или роутеры, которые используют VXLAN называются VTEP (virtual tunnel endpoints). &lt;br /&gt;
&lt;br /&gt;
VTEPs инкапсулируют и декапсулирует VXLAN-трафик на входе и выходе из VXLAN-туннеля. &lt;br /&gt;
&lt;br /&gt;
В случае, когда hardware сервер включается напрямую в Juniper и сам не умеет создавать VXLAN туннели: в качестве VTEP выступают свитчи или маршрутизаторы Juniper.&lt;br /&gt;
&lt;br /&gt;
В случае с VM (virtual machine), гипервизор будет участвовать в роли VTEP, сам создавать VXLAN tunnel, а Juniper будет транзитным девайсом.&lt;br /&gt;
&lt;br /&gt;
[[Файл:VXLAN пакет.png|600px|центр]]&lt;br /&gt;
Во время инкапсуляции VTEP добавляет к фрейму поля:&lt;br /&gt;
:- outer MAC dst MAC (mac endpoint VTEP)&lt;br /&gt;
:- outer MAC src MAC (mac source VTEP)&lt;br /&gt;
:- outer dst IP&lt;br /&gt;
:- outer src IP&lt;br /&gt;
:- outer UDP header&lt;br /&gt;
:- VXLAN header: 24-битное поле VNI (VXLAN netw indentifier), уникально идентифицирующее VXLAN. Похоже на VLANID, только побольше.&lt;br /&gt;
&lt;br /&gt;
Передаем frame от VM1 к Server1.&lt;br /&gt;
[[Файл:VTEP аппаратный и програмный.png|600px|центр]]&lt;br /&gt;
#VTEP3 получает Eth-frame от VM1 (с dst addr Server1).&lt;br /&gt;
#В Forwarding Table уже есть изученный mac-add Server1 + инфа об исх интерфейсе (VTEP)&lt;br /&gt;
#VTEP3 добавляет заголовок VXLAN, который содержит VNI. VTEP3 инкапсулирует Eth-frame в UDP-пакет (L3).&lt;br /&gt;
#VTE3 маршрутизирует пакет через underlay L3-сеть к VTEP1.&lt;br /&gt;
#VTEP1 делает деинкапсуляцию и отдает Eth-frame к Server1.&lt;br /&gt;
&lt;br /&gt;
VM и сервера при этом ничего не знают про VXLAN и протоколы на L3. Для серверов всё выглядит, как-будто они сидят в одном L2-домене.&lt;br /&gt;
&lt;br /&gt;
{{note|text=VXLAN добавляет 50-54 дополнительных bytes! В ответ потребуется увеличить MTU на underlay. А именно на интерфейсах, которые участвуют в VXLAN сети, а не на логическом src VTEP interface.}}&lt;br /&gt;
&lt;br /&gt;
==Learning==&lt;br /&gt;
*''Как VTEPs будут находить друг друга?''&lt;br /&gt;
&lt;br /&gt;
Есть 2 способа обнаружения:&lt;br /&gt;
*data plane learning [like ethernet switch = L2 learning]&lt;br /&gt;
*control plane learning&lt;br /&gt;
&lt;br /&gt;
*''Как будет обрабатываться BUM traffic [broadcast, unknown unicast, multicast]:''&lt;br /&gt;
'''Multicast''' - common solution, когда каждому VNI приравнивается какая-то multicast group. На underlay сети должен быть развернут mcast. :) [для лабы достаточно просто добавить pim на iface и назначить anycast RP].&lt;br /&gt;
&lt;br /&gt;
VTEP знает какой VNI (mcast group) у него =&amp;gt; шлет igmp-join, чтобы подписаться в домен этого VNI. Когда какой-то VTEP шлет пакет с dest mcast, остальные VTEP его получают.&lt;br /&gt;
&lt;br /&gt;
Когда VTEP должен отправить BUM traffic, он шлет его с dest ip = mcast address.&lt;br /&gt;
&lt;br /&gt;
===Data plane Learning [L2 learning | Flooding learning]===&lt;br /&gt;
Когда VTEP получает пакет, он записывает в fw table:&lt;br /&gt;
*IP-source VTEP&lt;br /&gt;
*MAC VM&lt;br /&gt;
*VNI&lt;br /&gt;
Когда приходит пакет с назначением к этой VM в этом же VNI, то VTEP уже будет знать что делать.&lt;br /&gt;
&lt;br /&gt;
Если dest mac - не известен, то VTEP начинает флудить, вдруг кто другой знает такой адрес. Но чтобы уменьшить флуд, каждому VNI будет соответствовать своя multicast группа. И флуд будет распространен только в рамках этой группы.&lt;br /&gt;
&lt;br /&gt;
Пример: 2 VM на разных хостах.&lt;br /&gt;
&lt;br /&gt;
VNI 100 = mcast group: 239.1.1.100.&lt;br /&gt;
&lt;br /&gt;
#VM1 шлет arp-request к VM2 (who has 192.168.0.11?)&lt;br /&gt;
#VTEP1 инкапсулирует в arp-request в mcast packet и шлет пакет к mcast group 239.1.1.100.&lt;br /&gt;
#Все VTEP в группе 239.1.1.100 получают пакет, деинкаспулируют его проверяет VNI. Если совпадает, то шлет arp в VXLAN сегмент, если не совпадает, то дропает пакет. При этом локальный VTEP также добавляет инфу: IP VTEP1 &amp;lt;&amp;gt; MAC VM1 в свою локальную VXLAN table.&lt;br /&gt;
#VM2 получила arp и ответила на него, раскрыв свой MAC.&lt;br /&gt;
#VTEP2 инкапсулировала ответ и передала его к VTEP1.&lt;br /&gt;
#VTEP1 получила arp-response, деинкапсулировала и отдала его VM1. И еще записала в VXLAN table IP VTEP2 &amp;lt;&amp;gt; MAC VM2.&lt;br /&gt;
#Далее VM1 и VM2 общаются via unicast.&lt;br /&gt;
&lt;br /&gt;
Можно для нескольких VNI назначать одну группу. VTEP все-равно при передаче пакета проверяет VNI, а флуд при этом все-равно уменьшится.&lt;br /&gt;
&lt;br /&gt;
Подходит только для девайсов, находящихся в одном L2 домене - это главный минус такой системы.&lt;br /&gt;
&lt;br /&gt;
Кстати, VTEP не поддерживают аутентификацию, поэтому злоумышленник запросто может вторгнуться в ваш домен. Поэтому рекомендовано все-же использовать control plane learning.&lt;br /&gt;
&lt;br /&gt;
===Control plane learning [BGP-EVPN]===&lt;br /&gt;
Подразумевается, что switches learning делается до того, как начинается процесс передачи трафика. Работает аналогично протоколам маршрутизации.&lt;br /&gt;
&lt;br /&gt;
Свитчи пирятся по BGP и делятся своими префиксами. Для обмена используется evpn family. &lt;br /&gt;
&lt;br /&gt;
Некоторые свитчи будут иметь VTEPs и понятно, что по BGP проанонсятся их адреса.&lt;br /&gt;
&lt;br /&gt;
В control plane learning и VTEP появляется &amp;quot;аутентификация&amp;quot;. Когда адреса VTP анонсятся по BGP, они также заносятся в white list. Когда кто-то левый захочет приконнектиться - он не сможет этого сделать до тех пор, пока он не появится в white-list.&lt;br /&gt;
&lt;br /&gt;
VM MAC добавляются в процесс BGP. Соответственно, когда одна VM передает другой фрейм, роутинг к нужному хосту происходит на основании BGP. {это все подробно описано в EVPN}&lt;br /&gt;
&lt;br /&gt;
При использовании control plane learning - появляется и arp suppression. VM посылает ARP-req, который доходит до свитча. А свитч уже по BGP знает соответствие IP&amp;lt;&amp;gt;mac, и отдает mac удаленной VM.&lt;br /&gt;
&lt;br /&gt;
Для BUM трафика советуют также использовать Multicast, как хорошо масштабируемый.&lt;br /&gt;
&lt;br /&gt;
==VXLAN Routing==&lt;br /&gt;
Заставляем общаться разные VNI при помощи L3 gateway.&lt;br /&gt;
&lt;br /&gt;
L3 gateway можно делать как на LEAF, так и на SPINE.&lt;br /&gt;
&lt;br /&gt;
Могут использоваться: L2VNI, L3VNI.&lt;br /&gt;
&lt;br /&gt;
'''L2VNI''': для бриджей. То есть когда трафик остается внутри одного LAN-сегмента.&lt;br /&gt;
&lt;br /&gt;
'''L3VNI''': для роутинга. То есть когда трафик должен выйти за переделы LAN. L3VNI опциональны, но если хотите роутить на локальном свитче - придется воспользоваться.&lt;br /&gt;
&lt;br /&gt;
VTEPs должны знать только про локальные L2VNI, которые они локально обслуживают. С другой стороны ВСЕ VTEPs должны знать обо всех L3VNI, что называется '''anycast gateway'''.&lt;br /&gt;
&lt;br /&gt;
В этом случает каждый свитч - это GW в VNI [10.1.1.1]. На соседнем физическом свитче с тем же VNI настраивается такой же адрес шлюза [10.1.1.1]. И все свитчи в этом VNI будут иметь одинаковый virt mac-add для шлюза. Это приемущество по сравнению с VRRP/HSRP в том, что: не нужны какие-то таймеры или hello-massages для синхронизации между двумя свитчами. &lt;br /&gt;
&lt;br /&gt;
То есть для одного VNI, все VM, которые ему принадлежат - имеют один и тот же шлюз! Все зависимости от того к какому свитчу физически включен сервер.&lt;br /&gt;
&lt;br /&gt;
Это способствует быть VM - мобильной и перемещаться на другие сервачки! &lt;br /&gt;
&lt;br /&gt;
L3VNI связаны с VRF. То есть один VNI = один Customer = один RD+RT.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
На одном свитче будет настроен VRF с двумя irb интерфейсами: irb.100 [10.1.100.1], irb.101 [10.1.101.1]. Каждый будет обслуживать свой L2 домен: VTEP with VLAN100, a VNI1000 и VTEP with VLAN101, a VNI1001 соответственно.&lt;br /&gt;
&lt;br /&gt;
#QFX получает VXLAN пакет с outer dest ip. Декапсулирует его. &lt;br /&gt;
#QFX делает lookup dest mac-адреса, который = IRB VIP MAC.&lt;br /&gt;
#Делает L3 lookup внутри VRF для IP-dest.&lt;br /&gt;
#Далее делается ARP lookup для IP dest. Если есть mapping, то шлется в iface. Если нет, то выясняется куда слать by looking at the MAC table of the other VNI.&lt;br /&gt;
#QFX генерирует новый L2 header с dest-mac для dest server. Потом шлет инкапсулированный VXLAN к remote VTEP.&lt;br /&gt;
&lt;br /&gt;
=EVPN-VXLAN=&lt;br /&gt;
EVPN решает две проблемы:&lt;br /&gt;
#MAC learning control plane for overlay networks&lt;br /&gt;
#the need for workload mobility. Приложениям требуется L2 для взаимодействия друг с другом. Когда речь про app в разных DC, обычным вланом не обойтись.&lt;br /&gt;
&lt;br /&gt;
EVPN относится а BGP family. Он использует MP BGP для MAC learning. Благодаря этому роутеры/свитчи обрабатывают MAC как маршруты. Что позволяет использовать несколько path одновременно (без физического гашения избыточных портов).&lt;br /&gt;
&lt;br /&gt;
EVPN позволяет маршрутизировать не только MAC, но и ARP (IP + MAC). В дальнейшем ARP можно будет привязать и к VLAN-tag.&lt;br /&gt;
&lt;br /&gt;
По сравнению с VPLS - тут явно больше преимуществ для использования.&lt;br /&gt;
&lt;br /&gt;
Немного новой терминологии для EVPN в IP Fabric:&lt;br /&gt;
*Ethernet Tags = VLAN-ID&lt;br /&gt;
*MAC-VRF = Mac-table [в EVPN можно использовать import/export policies]&lt;br /&gt;
*export-policy = обычная политика, которая на все изученные местные (local) mac-addr навешивает target и отправляет route к remote sites.&lt;br /&gt;
*import-policy = обычная политика, которая по наличию правильного target кладет route в MAC-VFR.&lt;br /&gt;
*RD - uniq ID, который назначается на MAC-VRF. Уникальный в пределах IP Fabric.&lt;br /&gt;
*RT community - навешивается на routes посредством политик. На роутерах обозначает принадлежность к той или иной routing-table.&lt;br /&gt;
*EVPN services = включает в себя разные vlan-mapping options.&lt;br /&gt;
&lt;br /&gt;
==VLAN Services==&lt;br /&gt;
*'''VLAN-based service''' - один влан на весь EVPN. То есть все девайсы на всех sites работают в одном влане. Можно делать vlan-map vlan-id 1 на vlan-id 2. Когда, например на разных фабриках используются разные vlan-id.  It's ok. Плюс такого метода - ограничение broadcast. Но он не сильно масштабируем.&lt;br /&gt;
*'''VLAN bundle service''' - в одном EVPN много разных вланов. Полезно, когда услуга одна для нескольких арендаторов. У арендаторов используются разные вланы и никак по-другому. Плюсы: удобно для конфига. Но брадакст в таком домене будет влиять на ВСЕ вланы в нем.&lt;br /&gt;
*'''VLAN aware service''' - тут, кажется, используются bridge-domain внутри одного EVPN instance. Каждый со своим vlan-id внутри. То есть это дает возможность использовать в ENI (EVPN instance) несколько vlan-id, но которые не будут в одном broadcast домене. При флудах будут страдать конкретные вланы.&lt;br /&gt;
==Data Plane==&lt;br /&gt;
В качестве dataplane для EVPN из близкого к теме могут быть: MPLS, VXLAN. Есть еще и другие: PBB, STT, NVGRE..&lt;br /&gt;
&lt;br /&gt;
VXLAN encapsulation метод основан на VNIs, тогда ваши vlan-id 1, vlan-id 2 &amp;gt; vni-1, vni-2 &amp;gt; vxlan-1, vxlan-2 (с изученными Mac-addr) &amp;gt; в EVPN instance-1 с uniq RD.&lt;br /&gt;
&lt;br /&gt;
===BGP Route Types for EVPN===&lt;br /&gt;
:-'''Ethernet Auto-Discovery (AD) Route''': когда новый свитч вступает в EVPN, он пользуется этими роутами, чтобы объявить о себе.&lt;br /&gt;
   RD [8], _ESI [10], _ET [4], MPLS LBL [3]&lt;br /&gt;
&lt;br /&gt;
Передается flag, указывающий сколько линков можно использовать для передачи.&lt;br /&gt;
[[Файл:EVPN routes type1.png|мини|без]]&lt;br /&gt;
Например, у нас один сервер включен двумя ногами в разные свитчи. Когда LEAF4 получит auto-discovery route от LEAF1 и LEAF2, то route будет вставлен в таблицу, но также, LEAF4 будет знать, что до данного сервера у него '''два''' VXLAN, которые можно использовать.&lt;br /&gt;
&lt;br /&gt;
Это как раз различие в active/active links [flag set to 0] и single link [flag is set to 1].&lt;br /&gt;
&lt;br /&gt;
Auto-discovery process отрабатывает намного быстрее, так как при стандартном включении в свитч при падении линка (за которым были тысячи mac-addr) таблица будет чистить эти тысячи маков гораздо дольше, чем один route, который соответствует (ассоциирован с) линку.&lt;br /&gt;
&lt;br /&gt;
:-'''MAC/IP Advertisement Route''': MAC advertisement (также может передавать IP+MAC).&lt;br /&gt;
    RD [8], ESI [10], _ET [4],&lt;br /&gt;
    _MAC Addr Lenght [1], _MAC Addr [6],&lt;br /&gt;
    _IP Addr Lenght [1], _IP Addr [0|4|16]&lt;br /&gt;
    MPLS LBL1 [3]&lt;br /&gt;
    MPLS LBL2 [0|3]&lt;br /&gt;
&lt;br /&gt;
[[Файл:EVPN routes type2.png|мини|без]]&lt;br /&gt;
&lt;br /&gt;
LEAF4 изучил Mac server2. Начал передавать его другим sites EVPN с соответствующим community, которое навешивается согласно export policy.&lt;br /&gt;
&lt;br /&gt;
LEAF1 исходя из import policy решает принять ли маршрут. Если import policy отсутствует - это равнозначно discard.&lt;br /&gt;
&lt;br /&gt;
:-'''Inclusive Multicast Ethernet Tag Route''': BUM flooding.&lt;br /&gt;
    ET [4], IP Addr Lenght [1], Originating Router's IP Addr [4|16]&lt;br /&gt;
&lt;br /&gt;
В Juniper EVPN/VXLAN свитчи поддерживают ingress replication BUM. То есть свитч получил BUM, создал unicast копии этого трафик и отправил remote sites этого EVPN.&lt;br /&gt;
&lt;br /&gt;
Route информирует remote PE - как обработать BUM traffic и PMSI аттрибуты. Он определяет следует использовать PIM или PMSI и на какой dst adddr отправлять BUM traffic.  &lt;br /&gt;
&lt;br /&gt;
LEAF2 передает инфу, что он ждет и использует ingress replication и что LEAF1 должен использовать 4.4.4.4 как dst addr VXLAN пакетов, которые передают BUM.&lt;br /&gt;
&lt;br /&gt;
:-'''Ethernet Segment Route''': ES and DF election.&lt;br /&gt;
    _ESI [10], _IP Addr Lenght [1], _IP Addr [4|16]&lt;br /&gt;
&lt;br /&gt;
Решает проблемы:&lt;br /&gt;
*выбор designated forwarder (DF)&lt;br /&gt;
*split-horizont - preventing routing loops in the routing protocol. Not to advertise route to it's origin iface.&lt;br /&gt;
В EVPN есть стандартные правила split-horizont:&lt;br /&gt;
#Локальный свитч получил BUM от сервера. Свитч перешлет BUM только серверам в том же влане и remote sites EVPN instance. Но не обратно в интерфейс сервера, откуда он пришел.&lt;br /&gt;
#Свитч получи BUM от remote site. Свитч отправит BUM локальным серверам. Но не будет передавать его другим remote sites.&lt;br /&gt;
&lt;br /&gt;
При использовании active/active у нас могут возникнуть проблемы и петли все-таки могут возникнуть.&lt;br /&gt;
&lt;br /&gt;
Как избавиться от этого?&lt;br /&gt;
&lt;br /&gt;
Для одного EVPN instance выбрать одного DF для EVPN для передачи BUM traffic. Все остальные будут дропать BUM.&lt;br /&gt;
&lt;br /&gt;
:-'''IP Prefix Route''': IP route advertisement&lt;br /&gt;
Обычно можно увидеть при DC interconnect.&lt;br /&gt;
&lt;br /&gt;
LEAF1 получил трафик от Server 1. Инкапсулировал Eth в VXLAN и отправил на EDGE router DC1 (GW for LEAF1 with irb iface). &lt;br /&gt;
&lt;br /&gt;
EDGE снимет Eth header, и IP пакет смаршрутизирует согласно ip routing table.&lt;br /&gt;
&lt;br /&gt;
В таблице будет route type 5, который был получен от remote PE DC2. EDGE засунет IP в VXLAN к DC2.&lt;br /&gt;
&lt;br /&gt;
EDGE DC2 снимет VXLAN header, смаршрутизирует ip пакет. Засунет его в Eth заголовок с dst MAC Server 2. Отправит фрейм.&lt;br /&gt;
&lt;br /&gt;
===Distributed Layer 3 Gateway===&lt;br /&gt;
[[Файл:EVPN gateway.png|мини|без]]&lt;br /&gt;
&lt;br /&gt;
На SPINE1 и SPINE2 настроен одинаковый Virtual ip gateway address 10.0.1.254 и одинаковый Virtual MAC 00:01:8d:00:01:02. &lt;br /&gt;
&lt;br /&gt;
SPINE1 и SPINE2 передают в EVPN type 1 auto-discovery и type 2 Mac+ip learning. &lt;br /&gt;
&lt;br /&gt;
LEAF1 получит равнозначные по стоимости маршруты к одному MAC в том же сегменте. И начнет балансить трафик между ними.&lt;br /&gt;
&lt;br /&gt;
==Design==&lt;br /&gt;
Как это все ляжет на сеть?&lt;br /&gt;
&lt;br /&gt;
Серверы включены в LEAF в своих вланах. &lt;br /&gt;
&lt;br /&gt;
VLAN связаны с VXLAN VTEP на портах свитчей.&lt;br /&gt;
&lt;br /&gt;
VTEP сопоставляются в соответствующие EVPN (которые делают L2 связность для VTEP).&lt;br /&gt;
&lt;br /&gt;
Как говорили выше: можно сопоставлять несколько VTEP одному EVPN instance (c one-to-one mapping или many-to-one mapping).&lt;br /&gt;
&lt;br /&gt;
=Controllers=&lt;br /&gt;
Речь про SDN контроллеры&lt;br /&gt;
=Дополнительная информация=&lt;br /&gt;
*[[EVPN]]&lt;br /&gt;
*[[Traffic engineering]]&lt;br /&gt;
*[[Глава 1. Основы MPLS и VPN]]&lt;br /&gt;
*[[Глава 2. Label Distribution Protocols (RSVP, LDP)]]&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=DC&amp;diff=2076</id>
		<title>DC</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=DC&amp;diff=2076"/>
		<updated>2021-12-25T19:13:05Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: /* VXLAN Routing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#description2:Overlay Networks. Fabric Design. IP Fabrics. VXLAN. EVPN-VXLAN. BGP Route Types for EVPN. Distributed Layer 3 Gateway. Информация для подготовки к экзаменам Juniper.}}&lt;br /&gt;
=Overlay Networks=&lt;br /&gt;
Разделяют 2 вида сетей: overlay и underlay.&lt;br /&gt;
&lt;br /&gt;
Underlay - физическая IP сеть. Это база (транспорт) поверх которого уже строится overlay netw.&lt;br /&gt;
&lt;br /&gt;
Примеры underlay: MPLS, IP-сеть построенная на IGP/EGP.&lt;br /&gt;
&lt;br /&gt;
Также в underlay входят bare metal servers (или могу ошибаться и это не так). Подразумевается, что underlay - это прям железо-железо в голом виде.&lt;br /&gt;
&lt;br /&gt;
Overlay - это наложенная сеть на underlay. Виртуальные свитчи, серверы и другие VM соединены virt logical links (VTEPs - virtual tunnel endpoints).&lt;br /&gt;
&lt;br /&gt;
*''host machine'' - сервер, на котором запущен hypervisor. &lt;br /&gt;
*''guest machine'' - каждая VM.&lt;br /&gt;
Hypervisor предоставляет OS с virt платформой для guest и далее управляет работой guest OS. Несколько разных guest OS будут делать hardware ресурсы сервера.&lt;br /&gt;
&lt;br /&gt;
VXLAN - overlay technology, которая строит virt туннели на основе IP/MPLS netw (VTEPs)&lt;br /&gt;
&lt;br /&gt;
VM на одном хосте будут коммуницировать между собой через virt switch - L2.&lt;br /&gt;
VM на разных хостах будут коммуницировать между собой через VTEP - L3. То есть прибегать к инкапсуляции L2 в L3 и передаче трафика через underlay сеть.&lt;br /&gt;
&lt;br /&gt;
VTEP - располагаются на hypervisor или есть брать сервера, включенные с обычные access switches, то на свитчах тоже можно создавать VTEP. VTEP - туннель между хостами &lt;br /&gt;
VTEP имеет 2 iface: &lt;br /&gt;
*switching interface - в сторону VM&lt;br /&gt;
*IP interface - в сторону IP сети (L3 netw)&lt;br /&gt;
&lt;br /&gt;
Для инкапсуляции используется обычно VXLAN. О нем ниже.&lt;br /&gt;
&lt;br /&gt;
Положительные особенности overlay network (наложенных сетей):&lt;br /&gt;
# Отделение сети от физического оборудования позволяет сетям дата-центров быть развернутыми за считанные секунды.&lt;br /&gt;
# Поддержка L2 и L3 между VM и серверами.&lt;br /&gt;
# В отличие от стандартной сети поддерживает до 16,4 млн &amp;quot;заказчиков&amp;quot; (вланов).&lt;br /&gt;
 &lt;br /&gt;
Чем приходится платить за использование overlay network:&lt;br /&gt;
:- virtual tunnel endpoints (VTEPs) ипользует MAC и route. В отличие от традиционной модели, где каждая VM и каждый сервер использует MAC и route. В overlay трафик от VM и сервером инкапсулируется между VTEP. mac и route каждого сервера теперь не виден для оборудования overlay сети. mac и route теперь перенесены с физического уровня на уровень hypervisor.&lt;br /&gt;
&lt;br /&gt;
=Bare metal server=&lt;br /&gt;
Редко в каких сетях получится найти полностью виртуализированую сеть. Какая-то часть серверов все-равно останется железной (в основном из-за производительности).&lt;br /&gt;
&lt;br /&gt;
Как не бросить те самые железные сервачки и сохранить с ними сетевую связность?&lt;br /&gt;
&lt;br /&gt;
Один из методов: соединить VTEP с физическим access switch.&lt;br /&gt;
&lt;br /&gt;
Каждый гипервизор имеет VTEP. VTEP передает инкапсулированный трафик data plane между VM. Также VTEP делает mac-learning, предоставляет новые virt netw и другие изменения конфигурации.&lt;br /&gt;
&lt;br /&gt;
На железных серверах нет VTEP. Чтобы железный сервер включить в overlay netw архитектуру, нужно чтобы кто-то инкапсулировал трафик от сервера и делал mac-learning. Пусть это делает обычный access-switch от имени сервера. Сервер при этом просто думает, что посылает от себя трафик дальше в сеть.&lt;br /&gt;
&lt;br /&gt;
=Fabric Design=&lt;br /&gt;
*'''Traditional – MC-LAG (multichassis link aggregation group)'''&lt;br /&gt;
[[Файл:MC-LAG.png|мини|без]]&lt;br /&gt;
*'''Virtual Chassis'''&lt;br /&gt;
[[Файл:VC 1.png|мини|слева|top-of-rack topology]] &lt;br /&gt;
[[Файл:VC 2.png|мини|центр|end-of-row topology]]&lt;br /&gt;
&lt;br /&gt;
*'''Virtual Chassis Fabric'''&lt;br /&gt;
[[Файл:VC_fabric_1.png|мини|слева|top-of-rack topology]]&lt;br /&gt;
[[Файл:VC fabric_2.png|мини|центр|end-of-row topology]].&lt;br /&gt;
Большое приемущество в том, что между каждыми двумя host в фабрике есть только 2 hops. В отличие от VC, где число hops может достигать до 9.&lt;br /&gt;
&lt;br /&gt;
Limitations:&lt;br /&gt;
:-Virtual Chassis = 10 members&lt;br /&gt;
:-Virtual Chassis Fabric = 20 members [2-4 spine + 16-18 leaf]&lt;br /&gt;
&lt;br /&gt;
Master + backup используют один и тот же MAC + IP для GW.&lt;br /&gt;
&lt;br /&gt;
Можно легко вставлять/вытаскивать членов VC. На них автоматически будет сделан upgrade софта если нужно, подъедет конфиг, новый член будет назначен linecard.&lt;br /&gt;
&lt;br /&gt;
В VC для вычисления кратчайшего пути используется Dejkstra и путь выбирается один.&lt;br /&gt;
&lt;br /&gt;
В VC fabric VCCP отвчечает за эту процедуру и при возникновении нескольких равнозначных путей трафик балансируется. &lt;br /&gt;
&lt;br /&gt;
Virtual Chassis Fabric works really well for a top-of-rack based solution, but for end-of-row it becomes a little more problematic.&lt;br /&gt;
*'''Junos Fusion'''&lt;br /&gt;
[[Файл:JF.png|мини|без|top-of-row topology]]&lt;br /&gt;
&lt;br /&gt;
*'''IP CLOS Fabrics'''&lt;br /&gt;
[[Файл:CLOS.png|мини|без|finely grained failure domains]]&lt;br /&gt;
&lt;br /&gt;
=IP Fabrics=&lt;br /&gt;
Самое важное условие для IP Fabric: VTEP должны соединяться по L3.&lt;br /&gt;
&lt;br /&gt;
Clos придумал распределенную топологию для L3, при которой возможно достаточно хорошее масштабирование сети. В такой сети есть разделение на уровни: ingress, middle, egress.&lt;br /&gt;
&lt;br /&gt;
На основе CLOS произошла топология spine anf leaf, которую иногда называют сложенной CLOS сетью. То ест тут ingress и egress уровни сложены друг на друга (если можно так выразиться).&lt;br /&gt;
&lt;br /&gt;
Spine - это L3 свитчи.&lt;br /&gt;
&lt;br /&gt;
Leaf - это top-of-the-rack свитчи, который связывают сервер и VTEP.&lt;br /&gt;
&lt;br /&gt;
Масштабируемость определяется двумя параметрами: &amp;quot;толщиной&amp;quot; spine, коэффициентов переподключенийleaf светчей.&lt;br /&gt;
&lt;br /&gt;
Spine L3 свитчи можно собирать в кластер, а можно и нет. Причем говорится про кластре, в котором будут и SPINE и LEAF, все вместе.&lt;br /&gt;
&lt;br /&gt;
Если я правильно поняла, то обычно, когда требуется особо большая масштабируемость сети, то VChassis не собирают.&lt;br /&gt;
&lt;br /&gt;
При фабрике без VChassis емкость рассчитывается как умножение кол-во портов под серверы на кол-во LEAF, используемых на SPINE.&lt;br /&gt;
&lt;br /&gt;
Пример: &lt;br /&gt;
 При использовании такого оборудования:&lt;br /&gt;
 SPINE = QFX5100-24Q ['''32''' x 40GbE]&lt;br /&gt;
 LEAF = QFX5100-96S ['''96''' x 10G + 8 x 40GbE]&lt;br /&gt;
 получаем фабрику размерностью = (32*96) x 10GbE = 3072 x 10GbE и oversubscription ratio 3:1&lt;br /&gt;
&lt;br /&gt;
==Control Plane==&lt;br /&gt;
Для фабрик с VChassis беспокоиться о Control Plane не приходится. Она прост работает. Но если требуется более масштабируемся сеть, то придется отойти от VChassis и подумать о ControlPlane.&lt;br /&gt;
&lt;br /&gt;
В фабрике каждому LEAF потребуется отправлять и получать маршрутную инфу вместе с остальными LEAF.&lt;br /&gt;
&lt;br /&gt;
В той или иной степени для ControlPlane фабрики могут подойти следующие протоколы: BGP, OSPF, ISIS. Сравним их по разным параметрам:&lt;br /&gt;
&lt;br /&gt;
'''Scale + Advertise Prefixes:''' Adveritse prefixes - у всех протоколов - норм, но OSFP и ISIS флудят префиксами. Чем больше префиксов в сети, тем больше флуда. Для уменьшения флуда можно и нужно в данном случае разбивать сегменты на area. Но при этом утратятся возможности CSPF. При этом BGP специально был придуман для работы с большим кол-вом префиксов. В плане масштабируемости он значительно выигрывает!&lt;br /&gt;
&lt;br /&gt;
'''Traffic engineering + traffic tagging:''' иногда нужно управлять трафиком в фабриках, например, чтобы пустить его в обход какого-то SPINE. Тут понятно, что OSPF и ISIS сильно проигрывают. В отличие от них у BGP есть дофига атрибутов, которыми можно управлять трафиком.&lt;br /&gt;
&lt;br /&gt;
'''Multivendor stability:''' Вроде и OSPF и ISIS неплохо себя должны вести, но кто знает, кто проверял. Гораздо чаще разные компании, использующие разное оборудование настраивают взаимодействие между собой именно посредством BGP. Так что именно BGP можно считать самым неприхотливым в работе в разными вендорами.&lt;br /&gt;
&lt;br /&gt;
Ну в итоге для IP Fabric самый адекватный протокол - '''BGP'''.&lt;br /&gt;
&lt;br /&gt;
==BGP Design==&lt;br /&gt;
*Using '''EBGP''' in an IP fabric: каждому свитчу свою AS. Каждый LEAF пирится с каждым SPINE. Тут все просто и понятно и красиво. И также с помощью LPF и AS-PATH можем спокойно рулить трафиком. Защита от петель, напомню в том, что при отправке префикса проверяется AS-path. Префикс не отправляется пиру, если в AS-path есть AS пира.&lt;br /&gt;
[[Файл:Ebgp-1.png|мини|слева|top-of-the-rack]]&lt;br /&gt;
[[Файл:Ebgp_2.png|мини|без|end-of-the-rack]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Using '''IBGP''' in an IP fabric: все свитчи в одной AS. Для получения полной маршрутной информации - full mesh. Ну или более разумно использовать route reflector (или conederation - реже). RR втискиваем в уровень SPINE. Делаем пару RR, для резервирования. Все нормально НО! при таком раскладе не выйдет делать балансировку (использовать multipath), т.к. RR выбирает и отдает своим пирам только лучший маршрут. Для восстановления справедливости потребуется заморочиться с AddPath на RR (draft-ietf-idr-add-paths). Плюсом IBGP считается еще защита от петель: имеется ввиду, что IBGP пиры при любом раскладе не будут флудить префиксами.&lt;br /&gt;
[[Файл:Ibgp_1.png|мини|слева|top-of-the-rack]]&lt;br /&gt;
[[Файл:Ibgp_2.png|мини|без|end-of-the-rack]].&lt;br /&gt;
&lt;br /&gt;
[[Файл:IBGP-eBGP CLOS.png|750px|без]]&lt;br /&gt;
ECMP - equal-cost multi-path - технология, когда один поток (один source + один dest) передается между двумя равнозначными линками. Подразумевается включение обычной балансировки, то есть:&lt;br /&gt;
 protocols {&lt;br /&gt;
    bgp {&lt;br /&gt;
        group CLOS {&lt;br /&gt;
            ...&lt;br /&gt;
            multipath multiple-as;&lt;br /&gt;
&lt;br /&gt;
 policy-options {&lt;br /&gt;
    policy-statement PFE-LB {&lt;br /&gt;
        then {&lt;br /&gt;
            load-balance per-packet;&lt;br /&gt;
&lt;br /&gt;
 routing-options {&lt;br /&gt;
    forwarding-table {&lt;br /&gt;
        export PFE-LB;&lt;br /&gt;
&lt;br /&gt;
Хорошей практикой для IP Fabric также считается использование следующих фич:&lt;br /&gt;
 protocols {&lt;br /&gt;
    bgp {&lt;br /&gt;
        log-updown;&lt;br /&gt;
        graceful-restart;&lt;br /&gt;
        group CLOS {&lt;br /&gt;
            mtu-discovery;&lt;br /&gt;
            bfd-liveness-detection { &lt;br /&gt;
                minimum-interval 350;&lt;br /&gt;
                multiplier 3;&lt;br /&gt;
                session-mode single-hop;&lt;br /&gt;
Подробно на каждой из них в этой главе останавливаться не буду.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
Для того, чтобы построить IP Fabric с BGP, придерживайтесь следующих требований:&lt;br /&gt;
*Base IP prefix. Один пул адресов для служебных целей (p2p, loopback, ...). Лучше сразу прикинуть размеры фабрики и выделить достаточный пул адресов.&lt;br /&gt;
*P2P network. Экономно и удобно использовать /31.&lt;br /&gt;
*P2P addresses. Удобно, когда при построении фабрики придерживаются одного принципа назначение ip. Первый - не spine, второй - на leaf.&lt;br /&gt;
*Loopback. Выделить из большого пула. Лучше использовать loopback, это облегчает диагностику.&lt;br /&gt;
*Server facing network. Сеть для  сервачков. Leaf выступает как шлюз. Все зависит от масштабов фабрики, но понятно, что будет удобно использовать, например: /24 на один leaf, в ней работают только сервера, включенные к этому leaf. В фабрике 8 leaf, соответственно можно выделить 8*/24 = /21 сеть на фабрику. Подразумевается, что server facing netw и base ip netw - разные.&lt;br /&gt;
*AS num. Для каждого свитча (SPINE или LEAF) отдельная AS num - для работы EBGP. Выбор использовать 32-bit/16-bit. '''16-bit''': диапазон приватных: 64512 - 65535 то есть 1023 шт, то есть максимум 1023 свитчей в фабрике. Если этого мало, то можно переходить либо в public диапазон, либо на 32-bit AS num. &lt;br /&gt;
*BGP export. LEAF передает свой loopback и server facing netw.&lt;br /&gt;
*BGP import. Разрешаем только Base IP prefix и Server facing network.&lt;br /&gt;
*ECMP. Включаем load balancing на SPINE и LEAF.&lt;br /&gt;
&lt;br /&gt;
==Edge connect==&lt;br /&gt;
Речь про связность с внешним миром и фабриками в других локациях, если такие есть.&lt;br /&gt;
&lt;br /&gt;
В идеальном мире каждый дата-центр с IP Fabric должен:&lt;br /&gt;
*на всех фабриках иметь одинаковую структуру и даже распределение AS. &lt;br /&gt;
*иметь 2 edge роутера с уникальными AS num.&lt;br /&gt;
*быть подключенным к двум разным ISP.&lt;br /&gt;
*быть подключенным в внутренней MPLS сети.&lt;br /&gt;
&lt;br /&gt;
Одинаковые AS num внутри фабрик разных дата-центров могут немного вводить в смятение. Можно с edge роутеров просто анонсировать агрегат своей фабрики.&lt;br /&gt;
&lt;br /&gt;
Для ISP подключения: edge роутер к IP Fabric передает default, к ISP передает агрегаты фабрик. Все остальное - reject. От ISP на Edge лучше получать full view.&lt;br /&gt;
&lt;br /&gt;
=VXLAN=&lt;br /&gt;
Virtual Extensible LAN protocol (VXLAN) инкапсулирует L2 Ethernet frame в L3 UDP packets.&lt;br /&gt;
*Позволяет использовать бОльшее кол-во вланов.&lt;br /&gt;
*Пригоден для огромных сетей облаков и ДЦ с большим кол-вом клиентов.&lt;br /&gt;
*Можно мигрировать VM через туннелирование трафика в L3, даже если VM включены в разные L2-домены. Это позволяет использовать ресурсы сети не учитывать границы L2. Также использование VXLAN убирает необходимость создавать огромные (в том числе по географии) L2-домены.&lt;br /&gt;
*Использование VXLAN дает возможность отказаться от STP и использовать более надежные и развитые протоколы маршрутизации для быстрой сходимости сети. Отсутствие STP дает возможность использовать полную пропускную способность сети (нет заблокированных портов). &lt;br /&gt;
*Использование L3 между L2-доменами дает возможность эффективнее балансировать трафик и опять же использовать максимально возможную пропускную способность.&lt;br /&gt;
&lt;br /&gt;
MX series и EX9200: поддерживают до 32 000 VXLAN, 32 000 multicast groups, 8 000 VTEP (virtual tunnel endpoint). Это позволяет использовать MX для очень больших сетей.&lt;br /&gt;
&lt;br /&gt;
QFX10000 поддерживают до 4000 VXLANs, 2000 VTEPs.&lt;br /&gt;
&lt;br /&gt;
QFX5100, QFX5110, QFX5200, QFX5210, EX4600 поддерживают до 4000 VXLANs, до 2000 remote VTEPs.&lt;br /&gt;
&lt;br /&gt;
EX4300-48MP поддреживают до 4000 VXLANs.&lt;br /&gt;
&lt;br /&gt;
Более подробно можно узнать на сайте производителя.&lt;br /&gt;
&lt;br /&gt;
==Принцип работы==&lt;br /&gt;
VXLAN инкапсулирует Ethernet-frame (L2) в UDP-пакет (L3). Из-за такой инкапсуляции VXLAN считают overlay технологией.&lt;br /&gt;
&lt;br /&gt;
Свитчи или роутеры, которые используют VXLAN называются VTEP (virtual tunnel endpoints). &lt;br /&gt;
&lt;br /&gt;
VTEPs инкапсулируют и декапсулирует VXLAN-трафик на входе и выходе из VXLAN-туннеля. &lt;br /&gt;
&lt;br /&gt;
В случае, когда hardware сервер включается напрямую в Juniper и сам не умеет создавать VXLAN туннели: в качестве VTEP выступают свитчи или маршрутизаторы Juniper.&lt;br /&gt;
&lt;br /&gt;
В случае с VM (virtual machine), гипервизор будет участвовать в роли VTEP, сам создавать VXLAN tunnel, а Juniper будет транзитным девайсом.&lt;br /&gt;
&lt;br /&gt;
[[Файл:VXLAN пакет.png|600px|центр]]&lt;br /&gt;
Во время инкапсуляции VTEP добавляет к фрейму поля:&lt;br /&gt;
:- outer MAC dst MAC (mac endpoint VTEP)&lt;br /&gt;
:- outer MAC src MAC (mac source VTEP)&lt;br /&gt;
:- outer dst IP&lt;br /&gt;
:- outer src IP&lt;br /&gt;
:- outer UDP header&lt;br /&gt;
:- VXLAN header: 24-битное поле VNI (VXLAN netw indentifier), уникально идентифицирующее VXLAN. Похоже на VLANID, только побольше.&lt;br /&gt;
&lt;br /&gt;
Передаем frame от VM1 к Server1.&lt;br /&gt;
[[Файл:VTEP аппаратный и програмный.png|600px|центр]]&lt;br /&gt;
#VTEP3 получает Eth-frame от VM1 (с dst addr Server1).&lt;br /&gt;
#В Forwarding Table уже есть изученный mac-add Server1 + инфа об исх интерфейсе (VTEP)&lt;br /&gt;
#VTEP3 добавляет заголовок VXLAN, который содержит VNI. VTEP3 инкапсулирует Eth-frame в UDP-пакет (L3).&lt;br /&gt;
#VTE3 маршрутизирует пакет через underlay L3-сеть к VTEP1.&lt;br /&gt;
#VTEP1 делает деинкапсуляцию и отдает Eth-frame к Server1.&lt;br /&gt;
&lt;br /&gt;
VM и сервера при этом ничего не знают про VXLAN и протоколы на L3. Для серверов всё выглядит, как-будто они сидят в одном L2-домене.&lt;br /&gt;
&lt;br /&gt;
{{note|text=VXLAN добавляет 50-54 дополнительных bytes! В ответ потребуется увеличить MTU на underlay. А именно на интерфейсах, которые участвуют в VXLAN сети, а не на логическом src VTEP interface.}}&lt;br /&gt;
&lt;br /&gt;
==Learning==&lt;br /&gt;
*''Как VTEPs будут находить друг друга?''&lt;br /&gt;
&lt;br /&gt;
Есть 2 способа обнаружения:&lt;br /&gt;
*data plane learning [like ethernet switch = L2 learning]&lt;br /&gt;
*control plane learning&lt;br /&gt;
&lt;br /&gt;
*''Как будет обрабатываться BUM traffic [broadcast, unknown unicast, multicast]:''&lt;br /&gt;
'''Multicast''' - common solution, когда каждому VNI приравнивается какая-то multicast group. На underlay сети должен быть развернут mcast. :) [для лабы достаточно просто добавить pim на iface и назначить anycast RP].&lt;br /&gt;
&lt;br /&gt;
VTEP знает какой VNI (mcast group) у него =&amp;gt; шлет igmp-join, чтобы подписаться в домен этого VNI. Когда какой-то VTEP шлет пакет с dest mcast, остальные VTEP его получают.&lt;br /&gt;
&lt;br /&gt;
Когда VTEP должен отправить BUM traffic, он шлет его с dest ip = mcast address.&lt;br /&gt;
&lt;br /&gt;
===Data plane Learning [L2 learning | Flooding learning]===&lt;br /&gt;
Когда VTEP получает пакет, он записывает в fw table:&lt;br /&gt;
*IP-source VTEP&lt;br /&gt;
*MAC VM&lt;br /&gt;
*VNI&lt;br /&gt;
Когда приходит пакет с назначением к этой VM в этом же VNI, то VTEP уже будет знать что делать.&lt;br /&gt;
&lt;br /&gt;
Если dest mac - не известен, то VTEP начинает флудить, вдруг кто другой знает такой адрес. Но чтобы уменьшить флуд, каждому VNI будет соответствовать своя multicast группа. И флуд будет распространен только в рамках этой группы.&lt;br /&gt;
&lt;br /&gt;
Пример: 2 VM на разных хостах.&lt;br /&gt;
&lt;br /&gt;
VNI 100 = mcast group: 239.1.1.100.&lt;br /&gt;
&lt;br /&gt;
#VM1 шлет arp-request к VM2 (who has 192.168.0.11?)&lt;br /&gt;
#VTEP1 инкапсулирует в arp-request в mcast packet и шлет пакет к mcast group 239.1.1.100.&lt;br /&gt;
#Все VTEP в группе 239.1.1.100 получают пакет, деинкаспулируют его проверяет VNI. Если совпадает, то шлет arp в VXLAN сегмент, если не совпадает, то дропает пакет. При этом локальный VTEP также добавляет инфу: IP VTEP1 &amp;lt;&amp;gt; MAC VM1 в свою локальную VXLAN table.&lt;br /&gt;
#VM2 получила arp и ответила на него, раскрыв свой MAC.&lt;br /&gt;
#VTEP2 инкапсулировала ответ и передала его к VTEP1.&lt;br /&gt;
#VTEP1 получила arp-response, деинкапсулировала и отдала его VM1. И еще записала в VXLAN table IP VTEP2 &amp;lt;&amp;gt; MAC VM2.&lt;br /&gt;
#Далее VM1 и VM2 общаются via unicast.&lt;br /&gt;
&lt;br /&gt;
Можно для нескольких VNI назначать одну группу. VTEP все-равно при передаче пакета проверяет VNI, а флуд при этом все-равно уменьшится.&lt;br /&gt;
&lt;br /&gt;
Подходит только для девайсов, находящихся в одном L2 домене - это главный минус такой системы.&lt;br /&gt;
&lt;br /&gt;
Кстати, VTEP не поддерживают аутентификацию, поэтому злоумышленник запросто может вторгнуться в ваш домен. Поэтому рекомендовано все-же использовать control plane learning.&lt;br /&gt;
&lt;br /&gt;
===Control plane learning [BGP-EVPN]===&lt;br /&gt;
Подразумевается, что switches learning делается до того, как начинается процесс передачи трафика. Работает аналогично протоколам маршрутизации.&lt;br /&gt;
&lt;br /&gt;
Свитчи пирятся по BGP и делятся своими префиксами. Для обмена используется evpn family. &lt;br /&gt;
&lt;br /&gt;
Некоторые свитчи будут иметь VTEPs и понятно, что по BGP проанонсятся их адреса.&lt;br /&gt;
&lt;br /&gt;
В control plane learning и VTEP появляется &amp;quot;аутентификация&amp;quot;. Когда адреса VTP анонсятся по BGP, они также заносятся в white list. Когда кто-то левый захочет приконнектиться - он не сможет этого сделать до тех пор, пока он не появится в white-list.&lt;br /&gt;
&lt;br /&gt;
VM MAC добавляются в процесс BGP. Соответственно, когда одна VM передает другой фрейм, роутинг к нужному хосту происходит на основании BGP. {это все подробно описано в EVPN}&lt;br /&gt;
&lt;br /&gt;
При использовании control plane learning - появляется и arp suppression. VM посылает ARP-req, который доходит до свитча. А свитч уже по BGP знает соответствие IP&amp;lt;&amp;gt;mac, и отдает mac удаленной VM.&lt;br /&gt;
&lt;br /&gt;
Для BUM трафика советуют также использовать Multicast, как хорошо масштабируемый.&lt;br /&gt;
&lt;br /&gt;
==VXLAN Routing==&lt;br /&gt;
Заставляем общаться разные VNI при помощи L3 gateway.&lt;br /&gt;
&lt;br /&gt;
L3 gateway можно делать как на LEAF, так и на SPINE.&lt;br /&gt;
&lt;br /&gt;
Могут использоваться: L2VNI, L3VNI.&lt;br /&gt;
&lt;br /&gt;
'''L2VNI''': для бриджей. То есть когда трафик остается внутри одного LAN-сегмента.&lt;br /&gt;
&lt;br /&gt;
'''L3VNI''': для роутинга. То есть когда трафик должен выйти за переделы LAN. L3VNI опциональны, но если хотите роутить на локальном свитче - придется воспользоваться.&lt;br /&gt;
&lt;br /&gt;
VTEPs должны знать только про локальные L2VNI, которые они локально обслуживают. С другой стороны ВСЕ VTEPs должны знать обо всех L3VNI, что называется '''anycast gateway'''.&lt;br /&gt;
&lt;br /&gt;
В этом случает каждый свитч - это GW в VNI [10.1.1.1]. На соседнем физическом свитче с тем же VNI настраивается такой же адрес шлюза [10.1.1.1]. И все свитчи в этом VNI будут иметь одинаковый virt mac-add для шлюза. Это приемущество по сравнению с VRRP/HSRP в том, что: не нужны какие-то таймеры или hello-massages для синхронизации между двумя свитчами. &lt;br /&gt;
&lt;br /&gt;
То есть для одного VNI, все VM, которые ему принадлежат - имеют один и тот же шлюз! Все зависимости от того к какому свитчу физически включен сервер.&lt;br /&gt;
&lt;br /&gt;
Это способствует быть VM - мобильной и перемещаться на другие сервачки! &lt;br /&gt;
&lt;br /&gt;
L3VNI связаны с VRF. То есть один VNI = один Customer = один RD+RT.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
На одном свитче будет настроен VRF с двумя irb интерфейсами: irb.100 [10.1.100.1], irb.101 [10.1.101.1]. Каждый будет обслуживать свой L2 домен: VTEP with VLAN100, a VNI1000 и VTEP with VLAN101, a VNI1001 соответственно.&lt;br /&gt;
&lt;br /&gt;
#QFX получает VXLAN пакет с outer dest ip. Декасулирует его. &lt;br /&gt;
#QFX делает lookup dest mac-адреса, который = IRB VIP MAC.&lt;br /&gt;
#Делает L3 lookup внутри VRF для IP-dest.&lt;br /&gt;
#Далее делается ARP lookup для IP dest. Если есть mapping, то шлется в iface. Если нет, то выясняется куда слать by looking at the MAC table of the other VNI.&lt;br /&gt;
#QFX генерирует новый L2 header с dest-mac для dest server. Потом шлет инкапсулированный VXLAN к remote VTEP.&lt;br /&gt;
&lt;br /&gt;
=EVPN-VXLAN=&lt;br /&gt;
EVPN решает две проблемы:&lt;br /&gt;
#MAC learning control plane for overlay networks&lt;br /&gt;
#the need for workload mobility. Приложениям требуется L2 для взаимодействия друг с другом. Когда речь про app в разных DC, обычным вланом не обойтись.&lt;br /&gt;
&lt;br /&gt;
EVPN относится а BGP family. Он использует MP BGP для MAC learning. Благодаря этому роутеры/свитчи обрабатывают MAC как маршруты. Что позволяет использовать несколько path одновременно (без физического гашения избыточных портов).&lt;br /&gt;
&lt;br /&gt;
EVPN позволяет маршрутизировать не только MAC, но и ARP (IP + MAC). В дальнейшем ARP можно будет привязать и к VLAN-tag.&lt;br /&gt;
&lt;br /&gt;
По сравнению с VPLS - тут явно больше преимуществ для использования.&lt;br /&gt;
&lt;br /&gt;
Немного новой терминологии для EVPN в IP Fabric:&lt;br /&gt;
*Ethernet Tags = VLAN-ID&lt;br /&gt;
*MAC-VRF = Mac-table [в EVPN можно использовать import/export policies]&lt;br /&gt;
*export-policy = обычная политика, которая на все изученные местные (local) mac-addr навешивает target и отправляет route к remote sites.&lt;br /&gt;
*import-policy = обычная политика, которая по наличию правильного target кладет route в MAC-VFR.&lt;br /&gt;
*RD - uniq ID, который назначается на MAC-VRF. Уникальный в пределах IP Fabric.&lt;br /&gt;
*RT community - навешивается на routes посредством политик. На роутерах обозначает принадлежность к той или иной routing-table.&lt;br /&gt;
*EVPN services = включает в себя разные vlan-mapping options.&lt;br /&gt;
&lt;br /&gt;
==VLAN Services==&lt;br /&gt;
*'''VLAN-based service''' - один влан на весь EVPN. То есть все девайсы на всех sites работают в одном влане. Можно делать vlan-map vlan-id 1 на vlan-id 2. Когда, например на разных фабриках используются разные vlan-id.  It's ok. Плюс такого метода - ограничение broadcast. Но он не сильно масштабируем.&lt;br /&gt;
*'''VLAN bundle service''' - в одном EVPN много разных вланов. Полезно, когда услуга одна для нескольких арендаторов. У арендаторов используются разные вланы и никак по-другому. Плюсы: удобно для конфига. Но брадакст в таком домене будет влиять на ВСЕ вланы в нем.&lt;br /&gt;
*'''VLAN aware service''' - тут, кажется, используются bridge-domain внутри одного EVPN instance. Каждый со своим vlan-id внутри. То есть это дает возможность использовать в ENI (EVPN instance) несколько vlan-id, но которые не будут в одном broadcast домене. При флудах будут страдать конкретные вланы.&lt;br /&gt;
==Data Plane==&lt;br /&gt;
В качестве dataplane для EVPN из близкого к теме могут быть: MPLS, VXLAN. Есть еще и другие: PBB, STT, NVGRE..&lt;br /&gt;
&lt;br /&gt;
VXLAN encapsulation метод основан на VNIs, тогда ваши vlan-id 1, vlan-id 2 &amp;gt; vni-1, vni-2 &amp;gt; vxlan-1, vxlan-2 (с изученными Mac-addr) &amp;gt; в EVPN instance-1 с uniq RD.&lt;br /&gt;
&lt;br /&gt;
===BGP Route Types for EVPN===&lt;br /&gt;
:-'''Ethernet Auto-Discovery (AD) Route''': когда новый свитч вступает в EVPN, он пользуется этими роутами, чтобы объявить о себе.&lt;br /&gt;
   RD [8], _ESI [10], _ET [4], MPLS LBL [3]&lt;br /&gt;
&lt;br /&gt;
Передается flag, указывающий сколько линков можно использовать для передачи.&lt;br /&gt;
[[Файл:EVPN routes type1.png|мини|без]]&lt;br /&gt;
Например, у нас один сервер включен двумя ногами в разные свитчи. Когда LEAF4 получит auto-discovery route от LEAF1 и LEAF2, то route будет вставлен в таблицу, но также, LEAF4 будет знать, что до данного сервера у него '''два''' VXLAN, которые можно использовать.&lt;br /&gt;
&lt;br /&gt;
Это как раз различие в active/active links [flag set to 0] и single link [flag is set to 1].&lt;br /&gt;
&lt;br /&gt;
Auto-discovery process отрабатывает намного быстрее, так как при стандартном включении в свитч при падении линка (за которым были тысячи mac-addr) таблица будет чистить эти тысячи маков гораздо дольше, чем один route, который соответствует (ассоциирован с) линку.&lt;br /&gt;
&lt;br /&gt;
:-'''MAC/IP Advertisement Route''': MAC advertisement (также может передавать IP+MAC).&lt;br /&gt;
    RD [8], ESI [10], _ET [4],&lt;br /&gt;
    _MAC Addr Lenght [1], _MAC Addr [6],&lt;br /&gt;
    _IP Addr Lenght [1], _IP Addr [0|4|16]&lt;br /&gt;
    MPLS LBL1 [3]&lt;br /&gt;
    MPLS LBL2 [0|3]&lt;br /&gt;
&lt;br /&gt;
[[Файл:EVPN routes type2.png|мини|без]]&lt;br /&gt;
&lt;br /&gt;
LEAF4 изучил Mac server2. Начал передавать его другим sites EVPN с соответствующим community, которое навешивается согласно export policy.&lt;br /&gt;
&lt;br /&gt;
LEAF1 исходя из import policy решает принять ли маршрут. Если import policy отсутствует - это равнозначно discard.&lt;br /&gt;
&lt;br /&gt;
:-'''Inclusive Multicast Ethernet Tag Route''': BUM flooding.&lt;br /&gt;
    ET [4], IP Addr Lenght [1], Originating Router's IP Addr [4|16]&lt;br /&gt;
&lt;br /&gt;
В Juniper EVPN/VXLAN свитчи поддерживают ingress replication BUM. То есть свитч получил BUM, создал unicast копии этого трафик и отправил remote sites этого EVPN.&lt;br /&gt;
&lt;br /&gt;
Route информирует remote PE - как обработать BUM traffic и PMSI аттрибуты. Он определяет следует использовать PIM или PMSI и на какой dst adddr отправлять BUM traffic.  &lt;br /&gt;
&lt;br /&gt;
LEAF2 передает инфу, что он ждет и использует ingress replication и что LEAF1 должен использовать 4.4.4.4 как dst addr VXLAN пакетов, которые передают BUM.&lt;br /&gt;
&lt;br /&gt;
:-'''Ethernet Segment Route''': ES and DF election.&lt;br /&gt;
    _ESI [10], _IP Addr Lenght [1], _IP Addr [4|16]&lt;br /&gt;
&lt;br /&gt;
Решает проблемы:&lt;br /&gt;
*выбор designated forwarder (DF)&lt;br /&gt;
*split-horizont - preventing routing loops in the routing protocol. Not to advertise route to it's origin iface.&lt;br /&gt;
В EVPN есть стандартные правила split-horizont:&lt;br /&gt;
#Локальный свитч получил BUM от сервера. Свитч перешлет BUM только серверам в том же влане и remote sites EVPN instance. Но не обратно в интерфейс сервера, откуда он пришел.&lt;br /&gt;
#Свитч получи BUM от remote site. Свитч отправит BUM локальным серверам. Но не будет передавать его другим remote sites.&lt;br /&gt;
&lt;br /&gt;
При использовании active/active у нас могут возникнуть проблемы и петли все-таки могут возникнуть.&lt;br /&gt;
&lt;br /&gt;
Как избавиться от этого?&lt;br /&gt;
&lt;br /&gt;
Для одного EVPN instance выбрать одного DF для EVPN для передачи BUM traffic. Все остальные будут дропать BUM.&lt;br /&gt;
&lt;br /&gt;
:-'''IP Prefix Route''': IP route advertisement&lt;br /&gt;
Обычно можно увидеть при DC interconnect.&lt;br /&gt;
&lt;br /&gt;
LEAF1 получил трафик от Server 1. Инкапсулировал Eth в VXLAN и отправил на EDGE router DC1 (GW for LEAF1 with irb iface). &lt;br /&gt;
&lt;br /&gt;
EDGE снимет Eth header, и IP пакет смаршрутизирует согласно ip routing table.&lt;br /&gt;
&lt;br /&gt;
В таблице будет route type 5, который был получен от remote PE DC2. EDGE засунет IP в VXLAN к DC2.&lt;br /&gt;
&lt;br /&gt;
EDGE DC2 снимет VXLAN header, смаршрутизирует ip пакет. Засунет его в Eth заголовок с dst MAC Server 2. Отправит фрейм.&lt;br /&gt;
&lt;br /&gt;
===Distributed Layer 3 Gateway===&lt;br /&gt;
[[Файл:EVPN gateway.png|мини|без]]&lt;br /&gt;
&lt;br /&gt;
На SPINE1 и SPINE2 настроен одинаковый Virtual ip gateway address 10.0.1.254 и одинаковый Virtual MAC 00:01:8d:00:01:02. &lt;br /&gt;
&lt;br /&gt;
SPINE1 и SPINE2 передают в EVPN type 1 auto-discovery и type 2 Mac+ip learning. &lt;br /&gt;
&lt;br /&gt;
LEAF1 получит равнозначные по стоимости маршруты к одному MAC в том же сегменте. И начнет балансить трафик между ними.&lt;br /&gt;
&lt;br /&gt;
==Design==&lt;br /&gt;
Как это все ляжет на сеть?&lt;br /&gt;
&lt;br /&gt;
Серверы включены в LEAF в своих вланах. &lt;br /&gt;
&lt;br /&gt;
VLAN связаны с VXLAN VTEP на портах свитчей.&lt;br /&gt;
&lt;br /&gt;
VTEP сопоставляются в соответствующие EVPN (которые делают L2 связность для VTEP).&lt;br /&gt;
&lt;br /&gt;
Как говорили выше: можно сопоставлять несколько VTEP одному EVPN instance (c one-to-one mapping или many-to-one mapping).&lt;br /&gt;
&lt;br /&gt;
=Controllers=&lt;br /&gt;
Речь про SDN контроллеры&lt;br /&gt;
=Дополнительная информация=&lt;br /&gt;
*[[EVPN]]&lt;br /&gt;
*[[Traffic engineering]]&lt;br /&gt;
*[[Глава 1. Основы MPLS и VPN]]&lt;br /&gt;
*[[Глава 2. Label Distribution Protocols (RSVP, LDP)]]&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=DC&amp;diff=2075</id>
		<title>DC</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=DC&amp;diff=2075"/>
		<updated>2021-12-25T19:09:12Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: /* Принцип работы */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#description2:Overlay Networks. Fabric Design. IP Fabrics. VXLAN. EVPN-VXLAN. BGP Route Types for EVPN. Distributed Layer 3 Gateway. Информация для подготовки к экзаменам Juniper.}}&lt;br /&gt;
=Overlay Networks=&lt;br /&gt;
Разделяют 2 вида сетей: overlay и underlay.&lt;br /&gt;
&lt;br /&gt;
Underlay - физическая IP сеть. Это база (транспорт) поверх которого уже строится overlay netw.&lt;br /&gt;
&lt;br /&gt;
Примеры underlay: MPLS, IP-сеть построенная на IGP/EGP.&lt;br /&gt;
&lt;br /&gt;
Также в underlay входят bare metal servers (или могу ошибаться и это не так). Подразумевается, что underlay - это прям железо-железо в голом виде.&lt;br /&gt;
&lt;br /&gt;
Overlay - это наложенная сеть на underlay. Виртуальные свитчи, серверы и другие VM соединены virt logical links (VTEPs - virtual tunnel endpoints).&lt;br /&gt;
&lt;br /&gt;
*''host machine'' - сервер, на котором запущен hypervisor. &lt;br /&gt;
*''guest machine'' - каждая VM.&lt;br /&gt;
Hypervisor предоставляет OS с virt платформой для guest и далее управляет работой guest OS. Несколько разных guest OS будут делать hardware ресурсы сервера.&lt;br /&gt;
&lt;br /&gt;
VXLAN - overlay technology, которая строит virt туннели на основе IP/MPLS netw (VTEPs)&lt;br /&gt;
&lt;br /&gt;
VM на одном хосте будут коммуницировать между собой через virt switch - L2.&lt;br /&gt;
VM на разных хостах будут коммуницировать между собой через VTEP - L3. То есть прибегать к инкапсуляции L2 в L3 и передаче трафика через underlay сеть.&lt;br /&gt;
&lt;br /&gt;
VTEP - располагаются на hypervisor или есть брать сервера, включенные с обычные access switches, то на свитчах тоже можно создавать VTEP. VTEP - туннель между хостами &lt;br /&gt;
VTEP имеет 2 iface: &lt;br /&gt;
*switching interface - в сторону VM&lt;br /&gt;
*IP interface - в сторону IP сети (L3 netw)&lt;br /&gt;
&lt;br /&gt;
Для инкапсуляции используется обычно VXLAN. О нем ниже.&lt;br /&gt;
&lt;br /&gt;
Положительные особенности overlay network (наложенных сетей):&lt;br /&gt;
# Отделение сети от физического оборудования позволяет сетям дата-центров быть развернутыми за считанные секунды.&lt;br /&gt;
# Поддержка L2 и L3 между VM и серверами.&lt;br /&gt;
# В отличие от стандартной сети поддерживает до 16,4 млн &amp;quot;заказчиков&amp;quot; (вланов).&lt;br /&gt;
 &lt;br /&gt;
Чем приходится платить за использование overlay network:&lt;br /&gt;
:- virtual tunnel endpoints (VTEPs) ипользует MAC и route. В отличие от традиционной модели, где каждая VM и каждый сервер использует MAC и route. В overlay трафик от VM и сервером инкапсулируется между VTEP. mac и route каждого сервера теперь не виден для оборудования overlay сети. mac и route теперь перенесены с физического уровня на уровень hypervisor.&lt;br /&gt;
&lt;br /&gt;
=Bare metal server=&lt;br /&gt;
Редко в каких сетях получится найти полностью виртуализированую сеть. Какая-то часть серверов все-равно останется железной (в основном из-за производительности).&lt;br /&gt;
&lt;br /&gt;
Как не бросить те самые железные сервачки и сохранить с ними сетевую связность?&lt;br /&gt;
&lt;br /&gt;
Один из методов: соединить VTEP с физическим access switch.&lt;br /&gt;
&lt;br /&gt;
Каждый гипервизор имеет VTEP. VTEP передает инкапсулированный трафик data plane между VM. Также VTEP делает mac-learning, предоставляет новые virt netw и другие изменения конфигурации.&lt;br /&gt;
&lt;br /&gt;
На железных серверах нет VTEP. Чтобы железный сервер включить в overlay netw архитектуру, нужно чтобы кто-то инкапсулировал трафик от сервера и делал mac-learning. Пусть это делает обычный access-switch от имени сервера. Сервер при этом просто думает, что посылает от себя трафик дальше в сеть.&lt;br /&gt;
&lt;br /&gt;
=Fabric Design=&lt;br /&gt;
*'''Traditional – MC-LAG (multichassis link aggregation group)'''&lt;br /&gt;
[[Файл:MC-LAG.png|мини|без]]&lt;br /&gt;
*'''Virtual Chassis'''&lt;br /&gt;
[[Файл:VC 1.png|мини|слева|top-of-rack topology]] &lt;br /&gt;
[[Файл:VC 2.png|мини|центр|end-of-row topology]]&lt;br /&gt;
&lt;br /&gt;
*'''Virtual Chassis Fabric'''&lt;br /&gt;
[[Файл:VC_fabric_1.png|мини|слева|top-of-rack topology]]&lt;br /&gt;
[[Файл:VC fabric_2.png|мини|центр|end-of-row topology]].&lt;br /&gt;
Большое приемущество в том, что между каждыми двумя host в фабрике есть только 2 hops. В отличие от VC, где число hops может достигать до 9.&lt;br /&gt;
&lt;br /&gt;
Limitations:&lt;br /&gt;
:-Virtual Chassis = 10 members&lt;br /&gt;
:-Virtual Chassis Fabric = 20 members [2-4 spine + 16-18 leaf]&lt;br /&gt;
&lt;br /&gt;
Master + backup используют один и тот же MAC + IP для GW.&lt;br /&gt;
&lt;br /&gt;
Можно легко вставлять/вытаскивать членов VC. На них автоматически будет сделан upgrade софта если нужно, подъедет конфиг, новый член будет назначен linecard.&lt;br /&gt;
&lt;br /&gt;
В VC для вычисления кратчайшего пути используется Dejkstra и путь выбирается один.&lt;br /&gt;
&lt;br /&gt;
В VC fabric VCCP отвчечает за эту процедуру и при возникновении нескольких равнозначных путей трафик балансируется. &lt;br /&gt;
&lt;br /&gt;
Virtual Chassis Fabric works really well for a top-of-rack based solution, but for end-of-row it becomes a little more problematic.&lt;br /&gt;
*'''Junos Fusion'''&lt;br /&gt;
[[Файл:JF.png|мини|без|top-of-row topology]]&lt;br /&gt;
&lt;br /&gt;
*'''IP CLOS Fabrics'''&lt;br /&gt;
[[Файл:CLOS.png|мини|без|finely grained failure domains]]&lt;br /&gt;
&lt;br /&gt;
=IP Fabrics=&lt;br /&gt;
Самое важное условие для IP Fabric: VTEP должны соединяться по L3.&lt;br /&gt;
&lt;br /&gt;
Clos придумал распределенную топологию для L3, при которой возможно достаточно хорошее масштабирование сети. В такой сети есть разделение на уровни: ingress, middle, egress.&lt;br /&gt;
&lt;br /&gt;
На основе CLOS произошла топология spine anf leaf, которую иногда называют сложенной CLOS сетью. То ест тут ingress и egress уровни сложены друг на друга (если можно так выразиться).&lt;br /&gt;
&lt;br /&gt;
Spine - это L3 свитчи.&lt;br /&gt;
&lt;br /&gt;
Leaf - это top-of-the-rack свитчи, который связывают сервер и VTEP.&lt;br /&gt;
&lt;br /&gt;
Масштабируемость определяется двумя параметрами: &amp;quot;толщиной&amp;quot; spine, коэффициентов переподключенийleaf светчей.&lt;br /&gt;
&lt;br /&gt;
Spine L3 свитчи можно собирать в кластер, а можно и нет. Причем говорится про кластре, в котором будут и SPINE и LEAF, все вместе.&lt;br /&gt;
&lt;br /&gt;
Если я правильно поняла, то обычно, когда требуется особо большая масштабируемость сети, то VChassis не собирают.&lt;br /&gt;
&lt;br /&gt;
При фабрике без VChassis емкость рассчитывается как умножение кол-во портов под серверы на кол-во LEAF, используемых на SPINE.&lt;br /&gt;
&lt;br /&gt;
Пример: &lt;br /&gt;
 При использовании такого оборудования:&lt;br /&gt;
 SPINE = QFX5100-24Q ['''32''' x 40GbE]&lt;br /&gt;
 LEAF = QFX5100-96S ['''96''' x 10G + 8 x 40GbE]&lt;br /&gt;
 получаем фабрику размерностью = (32*96) x 10GbE = 3072 x 10GbE и oversubscription ratio 3:1&lt;br /&gt;
&lt;br /&gt;
==Control Plane==&lt;br /&gt;
Для фабрик с VChassis беспокоиться о Control Plane не приходится. Она прост работает. Но если требуется более масштабируемся сеть, то придется отойти от VChassis и подумать о ControlPlane.&lt;br /&gt;
&lt;br /&gt;
В фабрике каждому LEAF потребуется отправлять и получать маршрутную инфу вместе с остальными LEAF.&lt;br /&gt;
&lt;br /&gt;
В той или иной степени для ControlPlane фабрики могут подойти следующие протоколы: BGP, OSPF, ISIS. Сравним их по разным параметрам:&lt;br /&gt;
&lt;br /&gt;
'''Scale + Advertise Prefixes:''' Adveritse prefixes - у всех протоколов - норм, но OSFP и ISIS флудят префиксами. Чем больше префиксов в сети, тем больше флуда. Для уменьшения флуда можно и нужно в данном случае разбивать сегменты на area. Но при этом утратятся возможности CSPF. При этом BGP специально был придуман для работы с большим кол-вом префиксов. В плане масштабируемости он значительно выигрывает!&lt;br /&gt;
&lt;br /&gt;
'''Traffic engineering + traffic tagging:''' иногда нужно управлять трафиком в фабриках, например, чтобы пустить его в обход какого-то SPINE. Тут понятно, что OSPF и ISIS сильно проигрывают. В отличие от них у BGP есть дофига атрибутов, которыми можно управлять трафиком.&lt;br /&gt;
&lt;br /&gt;
'''Multivendor stability:''' Вроде и OSPF и ISIS неплохо себя должны вести, но кто знает, кто проверял. Гораздо чаще разные компании, использующие разное оборудование настраивают взаимодействие между собой именно посредством BGP. Так что именно BGP можно считать самым неприхотливым в работе в разными вендорами.&lt;br /&gt;
&lt;br /&gt;
Ну в итоге для IP Fabric самый адекватный протокол - '''BGP'''.&lt;br /&gt;
&lt;br /&gt;
==BGP Design==&lt;br /&gt;
*Using '''EBGP''' in an IP fabric: каждому свитчу свою AS. Каждый LEAF пирится с каждым SPINE. Тут все просто и понятно и красиво. И также с помощью LPF и AS-PATH можем спокойно рулить трафиком. Защита от петель, напомню в том, что при отправке префикса проверяется AS-path. Префикс не отправляется пиру, если в AS-path есть AS пира.&lt;br /&gt;
[[Файл:Ebgp-1.png|мини|слева|top-of-the-rack]]&lt;br /&gt;
[[Файл:Ebgp_2.png|мини|без|end-of-the-rack]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Using '''IBGP''' in an IP fabric: все свитчи в одной AS. Для получения полной маршрутной информации - full mesh. Ну или более разумно использовать route reflector (или conederation - реже). RR втискиваем в уровень SPINE. Делаем пару RR, для резервирования. Все нормально НО! при таком раскладе не выйдет делать балансировку (использовать multipath), т.к. RR выбирает и отдает своим пирам только лучший маршрут. Для восстановления справедливости потребуется заморочиться с AddPath на RR (draft-ietf-idr-add-paths). Плюсом IBGP считается еще защита от петель: имеется ввиду, что IBGP пиры при любом раскладе не будут флудить префиксами.&lt;br /&gt;
[[Файл:Ibgp_1.png|мини|слева|top-of-the-rack]]&lt;br /&gt;
[[Файл:Ibgp_2.png|мини|без|end-of-the-rack]].&lt;br /&gt;
&lt;br /&gt;
[[Файл:IBGP-eBGP CLOS.png|750px|без]]&lt;br /&gt;
ECMP - equal-cost multi-path - технология, когда один поток (один source + один dest) передается между двумя равнозначными линками. Подразумевается включение обычной балансировки, то есть:&lt;br /&gt;
 protocols {&lt;br /&gt;
    bgp {&lt;br /&gt;
        group CLOS {&lt;br /&gt;
            ...&lt;br /&gt;
            multipath multiple-as;&lt;br /&gt;
&lt;br /&gt;
 policy-options {&lt;br /&gt;
    policy-statement PFE-LB {&lt;br /&gt;
        then {&lt;br /&gt;
            load-balance per-packet;&lt;br /&gt;
&lt;br /&gt;
 routing-options {&lt;br /&gt;
    forwarding-table {&lt;br /&gt;
        export PFE-LB;&lt;br /&gt;
&lt;br /&gt;
Хорошей практикой для IP Fabric также считается использование следующих фич:&lt;br /&gt;
 protocols {&lt;br /&gt;
    bgp {&lt;br /&gt;
        log-updown;&lt;br /&gt;
        graceful-restart;&lt;br /&gt;
        group CLOS {&lt;br /&gt;
            mtu-discovery;&lt;br /&gt;
            bfd-liveness-detection { &lt;br /&gt;
                minimum-interval 350;&lt;br /&gt;
                multiplier 3;&lt;br /&gt;
                session-mode single-hop;&lt;br /&gt;
Подробно на каждой из них в этой главе останавливаться не буду.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
Для того, чтобы построить IP Fabric с BGP, придерживайтесь следующих требований:&lt;br /&gt;
*Base IP prefix. Один пул адресов для служебных целей (p2p, loopback, ...). Лучше сразу прикинуть размеры фабрики и выделить достаточный пул адресов.&lt;br /&gt;
*P2P network. Экономно и удобно использовать /31.&lt;br /&gt;
*P2P addresses. Удобно, когда при построении фабрики придерживаются одного принципа назначение ip. Первый - не spine, второй - на leaf.&lt;br /&gt;
*Loopback. Выделить из большого пула. Лучше использовать loopback, это облегчает диагностику.&lt;br /&gt;
*Server facing network. Сеть для  сервачков. Leaf выступает как шлюз. Все зависит от масштабов фабрики, но понятно, что будет удобно использовать, например: /24 на один leaf, в ней работают только сервера, включенные к этому leaf. В фабрике 8 leaf, соответственно можно выделить 8*/24 = /21 сеть на фабрику. Подразумевается, что server facing netw и base ip netw - разные.&lt;br /&gt;
*AS num. Для каждого свитча (SPINE или LEAF) отдельная AS num - для работы EBGP. Выбор использовать 32-bit/16-bit. '''16-bit''': диапазон приватных: 64512 - 65535 то есть 1023 шт, то есть максимум 1023 свитчей в фабрике. Если этого мало, то можно переходить либо в public диапазон, либо на 32-bit AS num. &lt;br /&gt;
*BGP export. LEAF передает свой loopback и server facing netw.&lt;br /&gt;
*BGP import. Разрешаем только Base IP prefix и Server facing network.&lt;br /&gt;
*ECMP. Включаем load balancing на SPINE и LEAF.&lt;br /&gt;
&lt;br /&gt;
==Edge connect==&lt;br /&gt;
Речь про связность с внешним миром и фабриками в других локациях, если такие есть.&lt;br /&gt;
&lt;br /&gt;
В идеальном мире каждый дата-центр с IP Fabric должен:&lt;br /&gt;
*на всех фабриках иметь одинаковую структуру и даже распределение AS. &lt;br /&gt;
*иметь 2 edge роутера с уникальными AS num.&lt;br /&gt;
*быть подключенным к двум разным ISP.&lt;br /&gt;
*быть подключенным в внутренней MPLS сети.&lt;br /&gt;
&lt;br /&gt;
Одинаковые AS num внутри фабрик разных дата-центров могут немного вводить в смятение. Можно с edge роутеров просто анонсировать агрегат своей фабрики.&lt;br /&gt;
&lt;br /&gt;
Для ISP подключения: edge роутер к IP Fabric передает default, к ISP передает агрегаты фабрик. Все остальное - reject. От ISP на Edge лучше получать full view.&lt;br /&gt;
&lt;br /&gt;
=VXLAN=&lt;br /&gt;
Virtual Extensible LAN protocol (VXLAN) инкапсулирует L2 Ethernet frame в L3 UDP packets.&lt;br /&gt;
*Позволяет использовать бОльшее кол-во вланов.&lt;br /&gt;
*Пригоден для огромных сетей облаков и ДЦ с большим кол-вом клиентов.&lt;br /&gt;
*Можно мигрировать VM через туннелирование трафика в L3, даже если VM включены в разные L2-домены. Это позволяет использовать ресурсы сети не учитывать границы L2. Также использование VXLAN убирает необходимость создавать огромные (в том числе по географии) L2-домены.&lt;br /&gt;
*Использование VXLAN дает возможность отказаться от STP и использовать более надежные и развитые протоколы маршрутизации для быстрой сходимости сети. Отсутствие STP дает возможность использовать полную пропускную способность сети (нет заблокированных портов). &lt;br /&gt;
*Использование L3 между L2-доменами дает возможность эффективнее балансировать трафик и опять же использовать максимально возможную пропускную способность.&lt;br /&gt;
&lt;br /&gt;
MX series и EX9200: поддерживают до 32 000 VXLAN, 32 000 multicast groups, 8 000 VTEP (virtual tunnel endpoint). Это позволяет использовать MX для очень больших сетей.&lt;br /&gt;
&lt;br /&gt;
QFX10000 поддерживают до 4000 VXLANs, 2000 VTEPs.&lt;br /&gt;
&lt;br /&gt;
QFX5100, QFX5110, QFX5200, QFX5210, EX4600 поддерживают до 4000 VXLANs, до 2000 remote VTEPs.&lt;br /&gt;
&lt;br /&gt;
EX4300-48MP поддреживают до 4000 VXLANs.&lt;br /&gt;
&lt;br /&gt;
Более подробно можно узнать на сайте производителя.&lt;br /&gt;
&lt;br /&gt;
==Принцип работы==&lt;br /&gt;
VXLAN инкапсулирует Ethernet-frame (L2) в UDP-пакет (L3). Из-за такой инкапсуляции VXLAN считают overlay технологией.&lt;br /&gt;
&lt;br /&gt;
Свитчи или роутеры, которые используют VXLAN называются VTEP (virtual tunnel endpoints). &lt;br /&gt;
&lt;br /&gt;
VTEPs инкапсулируют и декапсулирует VXLAN-трафик на входе и выходе из VXLAN-туннеля. &lt;br /&gt;
&lt;br /&gt;
В случае, когда hardware сервер включается напрямую в Juniper и сам не умеет создавать VXLAN туннели: в качестве VTEP выступают свитчи или маршрутизаторы Juniper.&lt;br /&gt;
&lt;br /&gt;
В случае с VM (virtual machine), гипервизор будет участвовать в роли VTEP, сам создавать VXLAN tunnel, а Juniper будет транзитным девайсом.&lt;br /&gt;
&lt;br /&gt;
[[Файл:VXLAN пакет.png|600px|центр]]&lt;br /&gt;
Во время инкапсуляции VTEP добавляет к фрейму поля:&lt;br /&gt;
:- outer MAC dst MAC (mac endpoint VTEP)&lt;br /&gt;
:- outer MAC src MAC (mac source VTEP)&lt;br /&gt;
:- outer dst IP&lt;br /&gt;
:- outer src IP&lt;br /&gt;
:- outer UDP header&lt;br /&gt;
:- VXLAN header: 24-битное поле VNI (VXLAN netw indentifier), уникально идентифицирующее VXLAN. Похоже на VLANID, только побольше.&lt;br /&gt;
&lt;br /&gt;
Передаем frame от VM1 к Server1.&lt;br /&gt;
[[Файл:VTEP аппаратный и програмный.png|600px|центр]]&lt;br /&gt;
#VTEP3 получает Eth-frame от VM1 (с dst addr Server1).&lt;br /&gt;
#В Forwarding Table уже есть изученный mac-add Server1 + инфа об исх интерфейсе (VTEP)&lt;br /&gt;
#VTEP3 добавляет заголовок VXLAN, который содержит VNI. VTEP3 инкапсулирует Eth-frame в UDP-пакет (L3).&lt;br /&gt;
#VTE3 маршрутизирует пакет через underlay L3-сеть к VTEP1.&lt;br /&gt;
#VTEP1 делает деинкапсуляцию и отдает Eth-frame к Server1.&lt;br /&gt;
&lt;br /&gt;
VM и сервера при этом ничего не знают про VXLAN и протоколы на L3. Для серверов всё выглядит, как-будто они сидят в одном L2-домене.&lt;br /&gt;
&lt;br /&gt;
{{note|text=VXLAN добавляет 50-54 дополнительных bytes! В ответ потребуется увеличить MTU на underlay. А именно на интерфейсах, которые участвуют в VXLAN сети, а не на логическом src VTEP interface.}}&lt;br /&gt;
&lt;br /&gt;
==Learning==&lt;br /&gt;
*''Как VTEPs будут находить друг друга?''&lt;br /&gt;
&lt;br /&gt;
Есть 2 способа обнаружения:&lt;br /&gt;
*data plane learning [like ethernet switch = L2 learning]&lt;br /&gt;
*control plane learning&lt;br /&gt;
&lt;br /&gt;
*''Как будет обрабатываться BUM traffic [broadcast, unknown unicast, multicast]:''&lt;br /&gt;
'''Multicast''' - common solution, когда каждому VNI приравнивается какая-то multicast group. На underlay сети должен быть развернут mcast. :) [для лабы достаточно просто добавить pim на iface и назначить anycast RP].&lt;br /&gt;
&lt;br /&gt;
VTEP знает какой VNI (mcast group) у него =&amp;gt; шлет igmp-join, чтобы подписаться в домен этого VNI. Когда какой-то VTEP шлет пакет с dest mcast, остальные VTEP его получают.&lt;br /&gt;
&lt;br /&gt;
Когда VTEP должен отправить BUM traffic, он шлет его с dest ip = mcast address.&lt;br /&gt;
&lt;br /&gt;
===Data plane Learning [L2 learning | Flooding learning]===&lt;br /&gt;
Когда VTEP получает пакет, он записывает в fw table:&lt;br /&gt;
*IP-source VTEP&lt;br /&gt;
*MAC VM&lt;br /&gt;
*VNI&lt;br /&gt;
Когда приходит пакет с назначением к этой VM в этом же VNI, то VTEP уже будет знать что делать.&lt;br /&gt;
&lt;br /&gt;
Если dest mac - не известен, то VTEP начинает флудить, вдруг кто другой знает такой адрес. Но чтобы уменьшить флуд, каждому VNI будет соответствовать своя multicast группа. И флуд будет распространен только в рамках этой группы.&lt;br /&gt;
&lt;br /&gt;
Пример: 2 VM на разных хостах.&lt;br /&gt;
&lt;br /&gt;
VNI 100 = mcast group: 239.1.1.100.&lt;br /&gt;
&lt;br /&gt;
#VM1 шлет arp-request к VM2 (who has 192.168.0.11?)&lt;br /&gt;
#VTEP1 инкапсулирует в arp-request в mcast packet и шлет пакет к mcast group 239.1.1.100.&lt;br /&gt;
#Все VTEP в группе 239.1.1.100 получают пакет, деинкаспулируют его проверяет VNI. Если совпадает, то шлет arp в VXLAN сегмент, если не совпадает, то дропает пакет. При этом локальный VTEP также добавляет инфу: IP VTEP1 &amp;lt;&amp;gt; MAC VM1 в свою локальную VXLAN table.&lt;br /&gt;
#VM2 получила arp и ответила на него, раскрыв свой MAC.&lt;br /&gt;
#VTEP2 инкапсулировала ответ и передала его к VTEP1.&lt;br /&gt;
#VTEP1 получила arp-response, деинкапсулировала и отдала его VM1. И еще записала в VXLAN table IP VTEP2 &amp;lt;&amp;gt; MAC VM2.&lt;br /&gt;
#Далее VM1 и VM2 общаются via unicast.&lt;br /&gt;
&lt;br /&gt;
Можно для нескольких VNI назначать одну группу. VTEP все-равно при передаче пакета проверяет VNI, а флуд при этом все-равно уменьшится.&lt;br /&gt;
&lt;br /&gt;
Подходит только для девайсов, находящихся в одном L2 домене - это главный минус такой системы.&lt;br /&gt;
&lt;br /&gt;
Кстати, VTEP не поддерживают аутентификацию, поэтому злоумышленник запросто может вторгнуться в ваш домен. Поэтому рекомендовано все-же использовать control plane learning.&lt;br /&gt;
&lt;br /&gt;
===Control plane learning [BGP-EVPN]===&lt;br /&gt;
Подразумевается, что switches learning делается до того, как начинается процесс передачи трафика. Работает аналогично протоколам маршрутизации.&lt;br /&gt;
&lt;br /&gt;
Свитчи пирятся по BGP и делятся своими префиксами. Для обмена используется evpn family. &lt;br /&gt;
&lt;br /&gt;
Некоторые свитчи будут иметь VTEPs и понятно, что по BGP проанонсятся их адреса.&lt;br /&gt;
&lt;br /&gt;
В control plane learning и VTEP появляется &amp;quot;аутентификация&amp;quot;. Когда адреса VTP анонсятся по BGP, они также заносятся в white list. Когда кто-то левый захочет приконнектиться - он не сможет этого сделать до тех пор, пока он не появится в white-list.&lt;br /&gt;
&lt;br /&gt;
VM MAC добавляются в процесс BGP. Соответственно, когда одна VM передает другой фрейм, роутинг к нужному хосту происходит на основании BGP. {это все подробно описано в EVPN}&lt;br /&gt;
&lt;br /&gt;
При использовании control plane learning - появляется и arp suppression. VM посылает ARP-req, который доходит до свитча. А свитч уже по BGP знает соответствие IP&amp;lt;&amp;gt;mac, и отдает mac удаленной VM.&lt;br /&gt;
&lt;br /&gt;
Для BUM трафика советуют также использовать Multicast, как хорошо масштабируемый.&lt;br /&gt;
&lt;br /&gt;
==VXLAN Routing==&lt;br /&gt;
Заставляем общаться разные VNI при помощи L3 gateway.&lt;br /&gt;
&lt;br /&gt;
L3 gateway можно делать как на LEAF, так и на SPINE.&lt;br /&gt;
&lt;br /&gt;
Могут использоваться: L2VNI, L3VNI.&lt;br /&gt;
&lt;br /&gt;
'''L2VNI''': для бриджей. То есть когда трафик остается внутри одного LAN-сегмента.&lt;br /&gt;
&lt;br /&gt;
'''L3VNI''': для роутинга. То есть когда трафик должен выйти за переделы LAN. L3VNI опциональны, но если хотите роутить на локальном свитче - придется воспользоваться.&lt;br /&gt;
&lt;br /&gt;
VTEPs должны знать только про локальные L2VNI, которые они локально обслуживают. С другой стороны ВСЕ VTEPs должны знать обо всех L3VNI, что называется '''anycast gateway'''.&lt;br /&gt;
&lt;br /&gt;
В этом случает каждый свитч - это GW в VNI [10.1.1.1]. На соседнем физическом свитче с тем же VNI настраивается такой же адрес шлюза [10.1.1.1]. И все свитчи в этом VNI будут иметь одинаковый virt mac-add для шлюза. Это приемущество по сравнению с VRRP/HSRP в том, что: не нужны какие-то таймеры или hello-massages для синхронизации между двумя свитчами. &lt;br /&gt;
&lt;br /&gt;
То есть для одного VNI, все VM, которые ему принадлежат - имеют один и тот же шлюз! Все зависимости от того к какому свитчу физически включен сервер.&lt;br /&gt;
&lt;br /&gt;
Это способствует быть VM - мобильной и перемещаться на другие сервачки! &lt;br /&gt;
&lt;br /&gt;
L3VNI связаны с VRF. То есть один VNI = один Customer = один RD+RT.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
На одном свитче будет настроен VRF с двумя irb интерфейсами: irb.100 [10.1.100.1], irb.101 [10.1.101.1]. Каждый будет обслуживать свой L2 домен: VTEP with VLAN100, a VNI1000 и VTEP with VLAN101, a VNI1001 соответственно.&lt;br /&gt;
&lt;br /&gt;
#QFX получает VXLAN пакет с outer dest ip. Деинкасулирует его. &lt;br /&gt;
#QFX делает lookup dest mac-адреса, который = IRB VIP MAC.&lt;br /&gt;
#Делает L3 lookup внутри VRF для IP-dest.&lt;br /&gt;
#Далее делается ARP lookup для IP dest. Если есть mapping, то шлется в iface. Если нет, то выясняется куда слать by looking at the MAC table of the other VNI.&lt;br /&gt;
#QFX генерирует новый L2 header с dest-mac для dest server. Потом шлет инкапсулированный VXLAN к remote VTEP.&lt;br /&gt;
&lt;br /&gt;
=EVPN-VXLAN=&lt;br /&gt;
EVPN решает две проблемы:&lt;br /&gt;
#MAC learning control plane for overlay networks&lt;br /&gt;
#the need for workload mobility. Приложениям требуется L2 для взаимодействия друг с другом. Когда речь про app в разных DC, обычным вланом не обойтись.&lt;br /&gt;
&lt;br /&gt;
EVPN относится а BGP family. Он использует MP BGP для MAC learning. Благодаря этому роутеры/свитчи обрабатывают MAC как маршруты. Что позволяет использовать несколько path одновременно (без физического гашения избыточных портов).&lt;br /&gt;
&lt;br /&gt;
EVPN позволяет маршрутизировать не только MAC, но и ARP (IP + MAC). В дальнейшем ARP можно будет привязать и к VLAN-tag.&lt;br /&gt;
&lt;br /&gt;
По сравнению с VPLS - тут явно больше преимуществ для использования.&lt;br /&gt;
&lt;br /&gt;
Немного новой терминологии для EVPN в IP Fabric:&lt;br /&gt;
*Ethernet Tags = VLAN-ID&lt;br /&gt;
*MAC-VRF = Mac-table [в EVPN можно использовать import/export policies]&lt;br /&gt;
*export-policy = обычная политика, которая на все изученные местные (local) mac-addr навешивает target и отправляет route к remote sites.&lt;br /&gt;
*import-policy = обычная политика, которая по наличию правильного target кладет route в MAC-VFR.&lt;br /&gt;
*RD - uniq ID, который назначается на MAC-VRF. Уникальный в пределах IP Fabric.&lt;br /&gt;
*RT community - навешивается на routes посредством политик. На роутерах обозначает принадлежность к той или иной routing-table.&lt;br /&gt;
*EVPN services = включает в себя разные vlan-mapping options.&lt;br /&gt;
&lt;br /&gt;
==VLAN Services==&lt;br /&gt;
*'''VLAN-based service''' - один влан на весь EVPN. То есть все девайсы на всех sites работают в одном влане. Можно делать vlan-map vlan-id 1 на vlan-id 2. Когда, например на разных фабриках используются разные vlan-id.  It's ok. Плюс такого метода - ограничение broadcast. Но он не сильно масштабируем.&lt;br /&gt;
*'''VLAN bundle service''' - в одном EVPN много разных вланов. Полезно, когда услуга одна для нескольких арендаторов. У арендаторов используются разные вланы и никак по-другому. Плюсы: удобно для конфига. Но брадакст в таком домене будет влиять на ВСЕ вланы в нем.&lt;br /&gt;
*'''VLAN aware service''' - тут, кажется, используются bridge-domain внутри одного EVPN instance. Каждый со своим vlan-id внутри. То есть это дает возможность использовать в ENI (EVPN instance) несколько vlan-id, но которые не будут в одном broadcast домене. При флудах будут страдать конкретные вланы.&lt;br /&gt;
==Data Plane==&lt;br /&gt;
В качестве dataplane для EVPN из близкого к теме могут быть: MPLS, VXLAN. Есть еще и другие: PBB, STT, NVGRE..&lt;br /&gt;
&lt;br /&gt;
VXLAN encapsulation метод основан на VNIs, тогда ваши vlan-id 1, vlan-id 2 &amp;gt; vni-1, vni-2 &amp;gt; vxlan-1, vxlan-2 (с изученными Mac-addr) &amp;gt; в EVPN instance-1 с uniq RD.&lt;br /&gt;
&lt;br /&gt;
===BGP Route Types for EVPN===&lt;br /&gt;
:-'''Ethernet Auto-Discovery (AD) Route''': когда новый свитч вступает в EVPN, он пользуется этими роутами, чтобы объявить о себе.&lt;br /&gt;
   RD [8], _ESI [10], _ET [4], MPLS LBL [3]&lt;br /&gt;
&lt;br /&gt;
Передается flag, указывающий сколько линков можно использовать для передачи.&lt;br /&gt;
[[Файл:EVPN routes type1.png|мини|без]]&lt;br /&gt;
Например, у нас один сервер включен двумя ногами в разные свитчи. Когда LEAF4 получит auto-discovery route от LEAF1 и LEAF2, то route будет вставлен в таблицу, но также, LEAF4 будет знать, что до данного сервера у него '''два''' VXLAN, которые можно использовать.&lt;br /&gt;
&lt;br /&gt;
Это как раз различие в active/active links [flag set to 0] и single link [flag is set to 1].&lt;br /&gt;
&lt;br /&gt;
Auto-discovery process отрабатывает намного быстрее, так как при стандартном включении в свитч при падении линка (за которым были тысячи mac-addr) таблица будет чистить эти тысячи маков гораздо дольше, чем один route, который соответствует (ассоциирован с) линку.&lt;br /&gt;
&lt;br /&gt;
:-'''MAC/IP Advertisement Route''': MAC advertisement (также может передавать IP+MAC).&lt;br /&gt;
    RD [8], ESI [10], _ET [4],&lt;br /&gt;
    _MAC Addr Lenght [1], _MAC Addr [6],&lt;br /&gt;
    _IP Addr Lenght [1], _IP Addr [0|4|16]&lt;br /&gt;
    MPLS LBL1 [3]&lt;br /&gt;
    MPLS LBL2 [0|3]&lt;br /&gt;
&lt;br /&gt;
[[Файл:EVPN routes type2.png|мини|без]]&lt;br /&gt;
&lt;br /&gt;
LEAF4 изучил Mac server2. Начал передавать его другим sites EVPN с соответствующим community, которое навешивается согласно export policy.&lt;br /&gt;
&lt;br /&gt;
LEAF1 исходя из import policy решает принять ли маршрут. Если import policy отсутствует - это равнозначно discard.&lt;br /&gt;
&lt;br /&gt;
:-'''Inclusive Multicast Ethernet Tag Route''': BUM flooding.&lt;br /&gt;
    ET [4], IP Addr Lenght [1], Originating Router's IP Addr [4|16]&lt;br /&gt;
&lt;br /&gt;
В Juniper EVPN/VXLAN свитчи поддерживают ingress replication BUM. То есть свитч получил BUM, создал unicast копии этого трафик и отправил remote sites этого EVPN.&lt;br /&gt;
&lt;br /&gt;
Route информирует remote PE - как обработать BUM traffic и PMSI аттрибуты. Он определяет следует использовать PIM или PMSI и на какой dst adddr отправлять BUM traffic.  &lt;br /&gt;
&lt;br /&gt;
LEAF2 передает инфу, что он ждет и использует ingress replication и что LEAF1 должен использовать 4.4.4.4 как dst addr VXLAN пакетов, которые передают BUM.&lt;br /&gt;
&lt;br /&gt;
:-'''Ethernet Segment Route''': ES and DF election.&lt;br /&gt;
    _ESI [10], _IP Addr Lenght [1], _IP Addr [4|16]&lt;br /&gt;
&lt;br /&gt;
Решает проблемы:&lt;br /&gt;
*выбор designated forwarder (DF)&lt;br /&gt;
*split-horizont - preventing routing loops in the routing protocol. Not to advertise route to it's origin iface.&lt;br /&gt;
В EVPN есть стандартные правила split-horizont:&lt;br /&gt;
#Локальный свитч получил BUM от сервера. Свитч перешлет BUM только серверам в том же влане и remote sites EVPN instance. Но не обратно в интерфейс сервера, откуда он пришел.&lt;br /&gt;
#Свитч получи BUM от remote site. Свитч отправит BUM локальным серверам. Но не будет передавать его другим remote sites.&lt;br /&gt;
&lt;br /&gt;
При использовании active/active у нас могут возникнуть проблемы и петли все-таки могут возникнуть.&lt;br /&gt;
&lt;br /&gt;
Как избавиться от этого?&lt;br /&gt;
&lt;br /&gt;
Для одного EVPN instance выбрать одного DF для EVPN для передачи BUM traffic. Все остальные будут дропать BUM.&lt;br /&gt;
&lt;br /&gt;
:-'''IP Prefix Route''': IP route advertisement&lt;br /&gt;
Обычно можно увидеть при DC interconnect.&lt;br /&gt;
&lt;br /&gt;
LEAF1 получил трафик от Server 1. Инкапсулировал Eth в VXLAN и отправил на EDGE router DC1 (GW for LEAF1 with irb iface). &lt;br /&gt;
&lt;br /&gt;
EDGE снимет Eth header, и IP пакет смаршрутизирует согласно ip routing table.&lt;br /&gt;
&lt;br /&gt;
В таблице будет route type 5, который был получен от remote PE DC2. EDGE засунет IP в VXLAN к DC2.&lt;br /&gt;
&lt;br /&gt;
EDGE DC2 снимет VXLAN header, смаршрутизирует ip пакет. Засунет его в Eth заголовок с dst MAC Server 2. Отправит фрейм.&lt;br /&gt;
&lt;br /&gt;
===Distributed Layer 3 Gateway===&lt;br /&gt;
[[Файл:EVPN gateway.png|мини|без]]&lt;br /&gt;
&lt;br /&gt;
На SPINE1 и SPINE2 настроен одинаковый Virtual ip gateway address 10.0.1.254 и одинаковый Virtual MAC 00:01:8d:00:01:02. &lt;br /&gt;
&lt;br /&gt;
SPINE1 и SPINE2 передают в EVPN type 1 auto-discovery и type 2 Mac+ip learning. &lt;br /&gt;
&lt;br /&gt;
LEAF1 получит равнозначные по стоимости маршруты к одному MAC в том же сегменте. И начнет балансить трафик между ними.&lt;br /&gt;
&lt;br /&gt;
==Design==&lt;br /&gt;
Как это все ляжет на сеть?&lt;br /&gt;
&lt;br /&gt;
Серверы включены в LEAF в своих вланах. &lt;br /&gt;
&lt;br /&gt;
VLAN связаны с VXLAN VTEP на портах свитчей.&lt;br /&gt;
&lt;br /&gt;
VTEP сопоставляются в соответствующие EVPN (которые делают L2 связность для VTEP).&lt;br /&gt;
&lt;br /&gt;
Как говорили выше: можно сопоставлять несколько VTEP одному EVPN instance (c one-to-one mapping или many-to-one mapping).&lt;br /&gt;
&lt;br /&gt;
=Controllers=&lt;br /&gt;
Речь про SDN контроллеры&lt;br /&gt;
=Дополнительная информация=&lt;br /&gt;
*[[EVPN]]&lt;br /&gt;
*[[Traffic engineering]]&lt;br /&gt;
*[[Глава 1. Основы MPLS и VPN]]&lt;br /&gt;
*[[Глава 2. Label Distribution Protocols (RSVP, LDP)]]&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:VXLAN_%D0%BF%D0%B0%D0%BA%D0%B5%D1%82.png&amp;diff=2074</id>
		<title>Файл:VXLAN пакет.png</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:VXLAN_%D0%BF%D0%B0%D0%BA%D0%B5%D1%82.png&amp;diff=2074"/>
		<updated>2021-12-25T19:05:34Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=DC&amp;diff=2073</id>
		<title>DC</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=DC&amp;diff=2073"/>
		<updated>2021-12-25T18:54:53Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: /* VXLAN */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#description2:Overlay Networks. Fabric Design. IP Fabrics. VXLAN. EVPN-VXLAN. BGP Route Types for EVPN. Distributed Layer 3 Gateway. Информация для подготовки к экзаменам Juniper.}}&lt;br /&gt;
=Overlay Networks=&lt;br /&gt;
Разделяют 2 вида сетей: overlay и underlay.&lt;br /&gt;
&lt;br /&gt;
Underlay - физическая IP сеть. Это база (транспорт) поверх которого уже строится overlay netw.&lt;br /&gt;
&lt;br /&gt;
Примеры underlay: MPLS, IP-сеть построенная на IGP/EGP.&lt;br /&gt;
&lt;br /&gt;
Также в underlay входят bare metal servers (или могу ошибаться и это не так). Подразумевается, что underlay - это прям железо-железо в голом виде.&lt;br /&gt;
&lt;br /&gt;
Overlay - это наложенная сеть на underlay. Виртуальные свитчи, серверы и другие VM соединены virt logical links (VTEPs - virtual tunnel endpoints).&lt;br /&gt;
&lt;br /&gt;
*''host machine'' - сервер, на котором запущен hypervisor. &lt;br /&gt;
*''guest machine'' - каждая VM.&lt;br /&gt;
Hypervisor предоставляет OS с virt платформой для guest и далее управляет работой guest OS. Несколько разных guest OS будут делать hardware ресурсы сервера.&lt;br /&gt;
&lt;br /&gt;
VXLAN - overlay technology, которая строит virt туннели на основе IP/MPLS netw (VTEPs)&lt;br /&gt;
&lt;br /&gt;
VM на одном хосте будут коммуницировать между собой через virt switch - L2.&lt;br /&gt;
VM на разных хостах будут коммуницировать между собой через VTEP - L3. То есть прибегать к инкапсуляции L2 в L3 и передаче трафика через underlay сеть.&lt;br /&gt;
&lt;br /&gt;
VTEP - располагаются на hypervisor или есть брать сервера, включенные с обычные access switches, то на свитчах тоже можно создавать VTEP. VTEP - туннель между хостами &lt;br /&gt;
VTEP имеет 2 iface: &lt;br /&gt;
*switching interface - в сторону VM&lt;br /&gt;
*IP interface - в сторону IP сети (L3 netw)&lt;br /&gt;
&lt;br /&gt;
Для инкапсуляции используется обычно VXLAN. О нем ниже.&lt;br /&gt;
&lt;br /&gt;
Положительные особенности overlay network (наложенных сетей):&lt;br /&gt;
# Отделение сети от физического оборудования позволяет сетям дата-центров быть развернутыми за считанные секунды.&lt;br /&gt;
# Поддержка L2 и L3 между VM и серверами.&lt;br /&gt;
# В отличие от стандартной сети поддерживает до 16,4 млн &amp;quot;заказчиков&amp;quot; (вланов).&lt;br /&gt;
 &lt;br /&gt;
Чем приходится платить за использование overlay network:&lt;br /&gt;
:- virtual tunnel endpoints (VTEPs) ипользует MAC и route. В отличие от традиционной модели, где каждая VM и каждый сервер использует MAC и route. В overlay трафик от VM и сервером инкапсулируется между VTEP. mac и route каждого сервера теперь не виден для оборудования overlay сети. mac и route теперь перенесены с физического уровня на уровень hypervisor.&lt;br /&gt;
&lt;br /&gt;
=Bare metal server=&lt;br /&gt;
Редко в каких сетях получится найти полностью виртуализированую сеть. Какая-то часть серверов все-равно останется железной (в основном из-за производительности).&lt;br /&gt;
&lt;br /&gt;
Как не бросить те самые железные сервачки и сохранить с ними сетевую связность?&lt;br /&gt;
&lt;br /&gt;
Один из методов: соединить VTEP с физическим access switch.&lt;br /&gt;
&lt;br /&gt;
Каждый гипервизор имеет VTEP. VTEP передает инкапсулированный трафик data plane между VM. Также VTEP делает mac-learning, предоставляет новые virt netw и другие изменения конфигурации.&lt;br /&gt;
&lt;br /&gt;
На железных серверах нет VTEP. Чтобы железный сервер включить в overlay netw архитектуру, нужно чтобы кто-то инкапсулировал трафик от сервера и делал mac-learning. Пусть это делает обычный access-switch от имени сервера. Сервер при этом просто думает, что посылает от себя трафик дальше в сеть.&lt;br /&gt;
&lt;br /&gt;
=Fabric Design=&lt;br /&gt;
*'''Traditional – MC-LAG (multichassis link aggregation group)'''&lt;br /&gt;
[[Файл:MC-LAG.png|мини|без]]&lt;br /&gt;
*'''Virtual Chassis'''&lt;br /&gt;
[[Файл:VC 1.png|мини|слева|top-of-rack topology]] &lt;br /&gt;
[[Файл:VC 2.png|мини|центр|end-of-row topology]]&lt;br /&gt;
&lt;br /&gt;
*'''Virtual Chassis Fabric'''&lt;br /&gt;
[[Файл:VC_fabric_1.png|мини|слева|top-of-rack topology]]&lt;br /&gt;
[[Файл:VC fabric_2.png|мини|центр|end-of-row topology]].&lt;br /&gt;
Большое приемущество в том, что между каждыми двумя host в фабрике есть только 2 hops. В отличие от VC, где число hops может достигать до 9.&lt;br /&gt;
&lt;br /&gt;
Limitations:&lt;br /&gt;
:-Virtual Chassis = 10 members&lt;br /&gt;
:-Virtual Chassis Fabric = 20 members [2-4 spine + 16-18 leaf]&lt;br /&gt;
&lt;br /&gt;
Master + backup используют один и тот же MAC + IP для GW.&lt;br /&gt;
&lt;br /&gt;
Можно легко вставлять/вытаскивать членов VC. На них автоматически будет сделан upgrade софта если нужно, подъедет конфиг, новый член будет назначен linecard.&lt;br /&gt;
&lt;br /&gt;
В VC для вычисления кратчайшего пути используется Dejkstra и путь выбирается один.&lt;br /&gt;
&lt;br /&gt;
В VC fabric VCCP отвчечает за эту процедуру и при возникновении нескольких равнозначных путей трафик балансируется. &lt;br /&gt;
&lt;br /&gt;
Virtual Chassis Fabric works really well for a top-of-rack based solution, but for end-of-row it becomes a little more problematic.&lt;br /&gt;
*'''Junos Fusion'''&lt;br /&gt;
[[Файл:JF.png|мини|без|top-of-row topology]]&lt;br /&gt;
&lt;br /&gt;
*'''IP CLOS Fabrics'''&lt;br /&gt;
[[Файл:CLOS.png|мини|без|finely grained failure domains]]&lt;br /&gt;
&lt;br /&gt;
=IP Fabrics=&lt;br /&gt;
Самое важное условие для IP Fabric: VTEP должны соединяться по L3.&lt;br /&gt;
&lt;br /&gt;
Clos придумал распределенную топологию для L3, при которой возможно достаточно хорошее масштабирование сети. В такой сети есть разделение на уровни: ingress, middle, egress.&lt;br /&gt;
&lt;br /&gt;
На основе CLOS произошла топология spine anf leaf, которую иногда называют сложенной CLOS сетью. То ест тут ingress и egress уровни сложены друг на друга (если можно так выразиться).&lt;br /&gt;
&lt;br /&gt;
Spine - это L3 свитчи.&lt;br /&gt;
&lt;br /&gt;
Leaf - это top-of-the-rack свитчи, который связывают сервер и VTEP.&lt;br /&gt;
&lt;br /&gt;
Масштабируемость определяется двумя параметрами: &amp;quot;толщиной&amp;quot; spine, коэффициентов переподключенийleaf светчей.&lt;br /&gt;
&lt;br /&gt;
Spine L3 свитчи можно собирать в кластер, а можно и нет. Причем говорится про кластре, в котором будут и SPINE и LEAF, все вместе.&lt;br /&gt;
&lt;br /&gt;
Если я правильно поняла, то обычно, когда требуется особо большая масштабируемость сети, то VChassis не собирают.&lt;br /&gt;
&lt;br /&gt;
При фабрике без VChassis емкость рассчитывается как умножение кол-во портов под серверы на кол-во LEAF, используемых на SPINE.&lt;br /&gt;
&lt;br /&gt;
Пример: &lt;br /&gt;
 При использовании такого оборудования:&lt;br /&gt;
 SPINE = QFX5100-24Q ['''32''' x 40GbE]&lt;br /&gt;
 LEAF = QFX5100-96S ['''96''' x 10G + 8 x 40GbE]&lt;br /&gt;
 получаем фабрику размерностью = (32*96) x 10GbE = 3072 x 10GbE и oversubscription ratio 3:1&lt;br /&gt;
&lt;br /&gt;
==Control Plane==&lt;br /&gt;
Для фабрик с VChassis беспокоиться о Control Plane не приходится. Она прост работает. Но если требуется более масштабируемся сеть, то придется отойти от VChassis и подумать о ControlPlane.&lt;br /&gt;
&lt;br /&gt;
В фабрике каждому LEAF потребуется отправлять и получать маршрутную инфу вместе с остальными LEAF.&lt;br /&gt;
&lt;br /&gt;
В той или иной степени для ControlPlane фабрики могут подойти следующие протоколы: BGP, OSPF, ISIS. Сравним их по разным параметрам:&lt;br /&gt;
&lt;br /&gt;
'''Scale + Advertise Prefixes:''' Adveritse prefixes - у всех протоколов - норм, но OSFP и ISIS флудят префиксами. Чем больше префиксов в сети, тем больше флуда. Для уменьшения флуда можно и нужно в данном случае разбивать сегменты на area. Но при этом утратятся возможности CSPF. При этом BGP специально был придуман для работы с большим кол-вом префиксов. В плане масштабируемости он значительно выигрывает!&lt;br /&gt;
&lt;br /&gt;
'''Traffic engineering + traffic tagging:''' иногда нужно управлять трафиком в фабриках, например, чтобы пустить его в обход какого-то SPINE. Тут понятно, что OSPF и ISIS сильно проигрывают. В отличие от них у BGP есть дофига атрибутов, которыми можно управлять трафиком.&lt;br /&gt;
&lt;br /&gt;
'''Multivendor stability:''' Вроде и OSPF и ISIS неплохо себя должны вести, но кто знает, кто проверял. Гораздо чаще разные компании, использующие разное оборудование настраивают взаимодействие между собой именно посредством BGP. Так что именно BGP можно считать самым неприхотливым в работе в разными вендорами.&lt;br /&gt;
&lt;br /&gt;
Ну в итоге для IP Fabric самый адекватный протокол - '''BGP'''.&lt;br /&gt;
&lt;br /&gt;
==BGP Design==&lt;br /&gt;
*Using '''EBGP''' in an IP fabric: каждому свитчу свою AS. Каждый LEAF пирится с каждым SPINE. Тут все просто и понятно и красиво. И также с помощью LPF и AS-PATH можем спокойно рулить трафиком. Защита от петель, напомню в том, что при отправке префикса проверяется AS-path. Префикс не отправляется пиру, если в AS-path есть AS пира.&lt;br /&gt;
[[Файл:Ebgp-1.png|мини|слева|top-of-the-rack]]&lt;br /&gt;
[[Файл:Ebgp_2.png|мини|без|end-of-the-rack]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Using '''IBGP''' in an IP fabric: все свитчи в одной AS. Для получения полной маршрутной информации - full mesh. Ну или более разумно использовать route reflector (или conederation - реже). RR втискиваем в уровень SPINE. Делаем пару RR, для резервирования. Все нормально НО! при таком раскладе не выйдет делать балансировку (использовать multipath), т.к. RR выбирает и отдает своим пирам только лучший маршрут. Для восстановления справедливости потребуется заморочиться с AddPath на RR (draft-ietf-idr-add-paths). Плюсом IBGP считается еще защита от петель: имеется ввиду, что IBGP пиры при любом раскладе не будут флудить префиксами.&lt;br /&gt;
[[Файл:Ibgp_1.png|мини|слева|top-of-the-rack]]&lt;br /&gt;
[[Файл:Ibgp_2.png|мини|без|end-of-the-rack]].&lt;br /&gt;
&lt;br /&gt;
[[Файл:IBGP-eBGP CLOS.png|750px|без]]&lt;br /&gt;
ECMP - equal-cost multi-path - технология, когда один поток (один source + один dest) передается между двумя равнозначными линками. Подразумевается включение обычной балансировки, то есть:&lt;br /&gt;
 protocols {&lt;br /&gt;
    bgp {&lt;br /&gt;
        group CLOS {&lt;br /&gt;
            ...&lt;br /&gt;
            multipath multiple-as;&lt;br /&gt;
&lt;br /&gt;
 policy-options {&lt;br /&gt;
    policy-statement PFE-LB {&lt;br /&gt;
        then {&lt;br /&gt;
            load-balance per-packet;&lt;br /&gt;
&lt;br /&gt;
 routing-options {&lt;br /&gt;
    forwarding-table {&lt;br /&gt;
        export PFE-LB;&lt;br /&gt;
&lt;br /&gt;
Хорошей практикой для IP Fabric также считается использование следующих фич:&lt;br /&gt;
 protocols {&lt;br /&gt;
    bgp {&lt;br /&gt;
        log-updown;&lt;br /&gt;
        graceful-restart;&lt;br /&gt;
        group CLOS {&lt;br /&gt;
            mtu-discovery;&lt;br /&gt;
            bfd-liveness-detection { &lt;br /&gt;
                minimum-interval 350;&lt;br /&gt;
                multiplier 3;&lt;br /&gt;
                session-mode single-hop;&lt;br /&gt;
Подробно на каждой из них в этой главе останавливаться не буду.&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
Для того, чтобы построить IP Fabric с BGP, придерживайтесь следующих требований:&lt;br /&gt;
*Base IP prefix. Один пул адресов для служебных целей (p2p, loopback, ...). Лучше сразу прикинуть размеры фабрики и выделить достаточный пул адресов.&lt;br /&gt;
*P2P network. Экономно и удобно использовать /31.&lt;br /&gt;
*P2P addresses. Удобно, когда при построении фабрики придерживаются одного принципа назначение ip. Первый - не spine, второй - на leaf.&lt;br /&gt;
*Loopback. Выделить из большого пула. Лучше использовать loopback, это облегчает диагностику.&lt;br /&gt;
*Server facing network. Сеть для  сервачков. Leaf выступает как шлюз. Все зависит от масштабов фабрики, но понятно, что будет удобно использовать, например: /24 на один leaf, в ней работают только сервера, включенные к этому leaf. В фабрике 8 leaf, соответственно можно выделить 8*/24 = /21 сеть на фабрику. Подразумевается, что server facing netw и base ip netw - разные.&lt;br /&gt;
*AS num. Для каждого свитча (SPINE или LEAF) отдельная AS num - для работы EBGP. Выбор использовать 32-bit/16-bit. '''16-bit''': диапазон приватных: 64512 - 65535 то есть 1023 шт, то есть максимум 1023 свитчей в фабрике. Если этого мало, то можно переходить либо в public диапазон, либо на 32-bit AS num. &lt;br /&gt;
*BGP export. LEAF передает свой loopback и server facing netw.&lt;br /&gt;
*BGP import. Разрешаем только Base IP prefix и Server facing network.&lt;br /&gt;
*ECMP. Включаем load balancing на SPINE и LEAF.&lt;br /&gt;
&lt;br /&gt;
==Edge connect==&lt;br /&gt;
Речь про связность с внешним миром и фабриками в других локациях, если такие есть.&lt;br /&gt;
&lt;br /&gt;
В идеальном мире каждый дата-центр с IP Fabric должен:&lt;br /&gt;
*на всех фабриках иметь одинаковую структуру и даже распределение AS. &lt;br /&gt;
*иметь 2 edge роутера с уникальными AS num.&lt;br /&gt;
*быть подключенным к двум разным ISP.&lt;br /&gt;
*быть подключенным в внутренней MPLS сети.&lt;br /&gt;
&lt;br /&gt;
Одинаковые AS num внутри фабрик разных дата-центров могут немного вводить в смятение. Можно с edge роутеров просто анонсировать агрегат своей фабрики.&lt;br /&gt;
&lt;br /&gt;
Для ISP подключения: edge роутер к IP Fabric передает default, к ISP передает агрегаты фабрик. Все остальное - reject. От ISP на Edge лучше получать full view.&lt;br /&gt;
&lt;br /&gt;
=VXLAN=&lt;br /&gt;
Virtual Extensible LAN protocol (VXLAN) инкапсулирует L2 Ethernet frame в L3 UDP packets.&lt;br /&gt;
*Позволяет использовать бОльшее кол-во вланов.&lt;br /&gt;
*Пригоден для огромных сетей облаков и ДЦ с большим кол-вом клиентов.&lt;br /&gt;
*Можно мигрировать VM через туннелирование трафика в L3, даже если VM включены в разные L2-домены. Это позволяет использовать ресурсы сети не учитывать границы L2. Также использование VXLAN убирает необходимость создавать огромные (в том числе по географии) L2-домены.&lt;br /&gt;
*Использование VXLAN дает возможность отказаться от STP и использовать более надежные и развитые протоколы маршрутизации для быстрой сходимости сети. Отсутствие STP дает возможность использовать полную пропускную способность сети (нет заблокированных портов). &lt;br /&gt;
*Использование L3 между L2-доменами дает возможность эффективнее балансировать трафик и опять же использовать максимально возможную пропускную способность.&lt;br /&gt;
&lt;br /&gt;
MX series и EX9200: поддерживают до 32 000 VXLAN, 32 000 multicast groups, 8 000 VTEP (virtual tunnel endpoint). Это позволяет использовать MX для очень больших сетей.&lt;br /&gt;
&lt;br /&gt;
QFX10000 поддерживают до 4000 VXLANs, 2000 VTEPs.&lt;br /&gt;
&lt;br /&gt;
QFX5100, QFX5110, QFX5200, QFX5210, EX4600 поддерживают до 4000 VXLANs, до 2000 remote VTEPs.&lt;br /&gt;
&lt;br /&gt;
EX4300-48MP поддреживают до 4000 VXLANs.&lt;br /&gt;
&lt;br /&gt;
Более подробно можно узнать на сайте производителя.&lt;br /&gt;
&lt;br /&gt;
==Принцип работы==&lt;br /&gt;
VXLAN инкапсулирует Ethernet-frame (L2) в UDP-пакет (L3). Из-за такой инкапсуляции VXLAN считают overlay технологией.&lt;br /&gt;
&lt;br /&gt;
Свитчи или роутеры, которые используют VXLAN называются VTEP (virtual tunnel endpoints). &lt;br /&gt;
&lt;br /&gt;
VTEPs инкапсулируют и декапсулирует VXLAN-трафик на входе и выходе из VXLAN-туннеля. &lt;br /&gt;
&lt;br /&gt;
В случае, когда hardware сервер включается напрямую в Juniper и сам не умеет создавать VXLAN туннели: в качестве VTEP выступают свитчи или маршрутизаторы Juniper.&lt;br /&gt;
&lt;br /&gt;
В случае с VM (virtual machine), гипервизор будет участвовать в роли VTEP, сам создавать VXLAN tunnel, а Juniper будет транзитным девайсом.&lt;br /&gt;
&lt;br /&gt;
Во время инкапсуляции VTEP добавляет к фрейму поля:&lt;br /&gt;
:- outer MAC dst MAC (mac endpoint VTEP)&lt;br /&gt;
:- outer MAC src MAC (mac source VTEP)&lt;br /&gt;
:- outer dst IP&lt;br /&gt;
:- outer src IP&lt;br /&gt;
:- outer UDP header&lt;br /&gt;
:- VXLAN header: 24-битное поле VNI (VXLAN netw indentifier), уникально идентифицирующее VXLAN. Похоже на VLANID, только побольше.&lt;br /&gt;
&lt;br /&gt;
| Origin Ethernet | + VXLAN Header | + OUTER IP | + OUTER MAC | &lt;br /&gt;
&lt;br /&gt;
Передаем frame от VM1 к Server1.&lt;br /&gt;
[[Файл:VTEP аппаратный и програмный.png|700px|никакой|центр]]&lt;br /&gt;
#VTEP3 получает Eth-frame от VM1 (с dst addr Server1).&lt;br /&gt;
#В Forwarding Table уже есть изученный mac-add Server1 + инфа об исх интерфейсе (VTEP)&lt;br /&gt;
#VTEP3 добавляет заголовок VXLAN, который содержит VNI. VTEP3 инкапсулирует Eth-frame в UDP-пакет (L3).&lt;br /&gt;
#VTE3 маршрутизирует пакет через underlay L3-сеть к VTEP1.&lt;br /&gt;
#VTEP1 делает деинкапсуляцию и отдает Eth-frame к Server1.&lt;br /&gt;
&lt;br /&gt;
VM и сервера при этом ничего не знают про VXLAN и протоколы на L3. Для серверов всё выглядит, как-будто они сидят в одном L2-домене.&lt;br /&gt;
&lt;br /&gt;
{{note|text=VXLAN добавляет 50-54 дополнительных bytes! В ответ потребуется увеличить MTU на underlay. А именно на интерфейсах, которые участвуют в VXLAN сети, а не на логическом src VTEP interface.}}&lt;br /&gt;
&lt;br /&gt;
==Learning==&lt;br /&gt;
*''Как VTEPs будут находить друг друга?''&lt;br /&gt;
&lt;br /&gt;
Есть 2 способа обнаружения:&lt;br /&gt;
*data plane learning [like ethernet switch = L2 learning]&lt;br /&gt;
*control plane learning&lt;br /&gt;
&lt;br /&gt;
*''Как будет обрабатываться BUM traffic [broadcast, unknown unicast, multicast]:''&lt;br /&gt;
'''Multicast''' - common solution, когда каждому VNI приравнивается какая-то multicast group. На underlay сети должен быть развернут mcast. :) [для лабы достаточно просто добавить pim на iface и назначить anycast RP].&lt;br /&gt;
&lt;br /&gt;
VTEP знает какой VNI (mcast group) у него =&amp;gt; шлет igmp-join, чтобы подписаться в домен этого VNI. Когда какой-то VTEP шлет пакет с dest mcast, остальные VTEP его получают.&lt;br /&gt;
&lt;br /&gt;
Когда VTEP должен отправить BUM traffic, он шлет его с dest ip = mcast address.&lt;br /&gt;
&lt;br /&gt;
===Data plane Learning [L2 learning | Flooding learning]===&lt;br /&gt;
Когда VTEP получает пакет, он записывает в fw table:&lt;br /&gt;
*IP-source VTEP&lt;br /&gt;
*MAC VM&lt;br /&gt;
*VNI&lt;br /&gt;
Когда приходит пакет с назначением к этой VM в этом же VNI, то VTEP уже будет знать что делать.&lt;br /&gt;
&lt;br /&gt;
Если dest mac - не известен, то VTEP начинает флудить, вдруг кто другой знает такой адрес. Но чтобы уменьшить флуд, каждому VNI будет соответствовать своя multicast группа. И флуд будет распространен только в рамках этой группы.&lt;br /&gt;
&lt;br /&gt;
Пример: 2 VM на разных хостах.&lt;br /&gt;
&lt;br /&gt;
VNI 100 = mcast group: 239.1.1.100.&lt;br /&gt;
&lt;br /&gt;
#VM1 шлет arp-request к VM2 (who has 192.168.0.11?)&lt;br /&gt;
#VTEP1 инкапсулирует в arp-request в mcast packet и шлет пакет к mcast group 239.1.1.100.&lt;br /&gt;
#Все VTEP в группе 239.1.1.100 получают пакет, деинкаспулируют его проверяет VNI. Если совпадает, то шлет arp в VXLAN сегмент, если не совпадает, то дропает пакет. При этом локальный VTEP также добавляет инфу: IP VTEP1 &amp;lt;&amp;gt; MAC VM1 в свою локальную VXLAN table.&lt;br /&gt;
#VM2 получила arp и ответила на него, раскрыв свой MAC.&lt;br /&gt;
#VTEP2 инкапсулировала ответ и передала его к VTEP1.&lt;br /&gt;
#VTEP1 получила arp-response, деинкапсулировала и отдала его VM1. И еще записала в VXLAN table IP VTEP2 &amp;lt;&amp;gt; MAC VM2.&lt;br /&gt;
#Далее VM1 и VM2 общаются via unicast.&lt;br /&gt;
&lt;br /&gt;
Можно для нескольких VNI назначать одну группу. VTEP все-равно при передаче пакета проверяет VNI, а флуд при этом все-равно уменьшится.&lt;br /&gt;
&lt;br /&gt;
Подходит только для девайсов, находящихся в одном L2 домене - это главный минус такой системы.&lt;br /&gt;
&lt;br /&gt;
Кстати, VTEP не поддерживают аутентификацию, поэтому злоумышленник запросто может вторгнуться в ваш домен. Поэтому рекомендовано все-же использовать control plane learning.&lt;br /&gt;
&lt;br /&gt;
===Control plane learning [BGP-EVPN]===&lt;br /&gt;
Подразумевается, что switches learning делается до того, как начинается процесс передачи трафика. Работает аналогично протоколам маршрутизации.&lt;br /&gt;
&lt;br /&gt;
Свитчи пирятся по BGP и делятся своими префиксами. Для обмена используется evpn family. &lt;br /&gt;
&lt;br /&gt;
Некоторые свитчи будут иметь VTEPs и понятно, что по BGP проанонсятся их адреса.&lt;br /&gt;
&lt;br /&gt;
В control plane learning и VTEP появляется &amp;quot;аутентификация&amp;quot;. Когда адреса VTP анонсятся по BGP, они также заносятся в white list. Когда кто-то левый захочет приконнектиться - он не сможет этого сделать до тех пор, пока он не появится в white-list.&lt;br /&gt;
&lt;br /&gt;
VM MAC добавляются в процесс BGP. Соответственно, когда одна VM передает другой фрейм, роутинг к нужному хосту происходит на основании BGP. {это все подробно описано в EVPN}&lt;br /&gt;
&lt;br /&gt;
При использовании control plane learning - появляется и arp suppression. VM посылает ARP-req, который доходит до свитча. А свитч уже по BGP знает соответствие IP&amp;lt;&amp;gt;mac, и отдает mac удаленной VM.&lt;br /&gt;
&lt;br /&gt;
Для BUM трафика советуют также использовать Multicast, как хорошо масштабируемый.&lt;br /&gt;
&lt;br /&gt;
==VXLAN Routing==&lt;br /&gt;
Заставляем общаться разные VNI при помощи L3 gateway.&lt;br /&gt;
&lt;br /&gt;
L3 gateway можно делать как на LEAF, так и на SPINE.&lt;br /&gt;
&lt;br /&gt;
Могут использоваться: L2VNI, L3VNI.&lt;br /&gt;
&lt;br /&gt;
'''L2VNI''': для бриджей. То есть когда трафик остается внутри одного LAN-сегмента.&lt;br /&gt;
&lt;br /&gt;
'''L3VNI''': для роутинга. То есть когда трафик должен выйти за переделы LAN. L3VNI опциональны, но если хотите роутить на локальном свитче - придется воспользоваться.&lt;br /&gt;
&lt;br /&gt;
VTEPs должны знать только про локальные L2VNI, которые они локально обслуживают. С другой стороны ВСЕ VTEPs должны знать обо всех L3VNI, что называется '''anycast gateway'''.&lt;br /&gt;
&lt;br /&gt;
В этом случает каждый свитч - это GW в VNI [10.1.1.1]. На соседнем физическом свитче с тем же VNI настраивается такой же адрес шлюза [10.1.1.1]. И все свитчи в этом VNI будут иметь одинаковый virt mac-add для шлюза. Это приемущество по сравнению с VRRP/HSRP в том, что: не нужны какие-то таймеры или hello-massages для синхронизации между двумя свитчами. &lt;br /&gt;
&lt;br /&gt;
То есть для одного VNI, все VM, которые ему принадлежат - имеют один и тот же шлюз! Все зависимости от того к какому свитчу физически включен сервер.&lt;br /&gt;
&lt;br /&gt;
Это способствует быть VM - мобильной и перемещаться на другие сервачки! &lt;br /&gt;
&lt;br /&gt;
L3VNI связаны с VRF. То есть один VNI = один Customer = один RD+RT.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
На одном свитче будет настроен VRF с двумя irb интерфейсами: irb.100 [10.1.100.1], irb.101 [10.1.101.1]. Каждый будет обслуживать свой L2 домен: VTEP with VLAN100, a VNI1000 и VTEP with VLAN101, a VNI1001 соответственно.&lt;br /&gt;
&lt;br /&gt;
#QFX получает VXLAN пакет с outer dest ip. Деинкасулирует его. &lt;br /&gt;
#QFX делает lookup dest mac-адреса, который = IRB VIP MAC.&lt;br /&gt;
#Делает L3 lookup внутри VRF для IP-dest.&lt;br /&gt;
#Далее делается ARP lookup для IP dest. Если есть mapping, то шлется в iface. Если нет, то выясняется куда слать by looking at the MAC table of the other VNI.&lt;br /&gt;
#QFX генерирует новый L2 header с dest-mac для dest server. Потом шлет инкапсулированный VXLAN к remote VTEP.&lt;br /&gt;
&lt;br /&gt;
=EVPN-VXLAN=&lt;br /&gt;
EVPN решает две проблемы:&lt;br /&gt;
#MAC learning control plane for overlay networks&lt;br /&gt;
#the need for workload mobility. Приложениям требуется L2 для взаимодействия друг с другом. Когда речь про app в разных DC, обычным вланом не обойтись.&lt;br /&gt;
&lt;br /&gt;
EVPN относится а BGP family. Он использует MP BGP для MAC learning. Благодаря этому роутеры/свитчи обрабатывают MAC как маршруты. Что позволяет использовать несколько path одновременно (без физического гашения избыточных портов).&lt;br /&gt;
&lt;br /&gt;
EVPN позволяет маршрутизировать не только MAC, но и ARP (IP + MAC). В дальнейшем ARP можно будет привязать и к VLAN-tag.&lt;br /&gt;
&lt;br /&gt;
По сравнению с VPLS - тут явно больше преимуществ для использования.&lt;br /&gt;
&lt;br /&gt;
Немного новой терминологии для EVPN в IP Fabric:&lt;br /&gt;
*Ethernet Tags = VLAN-ID&lt;br /&gt;
*MAC-VRF = Mac-table [в EVPN можно использовать import/export policies]&lt;br /&gt;
*export-policy = обычная политика, которая на все изученные местные (local) mac-addr навешивает target и отправляет route к remote sites.&lt;br /&gt;
*import-policy = обычная политика, которая по наличию правильного target кладет route в MAC-VFR.&lt;br /&gt;
*RD - uniq ID, который назначается на MAC-VRF. Уникальный в пределах IP Fabric.&lt;br /&gt;
*RT community - навешивается на routes посредством политик. На роутерах обозначает принадлежность к той или иной routing-table.&lt;br /&gt;
*EVPN services = включает в себя разные vlan-mapping options.&lt;br /&gt;
&lt;br /&gt;
==VLAN Services==&lt;br /&gt;
*'''VLAN-based service''' - один влан на весь EVPN. То есть все девайсы на всех sites работают в одном влане. Можно делать vlan-map vlan-id 1 на vlan-id 2. Когда, например на разных фабриках используются разные vlan-id.  It's ok. Плюс такого метода - ограничение broadcast. Но он не сильно масштабируем.&lt;br /&gt;
*'''VLAN bundle service''' - в одном EVPN много разных вланов. Полезно, когда услуга одна для нескольких арендаторов. У арендаторов используются разные вланы и никак по-другому. Плюсы: удобно для конфига. Но брадакст в таком домене будет влиять на ВСЕ вланы в нем.&lt;br /&gt;
*'''VLAN aware service''' - тут, кажется, используются bridge-domain внутри одного EVPN instance. Каждый со своим vlan-id внутри. То есть это дает возможность использовать в ENI (EVPN instance) несколько vlan-id, но которые не будут в одном broadcast домене. При флудах будут страдать конкретные вланы.&lt;br /&gt;
==Data Plane==&lt;br /&gt;
В качестве dataplane для EVPN из близкого к теме могут быть: MPLS, VXLAN. Есть еще и другие: PBB, STT, NVGRE..&lt;br /&gt;
&lt;br /&gt;
VXLAN encapsulation метод основан на VNIs, тогда ваши vlan-id 1, vlan-id 2 &amp;gt; vni-1, vni-2 &amp;gt; vxlan-1, vxlan-2 (с изученными Mac-addr) &amp;gt; в EVPN instance-1 с uniq RD.&lt;br /&gt;
&lt;br /&gt;
===BGP Route Types for EVPN===&lt;br /&gt;
:-'''Ethernet Auto-Discovery (AD) Route''': когда новый свитч вступает в EVPN, он пользуется этими роутами, чтобы объявить о себе.&lt;br /&gt;
   RD [8], _ESI [10], _ET [4], MPLS LBL [3]&lt;br /&gt;
&lt;br /&gt;
Передается flag, указывающий сколько линков можно использовать для передачи.&lt;br /&gt;
[[Файл:EVPN routes type1.png|мини|без]]&lt;br /&gt;
Например, у нас один сервер включен двумя ногами в разные свитчи. Когда LEAF4 получит auto-discovery route от LEAF1 и LEAF2, то route будет вставлен в таблицу, но также, LEAF4 будет знать, что до данного сервера у него '''два''' VXLAN, которые можно использовать.&lt;br /&gt;
&lt;br /&gt;
Это как раз различие в active/active links [flag set to 0] и single link [flag is set to 1].&lt;br /&gt;
&lt;br /&gt;
Auto-discovery process отрабатывает намного быстрее, так как при стандартном включении в свитч при падении линка (за которым были тысячи mac-addr) таблица будет чистить эти тысячи маков гораздо дольше, чем один route, который соответствует (ассоциирован с) линку.&lt;br /&gt;
&lt;br /&gt;
:-'''MAC/IP Advertisement Route''': MAC advertisement (также может передавать IP+MAC).&lt;br /&gt;
    RD [8], ESI [10], _ET [4],&lt;br /&gt;
    _MAC Addr Lenght [1], _MAC Addr [6],&lt;br /&gt;
    _IP Addr Lenght [1], _IP Addr [0|4|16]&lt;br /&gt;
    MPLS LBL1 [3]&lt;br /&gt;
    MPLS LBL2 [0|3]&lt;br /&gt;
&lt;br /&gt;
[[Файл:EVPN routes type2.png|мини|без]]&lt;br /&gt;
&lt;br /&gt;
LEAF4 изучил Mac server2. Начал передавать его другим sites EVPN с соответствующим community, которое навешивается согласно export policy.&lt;br /&gt;
&lt;br /&gt;
LEAF1 исходя из import policy решает принять ли маршрут. Если import policy отсутствует - это равнозначно discard.&lt;br /&gt;
&lt;br /&gt;
:-'''Inclusive Multicast Ethernet Tag Route''': BUM flooding.&lt;br /&gt;
    ET [4], IP Addr Lenght [1], Originating Router's IP Addr [4|16]&lt;br /&gt;
&lt;br /&gt;
В Juniper EVPN/VXLAN свитчи поддерживают ingress replication BUM. То есть свитч получил BUM, создал unicast копии этого трафик и отправил remote sites этого EVPN.&lt;br /&gt;
&lt;br /&gt;
Route информирует remote PE - как обработать BUM traffic и PMSI аттрибуты. Он определяет следует использовать PIM или PMSI и на какой dst adddr отправлять BUM traffic.  &lt;br /&gt;
&lt;br /&gt;
LEAF2 передает инфу, что он ждет и использует ingress replication и что LEAF1 должен использовать 4.4.4.4 как dst addr VXLAN пакетов, которые передают BUM.&lt;br /&gt;
&lt;br /&gt;
:-'''Ethernet Segment Route''': ES and DF election.&lt;br /&gt;
    _ESI [10], _IP Addr Lenght [1], _IP Addr [4|16]&lt;br /&gt;
&lt;br /&gt;
Решает проблемы:&lt;br /&gt;
*выбор designated forwarder (DF)&lt;br /&gt;
*split-horizont - preventing routing loops in the routing protocol. Not to advertise route to it's origin iface.&lt;br /&gt;
В EVPN есть стандартные правила split-horizont:&lt;br /&gt;
#Локальный свитч получил BUM от сервера. Свитч перешлет BUM только серверам в том же влане и remote sites EVPN instance. Но не обратно в интерфейс сервера, откуда он пришел.&lt;br /&gt;
#Свитч получи BUM от remote site. Свитч отправит BUM локальным серверам. Но не будет передавать его другим remote sites.&lt;br /&gt;
&lt;br /&gt;
При использовании active/active у нас могут возникнуть проблемы и петли все-таки могут возникнуть.&lt;br /&gt;
&lt;br /&gt;
Как избавиться от этого?&lt;br /&gt;
&lt;br /&gt;
Для одного EVPN instance выбрать одного DF для EVPN для передачи BUM traffic. Все остальные будут дропать BUM.&lt;br /&gt;
&lt;br /&gt;
:-'''IP Prefix Route''': IP route advertisement&lt;br /&gt;
Обычно можно увидеть при DC interconnect.&lt;br /&gt;
&lt;br /&gt;
LEAF1 получил трафик от Server 1. Инкапсулировал Eth в VXLAN и отправил на EDGE router DC1 (GW for LEAF1 with irb iface). &lt;br /&gt;
&lt;br /&gt;
EDGE снимет Eth header, и IP пакет смаршрутизирует согласно ip routing table.&lt;br /&gt;
&lt;br /&gt;
В таблице будет route type 5, который был получен от remote PE DC2. EDGE засунет IP в VXLAN к DC2.&lt;br /&gt;
&lt;br /&gt;
EDGE DC2 снимет VXLAN header, смаршрутизирует ip пакет. Засунет его в Eth заголовок с dst MAC Server 2. Отправит фрейм.&lt;br /&gt;
&lt;br /&gt;
===Distributed Layer 3 Gateway===&lt;br /&gt;
[[Файл:EVPN gateway.png|мини|без]]&lt;br /&gt;
&lt;br /&gt;
На SPINE1 и SPINE2 настроен одинаковый Virtual ip gateway address 10.0.1.254 и одинаковый Virtual MAC 00:01:8d:00:01:02. &lt;br /&gt;
&lt;br /&gt;
SPINE1 и SPINE2 передают в EVPN type 1 auto-discovery и type 2 Mac+ip learning. &lt;br /&gt;
&lt;br /&gt;
LEAF1 получит равнозначные по стоимости маршруты к одному MAC в том же сегменте. И начнет балансить трафик между ними.&lt;br /&gt;
&lt;br /&gt;
==Design==&lt;br /&gt;
Как это все ляжет на сеть?&lt;br /&gt;
&lt;br /&gt;
Серверы включены в LEAF в своих вланах. &lt;br /&gt;
&lt;br /&gt;
VLAN связаны с VXLAN VTEP на портах свитчей.&lt;br /&gt;
&lt;br /&gt;
VTEP сопоставляются в соответствующие EVPN (которые делают L2 связность для VTEP).&lt;br /&gt;
&lt;br /&gt;
Как говорили выше: можно сопоставлять несколько VTEP одному EVPN instance (c one-to-one mapping или many-to-one mapping).&lt;br /&gt;
&lt;br /&gt;
=Controllers=&lt;br /&gt;
Речь про SDN контроллеры&lt;br /&gt;
=Дополнительная информация=&lt;br /&gt;
*[[EVPN]]&lt;br /&gt;
*[[Traffic engineering]]&lt;br /&gt;
*[[Глава 1. Основы MPLS и VPN]]&lt;br /&gt;
*[[Глава 2. Label Distribution Protocols (RSVP, LDP)]]&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:VTEP_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D0%BD%D1%8B%D0%B9_%D0%B8_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BD%D1%8B%D0%B9.png&amp;diff=2072</id>
		<title>Файл:VTEP аппаратный и програмный.png</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:VTEP_%D0%B0%D0%BF%D0%BF%D0%B0%D1%80%D0%B0%D1%82%D0%BD%D1%8B%D0%B9_%D0%B8_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BD%D1%8B%D0%B9.png&amp;diff=2072"/>
		<updated>2021-12-25T18:29:05Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=EVPN&amp;diff=2071</id>
		<title>EVPN</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=EVPN&amp;diff=2071"/>
		<updated>2021-12-25T18:23:45Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: /* Дополнительная информация */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#description2: Основы EVPN. Конфигурация EVPN. Траблшутинг EVPN. Multi-homing EVPN. L2 процессы внутри EVPN. L3 процессы внутри EVPN. MP-BGP EVPN Route Summary. High Availability в EVPN. Информация для подготовки к экзаменам Juniper.}}&lt;br /&gt;
&lt;br /&gt;
=Основы EVPN=&lt;br /&gt;
Обеспечивает виртуальную многоточечную связность между разными L2 доменами через IP или MPLS сеть. Внедрить можно уже на существующей сети, потому что в ядре уже используются нужные технологии: MPLS или IP.&lt;br /&gt;
&lt;br /&gt;
Отлично подходит для соединения data-centers sites.&lt;br /&gt;
&lt;br /&gt;
CE, включенный в EVPN видит всю сеть как один бродкаст домен (большой свитч).&lt;br /&gt;
&lt;br /&gt;
Control-plane mac-learning =&amp;gt; all-active multihoming, traffic load balancing, MAC mobility.&lt;br /&gt;
&lt;br /&gt;
Имеет хорошую возможность эффективно роутить вх и исх трафик, даже при миграции хостов в data-centers. &lt;br /&gt;
&lt;br /&gt;
Имеет хорошие показатели по сходимости при link failure и node failure.&lt;br /&gt;
&lt;br /&gt;
По аналогии с другими VPN, для EVPN на PE роутера создается отдельный Instance (EVIs), который логически разделяет клиентов. &lt;br /&gt;
&lt;br /&gt;
CE имеют соединение с PE. PE обмениваются между собой информацией, использую MP-BGP и инкапсулированный трафик также передают между PE.&lt;br /&gt;
&lt;br /&gt;
'''Особенность''': есть mac-learning, который осуществляется на control plane. Новый мак-адрес изученный PE, передается остальным удаленным PE, используя '''MP-BGP MAC route'''. Mac-learning в EVPN намного более тонко работает, чем в VPLS.&lt;br /&gt;
&lt;br /&gt;
MAC-learning на control-plane позволяет примерять policy и другие опции к MAC, изученными между PE, что делает подобный mac-learning более эффективным и дает возможность обеспечивать защиту на сети.&lt;br /&gt;
&lt;br /&gt;
С использованием EVPN, можно реализовать на сети много разных топологий: E-LINE, E-LAN, E-TREE.&lt;br /&gt;
&lt;br /&gt;
EVPN полезно внедрять ISP, предоставляющим своим клиентам L2VPN, L3VPN, Internet access и которые дополнительно хотели бы для существующих клиентов предоставить облачные сервисы и хранение данных.&lt;br /&gt;
&lt;br /&gt;
Также EVPN эффективно использовать для соединения разных data-centers (DC) site. &lt;br /&gt;
&lt;br /&gt;
EVPN обладает такими функциями:&lt;br /&gt;
*'''Multi-homing между CE-PE''' с поддержанием active-active линков.&lt;br /&gt;
Дает возможность подключиться одному CE к нескольким PE, при этом трафик передается по всем активным линкам.&lt;br /&gt;
&lt;br /&gt;
'''Aliasing''' дает возможность удаленным PE делать балансировку к multi-homed PE, через core, даже в том случае, когда удаленный PE изучил мак с одного из Multi-homed PE.&lt;br /&gt;
&lt;br /&gt;
*В EVPN есть механизмы для '''предотвращения BUM петель'''.&lt;br /&gt;
&lt;br /&gt;
В случае, когда CE не поддерживает балансировку или PE не имеет средств защиты от BUM петель, тогда можно организовать multi-homing с одним активным линком между PE и CE. &lt;br /&gt;
&lt;br /&gt;
*'''Быстрое восстановление сервиса'''.&lt;br /&gt;
С помощью multi-homing, обеспечивается быстрое восстановление сервиса, т.к. при падении PE или линка до PE, трафик переходит на другой активный линк.&lt;br /&gt;
&lt;br /&gt;
Трафик с другой стороны: удаленный PE обновляет свою forwarding table и также посылает трафик в сторону оставшихся активных PE.&lt;br /&gt;
&lt;br /&gt;
*Поддержка '''миграции виртуальных машин или MAC mobility'''.&lt;br /&gt;
У PE есть возможность отслеживать перемещение мак-адреса виртуальной машины (VM).&lt;br /&gt;
При этом, когда VM переместилась, то новый PE, который изучил ее MAC, делает MAC route update. Старый PE, получив такой update, удаляет у себя информацию об этом MAC. &lt;br /&gt;
&lt;br /&gt;
*'''Интеграция L3 роутинга с оптимальным forwarding'''.&lt;br /&gt;
Для L2 домена можно внедрить L3 routing, путем добавления IRB интерфейса для влана в EVPN instance. Хосты будут использовать этот irb как default gateway.&lt;br /&gt;
&lt;br /&gt;
Irb IP и MAC анонсируются остальным удаленным PE EVPN путем ''Default Gateway Synchronization''. Это полезно с той точки зрения, что все PE будут в курсе Def GW и при переезде VM на другой PE, PE будет проксировать arp от имени изученного Def GW и маршрутизировать трафик от VM напрямую к destination.&lt;br /&gt;
&lt;br /&gt;
Таким же образом, через snooping ARP и DHCP пакетов, происходит заучивание ip-адресов хостов EVPN дата-центров. Называется это ''Host MAC/IP Synchronization'''. После этого появляется возможность передавать трафик PE, ближайшему к хосту. Этот метод совместим c MAC migration. &lt;br /&gt;
&lt;br /&gt;
''Asymmetric IRB Forwarding'': L2 заголовок перезаписывает ingress PE перед отправкой пакета. Это позволяет dest PE обойтись без L3 lookup, когда он производит передачу пакета.&lt;br /&gt;
&lt;br /&gt;
*Уменьшение утилизации полосы пропускания для multi-destination трафика между разными частями дата-центра в разных местах.&lt;br /&gt;
:*PE делают Proxy ARP: изучая ip хостов и Def GW.&lt;br /&gt;
:*P2MP or MP2MP LSPs между сторонами дата-центров.&lt;br /&gt;
*Поддерживает инкапсуляцию разных данных. Например, GRE tunnels с IPSEC.&lt;br /&gt;
&lt;br /&gt;
=Конфигурация EVPN=&lt;br /&gt;
Пример конфига разбирается на примере лабы, поднятой в книге: Day One - EVPN&lt;br /&gt;
&lt;br /&gt;
[[Файл:EVPN_laba.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
Для поддержки trio-based FPCs, требуется включение '''enhanced-ip'''&lt;br /&gt;
 blair# set chassis network-services enhanced-ip    &lt;br /&gt;
&lt;br /&gt;
==В уровне ядра==&lt;br /&gt;
*OSPF, на всех интерфейсах. Также включаем TE внутри OSPF.&lt;br /&gt;
*MPLS с RSVP-TE LSP между всеми PE (full-mesh). LSP будут использоваться как для EVPN, так и для IP VPN.&lt;br /&gt;
*MP-BGP для EVPN и IP VPN. Конфигурируется сессия с P-роутером, который в свою очередь также является и RR (и советуют настроить bfd-detection). Включаем необходимые family: inet-vpn, evpn.&lt;br /&gt;
&lt;br /&gt;
==На уровне доступа==&lt;br /&gt;
*В сторону CE настраиваем отдельный логический интерфейс для каждого instance с требуемыми вланами.&lt;br /&gt;
&lt;br /&gt;
*ESI - Ethernet Segment ID: требуется для multi-homing. Первый октет = Type, остальные - ID. Вид: ''00:11:11:11:11:11:11:11:11:11''.&lt;br /&gt;
&lt;br /&gt;
Задаем ''all-active'', что обеспечивает балансировку между линками CE &amp;lt;&amp;gt; PE.&lt;br /&gt;
*LACP даже с одним линком имеет смысл: дает возможность определить действительно ли по линку ходит трафик или нет. Если LACP развалится, значит сигнальные сообщения не проходят по физическим линкам внутри LACP. Также при добавлении или исключении линка из LACP не страдает передача трафика. LACP в лабе настроен между двумя PE и свитчем на стороне CE.&lt;br /&gt;
&lt;br /&gt;
 set interface xe-1/0/0 gither-options 802.3.ad ae0 '''hold-time up 180000 down 0''' &lt;br /&gt;
&lt;br /&gt;
*Задается одинаковый system-id для LACP на обоих РЕ (Node's System ID, encoded as a MAC address). При этом СЕ свитч думает, что LACP установлен с одним устройством.&lt;br /&gt;
 interfaces {&lt;br /&gt;
    ae0 {&lt;br /&gt;
       flexible-vlan-tagging;&lt;br /&gt;
       encapsulation flexible-ethernet-services;&lt;br /&gt;
       esi {&lt;br /&gt;
          00:22:22:22:22:22:22:22:22:22;&lt;br /&gt;
          all-active; }&lt;br /&gt;
    aggregated-ether-options {&lt;br /&gt;
       lacp {&lt;br /&gt;
          '''system-id 00:00:00:00:00:02'''; }}&lt;br /&gt;
&lt;br /&gt;
==Сервисы==&lt;br /&gt;
*'''EVPN VLAN-based''': один влан, который принадлежит одному bridge домену.&lt;br /&gt;
Пример конфига:&lt;br /&gt;
 routing-instances {&lt;br /&gt;
    EVPN-1 {&lt;br /&gt;
        instance-type '''evpn''';&lt;br /&gt;
        '''vlan-id 100''';&lt;br /&gt;
        interface ae0.100;&lt;br /&gt;
        routing-interface '''irb.100''';&lt;br /&gt;
        route-distinguisher 11.11.11.11:1;&lt;br /&gt;
        vrf-target target:65000:1;&lt;br /&gt;
        protocols {&lt;br /&gt;
            evpn {&lt;br /&gt;
                '''default-gateway do-not-advertise'''; }}}}&lt;br /&gt;
 &lt;br /&gt;
 interfaces {&lt;br /&gt;
    irb {&lt;br /&gt;
        unit 100 {&lt;br /&gt;
            family inet {&lt;br /&gt;
                address 100.1.1.1/24;  }&lt;br /&gt;
            '''mac 00:00:00:01:01:01'''; }}}&lt;br /&gt;
&lt;br /&gt;
Для этого EVPN используется только 1 влан = 100, в данном случае.&lt;br /&gt;
&lt;br /&gt;
mac 00:00:00:01:01:01 - для irb-интерфейсов одного EVPN в разных site, используют одинаковые ip/mac. Делается для упрощения конфига, уменьшения control plane перегрузки, и минимизации времени восстановления при падении PE.&lt;br /&gt;
&lt;br /&gt;
default-gateway do-not-advertise - т.к. для irb указаны одинаковые ip/mac, то можно выключить функцию анонсирования MAC/IP binding между PE.&lt;br /&gt;
&lt;br /&gt;
*'''EVPN VLAN-aware''': несколько пользователей с независимыми vlan и ip.&lt;br /&gt;
Оба сервиса могут использовать vlan translation (настраивается на PE), что дает возможность использовать разные вланы в разных site.&lt;br /&gt;
&lt;br /&gt;
Хорошей практикой считается настраивать VLAN-aware, даже когда используется всего 1 vlan. Так сказать, задел на будущее.&lt;br /&gt;
&lt;br /&gt;
Пример конфига:&lt;br /&gt;
 routing-instances {&lt;br /&gt;
    EVPN-2 {&lt;br /&gt;
       instance-type '''virtual-switch''';&lt;br /&gt;
       interface ae0.200;&lt;br /&gt;
       route-distinguisher 11.11.11.11:2;&lt;br /&gt;
       vrf-target target:65000:2;&lt;br /&gt;
       protocols {&lt;br /&gt;
          evpn {&lt;br /&gt;
             '''extended-vlan-list 200-202''';&lt;br /&gt;
             '''default-gateway advertise'''; }}&lt;br /&gt;
 bridge-domains {&lt;br /&gt;
    V200 {&lt;br /&gt;
       vlan-id 200;&lt;br /&gt;
       routing-interface irb.200; }&lt;br /&gt;
    V201 {&lt;br /&gt;
       vlan-id 201;&lt;br /&gt;
       routing-interface irb.201;}&lt;br /&gt;
    V202 {&lt;br /&gt;
        vlan-id 202;&lt;br /&gt;
        routing-interface irb.202; }}}}&lt;br /&gt;
 interfaces {&lt;br /&gt;
         irb {&lt;br /&gt;
             unit 200 {&lt;br /&gt;
                 family inet {&lt;br /&gt;
                     address '''200.1.1.1/24'''; }&lt;br /&gt;
                 mac '''00:00:c8:01:01:01'''; }&lt;br /&gt;
             unit 201 {&lt;br /&gt;
                 family inet {&lt;br /&gt;
                     address '''201.1.1.1/24'''; }&lt;br /&gt;
                 mac '''00:00:c9:01:01:01'''; }&lt;br /&gt;
             unit 202 {&lt;br /&gt;
                 family inet {&lt;br /&gt;
                     address '''202.1.1.1/24'''; }&lt;br /&gt;
                 mac '''00:00:ca:01:01:01''' }}}&lt;br /&gt;
&lt;br /&gt;
extended-vlan-list 200-202 - определяет список вланов, которые будут передаваться через ядро.&lt;br /&gt;
&lt;br /&gt;
Пример настройки vlan-translation на PE:&lt;br /&gt;
 interfaces {&lt;br /&gt;
    ae0 {&lt;br /&gt;
       flexible-vlan-tagging;&lt;br /&gt;
       encapsulation flexible-ethernet-services;&lt;br /&gt;
       esi {&lt;br /&gt;
          00:22:22:22:22:22:22:22:22:22;&lt;br /&gt;
          all-active; }&lt;br /&gt;
    aggregated-ether-options {&lt;br /&gt;
       lacp {&lt;br /&gt;
          system-id 00:00:00:00:00:02; }}&lt;br /&gt;
    unit 100 {&lt;br /&gt;
       encapsulation vlan-bridge;&lt;br /&gt;
       vlan-id 100;&lt;br /&gt;
       family bridge; }&lt;br /&gt;
    unit 200 {&lt;br /&gt;
        family bridge {&lt;br /&gt;
        interface-mode trunk;&lt;br /&gt;
        vlan-id-list [ 200 201 '''202''' ];&lt;br /&gt;
        '''vlan-rewrite {'''&lt;br /&gt;
            '''translate 222 202'''; }}}}}&lt;br /&gt;
&lt;br /&gt;
*'''IP-VPN''': За маршрутизацию между VLAN отвечает irb-интерфейс, присвоенный в общий IP VPN. Также через него можно осуществлять маршрутизацию и с внешним миром.&lt;br /&gt;
&lt;br /&gt;
Можно добавлять разные irb в разные IP VPN, чтобы разделить L3 трафик.&lt;br /&gt;
&lt;br /&gt;
Пример конфига:&lt;br /&gt;
 routing-instances {&lt;br /&gt;
         IPVPN-1 {&lt;br /&gt;
             instance-type vrf;&lt;br /&gt;
             interface irb.100;&lt;br /&gt;
             interface irb.200;&lt;br /&gt;
             interface irb.201;&lt;br /&gt;
             interface irb.202;&lt;br /&gt;
             route-distinguisher 11.11.11.11:111;&lt;br /&gt;
             vrf-import IpVpnDiscardEvpnSubnets;&lt;br /&gt;
             vrf-export IpVpnAddCommunities;&lt;br /&gt;
             vrf-table-label;&lt;br /&gt;
&lt;br /&gt;
 policy-options {&lt;br /&gt;
         prefix-list PL-EVPN {&lt;br /&gt;
             100.1.1.0/24;&lt;br /&gt;
             200.1.1.0/24;&lt;br /&gt;
             201.1.1.0/24;&lt;br /&gt;
             202.1.1.0/24; }&lt;br /&gt;
         policy-statement IpVpnAddCommunities {&lt;br /&gt;
             term 10 {&lt;br /&gt;
                 from {&lt;br /&gt;
                     prefix-list-filter PL-EVPN orlonger; }&lt;br /&gt;
                 then {&lt;br /&gt;
                     community add COMM-EVPN;&lt;br /&gt;
                     community add COMM-IPVPN-1;&lt;br /&gt;
                     accept; }}&lt;br /&gt;
             term 100 {&lt;br /&gt;
                 then accept;}}&lt;br /&gt;
          policy-statement IpVpnDiscardEvpnSubnets {&lt;br /&gt;
             term 10 {&lt;br /&gt;
                from community COMM-EVPN;&lt;br /&gt;
                then reject; }&lt;br /&gt;
             term 100 {&lt;br /&gt;
                from community COMM-IPVPN-1;&lt;br /&gt;
                then accept; }}&lt;br /&gt;
          community COMM-EVPN members 65000:1234;&lt;br /&gt;
          community COMM-IPVPN-1 members target:65000:101;}&lt;br /&gt;
&lt;br /&gt;
- vrf-export IpVpnAddCommunities; - добавляет community помимо ipvpn (основное) еще и evpn (дополнительно обозначает evpn subnets and hosts). &lt;br /&gt;
&lt;br /&gt;
- vrf-import IpVpnDiscardEvpnSubnets; - т.к. evpn subnets and hosts уже синхронизируются путем ''Host MAC/IP Synchronization'', то передавать эту информацию через IP VPN - избыточно, поэтому маршруты с таким community будут отброшены, прилетев на PE.&lt;br /&gt;
&lt;br /&gt;
==Remote PE==&lt;br /&gt;
В лабе, удаленный PE31 получает все маршруты от других PE в сети. При этом в RI IP-VPN на нем настроен только vrf-target target:65000:101, который соответствует COMM-IPVPN-1, таким образом, маршруты с community, соответствующие EVPN, будут просто игнорироваться для этого site.&lt;br /&gt;
&lt;br /&gt;
'''Aliasing''':&lt;br /&gt;
&lt;br /&gt;
Также, на данном PE31 будут получены маршруты Data-Center 1 от двух PE, участвующих в multi-homing. Чтобы PE31 мог балансировать между ними нагрузку (балансировка применяется к L2 и L3), требуется настроить BGP особым образом: &lt;br /&gt;
 bgp {&lt;br /&gt;
 	group Internal {&lt;br /&gt;
 		type internal;&lt;br /&gt;
 		'''family inet-vpn''' {&lt;br /&gt;
 			'''any'''; }&lt;br /&gt;
 		'''multipath''';&lt;br /&gt;
 		neighbor 1.1.1.1 {&lt;br /&gt;
 			'''local-address 31.31.31.31''';&lt;br /&gt;
 			bfd-liveness-detection {&lt;br /&gt;
 				minimum-interval 200;&lt;br /&gt;
 				multiplier 3;}}}}&lt;br /&gt;
 policy-options {&lt;br /&gt;
 	policy-statement lb {&lt;br /&gt;
 		then {&lt;br /&gt;
 			'''load-balance per-packet'''; }}}&lt;br /&gt;
 routing-options {&lt;br /&gt;
 	router-id 31.31.31.31;&lt;br /&gt;
 	autonomous-system 65000;&lt;br /&gt;
 	'''forwarding-table''' {&lt;br /&gt;
 		'''export lb'''; }}&lt;br /&gt;
&lt;br /&gt;
=Траблшутинг EVPN=&lt;br /&gt;
&lt;br /&gt;
==На уровне ядра==&lt;br /&gt;
*OSPF adjacencies&lt;br /&gt;
*MP-BGP sessions to P. Families: bgp.l3vpn.0, bgp.evpn.0, IPVPN-1.inet.0, EVPN-1.evpn.0, EVPN-2.evpn.0, and__default_evpn__.evpn.0.&lt;br /&gt;
*BFD session: show bfd session&lt;br /&gt;
*LSPs to all remote PE - are up.&lt;br /&gt;
&lt;br /&gt;
==На уровне доступа==&lt;br /&gt;
*PE-CE links: interfaces are UP, LACP is ok.&lt;br /&gt;
&lt;br /&gt;
==Multi-homing==&lt;br /&gt;
Несколько PE соединяются с одним CE. Это важная фитча. Обеспечивает надежную работу при link-fail или node-fail. Также обеспечивает балансировку для PE &amp;lt;&amp;gt; CE линков.&lt;br /&gt;
&lt;br /&gt;
Для ее корректной работы требуется настройка одинакового ESI на разных multi-homing PE. Таким образом PE узнают друг о друге.&lt;br /&gt;
&lt;br /&gt;
ES route имеет Type 4 и имеет несколько других важных полей (то, что будет прилетать на удаленный PE):&lt;br /&gt;
*Router's IP addr = loopback addr.&lt;br /&gt;
*ESI: 10 октетов. ES route будет принят PE только в том случае, если ESI для двух PE будет полностью совпадать.&lt;br /&gt;
*ES Import RT community - полученный из ESI. Представляет из себя только 6 октетов. Поэтому для разных ESI, community может быть одинаковым. То есть судя только по community нельзя точно определить подходит ли пришедший route, но такой дополнительный метод проверки тем не менее значительно уменьшает кол-во routes, которое требуется рассмотреть в дальнейшем PE.&lt;br /&gt;
&lt;br /&gt;
Для проверки и просмотра полученных ES routes:&lt;br /&gt;
 PE11&amp;gt; show route table bgp.evpn.0 detail | '''find &amp;quot;4:/1&amp;quot;'''&lt;br /&gt;
 '''4:12.12.12.12:0::111111111111111111:12.12.12.12/304''' (1 entry, 0 announced)&lt;br /&gt;
             *BGP    Preference: 170/-101&lt;br /&gt;
                     Route Distinguisher: 12.12.12.12:0&lt;br /&gt;
                     Next hop type: Indirect&lt;br /&gt;
                     Address: 0x95c606c&lt;br /&gt;
                     ...&lt;br /&gt;
                     Cluster list: 1.1.1.1&lt;br /&gt;
                     Originator ID: 12.12.12.12&lt;br /&gt;
                     Communities: '''es-import-target:11-11-11-11-11-11'''&lt;br /&gt;
&lt;br /&gt;
Также в таблице ''default.evpn.evpn.0'' будут хранится все ES route локального PE, в том виде, когда к ним еще не присоединилась community конкретного EVI&lt;br /&gt;
 PE11&amp;gt; show route table __default_evpn__.evpn.0 | find 4:&lt;br /&gt;
 4:11.11.11.11:0::111111111111111111:11.11.11.11/304&lt;br /&gt;
                   *[EVPN/170] 04:40:23&lt;br /&gt;
                      Indirect&lt;br /&gt;
 4:12.12.12.12:0::111111111111111111:12.12.12.12/304&lt;br /&gt;
                   *[BGP/170] 04:40:04, localpref 100, from 1.1.1.1&lt;br /&gt;
                      AS path: I, validation-state: unverified&lt;br /&gt;
                    &amp;gt; to 10.11.12.12 via ae1.0, label-switched-path from-11-to-12&lt;br /&gt;
&lt;br /&gt;
===Designated forwarder===&lt;br /&gt;
Сразу после установления Multi-homing peering между PE выбирается Designated Forwarder для ES.&lt;br /&gt;
&lt;br /&gt;
Выбор производится для каждого EVI в каждом ESI.&lt;br /&gt;
&lt;br /&gt;
Выборы:&lt;br /&gt;
#сортировка по Lo addr (от меньшего к большему, как я понимаю)&lt;br /&gt;
#роутерам по-порядку назначаются номера, начиная с 0. Роутер с наименьшим номеров - стал DF.&lt;br /&gt;
#далее производится выбор DF для каждого vlana. V mod N (V = VLAN, N = кол-во PE в multi-homing). Если в EVPN несколько вланов, то берется наименьший vid. &lt;br /&gt;
&lt;br /&gt;
Передачей BUM трафика занимается '''DF PE'''. Backup PE будет отбрасывать BUM.&lt;br /&gt;
 cse@PE11&amp;gt; show evpn instance EVPN-1 esi 00:11:11:11:11:11:11:11:11:11 extensive&lt;br /&gt;
 Instance: EVPN-1&lt;br /&gt;
 Number of ethernet segments: 2&lt;br /&gt;
    ESI: 00:11:11:11:11:11:11:11:11:11&lt;br /&gt;
      Status: Resolved by IFL ae0.100&lt;br /&gt;
      Local interface: ae0.100, Status: Up/Forwarding&lt;br /&gt;
      Number of remote PEs connected: 1&lt;br /&gt;
        Remote PE        MAC label  Aliasing label  Mode&lt;br /&gt;
        12.12.12.12      300688     300688          all-active&lt;br /&gt;
 '''Designated forwarder: 11.11.11.11'''&lt;br /&gt;
 '''Backup forwarder: 12.12.12.12'''&lt;br /&gt;
 Advertised MAC label: 300976&lt;br /&gt;
 Advertised aliasing label: 300976&lt;br /&gt;
 Advertised split horizon label: 299984&lt;br /&gt;
&lt;br /&gt;
Проверка int на возможность передачи BUM трафика:&lt;br /&gt;
 cse@'''PE11'''&amp;gt; show interfaces '''ae0.100''' detail | find EVPN&lt;br /&gt;
 EVPN multi-homed status:'''Forwarding''', EVPN multi-homed ESI Split Horizon&lt;br /&gt;
 Label: 299984&lt;br /&gt;
      Flags: Is-Primary&lt;br /&gt;
 cse@'''PE12'''&amp;gt; show interfaces '''ae0.100''' detail | find EVPN&lt;br /&gt;
 EVPN multi-homed status: '''Blocking BUM Traffic to ESI''', EVPN multi-homed ESI Split&lt;br /&gt;
 Horizon Label: 299888&lt;br /&gt;
      Flags: Is-Primary&lt;br /&gt;
&lt;br /&gt;
===Auto-Discovery===&lt;br /&gt;
Multi-homed-PE пересылают всем удаленным PE два типа маршрутов:&lt;br /&gt;
====Auto-discovery route for ESI====&lt;br /&gt;
&lt;br /&gt;
Для более быстрого восстановления используется этот механизм auto-discovery routes, также называемый ''MAC Mass Withdraw''. В случае, когда рвется линк между PE-CE, PE сбрасывает route, содержащий пачку маков. &lt;br /&gt;
&lt;br /&gt;
Передаваемые маршруты имеют следующие параметры:&lt;br /&gt;
*RT, соответствующий EVI&lt;br /&gt;
*ESI&lt;br /&gt;
*ESI label extended community: split horizont label + multi-homing mode (all-active/single-active). &lt;br /&gt;
&lt;br /&gt;
'''Split horizont label''' - для исключения петель при получении маршрута, от нескольких CE - ''Split Horizong filtering''. Когда non-DF передает пакеты DF-router'у в этом же EVI, он первым делом добавляет split hor label к этому пакету. DF, видя метку, не передает такой пакет обратно CE.&lt;br /&gt;
&lt;br /&gt;
'''Label stack'''&lt;br /&gt;
*Transpotr label&lt;br /&gt;
*Inclusive Multicast Label&lt;br /&gt;
*Split Horizonf Label&lt;br /&gt;
*BUM traffic.&lt;br /&gt;
&lt;br /&gt;
====Auto-Discovery route per EVI====&lt;br /&gt;
В all-active multi-homing есть Aliasing (load-balancing). Большинство изученных маков будут передаваться от PE1 из multi-homing, но при этом aliasing будет обеспечивать балансировку обратного трафика и второму PE2. &lt;br /&gt;
&lt;br /&gt;
Для single-active: функция тоже будет работать в качестве обеспечения ''Backup-path''. &lt;br /&gt;
&lt;br /&gt;
Auto-discovery route содержит:&lt;br /&gt;
*RT, соответствующий EVI&lt;br /&gt;
*ESI&lt;br /&gt;
*Aliasing Label&lt;br /&gt;
Когда PE изучает новый MAC, то PE отправляет MAC Advertisment route, который состоит из MAC, MPLS service label, ESI (от remote PE). &lt;br /&gt;
&lt;br /&gt;
remote PE сравнивает полученный ESI с ESI в обоих Auto-Discovery routes и определяет состав multi-homing PEs, которым он сможет направить обратный трафик по MAC.&lt;br /&gt;
&lt;br /&gt;
Когда remote PE отправляет пакет обратно PE1, отправившего MAC Advertisement route, используется '''service label'''. &lt;br /&gt;
&lt;br /&gt;
Когда remote PE отправляет пакет обратно пиру PE1 (PE2), используется '''aliasing label'''.&lt;br /&gt;
&lt;br /&gt;
Для каждого EVPN можно увидеть метки от remote PE.&lt;br /&gt;
 show evpn instance EVPN-1 extensive&lt;br /&gt;
&lt;br /&gt;
===Inclusive multicast===&lt;br /&gt;
Type = 3&lt;br /&gt;
&lt;br /&gt;
Каждый PE передает Inclusive Multicast (IM) route для разрешения передачи BUM трафика.&lt;br /&gt;
*RT, сопоставляемый с EVI&lt;br /&gt;
*Ethernet tag ID = VLAN ID&lt;br /&gt;
*PMSI Tunnel Attribute - обозначение multicast технологии и IM MPLS метки.&lt;br /&gt;
PMSI Attr - это атрибут, использующийся для NG BGP Multicast VPN: P2MP, RSVP-TE LSPs, P2MP mLDP LSPs, PIM-SM trees.&lt;br /&gt;
&lt;br /&gt;
PE получил пакет от CE: PE делает копию пакета, соответствующую каждому remote PE. Навешивает на пакет метку: обычно сначала это IM метка + transport метка. &lt;br /&gt;
&lt;br /&gt;
Но в случает с multi-homed non-DF, с начала добавляется Split Horizont Label.&lt;br /&gt;
&lt;br /&gt;
На удаленном PE: снимается transport label, распознается IM метка и BUM трафик.&lt;br /&gt;
&lt;br /&gt;
*P2MP LSPs: эффективная утилизация полосы в ядре, но могут быть проблемы с масштабируемостью, т.к. нужно выбирать точку копирования трафика.&lt;br /&gt;
&lt;br /&gt;
Чтобы избежать подобных проблем: используем чистый EVPN, где точка копирования трафика уже выбрана - ingress PE.&lt;br /&gt;
 PE11&amp;gt; show route table EVPN-1.evpn.0 | find '''“3\:12”'''&lt;br /&gt;
 3:12.12.12.12:1::100::12.12.12.12/304&lt;br /&gt;
                   *[BGP/170] 1d 17:37:16, localpref 100, from 1.1.1.1&lt;br /&gt;
                      AS path: I, validation-state: unverified&lt;br /&gt;
                    &amp;gt; to 10.11.1.1 via xe-1/2/0.0, label-switched-path from-11-to-12&lt;br /&gt;
&lt;br /&gt;
Наличие IM от каждого remote PE можно проверить тут:&lt;br /&gt;
 PE11&amp;gt; show evpn instance EVPN-1 extensive&lt;br /&gt;
&lt;br /&gt;
Проверить PMSI tunnel attribute можно так:&lt;br /&gt;
 PE11&amp;gt; show route table EVPN-1.evpn.0 detail&lt;br /&gt;
 3:21.21.21.21:1::100::21.21.21.21/304 (1 entry, 1 announced)&lt;br /&gt;
 *BGP Preference: 170/-101&lt;br /&gt;
 Route Distinguisher: 21.21.21.21:1&lt;br /&gt;
 PMSI: Flags 0x0: Label 311168: '''Type INGRESS-REPLICATION 21.21.21.21'''&lt;br /&gt;
&lt;br /&gt;
==L2 процессы внутри EVPN==&lt;br /&gt;
===MAC learning===&lt;br /&gt;
Когда PE изучает новый MAC на EVI access interface, он добавляет MAC в соответствующую L2 forwarding table (MAC-VRF). Затем передает MAC Advertisment route остальным PE. &lt;br /&gt;
&lt;br /&gt;
MAC Adv route:&lt;br /&gt;
*RT&lt;br /&gt;
*MAC&lt;br /&gt;
*Ethernet tag = VLAN ID&lt;br /&gt;
*ESI&lt;br /&gt;
*IP, если известен или если сконфигурирован IRB.&lt;br /&gt;
*MPLS service label / MAC route label&lt;br /&gt;
*Default Gateway Extended Community - что сконфигурировано на IRB.&lt;br /&gt;
*MAC Mobility Extended Community.&lt;br /&gt;
&lt;br /&gt;
Как только изучен MAC, PE передает MAC Adv route без привязки к IP. Как только появилась привязка, PE посылает новый MAC Adv route. Этот процесс - ''Host Mac/IP Synchronization.&lt;br /&gt;
&lt;br /&gt;
PE также передает MAC/IP локального IRB интерфейса, используя Def Gateway Ext Community, которое сигнализирует удаленному PE, что он должен роутить трафик от имени другого PE. Этот процесс - ''Default Gateway Synchronization''.&lt;br /&gt;
&lt;br /&gt;
ESI - для балансировки, при работе multi-homing PE. Multi-homed PEs анонсируют свою связь через одинаковый ESI (в Auto Discovery route). Когда remote PE получает MAC adv route, видит в нем ESI, понимает какие PE относятся к этому ESI и при необходимости послать трафик к MAC, балансирует между PE1 и PE2.&lt;br /&gt;
&lt;br /&gt;
Также ESI полезно при передаче MAC между multi-homing пирами. PE1 получил MAC от пира, next-hop = local interface PE1. Локальный интерфейс PE1 будет в приоритете, по сравнению с ядром. Поэтому когда на PE1 прилетит MAC adv route от remote PE, то он будет просто отброшен.&lt;br /&gt;
&lt;br /&gt;
 PE11&amp;gt; show evpn instance EVPN-1 extensive&lt;br /&gt;
 PE11&amp;gt; show evpn mac-table&lt;br /&gt;
&lt;br /&gt;
Отображение MAC, ESI, IP (если есть). По сути тоже самое, что и forwarding table&lt;br /&gt;
 PE11&amp;gt; show evpn database instance EVPN-1&lt;br /&gt;
&lt;br /&gt;
Если для MAC есть IP, то его можно посмотреть так:&lt;br /&gt;
 PE11&amp;gt; show route table EVPN-1.evpn.0 evpn-mac-address 00:50:56:8c:76:67&lt;br /&gt;
 2:22.22.22.22:1::100::00:50:56:8c:76:67::100.1.1.10/304&lt;br /&gt;
 *[BGP/170] 1d 01:03:50, localpref 100, from 1.1.1.1&lt;br /&gt;
                      AS path: I, validation-state: unverified&lt;br /&gt;
                    &amp;gt; to 10.11.1.1 via xe-1/2/0.0, label-switched-path from-11-to-22&lt;br /&gt;
&lt;br /&gt;
===L2 forwarding and aliasing===&lt;br /&gt;
Сама функция описана выше. Проверка:&lt;br /&gt;
 PE11&amp;gt; show evpn mac-table&lt;br /&gt;
 Routing instance : EVPN-1&lt;br /&gt;
 Bridging domain : __EVPN-1__, VLAN : 100&lt;br /&gt;
   MAC                 MAC      Logical          NH     RTR&lt;br /&gt;
 address             flags    interface         Index     ID&lt;br /&gt;
 00:00:09:c1:b0:d7   DC                     '''1048609'''   1048609&lt;br /&gt;
&lt;br /&gt;
Чтобы понять что это за PE, сначала ищем какому ESI принадлежит next-hop:&lt;br /&gt;
 PE11&amp;gt; show evpn instance EVPN-1 extensive&lt;br /&gt;
 Instance: EVPN-1&lt;br /&gt;
  Route Distinguisher: 11.11.11.11:1&lt;br /&gt;
  VLAN ID: 100&lt;br /&gt;
  Number of ethernet segments: 2&lt;br /&gt;
    ESI: 00:22:22:22:22:22:22:22:22:22&lt;br /&gt;
      Status: Resolved by NH '''1048609'''&lt;br /&gt;
      Number of remote PEs connected: 2&lt;br /&gt;
   '''Remote PE   MAC label  Aliasing label''' Mode&lt;br /&gt;
   '''21.21.21.21 300848     300848''' all-active&lt;br /&gt;
   '''22.22.22.22 301040     301040''' all-active&lt;br /&gt;
&lt;br /&gt;
Затем ищем метку для ESI:&lt;br /&gt;
 PE11&amp;gt; show route table mpls.0 | match EVPN-1 | match esi&lt;br /&gt;
 301184      *[EVPN/7] 2d 03:35:55, routing-instance EVPN-1, route-type Egress- MAC, ESI 00:11:11:11:11:11:11:11:11:11&lt;br /&gt;
 '''301200      *[EVPN/7] 2d 03:35:55, routing-instance EVPN-1, route-type Egress- MAC, ESI 00:22:22:22:22:22:22:22:22:22'''&lt;br /&gt;
&lt;br /&gt;
Ищем next-hop для этой метки:&lt;br /&gt;
 PE11&amp;gt; show route label 301200&lt;br /&gt;
 301200		*[EVPN/7] 2d 03:44:05, routing-instance EVPN-1, route-type Egress-&lt;br /&gt;
 MAC, ESI 00:22:22:22:22:22:22:22:22:22&lt;br /&gt;
      &amp;gt; to 10.11.1.1 via xe-1/2/0.0, '''label-switched-path from-11-to-21'''&lt;br /&gt;
         to 10.11.1.1 via xe-1/2/0.0, '''label-switched-path from-11-to-22'''&lt;br /&gt;
&lt;br /&gt;
При проверке Aliasing в лабе, выявили несколько мест, где балансируется трафик.&lt;br /&gt;
*CE к multi-homed PE1, PE2.&lt;br /&gt;
*PE балансируют при отправке к remote PE - чисто EVPN балансировка! '''Per flow.'''&lt;br /&gt;
*Несколько LSP могут также делать балансировку.&lt;br /&gt;
*LAG в разных местах.&lt;br /&gt;
&lt;br /&gt;
===MAC mobility===&lt;br /&gt;
Переместили тачку в новый data-center. Новый PE изучил новый для себя MAC. Старый PE получил MAC Adv route и:&lt;br /&gt;
#Обновил свою forwarding table&lt;br /&gt;
#MAC Mobility Extended Community включает в себя порядковый номер, который увеличивается при каждом новом перемещении тачки. Используется для определения MAC-flapping.&lt;br /&gt;
&lt;br /&gt;
==L3 процессы внутри EVPN==&lt;br /&gt;
===Синхронизация Default Gateway===&lt;br /&gt;
Функция для оптимизированного роутинга исходящего трафика от VM к любому адресу назначения и входящего трафика к VM по оптимизированному пути, при миграции VM в другую локацию.&lt;br /&gt;
&lt;br /&gt;
#Конфигурируем IRB во VLAN или bridge domain.&lt;br /&gt;
#Добавляем IRB в IP VPN.&lt;br /&gt;
#Как только IRB начал выступать в качестве Def GW, PE передает MAC/IP Adv route (Def GW Ext Community) остальным PE и VM могут иметь связь с любым адресом назначения.&lt;br /&gt;
#Интеграция между IP VPN и EVPN требуется для Aliasing между multi-homed PE.&lt;br /&gt;
&lt;br /&gt;
В лабе в примере для всех IRB.100 на всех site специально заданы одинаковые IP/MAC, для упрощения конфига. При таком варианте синхронизация осуществляется как бы статически. + в vrf задано: ''evpn default-gateway do-not-advertise''.&lt;br /&gt;
&lt;br /&gt;
В обычном случае при задании разных mac/ip для irb, будем видеть следующее:&lt;br /&gt;
 PE11&amp;gt; show route table EVPN-2.evpn.0 | match “200.1.1./”&lt;br /&gt;
 	2:22.22.22.22:2::200::00:00:c8:01:01:01::200.1.1.1/304&lt;br /&gt;
 	2:22.22.22.22:2::201::00:00:c9:01:01:02::201.1.1.2/304&lt;br /&gt;
 	2:22.22.22.22:2::202::00:00:ca:01:01:01::202.1.1.1/304&lt;br /&gt;
&lt;br /&gt;
 PE11&amp;gt; show bridge evpn peer-gateway-macs&lt;br /&gt;
 	Routing instance : EVPN-2&lt;br /&gt;
 	Bridging domain : V201, VLAN : 201&lt;br /&gt;
 		Installed GW MAC addresses:&lt;br /&gt;
 		00:00:c9:01:01:02&lt;br /&gt;
&lt;br /&gt;
 PE11&amp;gt; show route table EVPN-2.evpn.0 detail evpn-ethernet-tag-id 201 evpn-macaddress 00:00:c9:01:01:02&lt;br /&gt;
 EVPN-2.evpn.0: 40 destinations, 40 routes (40 active, 0 holddown, 0 hidden)&lt;br /&gt;
 2:22.22.22.22:2::'''201::00:00:c9:01:01:02::201.1.1.2'''/304 (1 entry, 1 announced)&lt;br /&gt;
 	*BGP Preference: 170/-101&lt;br /&gt;
 		Route Distinguisher: 22.22.22.22:2&lt;br /&gt;
 		Next hop type: Indirect&lt;br /&gt;
 		Source: 1.1.1.1&lt;br /&gt;
 		Protocol next hop: 22.22.22.22&lt;br /&gt;
 		AS path: I (Originator)&lt;br /&gt;
 		Cluster list: 1.1.1.1&lt;br /&gt;
 		Originator ID: 22.22.22.22&lt;br /&gt;
 		'''Communities: target:65000:2 evpn-default-gateway'''&lt;br /&gt;
 		Import Accepted&lt;br /&gt;
 		'''Route Label: 300288'''       - service label&lt;br /&gt;
 		ESI: 00:00:00:00:00:00:00:00:00:00&lt;br /&gt;
 		Localpref: 100&lt;br /&gt;
 		Router ID: 1.1.1.1&lt;br /&gt;
 		Primary Routing Table bgp.evpn.0&lt;br /&gt;
&lt;br /&gt;
===Inter-VLAN Routing===&lt;br /&gt;
Функция ''Asymmetric IRB Forwarding'' - маршрутизация трафика между хостами разных EVPN VLANs, соединенных разными PE.&lt;br /&gt;
&lt;br /&gt;
Ingress PE (Def GW) передает пакеты таким образом, который исключает необходимость делать route lookup в IP VPN VRF на egress PE. Вместо этого egress PE делает lookup в MAC-VRF по EVI dest host.&lt;br /&gt;
&lt;br /&gt;
Если egress PE является multi-homed, то ingress PE может делать aliasing.&lt;br /&gt;
&lt;br /&gt;
Что происходит на PE, когда он изучает новый MAC/IP:&lt;br /&gt;
*Появляется запись в IP VPN RVF: protocol '''EVPN''', next-hop IRB.vlan.&lt;br /&gt;
*Remote PE добавит полученную запись в IP VPN VRF: protocol '''BGP'''.&lt;br /&gt;
&lt;br /&gt;
*PE передаст MAC/IP Adv route всем remote PE. Remote PE добавят полученный route в IP VPN VRF: protocol '''EVPN'''. &lt;br /&gt;
&lt;br /&gt;
Т.о. на remote PE будет 2 записи, изученные по разным протоколам. Разница:&lt;br /&gt;
*BGP: VPN label + transport label (or tunnel label)&lt;br /&gt;
*EVPN: более сложный механизм для передачи пакета: Ingress PE перезаписывает Ethernet header (dest MAC, vlan) на значение, соответствующее хосту назначения. А soucre MAC теперь будет соответствовать local IRB MAC. Затем добавляет service или aliasing label + transport label.&lt;br /&gt;
&lt;br /&gt;
BGP route - избыточные, их можно заблочить с помощью policy.&lt;br /&gt;
&lt;br /&gt;
Проверяем.&lt;br /&gt;
&lt;br /&gt;
В лабе: PE21: irb.200 - 200.1.1.26&lt;br /&gt;
&lt;br /&gt;
 Local PE:&lt;br /&gt;
 PE21&amp;gt; show route 200.1.1.26&lt;br /&gt;
 IPVPN-1.inet.0: 20 destinations, 20 routes (20 active, 0 holddown, 0 hidden)&lt;br /&gt;
 200.1.1.26/32 	*[EVPN/7] 00:04:52&lt;br /&gt;
 		&amp;gt; via irb.200&lt;br /&gt;
&lt;br /&gt;
 Remote PE:&lt;br /&gt;
 PE11&amp;gt; show route 200.1.1.26&lt;br /&gt;
 IPVPN-1.inet.0: 20 destinations, 20 routes (20 active, 0 holddown, 0 hidden)&lt;br /&gt;
 200.1.1.26/32 *[EVPN/7] 00:49:50&lt;br /&gt;
 		&amp;gt; to 10.11.1.1 via xe-1/2/0.0, label-switched-path from-11-to-21&lt;br /&gt;
 		to 10.11.1.1 via xe-1/2/0.0, label-switched-path from-11-to-22&lt;br /&gt;
&lt;br /&gt;
 Layer 2 Ethernet header rewrite&lt;br /&gt;
 PE11&amp;gt; show route 200.1.1.26 detail&lt;br /&gt;
 IPVPN-1.inet.0: 20 destinations, 20 routes (20 active, 0 holddown, 0 hidden)&lt;br /&gt;
 200.1.1.26/32 (1 entry, 1 announced)&lt;br /&gt;
 	*EVPN Preference: 7&lt;br /&gt;
 		Next hop type: Indirect&lt;br /&gt;
 		Next-hop reference count: 2&lt;br /&gt;
 		Next hop: 10.11.1.1 via xe-1/2/0.0, selected&lt;br /&gt;
 			'''Label-switched-path from-11-to-21'''&lt;br /&gt;
 			'''Label operation: Push 300256, Push 302448(top)'''&lt;br /&gt;
 		Load balance label: Label 300256: None; Label 302448: None;&lt;br /&gt;
 		Session Id: 0x152&lt;br /&gt;
 		Next hop type: Router, Next hop index: 696&lt;br /&gt;
 		Next hop: 10.11.1.1 via xe-1/2/0.0&lt;br /&gt;
 			'''Label-switched-path from-11-to-22'''&lt;br /&gt;
 			'''Label operation: Push 300320, Push 302464(top)'''&lt;br /&gt;
 		Label TTL action: no-prop-ttl, no-prop-ttl(top)&lt;br /&gt;
 		Load balance label: Label 300320: None; Label 302464: None;&lt;br /&gt;
 		Session Id: 0x152&lt;br /&gt;
 		Protocol next hop: 21.21.21.21&lt;br /&gt;
 		Label operation: Push 300256&lt;br /&gt;
 		Label TTL action: no-prop-ttl&lt;br /&gt;
 		Load balance label: Label 300256: None;&lt;br /&gt;
 		Composite next hop: 0x9569bac 643 INH Session ID: 0x150&lt;br /&gt;
 		Ethernet header rewrite:&lt;br /&gt;
 			'''SMAC: 00:00:c8:01:01:01, DMAC: 00:00:09:c1:b0:d4'''&lt;br /&gt;
 			'''TPID: 0x8100, TCI: 0x00c8, VLAN ID: 200, Ethertype: 0x0800'''&lt;br /&gt;
 		Indirect next hop: 0x96ae310 1048596 INH Session ID: 0x150&lt;br /&gt;
 		Protocol next hop: 22.22.22.22&lt;br /&gt;
 		Label operation: Push 300320&lt;br /&gt;
 		Label TTL action: no-prop-ttl&lt;br /&gt;
 		Load balance label: Label 300320: None;&lt;br /&gt;
 		Composite next hop: 0x9569b50 645 INH Session ID: 0x14f&lt;br /&gt;
 		Ethernet header rewrite:&lt;br /&gt;
 			'''SMAC: 00:00:c8:01:01:01, DMAC: 00:00:09:c1:b0:d4'''&lt;br /&gt;
 			'''TPID: 0x8100, TCI: 0x00c8, VLAN ID: 200, Ethertype: 0x0800'''&lt;br /&gt;
&lt;br /&gt;
 PE11&amp;gt; show evpn database instance EVPN-2 vlan-id 200&lt;br /&gt;
 PE11&amp;gt; show evpn database instance EVPN-2 vlan-id 200 extensive&lt;br /&gt;
&lt;br /&gt;
 PE11&amp;gt; show evpn instance EVPN-2 extensive | find segments&lt;br /&gt;
 Number of ethernet segments: 2&lt;br /&gt;
 ESI: 00:22:22:22:22:22:22:22:22:22&lt;br /&gt;
 Status: Resolved by NH 1048590&lt;br /&gt;
 Number of remote PEs connected: 2&lt;br /&gt;
 	Remote PE 	MAC label	Aliasing label	Mode&lt;br /&gt;
 	22.22.22.22	'''300320 		300320''' 			all-active&lt;br /&gt;
 	21.21.21.21	'''300256 		300256'''			all-active&lt;br /&gt;
&lt;br /&gt;
 Для проверки работы Aliasing, смотрим forwarding table:&lt;br /&gt;
 PE11&amp;gt; show route forwarding-table destination 200.1.1.26 extensive | find IPVPN-1&lt;br /&gt;
 Routing table: IPVPN-1.inet [Index 7]&lt;br /&gt;
 Destination: 200.1.1.26/32&lt;br /&gt;
 Nexthop:&lt;br /&gt;
 Next-hop type: composite Index: 643 Reference: 2&lt;br /&gt;
 Next-hop type: indirect Index: 1048596 Reference: 4&lt;br /&gt;
 Nexthop:&lt;br /&gt;
 Next-hop type: composite Index: 645 Reference: 2&lt;br /&gt;
 Next-hop type: indirect Index: 1048597 Reference: 4&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 PE11&amp;gt; clear mpls lsp statistics&lt;br /&gt;
 PE11&amp;gt; show mpls lsp statistics ingress&lt;br /&gt;
 Ingress LSP: 4 sessions&lt;br /&gt;
 To 			From 		State 	Packets Bytes 	LSPname&lt;br /&gt;
 12.12.12.12	11.11.11.11 Up 		2 		148 	from-11-to-12&lt;br /&gt;
 21.21.21.21	11.11.11.11 Up 		9942 	2545152 from-11-to-21&lt;br /&gt;
 22.22.22.22	11.11.11.11 Up 		9943 	2545408 from-11-to-22&lt;br /&gt;
 31.31.31.31	11.11.11.11 Up 		0 		0 		from-11-to-31&lt;br /&gt;
&lt;br /&gt;
Для L3 балансировка также осуществляется с нескольких местах. &lt;br /&gt;
&lt;br /&gt;
===Inbound Routing from IP VPN Site===&lt;br /&gt;
Интеграция IP VPN и EVPN положительно сказывается и на оптимизации входящего к хостам трафика, если он с источником находится не на одном site.&lt;br /&gt;
&lt;br /&gt;
Egress PE, получив IP/MAC route от ingress PE, добавляет этот маршрут как изученный по BGP в VRF.table. После этого есть возможность смаршрутизировать трафик напрямую к data-center PE, ближайшему к хосту.&lt;br /&gt;
&lt;br /&gt;
При миграции хоста, роутинг становился сложнее, т.к. не меняется обновление MAC/IP route и host route занимает некоторое время. Во время переезда у remote PE может сохраниться старая инфа о хосте и он пошлет туда трафик. &lt;br /&gt;
&lt;br /&gt;
Учитывая этот небольшой недостаток, Mac mobility для L3 все же работает.&lt;br /&gt;
&lt;br /&gt;
=MP-BGP EVPN Route Summary=&lt;br /&gt;
*Type 1: '''Ethernet Auto-Discovery''': per ESI, used for fast convergence (MAC Mass Withdrawal) and Split Horizont filtering. For Aliasing. Used only when multi-homing used. ESI Label Extended Community, includes multi-homing mode.&lt;br /&gt;
*Type 2: '''MAC Advertisement''': MAC and MAC/IP. Used for MAC learning, MAC Mobility, Aliasing, Def GW Synch., Asymmetric IRB Forwarding. Learned MAC/IP bindings generate EVPN host routes, which added to  IP VPN VRF for optimizing inbound routing to host. Def GW Ext Community - for MAC/IP of RIB. MAC Mobility Ext Community - for MAC flapping.&lt;br /&gt;
*Type 3: '''Inclusive Multicast''': Includes IM label, used when forwarding BUM traffic between PEs.&lt;br /&gt;
*Type 4: '''Ethernet Segment''': For discovery of multi-homed neigh and DF election. Only used when multi-homing is configured. ES-Import Ext Community - from ESI, used by receiving PE to filter incoming advertisment.&lt;br /&gt;
 show route table bgp.evpn.0&lt;br /&gt;
&lt;br /&gt;
Route Formats:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Ресурс !! ссылка !! описание&lt;br /&gt;
|-&lt;br /&gt;
|1 - Ethernet Auto-Discovery per ESI||1:21.21.21.21:0::222222222222222222::FFFF:FFFF/304||&lt;br /&gt;
*Route Type “1”&lt;br /&gt;
*RD unique to advertising&lt;br /&gt;
*ESI&lt;br /&gt;
*Ethernet Tag Id – reserved“0xFFFFFFFF”&lt;br /&gt;
|-&lt;br /&gt;
|1 - Ethernet Auto-Discovery per EVI || 1:21.21.21.21:1::222222222222222222::0/304 ||&lt;br /&gt;
*Route Type “1”&lt;br /&gt;
*RD of advertising PE’s EVI&lt;br /&gt;
*ESI&lt;br /&gt;
*Ethernet Tag Id “0”&lt;br /&gt;
|-&lt;br /&gt;
|2 - MAC Advertisement||2:21.21.21.21:1::100::00:00:09:c1:b0:d7/304||&lt;br /&gt;
*Route Type “2”&lt;br /&gt;
*RD of advertising PE’s EVI&lt;br /&gt;
*VLAN ID&lt;br /&gt;
*MAC Address&lt;br /&gt;
|-&lt;br /&gt;
|2 - MAC/IP Advertisement||2:21.21.21.21:1::100::00:00:09:c1:b0:d7::100.1.1.29/304||&lt;br /&gt;
*Same as MAC Advertisement but includes host’s IP address&lt;br /&gt;
|-&lt;br /&gt;
|3 - Inclusive Multicast||3:21.21.21.21:1::100::21.21.21.21/304||&lt;br /&gt;
*Route Type “3”&lt;br /&gt;
*RD of advertising PE’s EVI&lt;br /&gt;
*VLAN ID&lt;br /&gt;
*Originator PE Loopback IP address&lt;br /&gt;
|-&lt;br /&gt;
|4 - Ethernet Segment||4:12.12.12.12:0::111111111111111111:12.12.12.12/304||&lt;br /&gt;
*Route Type “4”&lt;br /&gt;
*RD unique to advertising PE&lt;br /&gt;
*ESI&lt;br /&gt;
*Originator PE LoopbackIP address&lt;br /&gt;
|}&lt;br /&gt;
=High Availability=&lt;br /&gt;
==Падене линка ==&lt;br /&gt;
При падении линка (CE &amp;lt;&amp;gt; multi-homing PE), статус EVI тоже станет - down. И PE уберет все прежде переданные IP VPN и EVPN маршруты, Auto-Discovery per ESI, Auto-Discovery per EVI.&lt;br /&gt;
Также, если PE был DF, то эту роль подхватит backup router.&lt;br /&gt;
&lt;br /&gt;
==Восстановление линка==&lt;br /&gt;
Если сконфигурирован hold-up timer, то ничего не изменится, пока таймер не истечет.&lt;br /&gt;
&lt;br /&gt;
Когда таймер истек, LACP между PE &amp;lt;&amp;gt; CE собрался, EVIs на PE стали активными, PE передает ES, IM, Auto-Discovery routes =&amp;gt; new DF election. Параллельно с этим PE уже начинает получать трафик от remote PEs и CE.&lt;br /&gt;
&lt;br /&gt;
==Падение узла==&lt;br /&gt;
Отключили multi-homing PE: LSP, которые на него терминировались - упадут (Path ERr message). У remote PE упавший PE удалится из возможных вариантов маршрутов с next-hop PE - для L2 и L3. Трафик без перерыва просто будет передаваться второму multi-homing PE. Также до PE упадут все протоколы маршрутизации (OSPF, MP-BGP). Второй multi-homed PE станет DF.&lt;br /&gt;
&lt;br /&gt;
==Восстановление узла==&lt;br /&gt;
Опять же, если настроен hold-timer на интерфейсах, то при восстановлении PE, все процессы восстановятся не сразу. Таймер лучше настроить, т.к. без него при поднятии линков трафик начнет передаваться к PE,  но на PE еще не будут установлены OSPF, BGP, LSP... Трафик полетит в никуда.&lt;br /&gt;
&lt;br /&gt;
Наличие LACP между CE и PE значительно уменьшает потерю пакетов.&lt;br /&gt;
&lt;br /&gt;
=Дополнительная информация=&lt;br /&gt;
*[[DC]]&lt;br /&gt;
*[[L2VPN]]&lt;br /&gt;
*[[VPLS]]&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=Load-balancing&amp;diff=2070</id>
		<title>Load-balancing</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=Load-balancing&amp;diff=2070"/>
		<updated>2021-07-18T11:06:45Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: Новая страница: «{{#description2:Load-balancing. Per-packet load-balancing. Per-flow load-balancing. Конфигурация filter-based forwarding. Multitopology. Информ...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#description2:Load-balancing. Per-packet load-balancing. Per-flow load-balancing. Конфигурация filter-based forwarding. Multitopology. Информация для подготовки к экзаменам Juniper.}}&lt;br /&gt;
=Описание load-balancing=&lt;br /&gt;
Load balancing между равнозначными линками дает возможность передавать трафик к одному и тому же dest address сразу по двум ликам, распределяю нагрузку между ними.&lt;br /&gt;
&lt;br /&gt;
Балансировка может быть настроена одним из методов: per-packet или per-flow.&lt;br /&gt;
&lt;br /&gt;
==PER-PACKET== &lt;br /&gt;
Пакеты передаются в произвольном порядке (round-robin) по равнозначным (с одинаковой стоимостью) путям. При этом равнозначные линки загружаются равномерно. Но создается дополнительная нагрузка на сеть: в процессе передачи пакетов, к хосту назначения пакеты могут прийти в неверном порядке, что приводит к тому, что хост назначения должен заниматься реордерингом пакетов, либо хост источник должен будет пересылать заново потерянные пакеты. Всё это - дополнительная нагрузка на сеть.&lt;br /&gt;
&lt;br /&gt;
==PER-FLOW== &lt;br /&gt;
Индивидуальные потоки трафика передаются по одному или второму линку. При этом уходит проблема с реордерингом пакетов &amp;gt;&amp;gt; на application level меньше зажержек. Также становится возможным эффективное внедрение QOS, т.к. на сети одинаковый пользовательский трафик будет гулять потоками. &lt;br /&gt;
&lt;br /&gt;
По умолчанию поток (flow) - это трафик, имеющий один вх интерфейс, одинаковый src и dst address, а также одинаковый протокол. Можно включить дополнительные элементы 3 и 4 уровня, но это требует доп конфигурации.&lt;br /&gt;
&lt;br /&gt;
Для распознавания потока по параметрам 3/4 уровней, настраиваем hash-key:&lt;br /&gt;
 set forwarding-options hash-key family inet layer-3&lt;br /&gt;
 set forwarding-options hash-key family inet layer-4&lt;br /&gt;
 set forwarding-options hash-key family mpls label-1&lt;br /&gt;
 set forwarding-options hash-key family mpls label-2&lt;br /&gt;
 set forwarding-options hash-key family mpls payload ip&lt;br /&gt;
 set forwarding-options hash-key family multiservice source-mac&lt;br /&gt;
 set forwarding-options hash-key family multiservice destination-mac&lt;br /&gt;
 set forwarding-options hash-key family multiservice payload ip layer-3&lt;br /&gt;
&lt;br /&gt;
Для IP обязательно указывать l3 и l4. Иначе не будет работать ни l3, ни l4.&lt;br /&gt;
Для ipv6 load-balancing по дефолту делается по l3 и l4, так что дополнительной настойки не требует.&lt;br /&gt;
Для mpls [family mpls] и vpls [family multiservice] также можно поменять дефолтные hash-key.&lt;br /&gt;
&lt;br /&gt;
'''IGP load-balancing''': выбирается один возможный путь к адресу назначения. Даже есть есть обходные пути. Когда добавляются или удаляются возможные next-hop - junos заново делает выбор пути.&lt;br /&gt;
&lt;br /&gt;
'''BGP load-balancing''' =  per-prefix load balancing: включается в случае, когда у маршруты получены от IBGP соседа с одинаковым next-hop. Далее роутер резолвит next-hop и в случает, если до него есть несколько путей, трафик до него пойдет по рандомно-выбранным путям. Но при этом трафик до каждого префикса будет следовать только по одному выбранному пути. &lt;br /&gt;
&lt;br /&gt;
То есть если от ibgp-пира прилетело 20 префиксов, где в качестве hext-hop стоит ip ibgp-пира: рандомным образом (используя hashing алгоритм) трафик до ibgp-пира будет выбран одним из путей. То есть для 15-ти префиксов трафик до ibgp-пира пойдет одним путем, для 5ти - другим. (или 10/10, то есть из-за рандомности может возникнуть вариант распределения 20/0 - тогда ни о какой балансировке речи и не идёт). Поэтому погалаться полностью на дефолтное поведение не стоило бы.&lt;br /&gt;
&lt;br /&gt;
==Конфигурация==&lt;br /&gt;
Настраиваем политику и применяем ее. В политике можно указать конкретные префиксы, в сторону которых будет балансироваться трафик. Либо если не будет конкретики по префиксам, то баланситься будет весь трафик.&lt;br /&gt;
 set policy-options policy-statement load-balance then load-balance per-packet&lt;br /&gt;
 set routing-options forwarding-table export load-balance&lt;br /&gt;
&lt;br /&gt;
{{note|text = Несмотря на то, что в конфиге задаем load-balance per-packet, но всех современных роутерах это равнозначно per-flow. Балансировка будет работать per=flow! Только для роутерах в процессором Internet Processor I ASIC реально будет per-packet}}&lt;br /&gt;
&lt;br /&gt;
==Мониторинг==&lt;br /&gt;
До применения:&lt;br /&gt;
 &amp;gt; show route forwarding-table vpn mgmt destination 10.11.0.72/29 &lt;br /&gt;
 Routing table: mgmt.inet&lt;br /&gt;
 Internet:&lt;br /&gt;
 Enabled protocols: Bridging, All VLANs, &lt;br /&gt;
 Destination        Type RtRef Next hop           Type Index    NhRef Netif&lt;br /&gt;
 10.11.0.72/29      user     0                    indr  1052491    22&lt;br /&gt;
                                                 ulst  1051444     2&lt;br /&gt;
                              212.1.241.53      Push 35    11727     2 xe-1/0/4.10&lt;br /&gt;
После применения:&lt;br /&gt;
 &amp;gt; show route forwarding-table vpn mgmt destination 10.11.0.72/29 &lt;br /&gt;
 Routing table: mgmt.inet&lt;br /&gt;
 Internet:&lt;br /&gt;
 Enabled protocols: Bridging, All VLANs, &lt;br /&gt;
 Destination        Type RtRef Next hop           Type Index    NhRef Netif&lt;br /&gt;
 10.11.0.72/29      user     0                    indr  1052491    22&lt;br /&gt;
                              212.1.240.179     Push 35, Push 933692(top)    12775     2 ae26.910&lt;br /&gt;
                              212.1.241.53      Push 35    11727     2 xe-1/0/4.10&lt;br /&gt;
&lt;br /&gt;
Примененные изменения в load-balancing можно увидеть только в forwarding-table! В routing-table всё будет как прежде.&lt;br /&gt;
&lt;br /&gt;
ulst - это список unicast ip next-hop. Пакеты, посленнаые к этому next-hop, отправляются к любому из next-hop в листе.&lt;br /&gt;
&lt;br /&gt;
=Filter-based forwarding=&lt;br /&gt;
При этом методе балансировки на выбор пути будет влиять не только dst адрес, что делает данный тип балансировки более гибким. С помощью firewall filter пакеты классифицируются и для них определяется путь в рамках данного роутера.&lt;br /&gt;
 &lt;br /&gt;
Поддерживается для IPv4 и IPv6.&lt;br /&gt;
&lt;br /&gt;
Можем пустить трафик от src address 10.10.0.0/24 до dst address 1.1.1.1/32 через одного ISP2, а трафик от src address 10.10.1.0/24 до dst address 1.1.1.1/32 через второго ISP2.&lt;br /&gt;
&lt;br /&gt;
==Конфигурация==&lt;br /&gt;
[[Файл:Filter-based forwarding.png|600px|центр]]&lt;br /&gt;
R1:&lt;br /&gt;
Добавляем и применяем фильтр:&lt;br /&gt;
 set family inet filter regions-to-cdn term match-region-1 from source-address 10.10.0.0/24&lt;br /&gt;
 set family inet filter regions-to-cdn term match-region-1 then routing-instance ISP-1&lt;br /&gt;
 set family inet filter regions-to-cdn term match-region-2 from source-address 10.10.1.0/24&lt;br /&gt;
 set family inet filter regions-to-cdn term match-region-2 then routing-instance ISP-2&lt;br /&gt;
 set family inet filter regions-to-cdn term all-accept then accept&lt;br /&gt;
 set interfaces xe-0/0/0 unit 0 family inet filter input regions-to-cdn&lt;br /&gt;
&lt;br /&gt;
Последний терм добавляем, чтобы остальной трафик, кроме src 10.10.0.0/24 и src 10.10.0.0/24 не дропался на интерфейсе, где будет применен filter regions-to-cdn.&lt;br /&gt;
&lt;br /&gt;
Для каждого ISP добавляем RI:&lt;br /&gt;
 set routing-instances ISP-1 instance-type forwarding&lt;br /&gt;
 set routing-instances ISP-1 routing-options static route 0.0.0.0/0 next-hop 172.16.0.2&lt;br /&gt;
 set routing-instances ISP-2 instance-type forwarding&lt;br /&gt;
 set routing-instances ISP-2 routing-options static route 0.0.0.0/0 next-hop 172.16.0.6&lt;br /&gt;
&lt;br /&gt;
Для копирования интерфейсных маршрутов, которые необходимы для next-hop resolve создаем rib-groups:&lt;br /&gt;
 set routing-options interface-routes rib-group inet ISP-to-inet0&lt;br /&gt;
 set routing-options rib-groups ISP-to-inet0 import-rib inet.0&lt;br /&gt;
 set routing-options rib-groups ISP-to-inet0 import-rib ISP-1.inet.0&lt;br /&gt;
 set routing-options rib-groups ISP-to-inet0 import-rib ISP-2.inet.0&lt;br /&gt;
&lt;br /&gt;
==Проверка==&lt;br /&gt;
В RI кроме static route должны появиться маршруты src и p2p ISP сетей. &lt;br /&gt;
 &amp;gt; show route table ISP-1.inet.0&lt;br /&gt;
 &amp;gt; show route table ISP-2.inet.0&lt;br /&gt;
Трассировка с src netw 10.10.0.0/24 и 10.10.1.0/24 покажет разные маршруты до 1.1.1.1/32&lt;br /&gt;
&lt;br /&gt;
==instance-import вместо rib-group==&lt;br /&gt;
Для тех, что не хочет использовать rib-groups, можно применить аналогичный по результату метод: instance-import&lt;br /&gt;
&lt;br /&gt;
 set policy-options policy-statement ISP-1-import from instance master    = inet.0&lt;br /&gt;
 set policy-options policy-statement ISP-1-import then accept&lt;br /&gt;
&lt;br /&gt;
 set routing-instances ISP-1 instance-type forwarding&lt;br /&gt;
 set routing-instances ISP-1 routing-options static route 0.0.0.0/0 next-hop 172.16.0.2&lt;br /&gt;
 set routing-instances ISP-1 routing-options instance-import ISP-1-import&lt;br /&gt;
&lt;br /&gt;
=Multitopolgy=&lt;br /&gt;
Для каждого типа трафика можно создать свою тополонию сети &amp;gt;&amp;gt; свою forwarding-table. Можно использовать для inet и inet6 family. Пакеты одного forwarding-class определяем в ту или иную топологию. По умолчанию, весь трафик использует одну топологию для разных forwarding-class.&lt;br /&gt;
&lt;br /&gt;
==Конфигурация==&lt;br /&gt;
Inet family&lt;br /&gt;
 set routing-options topologies family inet topology voice-topology&lt;br /&gt;
 set interfaces xe-0/0/1 unit 0 family inet filter input voice-filter&lt;br /&gt;
 set firewall family inet filter voice-filter term af-traffic from forwarding-class assured-forwarding&lt;br /&gt;
 set firewall family inet filter voice-filter term af-traffic then topology voice-topology&lt;br /&gt;
Inet6 family&lt;br /&gt;
 set routing-options topologies family inet topology voice-topology&lt;br /&gt;
 set interfaces xe-0/0/0 unit 0 family inet6 filter input cdn-filter&lt;br /&gt;
 set firewall family inet6 filter cdn-filter term ef-traffic from forwarding-class ef&lt;br /&gt;
 set firewall family inet6 filter cdn-filter term ef-traffic then topology cdn-topology&lt;br /&gt;
&lt;br /&gt;
=Дополнительная информация=&lt;br /&gt;
*[[Static, Aggregate, Generate route]]&lt;br /&gt;
*[[Martians]]&lt;br /&gt;
*[[High Availability]]&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Filter-based_forwarding.png&amp;diff=2069</id>
		<title>Файл:Filter-based forwarding.png</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Filter-based_forwarding.png&amp;diff=2069"/>
		<updated>2021-07-18T11:06:15Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=BGP&amp;diff=2068</id>
		<title>BGP</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=BGP&amp;diff=2068"/>
		<updated>2021-07-18T11:00:50Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: /* BFD */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#description2:BGP в Juniper. Состояния соседства BGP. Сообщения. Атрибуты BGP. Local preference. AS Path. Next-hop. Communities. Механизмы управления трафиком. Multipath. Multihop. Route Reflection. Confederations. Route damping. Blackhole. }}&lt;br /&gt;
BGP - протокол маршрутизации между AS. Path-vector protocol. &lt;br /&gt;
&lt;br /&gt;
'''IBGP''' - соседство внутри AS. Соседство строится обычно на Lo адресах.&lt;br /&gt;
&lt;br /&gt;
'''EBGP''' - соседство между разными AS. Соседство строится на p2p адресах.&lt;br /&gt;
&lt;br /&gt;
Поддерживает аутентификацию: MD5. Можно настроить key-chain, с указанием когда какой ключ использовать. Аутентификация применяется на разных уровнях protocols bgp. &lt;br /&gt;
=Состояния соседства=&lt;br /&gt;
http://habrastorage.org/getpro/habr/post_images/442/780/549/442780549c2f45cdda10773121b2800d.png&lt;br /&gt;
&lt;br /&gt;
Для установления соседства используется TCP:179.&lt;br /&gt;
*'''Idle''': all incoming connections - refused. Инициализация BGP ресурсов и подготовка к установлению TCP. Если роутер завис в состоянии Idle - проверить наличие маршрута к соседу.&lt;br /&gt;
*'''Connect''': процесс установления TCP сессии. Роутер слушает TCP 179. Если сессия установилась, то роутер отправляет Open message и переходит в OpenSent состояние. Если TCP не установилась, то роутер переходит в Active состояние и запускает заново ConnectRetryTimer.&lt;br /&gt;
*'''Active''': local router становится активным инициатором TCP-сессии. В состоянии Active - когда ответил на прилетевший TCP. Если роутер завис в Active, проверяем: связность, прохождение по tcp:179, корректность настройки BGP с двух сторон.&lt;br /&gt;
*'''OpenSent''': Open отправлен локальным роутером и роутер ждет ответа (Open) от соседа. &lt;br /&gt;
*'''OpenConfirm''': Open сообщение получено от соседа и роутер ждет Keepalive или Notification message. Если от соседа не приходит keepalive до истечения hold timer, то роутер генерирует Notification message, с инфо, что hold timer expired и переведет сессию в Idle. Если keepalive получен, то соседство переходит в Established state.&lt;br /&gt;
*'''Established''': BGP сессия установлена, пиры начинают обмениваться информацией, используя: Update, Keepalive, Notification сообщений. &lt;br /&gt;
&lt;br /&gt;
Hold timer может быть разным у пиров. При установлении сессии будет выбран наименьший.&lt;br /&gt;
&lt;br /&gt;
==Tips==&lt;br /&gt;
Если сессия установилась в Established, но через какое-то время перешла в Idle по Hold timer expared (скорее всего через 90sec = 3*keepalive), то первым делом проверьте MTU на канале между роутерами. &lt;br /&gt;
&lt;br /&gt;
Если MTU где-то по пути зарезан/не соответствует MTU на интерфейсах bgp-пиров, можно либо решить вопрос с MTU на найденном проблемном участке, либо можно установить для сессии вручную размер mss (maximum segment size):&lt;br /&gt;
 set protocols bgp group clients neighbor 1.1.1.1 tcp-mss 1470&lt;br /&gt;
&lt;br /&gt;
Признаки подобной проблемы в логах:&lt;br /&gt;
 Jan 1 00:18:18.553797 bgp_io_mgmt_cb:1777: NOTIFICATION sent to 1.1.1.1 (Internal AS 64777): code 4 (Hold Timer Expired Error), Reason: holdtime expired for 1.1.1.1 (Internal AS 64777), socket buffer sndcc: 0 rcvcc: 0 TCP state: 4, snd_una: 733415251 snd_nxt: 733415251 snd_wnd: 16384 rcv_nxt: 4248562819 rcv_adv: 4248579203, hold timer 90s, hold timer remain 0s, last sent 6s, TCP port (local 52746, remote 179)&lt;br /&gt;
 Jan 1 00:18:18.553889 BGP SEND message type 3 (Notification) length 21&lt;br /&gt;
 Jan 1 00:18:18.553901 BGP SEND Notification code 4 (Hold Timer Expired Error) subcode 0 (unused)&lt;br /&gt;
 Jan 1 00:18:18.554014 bgp_peer_close_and_restart: closing peer 1.1.1.1 (Internal AS 64777), state is 7 (Established) event HoldTime&lt;br /&gt;
 Jan 1 00:18:18.554064 RPD_BGP_NEIGHBOR_STATE_CHANGED: BGP peer 1.1.1.1 (Internal AS 64777) changed state from Established to Idle (event HoldTime) (instance master)&lt;br /&gt;
&lt;br /&gt;
=Сообщения=&lt;br /&gt;
Все сообщения имеют '''Header'''&lt;br /&gt;
 0                   1                   2                   3&lt;br /&gt;
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1&lt;br /&gt;
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
 |                                                               |&lt;br /&gt;
 +                                                               +&lt;br /&gt;
 |                                                               |&lt;br /&gt;
 +                                                               +&lt;br /&gt;
 |                           Marker                              |&lt;br /&gt;
 +                                                               +&lt;br /&gt;
 |                                                               |&lt;br /&gt;
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
 |          Length               |      Type     |&lt;br /&gt;
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
&lt;br /&gt;
BGP header содержит: &lt;br /&gt;
:*'''marker''' - 16 октетов, установлены в &amp;quot;1&amp;quot;. Обозначает, что это bgp-пакет&lt;br /&gt;
:*'''lenght''' - размер пакета (16bit)&lt;br /&gt;
:*'''type''' - тип сообщения&lt;br /&gt;
:** 1 - OPEN&lt;br /&gt;
:** 2 - UPDATE&lt;br /&gt;
:** 3 - NOTIFICATION&lt;br /&gt;
:** 4 - KEEPALIVE&lt;br /&gt;
:**5 - ROUTE-REFRESH [определен в RFC 2918]&lt;br /&gt;
&lt;br /&gt;
'''Типы пакетов:'''&lt;br /&gt;
*'''Open''' (type 1) - отправляется только на стадии установления соседства. Содержит параметры BGP соседа: AS, auth-type (+ ключ, если есть аутентификация).&lt;br /&gt;
*'''Update''' (type 2) - передает info о добавлении или удалении маршрутов между соседями. Update содержит в себе Path, его атрибуты и вложенные префиксы, у которых эти атрибуты одинаковые. Не отправляются по таймеру, приходят, только когда изменился сам префикс, его атрибуты или BGP-сессия. В зависимости от policy, на локальном роутере, часть routing info может быть отброшена и помещена в hidden.&lt;br /&gt;
*'''Notification''' (type 3) - в случае если что-то пошло не так: не прошел keepalive или update, пришла не поддерживаемая опция, ... Существуют стандартизированные коды ошибок (operation code | opcode). Пакет состоит из header + opcode+subcode + data (описание ошибки - для диагностики).&lt;br /&gt;
*'''Keepalive''' (type 4)- для удостоверения, что с соседством все ok. Отправляется каждые 30 sec. По дефолту hold-timer = 3 * keepalive = 90sec - время, после которого соседи рушат соседство (если в это время не пролетело ни одного keepalive). Можно выставить holdtimer = 0. Если у одного соседа = 0, у другого нет, то будет согласовано ненулевое значение holdtimer для сессии.&lt;br /&gt;
{{note|text=keepalive message = BGP header без payload}}&lt;br /&gt;
*'''Refresh''' - soft clearing BGP сессии.&lt;br /&gt;
&lt;br /&gt;
=BGP Operations=&lt;br /&gt;
BGP хранит маршруты в трех местах:&lt;br /&gt;
*Adjacency-RIB-IN: все полученные маршруты от пиров&lt;br /&gt;
*RIB-Local: маршруты локального роутера, используемые для передачи трафика. Тут хранятся только активные маршруты.&lt;br /&gt;
*Adjacency-RIB-OUT: маршруты, которые будут отправляться пирам. Передаваться могут только активные маршруты. ('''advertise-inactive''' исправляет данную ситуацию).&lt;br /&gt;
&lt;br /&gt;
Передача маршрутов производится по правилам (чтобы избежать routing loops):&lt;br /&gt;
#IBGP пиры передают маршруты, полученные от EBGP другим IBGP пирам.&lt;br /&gt;
#EBGP пиры передают маршруты, полученные от EBGP и IBGP другим EBGP пирам&lt;br /&gt;
#IBGP пиры не передают маршруты, полученные от других IBGP пиров. Поэтому для того, чтобы получить всю маршрутную информацию, требуется full-mesh связность. Либо использование RR.&lt;br /&gt;
&lt;br /&gt;
По умолчанию IBGP пиры не меняют next-hop для маршрутов, полученных от EBGP.&lt;br /&gt;
&lt;br /&gt;
Решается:&lt;br /&gt;
* настройкой '''next-hop self''' в рамках export policy к remote PE/RR.&lt;br /&gt;
* добавить p2p интерфейс с EBGP пиром в IGP как passive.&lt;br /&gt;
* анонс p2p сети по IGP. Export policy для IGP протокола.&lt;br /&gt;
* настройки статического маршрута на каждом IBGP до удаленного EBGP пира.&lt;br /&gt;
* настроить IGP соседство с EBGP пиром.&lt;br /&gt;
&lt;br /&gt;
=Атрибуты (BGP attributes)=&lt;br /&gt;
Включаются в Update сообщения и описывают BGP префиксы. Атрибуты используются для выбора активного пути.&lt;br /&gt;
 Атрибуты, при выборе best, считаются лучшими с наименьшими значением&lt;br /&gt;
 Это правило касается всех атрибутов, кроме Local Preference&lt;br /&gt;
&lt;br /&gt;
Атрибуты пути разделены на 4 категории:&lt;br /&gt;
# '''Well-known mandatory''' — все маршрутизаторы, работающие по протоколу BGP, должны распознавать эти атрибуты. Должны присутствовать во всех обновлениях (update).&lt;br /&gt;
# '''Well-known discretionary''' — все маршрутизаторы, работающие по протоколу BGP, должны распознавать эти атрибуты. Могут присутствовать в обновлениях (update), но их присутствие не обязательно.&lt;br /&gt;
# '''Optional transitive''' — могут не распознаваться всеми реализациями BGP. Если маршрутизатор не распознал атрибут, он помечает обновление как частичное (partial) и отправляет его дальше соседям, сохраняя не распознанный атрибут.&lt;br /&gt;
# '''Optional non-transitive''' — могут не распознаваться всеми реализациями BGP. Если маршрутизатор не распознал атрибут, то атрибут игнорируется и при передаче соседям отбрасывается.&lt;br /&gt;
&lt;br /&gt;
==Local preference==&lt;br /&gt;
 '''✔️Well-known Discretionary'''&lt;br /&gt;
* Указывает маршрутизаторам внутри автономной системы как выйти за её пределы. &lt;br /&gt;
* Больший приоритет выигрывает.&lt;br /&gt;
* Этот атрибут передается только в пределах одной автономной системы =&amp;gt; работает только для IBGP.&lt;br /&gt;
* На маршрутизаторах Cisco и Juniper по умолчанию значение атрибута — 100.&lt;br /&gt;
* Если EBGP-сосед получает обновление с выставленным значением local preference, он игнорирует этот атрибут.&lt;br /&gt;
* В Junos lpf можно задать через policy и в protocol bgp. Если задан обоими способами, то будет назначен lpf из policy.&lt;br /&gt;
* Обычно используется на бордерах.&lt;br /&gt;
{{note|text=Когда в сети есть 2 бордера, которые получают один и тот же маршрут извне, и бордеры навешивают одинаковый повышенный lpf через export policy, в таком случае  соседи IBGP получат маршрут с измененным lpf, но трафик не сможет по-правильному пути выйти из AS. Из-за того что бордеры тоже друг от друга будут получать маршрут с повышенным lpf. Решение: правильно менять lpf через import policy. }}&lt;br /&gt;
&lt;br /&gt;
==Autonomous system path==&lt;br /&gt;
 '''✔️Well-known Mandatory'''&lt;br /&gt;
* Описывает через какие автономные системы надо пройти, чтобы дойти до сети назначения. &lt;br /&gt;
* Номер AS добавляется при передаче обновления из одной AS eBGP-соседу в другой AS.&lt;br /&gt;
&lt;br /&gt;
Используется для:&lt;br /&gt;
* обнаружения петель&lt;br /&gt;
* влияние на path selection с помощью prepending (делается через export policy)&lt;br /&gt;
 set protocols bgp group int export longer-as-path&lt;br /&gt;
 set policy-options policy-statement longer-as-path term 1 then as-path-prepend &amp;quot;1111 1111 1111&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 show route advertising-protocol bgp 10.200.86.2 &lt;br /&gt;
 inet.0: 32 destinations, 32 routes (32 active, 0 holddown, 0 hidden)&lt;br /&gt;
  Prefix		  Nexthop	       MED     Lclpref    AS path&lt;br /&gt;
 * 172.17.0.0/24           Self                         100        '''1111 1111 1111 [1111] I'''&lt;br /&gt;
&lt;br /&gt;
'''Обозначение:'''&lt;br /&gt;
* [] - local AS&lt;br /&gt;
* {} - AS sets - группы AS, порядок не имеет значение. Возникает при агрегировании маршрутов.&lt;br /&gt;
* () - confederation&lt;br /&gt;
* ([]) - confederation sets&lt;br /&gt;
&lt;br /&gt;
Каждый сегмент атрибута AS path представлен в виде поля TLV (path segment type, path segment length, path segment value):&lt;br /&gt;
* '''path segment type''' — поле размером 1 байт для которого определены такие значения:&lt;br /&gt;
** 1 — AS_SET: неупорядоченное множество автономных систем, через которые прошел маршрут в сообщении Update,&lt;br /&gt;
** 2 — AS_SEQUENCE: упорядоченное множество автономных систем, через которые прошел маршрут в сообщении Update&lt;br /&gt;
* '''path segment length''' — поле размером 1 байт. Указывает сколько автономных систем указано в поле path segment value&lt;br /&gt;
* '''path segment value''' — номера автономных систем, каждая представлена полем размером 2 байта.&lt;br /&gt;
&lt;br /&gt;
===Операторы регулярных выражений===&lt;br /&gt;
{{re|title=&amp;lt;sub&amp;gt;Список регулярных выражений для AS Path&amp;lt;/sub&amp;gt;|Список регулярных выражений для AS Path}}&lt;br /&gt;
. - любой знак (одна точка - один любой знак, 3 точки - три любых символа).&lt;br /&gt;
&lt;br /&gt;
==Next-hop==&lt;br /&gt;
 '''✔️Well-known Mandatory'''&lt;br /&gt;
* Это IP-адрес eBGP-маршрутизатора, через который идет путь к сети назначения.&lt;br /&gt;
* Атрибут меняется при передаче префикса в другую AS (по-умолчанию подставляется ip-адрес bgp-соседа)&lt;br /&gt;
* Атрибут не меняется при передаче префикса в ту же AS&lt;br /&gt;
&lt;br /&gt;
===Next-hop resolution===&lt;br /&gt;
* '''Next-hop self'''&lt;br /&gt;
* '''Export direct into IGP:''' проанонсировать p2p сеть с EBGP peer, который прислал префикс.&lt;br /&gt;
* '''IGP passive interface:''' интерфейс в сторону EBGP соседа.&lt;br /&gt;
* '''Static routes:''' тут возникает проблема с тем, что придется на всех IBGP роутерах прописывать этот маршрут. Лучше выбрать другой способ.&lt;br /&gt;
* '''IGP adjacency on inter-AS links to EBGP peers:''' тоже плохой вариант. Опсано и зачем тогде вообще разные AS. Лучше выбрать другой способ.&lt;br /&gt;
&lt;br /&gt;
Можно изменить с помощью policy на выходе (export к IBGP):&lt;br /&gt;
 set policy-options policy-statement nexthop-self term localpref then next-hop self&lt;br /&gt;
&lt;br /&gt;
Или же на входе (import от EBGP peer):&lt;br /&gt;
 set policy-options policy-statement nexthop-peer term localpref then next-hop ''peer-address''&lt;br /&gt;
&lt;br /&gt;
==Origin==&lt;br /&gt;
 '''✔️Well-known Mandatory'''&lt;br /&gt;
Атрибут '''Origin''' — указывает на то, каким образом был получен маршрут в обновлении. Меняется с помощью policy.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Возможные значения атрибута&lt;br /&gt;
|-&lt;br /&gt;
|'''0'''&lt;br /&gt;
|IGP&lt;br /&gt;
|NLRI получена внутри исходной автономной системы&lt;br /&gt;
|-&lt;br /&gt;
|'''1'''&lt;br /&gt;
| EGP&lt;br /&gt;
| NLRI выучена по протоколу Exterior Gateway Protocol (EGP) - протокол уже давно не используется.&lt;br /&gt;
|-&lt;br /&gt;
|'''2'''&lt;br /&gt;
| Incomplete&lt;br /&gt;
| NLRI была выучена каким-то другим образом, скорей  всего через redistribution.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Atomic aggregate==&lt;br /&gt;
 '''✔️Well-known Discretionary'''&lt;br /&gt;
&lt;br /&gt;
==Aggregator==&lt;br /&gt;
 '''✔️Optional Transitive'''&lt;br /&gt;
&lt;br /&gt;
==Communities==&lt;br /&gt;
 '''✔️Optional Transitive'''&lt;br /&gt;
* Тегирование маршрутов&lt;br /&gt;
* Существуют предопределенные значения (well-known), которые не требуется определять локально на своем оборудовании&lt;br /&gt;
* По умолчанию не пересылаются соседям&lt;br /&gt;
* Одному маршруту может быть присвоено несколько communities&lt;br /&gt;
*Community могут быть критерием в policy для изменения других атрибутов BGP, например lpf.&lt;br /&gt;
* Один из вариантов применения: передается соседней AS для управления входящим трафиком&lt;br /&gt;
&lt;br /&gt;
Значения от 0x00000000 до 0x0000FFFF и от 0xFFFF0000 до 0xFFFFFFFF зарезервированы.&lt;br /&gt;
&lt;br /&gt;
Как правило community отображаются в формате ASN:VALUE.&lt;br /&gt;
В таком формате, доступны для использования community от 1:0 до 65534:65535.&lt;br /&gt;
В первой части указывается номер автономной системы, а во второй значение community, которое определяет политику маршрутизации трафика.&lt;br /&gt;
&lt;br /&gt;
Некоторые значения communities предопределены. RFC1997 определяет три значения таких community. Эти значения должны одинаково распознаваться и обрабатываться всеми реализациями BGP, которые распознают атрибут community.&lt;br /&gt;
&lt;br /&gt;
Если маршрутизатор получает маршрут, в котором указано предопределенное значение communities, то он выполняет специфическое, предопределенное действие основанное на значении атрибута.&lt;br /&gt;
&lt;br /&gt;
Предопределенные значения communities (Well-known Communities):&lt;br /&gt;
&lt;br /&gt;
===no-export (0xFFFFFF01)===&lt;br /&gt;
Все маршруты которые передаются с таким значением атрибута community не должны анонсироваться за пределы AS.&lt;br /&gt;
То есть, маршруты не анонсируются EBGP-соседям, но анонсируются внешним соседям в конфедерации.&lt;br /&gt;
&lt;br /&gt;
'''Пример использования'''&lt;br /&gt;
{{note|text=AS1 подключена к AS2 двумя линками (multinoming). AS1 анонсирует '''172.17.0/16''' в AS2. Для оптимальной маршрутизации, AS1 хочет посылать некоторые более специфичные маршруты через один из этих линков, при этом остальному интернету вовсе не обязательно получать эти специфики. Для этой цели AS1 использует community no-export, и посылает '''172.17.0/17''' в один из стыков с AS2, и '''172.17.128/17''' во второй стык. AS2 видит эти маршруты и выбирает их как более специфичные. Кроме того, эти маршруты видят все iBGP-соседи в пределах AS2. Тем не менее, за пределы AS2 в Интернет анонсируется только '''172.17.0/16'''.}}&lt;br /&gt;
{{note|text= AS customer имеет 2 ISP (AS1, AS2).  AS1 - основной. Если AS customer хочет получать выход в инет только через AS1, то в сторону AS2 можно просто посылать маршруты с no-export. Но при этом важно, что при падении AS1, AS customer будет доступна только локальным пользователям AS2, но не всему интернету.}}&lt;br /&gt;
===no-advertise (0xFFFFFF02)=== &lt;br /&gt;
Все маршруты которые передаются с таким значением атрибута community не должны анонсироваться другим BGP-соседям.&lt;br /&gt;
&lt;br /&gt;
===no-export-subconfed (0xFFFFFF03)===&lt;br /&gt;
Все маршруты которые передаются с таким значением атрибута community не должны анонсироваться внешним BGP-соседям (ни внешним для конфедерации, ни настоящим внешним соседям). В Cisco это значение встречается и под названием local-as.&lt;br /&gt;
{{note|text=Маршрутизаторы, которые не поддерживают атрибут community, будут передавать его далее, так как это transitive атрибут.}}&lt;br /&gt;
&lt;br /&gt;
 set policy-options policy-statement community ''test-community'' members ''[65510:555 65610:999]''     - [x and y]&lt;br /&gt;
 set policy-options policy-statement ''test'' term ''1'' then community (add|set|delete) ''test-community''&lt;br /&gt;
&lt;br /&gt;
 set policy-options policy-statement community ''all-community'' members '' &amp;quot;*:*&amp;quot; ''&lt;br /&gt;
&lt;br /&gt;
С communities широко используются регулярные выражения.&lt;br /&gt;
&lt;br /&gt;
===Примеры===&lt;br /&gt;
&lt;br /&gt;
100:* - all posible community values with AS 100.&lt;br /&gt;
&lt;br /&gt;
11.1:666 - 1101:666, 1111:666, 1121:666, etc.&lt;br /&gt;
&lt;br /&gt;
 show route community *:20&lt;br /&gt;
 show route community-name ''community-test'' detail&lt;br /&gt;
&lt;br /&gt;
===Список операторов регулярных выражений для Community===&lt;br /&gt;
{{re|title=Список операторов регулярных выражений для Community}}&lt;br /&gt;
&lt;br /&gt;
===Действия с community===&lt;br /&gt;
*add - добавляет к текущим community префикса указанное community&lt;br /&gt;
*delete - удаляет только указанное community&lt;br /&gt;
*set - заменяет существующие community на указанное&lt;br /&gt;
&lt;br /&gt;
==Multi exit discriminator (MED)==&lt;br /&gt;
&lt;br /&gt;
 '''✔️Optional Non-transitive'''&lt;br /&gt;
&lt;br /&gt;
* Используется для информирования eBGP-соседей о том, какой путь в автономную систему более предпочтительный. &lt;br /&gt;
* Атрибут передается между автономными системами, но в Junos передается только EBGP пиру и не распространяется дальше по AS.&lt;br /&gt;
* Маршрутизаторы внутри соседней автономной системы используют этот атрибут, но, как только обновление выходит за пределы AS, атрибут MED отбрасывается.&lt;br /&gt;
* Чем меньше значение атрибута, тем более предпочтительна точка входа в автономную систему.&lt;br /&gt;
* Исходя из названия - используется только в тех случаях, когда между AS есть несколько линков.&lt;br /&gt;
*Можно использовать для балансировки.&lt;br /&gt;
&lt;br /&gt;
Сравнение MED (при прочих равных) происходит если один и тот же префикс приходит от одной AS. &lt;br /&gt;
&lt;br /&gt;
Если будет анонс этого префикса с более низким MED, но из другой AS, то он не будет рассматриваться как вероятный вариант для использования. &lt;br /&gt;
&lt;br /&gt;
Это дефолтное поведение, которое можно изменить с помощью:&lt;br /&gt;
*''always-compare-med'': при этом не будет иметь значение разные AS или одна, просто активным станет маршрут с самым низким MED.&lt;br /&gt;
*''cisco-non-determenistic'': выбор основан на том, когда маршрут пришел. Juniper не рекомендует использовать.&lt;br /&gt;
&lt;br /&gt;
MED назначается с помощью policy.&lt;br /&gt;
===Возможные операции с MED===&lt;br /&gt;
Внутри policy ''metric'' - это обозначение MED атрибута.&lt;br /&gt;
&lt;br /&gt;
Можно использовать как в ''from'', так и в ''then''. ''Then'': назначение метки - ''metric 50'', добавить к существующей метки - ''metric add 50'', вычесть из ''metric subtract 50''.&lt;br /&gt;
&lt;br /&gt;
MED можно назначить внутри ''protocols bgp'':&lt;br /&gt;
&lt;br /&gt;
 [edit protocols bgp group AS-100]&lt;br /&gt;
    type external&lt;br /&gt;
    local-as 200&lt;br /&gt;
    neighbor 1.1.1.1 metric-out 50                    &amp;lt;= определенное значение&lt;br /&gt;
    neighbor 2.2.2.2 metric-out igp                   &amp;lt;= текущаф IGP метрика&lt;br /&gt;
    neighbor 3.3.3.3 metric-out minimum-igp           &amp;lt;= миимальная IGP мтерика, когда-либо изученная&lt;br /&gt;
    neighbor 4.4.4.4 metric-out igp 5                 &amp;lt;= добавит или вычесть из IGP метрики&lt;br /&gt;
&lt;br /&gt;
MED также можно назначить аналогичным образом через policy:&lt;br /&gt;
&lt;br /&gt;
 [edit policy-optinos policy-sttement new-metric]&lt;br /&gt;
    term IGP&lt;br /&gt;
       then metric igp ''offset''&lt;br /&gt;
    term minimum-igp&lt;br /&gt;
       then metric minimum-igp ''offset''&lt;br /&gt;
&lt;br /&gt;
При использовании ''metric igp'' на префикс вешается MED, равный IGP метрики до роутера, который прислал этот префикс. При изменениях IGP metric, будет меняться и MED.&lt;br /&gt;
&lt;br /&gt;
При использовании ''metric minimum-igp'' MED не будет меняться при изменениях IGP метрики.&lt;br /&gt;
&lt;br /&gt;
При агрегировании маршрутов - MED становится = 0.&lt;br /&gt;
&lt;br /&gt;
Если между роутерами передаются агрегированный маршрут и вложенный в него в MED, то вложенный будет передан с MED, а агрегированный - с MED = 0.&lt;br /&gt;
&lt;br /&gt;
Это дефолтное поведение и альтернатив этому нет.&lt;br /&gt;
&lt;br /&gt;
==Weight (проприетарный атрибут Cisco)==&lt;br /&gt;
Атрибут '''Weight''': &lt;br /&gt;
* Позволяет назначить &amp;quot;вес&amp;quot; различным путям локально на маршрутизаторе. &lt;br /&gt;
* Используется в тех случаях, когда у одного маршрутизатора есть несколько выходов из автономной системы (сам маршрутизатор является точкой выхода). &lt;br /&gt;
* Имеет значение только локально, в пределах маршрутизатора. &lt;br /&gt;
* Не передается в обновлениях.&lt;br /&gt;
* Чем больше значение атрибута, тем более предпочтителен путь выхода.&lt;br /&gt;
&lt;br /&gt;
=Механизмы управления трафиком=&lt;br /&gt;
==Входящим==&lt;br /&gt;
*AS path prepend&lt;br /&gt;
*Community (если поддерживает провайдер)&lt;br /&gt;
*MED (подключение к одной и той же AS)&lt;br /&gt;
*Анонс разных префиксов через разных ISP&lt;br /&gt;
&lt;br /&gt;
==Исходящим==&lt;br /&gt;
*Проприетарный атрибут Cisco weight (локально на маршрутизаторе)&lt;br /&gt;
*Local Preference (локально в AS)&lt;br /&gt;
*Косвенно можно политикой навешивать med на префиксы от пира и в зависимости от этого будет также регулироваться исходящий трафик.&lt;br /&gt;
&lt;br /&gt;
=Выбор лучшего пути (BGP Active Route Selection)=&lt;br /&gt;
# Проверяем, что резолвится next-hop (без это маршрут и активным то не будет :/ )&lt;br /&gt;
# Route Preference (Admin distance)&lt;br /&gt;
# БОльший local preference (''Inactive reason: '''Local Preference''''')&lt;br /&gt;
# Кратчайший AS-path (''Inactive reason: '''AS path''''')&lt;br /&gt;
# Меньший Origin value (''Inactive reason: '''Origin''''')&lt;br /&gt;
# Меньший MED value (''Inactive reason: '''Route Metric or MED comparison''''')&lt;br /&gt;
# EBGP peer предпочтительней IBGP peer (''Inactive reason: '''Interior &amp;gt; Exterior &amp;gt; Exterior via Interior''''')&lt;br /&gt;
# C кратчайшей IGP метрикой к Protocol next-hop (''Inactive reason: '''Not Best in its group – IGP metric''''')&lt;br /&gt;
# Если префикс получен по IBGP, то используем префикс от пира с наименьшим RID (''Inactive reason: '''Not Best in its group – Router ID''''')&lt;br /&gt;
# Если префикс получен по EBGP, то используем более старый активный префикс (считается более стабильным) (''Inactive reason: '''Not Best in its group – Active preferred''''')&lt;br /&gt;
# При использовании RR: кратчайший cluster list length (''Inactive reason: '''Not Best in its group – Cluster list length''''')&lt;br /&gt;
# Наименьший router-ID (''Inactive reason: '''Not Best in its group – Router ID''''')&lt;br /&gt;
# Наименьший Source IP address (''Inactive reason: '''Not Best in its group - Update source''''') &lt;br /&gt;
&lt;br /&gt;
В Juniper можно посмотреть причину неактивности маршрута: ''Inactive reason'' в выводе ''sh route protocol bgp x.x.x.x extensive''&lt;br /&gt;
&lt;br /&gt;
Дефолтное поведение для EBGP маршрутов может быть изменено: '''path-selection external-router-id'''. При включении этой функции для роутера выбор активного EBGP маршрута от разных роутеров будет делаться по наименьшему router-id.&lt;br /&gt;
&lt;br /&gt;
*Route Preference (Admin distance) - не передается по ibgp, ebgp. Может только навешиваться через import-policy или в настройках bgp на любом уровне иерархии.&lt;br /&gt;
&lt;br /&gt;
=Multipath=&lt;br /&gt;
Один и тот же маршрут прилетает с двух пиров одной AS или несколько копий маршрута прилетает с одного пира. Активный маршрут будет вставлен в routing table с несколькими next-hop и трафик будет балансироваться между двумя пирами (в forwarding table все же будет вставляться один next-hop). Для inactive маршрутов будет указан один next-hop. Multipath не вставит маршруты с одинаковым MED-plus-IGP cost, при разных IGP метриках до пиров. На роутере глобально должен быть включен load-balancing.&lt;br /&gt;
&lt;br /&gt;
При включенном multipath, алгоритм выбора лучшего пути игнорирует router ID и peer ID. &lt;br /&gt;
&lt;br /&gt;
До включения:&lt;br /&gt;
 mortlach&amp;gt; show route protocol bgp terse    &lt;br /&gt;
 inet.0: 30 destinations, 34 routes (30 active, 0 holddown, 0 hidden)&lt;br /&gt;
 + = Active Route, - = Last Active, * = Both&lt;br /&gt;
 A Destination        P Prf   Metric 1   Metric 2  Next hop	AS path&lt;br /&gt;
 	* 172.17.0.0/24	B 170	100	&amp;gt;192.168.86.21	I&lt;br /&gt;
 			B 170	100	&amp;gt;192.168.86.42	I&lt;br /&gt;
 	* 172.17.1.0/24	B 170	100	&amp;gt;192.168.86.21	I&lt;br /&gt;
 			B 170	100	&amp;gt;192.168.86.42	I&lt;br /&gt;
 	* 172.17.2.0/24	B 170	100	&amp;gt;192.168.86.21	I&lt;br /&gt;
 			B 170	100	&amp;gt;192.168.86.42	I&lt;br /&gt;
 	* 172.17.3.0/24	B 170	100	&amp;gt;192.168.86.21	I&lt;br /&gt;
 			B 170	100	&amp;gt;192.168.86.42	I&lt;br /&gt;
 mortlach&amp;gt; show route forwarding-table destination 172.17.0.0/24    &lt;br /&gt;
 Routing table: default.inet&lt;br /&gt;
 Internet:&lt;br /&gt;
 Destination	Type	RtRef	Next hop	Type Index NhRef Netif&lt;br /&gt;
 172.17.0.0/24	user	0			indr 262142     5&lt;br /&gt;
 				192.168.86.21      ucst   547     5 '''ge-0/0/0.90 - выбран активным, из-за меньшего router-ID (10.200.86.4 vs 10.200.86.8)'''&lt;br /&gt;
&lt;br /&gt;
После:&lt;br /&gt;
 mortlach&amp;gt; show route protocol bgp terse&lt;br /&gt;
 inet.0: 30 destinations, 34 routes (30 active, 0 holddown, 0 hidden)&lt;br /&gt;
 + = Active Route, - = Last Active, * = Both&lt;br /&gt;
 A Destination        P Prf   Metric 1   Metric 2 Next hop AS path&lt;br /&gt;
 	* 172.17.0.0/24	B 170	100	192.168.86.21	I&lt;br /&gt;
 					&amp;gt;192.168.86.42&lt;br /&gt;
 			B 170	100	&amp;gt;192.168.86.42	I&lt;br /&gt;
 	* 172.17.1.0/24	B 170	100	192.168.86.21	I&lt;br /&gt;
 					&amp;gt;192.168.86.42&lt;br /&gt;
 			B 170	100	&amp;gt;192.168.86.42	I&lt;br /&gt;
 	* 172.17.2.0/24	B 170	100	192.168.86.21	I&lt;br /&gt;
 					&amp;gt;192.168.86.42&lt;br /&gt;
 			B 170	100	&amp;gt;192.168.86.42	I&lt;br /&gt;
 	* 172.17.3.0/24	B 170	100	192.168.86.21	I&lt;br /&gt;
 					&amp;gt;192.168.86.42&lt;br /&gt;
 			B 170	100	&amp;gt;192.168.86.42	I&lt;br /&gt;
 &lt;br /&gt;
 mortlach&amp;gt; show route forwarding-table destination 172.17.0.0/24    &lt;br /&gt;
 Routing table: default.inet&lt;br /&gt;
 Internet:&lt;br /&gt;
 Destination        Type RtRef Next hop           Type Index NhRef Netif&lt;br /&gt;
 172.17.0.0/24      user     0      indr 262143     5&lt;br /&gt;
  192.168.86.42      ucst   588     7 '''ge-0/0/0.50''' - '''изменился, т.к. router ID уже не влияет на выбор лучшего пути'''&lt;br /&gt;
&lt;br /&gt;
==Link Bandwidth Extended Community==&lt;br /&gt;
При включенном multipath можно задать желаемую балансировку между линками через extended community.&lt;br /&gt;
Это механизм описан в draft-ietf-idr-link-bandwidth-06, и не является стандартизированным, следовательно, возможно, он не будет работать с некоторыми вендорами. В JunOS поддерживается.&lt;br /&gt;
&lt;br /&gt;
Позволяет делать балансировку пропорционально заданным в community скоростям.&lt;br /&gt;
&lt;br /&gt;
Пример использования:&lt;br /&gt;
&lt;br /&gt;
R1 и R2 соединены напрямую через два сабинтерфейса, на каждом из которых висит своя /30 сеть&lt;br /&gt;
&lt;br /&gt;
 |     | ge-0/0/0.10 ----- ge-0/0/0.10 |    |&lt;br /&gt;
 |  R1 |                               | R2 |&lt;br /&gt;
 |     | ge-0/0/0.20 ----- ge-0/0/0.20 |    |&lt;br /&gt;
&lt;br /&gt;
Конфиг R1:&lt;br /&gt;
 R1&amp;gt; show configuration protocols bgp &lt;br /&gt;
 group ebgp {&lt;br /&gt;
     multipath;&lt;br /&gt;
     neighbor 10.1.0.2 {&lt;br /&gt;
         description R2;&lt;br /&gt;
         export from-direct;&lt;br /&gt;
         peer-as 2222;}&lt;br /&gt;
     neighbor 10.2.0.2 {&lt;br /&gt;
         description R2;&lt;br /&gt;
         export from-direct;&lt;br /&gt;
         peer-as 2222;}}&lt;br /&gt;
&lt;br /&gt;
Конфиг R2:&lt;br /&gt;
 set interfaces lo0 unit 0 family inet address 2.2.2.2/32&lt;br /&gt;
 &lt;br /&gt;
 set policy-options policy-statement bw20 then community add bw20&lt;br /&gt;
 set policy-options policy-statement bw80 then community add bw80&lt;br /&gt;
&lt;br /&gt;
 set policy-options policy-statement from-direct term redistribute-direct from protocol direct&lt;br /&gt;
 set policy-options policy-statement from-direct term redistribute-direct then accept&lt;br /&gt;
 set policy-options policy-statement from-direct term default then reject&lt;br /&gt;
&lt;br /&gt;
 set policy-options community bw20 members bandwidth:2222:2500000; '''// 2500000 байт в секунду — это 20% от 100Мегабит'''&lt;br /&gt;
 set policy-options community bw80 members bandwidth:2222:10000000; '''// 10000000 байт в секунду — это 80% от 100Мегабит'''&lt;br /&gt;
 &lt;br /&gt;
 R2&amp;gt; show configuration protocols bgp &lt;br /&gt;
 group ebgp {&lt;br /&gt;
     neighbor 10.1.0.1 {&lt;br /&gt;
         description R1;&lt;br /&gt;
         export [ bw20 from-direct ]; '''// На одно из  соседств навешивается community bw20'''&lt;br /&gt;
         peer-as 1111;}&lt;br /&gt;
     neighbor 10.2.0.1 {&lt;br /&gt;
         description R1;&lt;br /&gt;
         export [ bw80 from-direct ]; '''// На второе соседство навешивается community bw80'''&lt;br /&gt;
         peer-as 1111;}}&lt;br /&gt;
&lt;br /&gt;
Что получилось:&lt;br /&gt;
&lt;br /&gt;
 R1&amp;gt; show route 2.2.2.2 extensive        &lt;br /&gt;
 &lt;br /&gt;
 inet.0: 11 destinations, 19 routes (11 active, 0 holddown, 0 hidden)&lt;br /&gt;
 2.2.2.2/32 (2 entries, 1 announced)&lt;br /&gt;
 TSI:&lt;br /&gt;
 KRT in-kernel 2.2.2.2/32 -&amp;gt; {10.2.0.2, 10.1.0.2}&lt;br /&gt;
        *BGP    Preference: 170/-101&lt;br /&gt;
                Next hop type: Router, Next hop index: 262145&lt;br /&gt;
                Address: 0x9404010&lt;br /&gt;
                Next-hop reference count: 8&lt;br /&gt;
                Source: 10.1.0.2&lt;br /&gt;
                '''Next hop: 10.2.0.2 via ge-0/0/0.20 balance 80%'''&lt;br /&gt;
                '''Next hop: 10.1.0.2 via ge-0/0/0.10 balance 20%, selected'''&lt;br /&gt;
                State: &amp;lt;Active Ext&amp;gt;&lt;br /&gt;
                Local AS:  1111 Peer AS:  2222&lt;br /&gt;
                Age: 1:20:49 &lt;br /&gt;
                Task: BGP_2222.10.1.0.2+179&lt;br /&gt;
                Announcement bits (1): 0-KRT &lt;br /&gt;
                AS path: 2222 I&lt;br /&gt;
                '''Communities: bandwidth:2222:2500000'''&lt;br /&gt;
                '''Accepted Multipath'''&lt;br /&gt;
                Localpref: 100&lt;br /&gt;
                Router ID: 2.2.2.2&lt;br /&gt;
&lt;br /&gt;
=Multihop=&lt;br /&gt;
Возможность поднять EBGP peering между роутерами, не имеющих прямого физического соединения. Сессия устанавливается на lo интерфейсах.&lt;br /&gt;
&lt;br /&gt;
Важно в конфиге задать multihop. В таблице маршрутизации должен быть маршрут до пира.&lt;br /&gt;
&lt;br /&gt;
При поднятии сессии на Lo интерфейсах используем:&lt;br /&gt;
*''set system default-address-selection'' - будет браться адрес lo автоматически&lt;br /&gt;
*local-address (bgp, group или neighbor) - более специфичен, поэтому если надо будет - перебьет уже настроенный default-address-selection&lt;br /&gt;
&lt;br /&gt;
TTL = 1 задаем, чтобы соседство установилось точно с одним ближайшим роутером. (либо другое значение, если роутер далеко)&lt;br /&gt;
&lt;br /&gt;
 blair&amp;gt; show route 10.200.86.4    &lt;br /&gt;
 10.200.86.4/32	*[IS-IS/18] 00:00:03, metric 10&lt;br /&gt;
 		  to 192.168.86.49 via ge-0/0/0.80&lt;br /&gt;
 		&amp;gt; to 192.168.86.17 via ge-0/0/0.100&lt;br /&gt;
Config&lt;br /&gt;
 set protocols bgp group int type internal&lt;br /&gt;
 set protocols bgp group int multihop ttl 1&lt;br /&gt;
 set protocols bgp group int local-address 10.200.86.1&lt;br /&gt;
 set protocols bgp group int neighbor 10.200.86.4 &lt;br /&gt;
&lt;br /&gt;
Т.к. между роутерами теперь 2 физических линка, то можно балансировать трафик между ними.&lt;br /&gt;
&lt;br /&gt;
=Modifying AS Path=&lt;br /&gt;
==Option 1: remove-private==&lt;br /&gt;
Диапазон: 64512 - 65534&lt;br /&gt;
&lt;br /&gt;
Роутер, на котором настроен remove-private перед передачей префиксов удаляет из AS path AS из указанного выше диапазона.&lt;br /&gt;
&lt;br /&gt;
Можно настраивать на всех уровнях: protocols bgp, group, neighbor.&lt;br /&gt;
&lt;br /&gt;
==Option 2: local-as==&lt;br /&gt;
 set routing-options autonomous-system 1111&lt;br /&gt;
 set protocols bgp group ebgp neighbor 10.1.0.2 peer-as 2222&lt;br /&gt;
 set protocols bgp group ebgp neighbor 10.1.0.2 local-as 3333&lt;br /&gt;
&lt;br /&gt;
При такой конфигурации R1, EBGP-сосед, который '''ожидает''', что у R1 будет AS3333 сможет установить соседство с R1, хотя, по факту R1 принадлежит AS1111.&lt;br /&gt;
Результат:&lt;br /&gt;
 R1&amp;gt; show bgp neighbor &lt;br /&gt;
 Peer: 10.1.0.2+179 AS 2222     Local: 10.1.0.1+62745 '''AS 3333''' &lt;br /&gt;
   Type: External    State: Established    Flags: &amp;lt;Sync&amp;gt;&lt;br /&gt;
   Last State: OpenConfirm   Last Event: RecvKeepAlive&lt;br /&gt;
   ...&lt;br /&gt;
   Holdtime: 90 Preference: 170 Localpref: 110 '''Local AS: 3333 Local System AS: 1111'''&lt;br /&gt;
   Number of flaps: 0&lt;br /&gt;
   Peer ID: 2.2.2.2         Local ID: 1.1.1.1           Active Holdtime: 90&lt;br /&gt;
   ...&lt;br /&gt;
&lt;br /&gt;
'''Зачем это нужно'''&lt;br /&gt;
&lt;br /&gt;
Предположим, оператор с AS1111 купил сеть оператора с AS3333. У AS3333 были свои клиенты, подключенные по BGP, которые не готовы или не хотят изменять конфигурацию на своих роутерах. В таком случае можно временно применить опцию local-as, чтобы выступить для них от лица предыдущей AS (в примере - 3333), но внутри сети перевести инфораструктуру на AS1111.&lt;br /&gt;
&lt;br /&gt;
Если добавить ключевое слово private:&lt;br /&gt;
 set protocols bgp group ebgp neighbor 10.1.0.2 peer-as 2222&lt;br /&gt;
 set protocols bgp group ebgp neighbor 10.1.0.2 local-as 3333 '''private'''&lt;br /&gt;
&lt;br /&gt;
То R1 вообще не будет добавлять AS3333 при анонсе маршрутов, получаемых от 10.1.0.2 своим соседям.&lt;br /&gt;
&lt;br /&gt;
==as-override==&lt;br /&gt;
 CE1 '''(AS 65500)''' &amp;lt;&amp;gt; PE (AS 1111) &amp;lt;&amp;gt; P (AS 1111) &amp;lt;&amp;gt; PE (AS 1111) &amp;lt;&amp;gt; CE2 '''(AS 65500)'''&lt;br /&gt;
&lt;br /&gt;
Если на сети ISP есть 2 сессии с пирами из одной AS, то при передаче маршрутов, полученных от одного site этой AS второму site'у, второй site не примет такой префикс, потому что в AS path будет дважды указана его AS - это routing loop. &lt;br /&gt;
 65500 1111 I   - '''роутер с AS 65500 не примет префикс с таким AS path.'''&lt;br /&gt;
&lt;br /&gt;
 set protocols bgp group int neighbor 10.200.86.4 as-override&lt;br /&gt;
Можно конфигурировать для группы или соседа.&lt;br /&gt;
&lt;br /&gt;
Роутер ISP на полученном префиксе смотрит в AS path, AS пира заменяем на свою. При передаче префикса второму site ISP делает стандартный prepend своей AS. В итоге пиру в AS 65500 прилетит префикс с таким AS path: &lt;br /&gt;
 1111 1111 I&lt;br /&gt;
&lt;br /&gt;
==loops==&lt;br /&gt;
Еще один способ решения ситуации, описанной в примере выше - чтобы CE2 получил маршрут своего удаленного site: &lt;br /&gt;
&lt;br /&gt;
На CE2:&lt;br /&gt;
 set routing-options autonomous-system 65500 loops 2&lt;br /&gt;
Тогда на CE2 прилетит префикс с AS path:&lt;br /&gt;
 1111 65500 I &lt;br /&gt;
и роутер это сожрет.&lt;br /&gt;
&lt;br /&gt;
=Опции настройки для пиров=&lt;br /&gt;
*'''passive''' - локальный роутер перестает слать open message. Чтобы сессия поднялась, open message теперь должно прийти от удаленного пира.&lt;br /&gt;
 blair# top show | compare &lt;br /&gt;
 set protocols bgp group int neighbor 10.200.86.4 passive&lt;br /&gt;
&lt;br /&gt;
 Feb 11 22:07:58.812668 BGP SEND message type 1 (Open) length 59&lt;br /&gt;
 Feb 11 22:07:58.856999 BGP RECV message type 1 (Open) length 59&lt;br /&gt;
После задания passive для пира:&lt;br /&gt;
 Feb 11 22:12:22.128876 BGP RECV message type 1 (Open) length 59&lt;br /&gt;
* '''allow''' - принимает open message только из указанной сети. Можно указать только для определенной группы:&lt;br /&gt;
 set protocols bgp group int allow 10.200.86.0/24&lt;br /&gt;
*'''prefix-limit''': ограничивает значение полученных префиксов от пира. Можно применять на разных уровнях иерархии.&lt;br /&gt;
 set protocols bgp group int neighbor 10.200.86.4 family inet unicast prefix-limit maximum 1500&lt;br /&gt;
 set protocols bgp group int neighbor 10.200.86.4 family inet unicast prefix-limit teardown 100 ('''%''') idle-timeout 10 ('''min''');}}}&lt;br /&gt;
*'''hold-time''': меняем hold timer. По дефолту 90 sec. Можно применять на разных уровнях иерархии.&lt;br /&gt;
 set protocols bgp hold-time 120&lt;br /&gt;
*'''advertise-peer-as''': позволяет EBGP маршруты передавать обратно EBGP пиру. Но тогда и у пира должен быть настроен as loops, чтобы он не отбросил префикс с лупом в AS-Path.&lt;br /&gt;
 set protocols bgp group int advertise-peer-as&lt;br /&gt;
&lt;br /&gt;
=Route Reflection=&lt;br /&gt;
Описан в RFC 4456&lt;br /&gt;
&lt;br /&gt;
'''Концепция'''&lt;br /&gt;
&lt;br /&gt;
Заменяем full-mesh на сети между PE.&lt;br /&gt;
*Позволяет iBGP-спикеру анонсировать другим iBGP-маршрутизаторам маршруты, полученные через iBGP&lt;br /&gt;
*RR пересылает только активные маршруты клиентам (это iBGP соседи RR, которые не являются RR)&lt;br /&gt;
*RR по умолчанию не меняет IBGP атрибуты.&lt;br /&gt;
*Для предотвращения петель существуют два новых атрибута: &lt;br /&gt;
:*'''Cluster List''' (1 или более cluster ID)&lt;br /&gt;
:*'''Originator ID''' - ID роутера, который первым переслал маршрут в AS.&lt;br /&gt;
&lt;br /&gt;
==Распространение маршрутов при использовании RR==&lt;br /&gt;
[[Файл:RR.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Будем использовать следующие обозначения:&lt;br /&gt;
*IBGP rr-client - IBGP сосед в кластере&lt;br /&gt;
*IBGP NON-rr-client - IBGP сосед не в кластере&lt;br /&gt;
*EBGP - EBGP сосед&lt;br /&gt;
&lt;br /&gt;
Распространение маршрутов происходит следующим образом:&lt;br /&gt;
*IBGP rr-client &amp;gt; IBGP rr-client + IBGP NON-rr-client&lt;br /&gt;
*IBGP NON-rr-client &amp;gt; IGBP rr-client&lt;br /&gt;
*IBGP NON-rr-client &amp;lt;&amp;gt; IBGP NON-rr-client - '''не передается'''&lt;br /&gt;
&lt;br /&gt;
*EGBP &amp;gt; IBGP rr-client + NON-rr-client&lt;br /&gt;
&lt;br /&gt;
Если включить '''no-client-reflect''', то это запретит анонсить префиксы между клиентами кластера. В таком случае, если требуется сохранить связность между этими клиентами - нужно настроить между ними full-mesh. Такой вариант развитий по идее может понадобиться только при иерархичном роут-рефлектинге (о нем ниже). &lt;br /&gt;
&lt;br /&gt;
RR добавляет/изменяет атрибуты (без политик по дефолту):&lt;br /&gt;
*'''Originator ID'''&lt;br /&gt;
Router ID первого роутера, который заслал маршрут в AS.&lt;br /&gt;
&lt;br /&gt;
*'''Cluster List (Cluster ID)'''&lt;br /&gt;
Список, включающий ID всех RR, которые обрабатывали данный префикс.&lt;br /&gt;
Если RR получит маршрут, у которого в cluster list будет ID этого RR, то он его дропнет.&lt;br /&gt;
Участвует при выборе активного маршрута (активным становится с наименьшим cluster list).&lt;br /&gt;
Cluster ID добавляется к cluster list, когда маршрут отправляется. Cluster ID должен быть уникальным в рамках AS.&lt;br /&gt;
При использовании нескольких RR, можно для всех использовать одинаковый cluster ID.&lt;br /&gt;
&lt;br /&gt;
+ такой схемы: в таблице будет меньше маршрутов и при такой схеме можно добиться хорошей отказоустойчивости в сети.&lt;br /&gt;
&lt;br /&gt;
Правила работы с Originator и Cluster List:&lt;br /&gt;
*для EBGP или любого другого протокола, отличного от IBGP, originator и сluster list не добавляются &lt;br /&gt;
*для IBGP client&amp;lt;&amp;gt;client / client&amp;lt;&amp;gt;non-client:&lt;br /&gt;
:*originator добавится только если до этого его не существовало. &lt;br /&gt;
:*Cluster list дополнится новым cluster ID. &lt;br /&gt;
:*Cluster ID будет установлен, если его не было ранее.&lt;br /&gt;
&lt;br /&gt;
'''2 RR в кластере'''&lt;br /&gt;
&lt;br /&gt;
Соседство между RR можно устанавливать как внутри отдельной группы для кластера, так и в отдельной группе.&lt;br /&gt;
В обоих случаях при передаче маршрутов между RR петель не будет, т.к. cluster ID будет одинаковыми.&lt;br /&gt;
Каждый из RR в кластере устанавливает IBGP с другими RR, не входящих в кластер.&lt;br /&gt;
В подобных схемах все-таки тоже стараются использовать уникальные cluster ID.&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
&lt;br /&gt;
Если на сети несколько RR, то соседство между ними может быть как в отдельной группе от RR-clients (IBGP), так и в той же группе что и клиенты. &lt;br /&gt;
Между RR - full-mesh.&lt;br /&gt;
&lt;br /&gt;
 set protocols bgp group RR type internal&lt;br /&gt;
 set protocols bgp group RR peer-as 65513&lt;br /&gt;
 set protocols bgp group RR neighbor 2.2.2.2&lt;br /&gt;
 set protocols bgp group RR neighbor 3.3.3.3&lt;br /&gt;
&lt;br /&gt;
RR-clients конфигурируются в отдельной группе, где должен быть включен: &amp;quot;cluster x.x.x.x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 set protocols bgp group RR-clients cluster 1.1.1.1&lt;br /&gt;
&lt;br /&gt;
Со стороны клиентов конфигурация стандартная для IBGP - простое соседство с RR на lo0 адресах (с включенным multihop!!)&lt;br /&gt;
&lt;br /&gt;
==Hierarchical Route Reflection==&lt;br /&gt;
[[Файл:Hierarch_RR.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Отличие от предыдущих: в схеме появляются не только RR и client, но еще и роутеры, выполняющие обе функции в рамках разных кластеров.&lt;br /&gt;
Clients могут устанавливать IBPG между собой full-mesh. Это удобно использовать, чтобы clients могли использовать маршруты от других clients нативно, без обработки RR. &lt;br /&gt;
Чтобы RR не флудил копиями маршрутов, на нем можно включить '''no-client-reflect''', это отключит пересылку маршрутов, полученных внутри кластера. Внешние маршруты при этом продолжают пересылаться.&lt;br /&gt;
&lt;br /&gt;
==Modifying Attributes on the RR==&lt;br /&gt;
&lt;br /&gt;
Все атрибуты BGP изменяются через policy.&lt;br /&gt;
Если на RR есть EBGP, то с большой вероятностью будет активна ф-ия: next-hop-self. При этом, у маршрутов, полученных от client, также next-hop будет меняться.&lt;br /&gt;
Что приведет к не оптимальному форвардингу трафика (должен идти напрямую к original роутеру, а будет идти через RR).&lt;br /&gt;
Чтобы менять next-hop только у external: в policy матчим по interface ли neighbor.&lt;br /&gt;
&lt;br /&gt;
 set policy-option policy-statement nhs term EBGP from protocol bgp&lt;br /&gt;
 set policy-option policy-statement nhs term EBGP from neighbor 2.2.2.2&lt;br /&gt;
 set policy-option policy-statement nhs term EBGP the next-hop self&lt;br /&gt;
&lt;br /&gt;
=Fake-group=&lt;br /&gt;
Данная проблема описана в KB20870 (https://kb.juniper.net/InfoCenter/index?page=content&amp;amp;id=KB20870).&lt;br /&gt;
&lt;br /&gt;
Более подробное описание и рекомендации по предотвращению https://www.juniper.net/documentation/en_US/junos/topics/example/bgp-vpn-session-flap-prevention.html&lt;br /&gt;
&lt;br /&gt;
По факту функционал RR включается/выключается только при добавлении/удалении соседу в группе с клиентами (с '''cluster''').&lt;br /&gt;
&lt;br /&gt;
Если на маршрутизаторе настроены '''EBGP с клиентами''' или '''IBGP c RR''', для которых в конфигурации группы '''включены vpn-address-family''', (inet-vpn, inet6 inet-mpvn, inet-mdt, inet6-mpvn, l2vpn, iso-vpn) и на маршрутизаторе в этих группах производится добавления первого соседа или удаления последнего, Juniper рестартует BGP сессии с RR и c EBGP пирами в VPN-address-family для отсылки NLRI с новой (удалением старой) address-family.&lt;br /&gt;
&lt;br /&gt;
Для предотвращения подобных ситуаций можно предпринять следующие шаги:&lt;br /&gt;
* на каждом RR создана fake группа (для исключения проблемы удаления последнего соседа в группе).&lt;br /&gt;
* на каждом PE создана fake группа (для исключения проблемы включения нового клиента с EBGP + vpn-family)&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
Fake группа имеет следующий вид для '''RR и PE''':&lt;br /&gt;
 group fake-vpn {&lt;br /&gt;
    type '''external''';&lt;br /&gt;
    description &amp;quot;-- Preventing mpbgp sessions flap --&amp;quot;;&lt;br /&gt;
    '''passive''';&lt;br /&gt;
    family inet {&lt;br /&gt;
        any;&lt;br /&gt;
    family inet-vpn {&lt;br /&gt;
        any;&lt;br /&gt;
    family iso-vpn {&lt;br /&gt;
        unicast;&lt;br /&gt;
    family l2vpn {&lt;br /&gt;
        signaling;&lt;br /&gt;
    family evpn {&lt;br /&gt;
        signaling;&lt;br /&gt;
    family inet-mvpn {&lt;br /&gt;
        signaling;&lt;br /&gt;
    family inet-mdt {&lt;br /&gt;
        signaling;&lt;br /&gt;
    '''neighbor 101.101.101.101''' {&lt;br /&gt;
        '''peer-as 101''';&lt;br /&gt;
&lt;br /&gt;
=IPv6 (6PE)=&lt;br /&gt;
Если у нас есть настроенная ipv4 сеть и мы захотели передавать трафик и для ipv6 адресов (используя MPLS), то:&lt;br /&gt;
&lt;br /&gt;
- требуется настроить family inet6 labeled-unicast explicit-null на сессии pe&amp;lt;&amp;gt;rr&lt;br /&gt;
 set protocols bgp group ibgp-rr family inet6 labeled-unicast explicit-null&lt;br /&gt;
эта family навешивает на ipv6 префикс '''label 2''' (explicit-null для ipv6), что позволяет на сети в качестве транспорта использовать mpls, а на последнем роутере делать lookup в таблице inet6.0.&lt;br /&gt;
&lt;br /&gt;
- на сети у нас скорей всего уже будет включен mapping ipv4 адресов в ipv6:&lt;br /&gt;
 set system allow-v4mapped-packets &lt;br /&gt;
- при передаче префиксов pe-&amp;gt;rr должен быть настроен в политике hext-hop self. При этом для ipv6 префиксов будет подставляться mapped ipv6 адрес lo0.&lt;br /&gt;
 rr&amp;gt; show route receive-protocol bgp 172.30.5.5 &lt;br /&gt;
 inet.0: 56 destinations, 58 routes (55 active, 0 holddown, 1 hidden)&lt;br /&gt;
  Prefix		  Nexthop	       MED     Lclpref    AS path&lt;br /&gt;
 * 192.168.31.0/24         '''172.30.5.5'''                   100        64514 I&lt;br /&gt;
 * 192.168.32.0/24         '''172.30.5.5'''                   200        64514 I&lt;br /&gt;
 inet6.0: 7 destinations, 8 routes (7 active, 0 holddown, 0 hidden)&lt;br /&gt;
  Prefix		  Nexthop	       MED     Lclpref    AS path&lt;br /&gt;
  fd17:f0f4:f691:5::31/128&lt;br /&gt;
 *                         '''::ffff:172.30.5.5'''            100        64514 I&lt;br /&gt;
- на rr адреса '''::ffff:172.30.5.5''' не будет, поэтому полученный префикс будет в hidden, из-за неотрезовленного next-hop. Чтобы решить эту проблему прописываем статику:&lt;br /&gt;
 rr&amp;gt; show configuration routing-options &lt;br /&gt;
 rib inet6.0 static route ::ffff:172.30.5.0/124 receive;&lt;br /&gt;
'''receive''' в данном случае позволяет сделать маршрут активным, не прибегая к форвардингу трафика.&lt;br /&gt;
&lt;br /&gt;
- после этого рефлектор спокойно рефлектит маршрут своим клиентам.&lt;br /&gt;
&lt;br /&gt;
- далее, pe получит префикс, но с принятым next-hop   '''::ffff:172.30.5.5''' это префикс опять же не станет активным в таблице. Тут решение static с next-hop receive - не проканает, ибо нам нужно передавать трафик к префиксу, а не просто вставить его в таблицу маршрутизации. Тут прибегнем к варианту, который маршруты ldp для desct-ipv4 замапит в dest-ipv6 из inet.3 и поместит их в inet6.3 (для резолва ipv6 префиксов):&lt;br /&gt;
 set protocols mpls ipv6-tunneling&lt;br /&gt;
&lt;br /&gt;
 rigel-r7&amp;gt; show route protocol ldp 172.30.5.5 &lt;br /&gt;
 '''inet.3''': 25 destinations, 32 routes (8 active, 0 holddown, 22 hidden)&lt;br /&gt;
 '''172.30.5.5/32'''      *[LDP/9] 01:17:08, metric 20&lt;br /&gt;
                      to 172.30.0.41 via ge-0/0/0.240, Push 319216&lt;br /&gt;
                    &amp;gt; to 172.30.0.46 via ge-0/0/3.244, Push 340912&lt;br /&gt;
&lt;br /&gt;
 rigel-r7&amp;gt; show route protocol ldp ::ffff:172.30.5.5 &lt;br /&gt;
 '''inet6.3:''' 8 destinations, 10 routes (8 active, 0 holddown, 0 hidden)&lt;br /&gt;
 '''::ffff:172.30.5.5/128'''   *[LDP/9] 01:17:20, metric 20&lt;br /&gt;
                      to 172.30.0.41 via ge-0/0/0.240, Push 319216&lt;br /&gt;
                    &amp;gt; to 172.30.0.46 via ge-0/0/3.244, '''Push 340912'''&lt;br /&gt;
&lt;br /&gt;
ну и проверяем, что и сам префикс стал активным:&lt;br /&gt;
 rigel-r7&amp;gt; show route fd17:f0f4:f691:5::31/128 &lt;br /&gt;
 inet6.0: 20 destinations, 22 routes (20 active, 0 holddown, 0 hidden)&lt;br /&gt;
 fd17:f0f4:f691:5::31/128 *[BGP/170] 00:50:51, localpref 100, from 172.30.5.41 AS path: 64514 I&lt;br /&gt;
                      to 172.30.0.41 via ge-0/0/0.240, '''Push 2''', Push 319216(top)&lt;br /&gt;
                    &amp;gt; to 172.30.0.46 via ge-0/0/3.244, '''Push 2, Push 340912(top)'''&lt;br /&gt;
&lt;br /&gt;
Кстати, ipv6 tunneling перетаскивает как ldp, так и rsvp маршруты в inet6.3.&lt;br /&gt;
&lt;br /&gt;
=Confederations=&lt;br /&gt;
 Описан в RFC 3065&lt;br /&gt;
&lt;br /&gt;
'''Принципы'''&lt;br /&gt;
&lt;br /&gt;
Цель: разбить global AS на sub-AS.&lt;br /&gt;
*sub-AS должна иметь уникальный номер (зачастую берут приватные AS).&lt;br /&gt;
*Внутри sub-AS между роутерами: full-mesh IBGP. Если внутри sub-AS будет слишком большая сеть, то в нее можно внедрить RR.&lt;br /&gt;
*Между sub-AS - EBGP = confederation BGP = CBGP. При прохождении маршрута через CBGP линк, роутер меняет AS path, включая туда AS sub-AS - этот метод - защита от петель. Другие атрибуты BGP не меняются.&lt;br /&gt;
&lt;br /&gt;
Также в отличие от стандартного EBGP, в CBGP обычно соседство строится на loopback (добавляем multihop в настройки).&lt;br /&gt;
&lt;br /&gt;
==AS-path segment==&lt;br /&gt;
*AS Confederation Sequence&lt;br /&gt;
При прохождение через CBGP линк, роутер добавляет sub-AS к AS-path в &amp;quot;()&amp;quot; в последовательности, как шел маршрут по сети.&lt;br /&gt;
&lt;br /&gt;
AS Confederation Sequence не используется при выборе активного пути.&lt;br /&gt;
&lt;br /&gt;
Этот атрибут имеет type code 3.&lt;br /&gt;
&lt;br /&gt;
 AS-path: (65000 65001 65002) 100 200&lt;br /&gt;
&lt;br /&gt;
*AS Confederation Set&lt;br /&gt;
При агрегировании маршрутов внутри конфедерации, AS confederation sequence становится AS confederation set.&lt;br /&gt;
&lt;br /&gt;
Этот атрибут имеет type code 4.&lt;br /&gt;
&lt;br /&gt;
 10.10.10.0/24 (65000 65001) 100 &lt;br /&gt;
 10.10.20.0/24 (65000 65002) 100&lt;br /&gt;
 10.10.0.0/16 ({65000 65001 65002}) 100 &lt;br /&gt;
&lt;br /&gt;
Оба атрибута используются только для предотвращения петель внутри конфедерации.&lt;br /&gt;
&lt;br /&gt;
При анонсировании маршрутов из конфедерации дальше по сети по EBGP, private AS (sub-AS) стираются, поэтому все конфедерации извне видны как одна большая глобальная AS.&lt;br /&gt;
При этом не требуется отдельно включать (remove-private). В случае с конфедерациями, все приватные AS итак сотрутся.&lt;br /&gt;
&lt;br /&gt;
Но все роутеры внутри конфедерации обязательно должны знать номер глобальной AS.&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
Включение самой конфедерации на роутере - определяется в routing-options:&lt;br /&gt;
&lt;br /&gt;
 set routing-options autonomus-system 65000&lt;br /&gt;
 set routing-options confederation 100 members [65000 65001 65002]&lt;br /&gt;
&lt;br /&gt;
confederation ''&amp;lt;&amp;gt;'' - это номер public AS.&lt;br /&gt;
&lt;br /&gt;
в качестве members - определяются все AS, включенные в конфедерацию.&lt;br /&gt;
&lt;br /&gt;
R1&lt;br /&gt;
 внутри конфедерации: &lt;br /&gt;
 set protocols bgp group sub-AS-65001 type '''internal'''&lt;br /&gt;
 set protocols bgp group sub-AS-65001 local-address 192.168.1.3&lt;br /&gt;
 set protocols bgp group sub-AS-65001 neighbor 192.168.1.1&lt;br /&gt;
 set protocols bgp group sub-AS-65001 neighbor 192.168.1.2&lt;br /&gt;
 set protocols bgp group sub-AS-65001 neighbor 192.168.1.4&lt;br /&gt;
&lt;br /&gt;
CBGP-link 1:&lt;br /&gt;
 set protocols bgp group sub-AS-65000 type '''external'''&lt;br /&gt;
 set protocols bgp group sub-AS-65000 '''multihop'''&lt;br /&gt;
 set protocols bgp group sub-AS-65000 local-address 192.168.1.3&lt;br /&gt;
 set protocols bgp group sub-AS-65000 peer-as 65000&lt;br /&gt;
 set protocols bgp group sub-AS-65000 neighbor 192.168.0.3&lt;br /&gt;
&lt;br /&gt;
CBGP-link 2:&lt;br /&gt;
 set protocols bgp group sub-AS-65002 type '''external '''&lt;br /&gt;
 set protocols bgp group sub-AS-65002 '''multihop'''&lt;br /&gt;
 set protocols bgp group sub-AS-65002 local-address 192.168.1.3&lt;br /&gt;
 set protocols bgp group sub-AS-65002 peer-as 65002&lt;br /&gt;
 set protocols bgp group sub-AS-65002 neighbor 192.168.2.4&lt;br /&gt;
&lt;br /&gt;
=Route damping (flapping)=&lt;br /&gt;
При различных обстоятельствах на сети могут возникать флапы маршрутов, что приводит к загрузке CPU на роутерах.&lt;br /&gt;
&lt;br /&gt;
Чтобы избежать подобного поведения есть некоторые механизмы защиты от флапов, например: '''BGP route flap damping'''.&lt;br /&gt;
&lt;br /&gt;
Damping игнорируется IBGP и работает только с EBGP и CBGP (confederation BGP).&lt;br /&gt;
&lt;br /&gt;
Damping уменьшает кол-во update message, путем обозначения флапающих маршрутов непригодными стать активными маршрутами.&lt;br /&gt;
&lt;br /&gt;
'''Принцип работы:'''&lt;br /&gt;
&lt;br /&gt;
Когда маршрут прилетает на наш роутер (на котором настроен route damping), на префикс назначается значение merit = 0. &lt;br /&gt;
&lt;br /&gt;
Как только роутер распознает некую нестабильность маршрута (префикс просто перестает долетать до роутера (или линк упал)):&lt;br /&gt;
*назначается merit = 1000, включается счетчик decay half-life. Если на роутер снова прилетит префикс, до того, как истечет таймер, то значение merit увеличится еще на 1000 +1000. И подобное поведение будет повторяться до превышения значения merit до supress (3000) - префикс в таком случае будет признан непригодным для использования.&lt;br /&gt;
&lt;br /&gt;
После того, как префикс пропал и заново прилетел на роутер по BGP, его значение merit = 2000 (при дефолтных настройках) &lt;br /&gt;
 Merit (last update/now): 1969/1938&lt;br /&gt;
                Default damping parameters used&lt;br /&gt;
                Last update:       00:00:27 First update:       00:00:49&lt;br /&gt;
                Flaps: 2&lt;br /&gt;
&lt;br /&gt;
После этого при исчезновении маршрута с роутера, его не будет видно в inet.0, но инфо можно будет посмотреть в &lt;br /&gt;
 blair&amp;gt; show route damping history detail    &lt;br /&gt;
&lt;br /&gt;
После того, как будет превышен supress threshold, инфо о маршруте можно будет посмотреть:&lt;br /&gt;
 blair&amp;gt; show route damping suppressed detail    &lt;br /&gt;
&lt;br /&gt;
Либо в hidden, если маршрут приходит от пира.&lt;br /&gt;
&lt;br /&gt;
*если префикс передается от роутера, то он передается со значением merit = 1000.&lt;br /&gt;
*если изменяется path attribute, то префиксу ставится значение 500.&lt;br /&gt;
*decay half-life - кол-во минут после которого значение merit уменьшается вдвое, при поведении маршрута более стабильно. default = 15 min.&lt;br /&gt;
*max-supress - максимальное кол-во минут, которое маршрут проводит в состоянии hold-down. default = 60 min.&lt;br /&gt;
*reuse threshold - произвольное значение, после которого маршрут снова можно использовать. default = 750.&lt;br /&gt;
*supress threshold- произвольное значение, после которого маршрут больше нельзя использовать. default = 3000.&lt;br /&gt;
==Config==&lt;br /&gt;
Как только включаем на роутере damping, без заданных параметров, для работы будут использоваться дефолтные значения.&lt;br /&gt;
&lt;br /&gt;
Параметры задаются через policy. '''Disable''' - для определенных префиксов удаляет merit, и убирает префикс из damping процесса (могут быть например public DNS).&lt;br /&gt;
&lt;br /&gt;
 set policy-options damping c11 half-life 30&lt;br /&gt;
 set policy-options damping c11 reuse 1000&lt;br /&gt;
 set policy-options damping c11 max-suppress 500&lt;br /&gt;
&lt;br /&gt;
 set policy-options policy-statement c11-damping then damping c11&lt;br /&gt;
&lt;br /&gt;
 set protocols bgp group c11 type external&lt;br /&gt;
 set protocols bgp group c11 damping&lt;br /&gt;
 set protocols bgp group c11 import c11-damping&lt;br /&gt;
&lt;br /&gt;
=Blackhole=&lt;br /&gt;
Когда на сети определено специальное community для blackhole, и клиент посылает префикс, помеченный этим community, нужно реализовать блокировку трафика на нашей сети к этом префиксу. И желательно разослать этот префикс другим пирам и апстримам с их blackhole-community.&lt;br /&gt;
&lt;br /&gt;
Блокировку трафика можно организовать несколькими способами.&lt;br /&gt;
&lt;br /&gt;
1. зарулить трафик на префикс, у которого next-hop = discard. &lt;br /&gt;
 set policy-options policy-statement blackhole from protocol bgp&lt;br /&gt;
 set policy-options policy-statement blackhole from community blackhole&lt;br /&gt;
 set policy-options policy-statement blackhole then next-hop 192.168.0.101&lt;br /&gt;
 set policy-options policy-statement blackhole then accept&lt;br /&gt;
 set routing-options static route 192.168.0.101/32 discard&lt;br /&gt;
 set routing-options static route 192.168.0.102/32 discard&lt;br /&gt;
&lt;br /&gt;
здесь без accept - видимо не происходит еще один lookup и next-hop остается unusable.&lt;br /&gt;
Либо resolve происходит, но с next-hop discard маршрут не считается активным и остается в hidden.&lt;br /&gt;
&lt;br /&gt;
Тема discard не раскрыта :)&lt;br /&gt;
 &lt;br /&gt;
2. зарулить на discard interface (dsc). - подробно лучше смотреть в документации Juniper.&lt;br /&gt;
&lt;br /&gt;
3. сделать у префикса сразу next-hop discard.&lt;br /&gt;
&lt;br /&gt;
 set policy-options policy-statement blackhole from protocol bgp &lt;br /&gt;
 set policy-options policy-statement blackhole from community blackhole&lt;br /&gt;
 set policy-options policy-statement blackhole then '''next-hop''' discard&lt;br /&gt;
 set policy-options policy-statement blackhole then '''accept'''&lt;br /&gt;
 set policy-options community blackhole members &amp;quot;6451[0-9]:666&amp;quot;&lt;br /&gt;
&lt;br /&gt;
без accept маршрут будет в hidden и не передастся своим ibgp соседям. (в hidden, так как next-hop unusable)&lt;br /&gt;
&lt;br /&gt;
Политику применяем на клиентов и на ibgp сессии в рамках нашей aAS (+cbgp, если используем конфедерации)&lt;br /&gt;
&lt;br /&gt;
Чтобы разослать префикс другим ebgp пирам добавляем еще одну строчку в политику:&lt;br /&gt;
 set policy-options policy-statement blackhole then community add upstream-blackhole&lt;br /&gt;
&lt;br /&gt;
TIPS:&lt;br /&gt;
*если в политике делать только then discard - это заблочит распространение префикса на сети, что не совсем решает проблему. Через нашу сеть все-равно будет идти трафик до этого dest, просто обходными путями.&lt;br /&gt;
*обычно клиенты шлют /32 префиксы с blackhole-community, а на import фильтрах у уважающих себя операторов есть ограничение по длине префикса (&amp;lt;24).&lt;br /&gt;
&lt;br /&gt;
Поэтому, чтобы получить /32, добавляем в политику условие:&lt;br /&gt;
 set policy-options policy-statement blackhole from route-filter 0.0.0.0/0 prefix-length-range /32-/32&lt;br /&gt;
&lt;br /&gt;
=BFD=&lt;br /&gt;
Как известно, этот механизм используется в качестве обмена hello сообщениями с заданным интервалом, ниже, чем дефолтный интервал в других протоколах. Что позволяет протоколу быстрее обнаружить падение сессии.&lt;br /&gt;
&lt;br /&gt;
Сильно нагружает CPU RE, поэтому с ним сильно перебарщивать не стоит.&lt;br /&gt;
&lt;br /&gt;
Хосты устанавливают сессию и обмениваются hello.&lt;br /&gt;
&lt;br /&gt;
Если перестали приходить hello, то BFD дает знать протоколу, что пропала связность между хостами.&lt;br /&gt;
&lt;br /&gt;
*minimum-interval - минимальный интервал получения и отправления &amp;quot;hello&amp;quot; BFD. То есть это интервал с которым локальный роутер отправляет hello и интервал, с которым локальный роутер ждет ответа на свой hello. Также в конфиге можно отдельно задать transmit и receive minimum interval.&lt;br /&gt;
* multiplier - значение кол-ва пропущенных hello.&lt;br /&gt;
&lt;br /&gt;
 set protocols bgp group upstream neighbor 1.1.1.1 bfd-liveness-detection minimum-interval 500  ''[transmit+receive]''&lt;br /&gt;
 set protocols bgp group upstream neighbor 1.1.1.1 bfd-liveness-detection multiplier 4&lt;br /&gt;
&lt;br /&gt;
или &lt;br /&gt;
 set protocols bgp group upstream neighbor 1.1.1.1 bfd-liveness-detection minimum-receive-interval 500  ''[receive]''&lt;br /&gt;
 set protocols bgp group upstream neighbor 1.1.1.1 bfd-liveness-detection transmit-interval minimum-interval 500  ''[transmit]''&lt;br /&gt;
&lt;br /&gt;
BFD + graceful restart - не рекомендуется.&lt;br /&gt;
&lt;br /&gt;
BFD + Routing Engine switchover event - не рекомендуется ниже 5000мс.&lt;br /&gt;
&lt;br /&gt;
BFD + NSR - не рекомендуется ниже 2500мс.&lt;br /&gt;
&lt;br /&gt;
для очень больших сетей с большим кол-вом bfd сессий - не ниже 300мс&lt;br /&gt;
&lt;br /&gt;
Если значения таймеров у пиров не совпадают, то BFD использует наибольшее значение (используется режим adaptive-mode). &lt;br /&gt;
&lt;br /&gt;
Это поведение по умолчанию можно выключить: no-adaptation.&lt;br /&gt;
 set protocols bgp group upstream neighbor 1.1.1.1 bfd-liveness-detection no-adaptation&lt;br /&gt;
&lt;br /&gt;
'''Проверка:'''&lt;br /&gt;
 &amp;gt; show bfd session extensive&lt;br /&gt;
&lt;br /&gt;
=IPv6=&lt;br /&gt;
Есть несколько способов настраивать BGP между роутерами, работающими с ipv6.&lt;br /&gt;
*Прямая ipv6 сессия на ipv6 адресах:&lt;br /&gt;
&lt;br /&gt;
На интерфейсах обычные p2p адреса из /126 (/30) сеточки. Это самый примитивный вариант.&lt;br /&gt;
 group r7-ipv6 {&lt;br /&gt;
    type external;&lt;br /&gt;
    export export-direct;&lt;br /&gt;
    peer-as 54591;&lt;br /&gt;
    neighbor fc09:c0:ffee::1;}&lt;br /&gt;
&lt;br /&gt;
Настраиваем сессию на ipv6 адресах в отдельной группе. Если настраивать в группе, в которой настроены также сессии на ipv4-адресах, то сессия на ipv6 поднимется, но роутеры маршрутами обмениваться не будут.&lt;br /&gt;
&lt;br /&gt;
*Сессия на ipv4 адресах, передающая ipv6 префиксы. ipv6 адреса на интерфейсах ipv4-compatible, то есть вида &lt;br /&gt;
 a-centauri-r5&amp;gt; show configuration interfaces ge-0/0/0.304 &lt;br /&gt;
 description --c32;&lt;br /&gt;
 vlan-id 304;&lt;br /&gt;
 family inet {&lt;br /&gt;
    address 192.168.0.13/30;}&lt;br /&gt;
 family inet6 {&lt;br /&gt;
    '''address ::ffff:192.168.0.13/126;'''&lt;br /&gt;
- сессия строится на ipv4 адресах. в группе или на neighbor настроена передача family inet6 unicast.&lt;br /&gt;
 a-centauri-r5&amp;gt; show configuration protocols bgp group c31-c32 &lt;br /&gt;
 type external;&lt;br /&gt;
 family inet unicast&lt;br /&gt;
 family inet6 unicast&lt;br /&gt;
 export export-ipv6&lt;br /&gt;
 peer-as 64514&lt;br /&gt;
 neighbor 192.168.0.10&lt;br /&gt;
- глобально требуется также включить:&lt;br /&gt;
 a-centauri-r5&amp;gt; show configuration system&lt;br /&gt;
 allow-v4mapped-packets&lt;br /&gt;
*Для IPv6 eBGP в рамках VRF нужно указывать ''routing-instance &amp;lt;&amp;gt; routing-options router-id &amp;lt;&amp;gt;''. Иначе сессия не поднимется. Будет прилетать ошибка:&lt;br /&gt;
 May 21 00:16:05.676938 BGP RECV version 4 as 54591 holdtime 90 id '''0.0.0.0''' parmlen 30&lt;br /&gt;
Либо использовать отдельные lo, который будет выступать в роли router-id для сессии.&lt;br /&gt;
*На link-local адресах&lt;br /&gt;
&lt;br /&gt;
=Дополнительная информация=&lt;br /&gt;
*[[OSPF]]&lt;br /&gt;
*[[IS-IS]]&lt;br /&gt;
*[[L3VPN]]&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=2067</id>
		<title>Заглавная страница</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=2067"/>
		<updated>2021-07-18T10:45:48Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: /* Routing, tunneling */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Главная страница}}&lt;br /&gt;
&lt;br /&gt;
'''UPDATED'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=JNCIP-SP=&lt;br /&gt;
==Advanced routing==&lt;br /&gt;
*[[OSPF]]&lt;br /&gt;
*[[BGP]]&lt;br /&gt;
*[[IS-IS]]&lt;br /&gt;
&lt;br /&gt;
==JMR (Multicast routing)==&lt;br /&gt;
*[[Глава 2. Multicast, IGMP]]&lt;br /&gt;
*[[Глава 3. Routing protocols (DVMRP, PIM-DM, PIM-SM)]]&lt;br /&gt;
*[[MSDP | Глава 4. MSDP]]&lt;br /&gt;
*[[Глава 5. PIM-SSM]]&lt;br /&gt;
*[[Политики в мультикасте | Глава 6. Политики в мультикасте]]&lt;br /&gt;
*[[IPv6 в мультикасте | Глава 7. IPv6 в мультикасте]]&lt;br /&gt;
&lt;br /&gt;
==JMV (MPLS and VPNs)==&lt;br /&gt;
*[[Глава 1. Основы MPLS и VPN]]&lt;br /&gt;
*[[Глава 2. Label Distribution Protocols (RSVP, LDP)]]&lt;br /&gt;
*[[Отказоустойчивость и оптимизация в MPLS]]&lt;br /&gt;
*[[Traffic engineering]]&lt;br /&gt;
*[[L3VPN]]&lt;br /&gt;
*[[L2VPN]]&lt;br /&gt;
*[[VPLS]]&lt;br /&gt;
*[[MVPN]]&lt;br /&gt;
*[[EVPN]]&lt;br /&gt;
*[[Реализация MPLS в ядре сети]]&lt;br /&gt;
&lt;br /&gt;
==JCOS==&lt;br /&gt;
*[[Глава 1. QoS]]&lt;br /&gt;
*[[Глава 2. Packet classification]]&lt;br /&gt;
*[[Глава 3. Policing]]&lt;br /&gt;
*[[Глава 4. Scheduling]]&lt;br /&gt;
*[[Глава 5. Hierarchical scheduling]]&lt;br /&gt;
*[[Глава 6. Rewrite rules]]&lt;br /&gt;
*[[Глава 7. CoS-based forwarding]]&lt;br /&gt;
*[[Глава 8. Packet flow]]&lt;br /&gt;
&lt;br /&gt;
=JNCIS-SP, JNCIS-ENT=&lt;br /&gt;
&lt;br /&gt;
==Switching==&lt;br /&gt;
*[[L2 switching and VLANs]]&lt;br /&gt;
*[[Spanning-Tree protocol (STP)]]&lt;br /&gt;
*[[Virtual Chassis]]&lt;br /&gt;
*[[Provider bridging]]&lt;br /&gt;
*[[ERP (Ethernet Ring Protection)]]&lt;br /&gt;
&lt;br /&gt;
==Routing, tunneling==&lt;br /&gt;
*[[Static, Aggregate, Generate route]]&lt;br /&gt;
*[[Martians]]&lt;br /&gt;
*[[High Availability]]&lt;br /&gt;
*[[Load-balancing]]&lt;br /&gt;
&lt;br /&gt;
==MPLS==&lt;br /&gt;
*[[Глава 2. RSVP]]&lt;br /&gt;
*[[Глава 5. MPLS Features]]&lt;br /&gt;
*[[Глава 6. VPN]]&lt;br /&gt;
*[[Глава 8. Конфигурация L3VPN]]&lt;br /&gt;
*[[Глава 9. Полезности по траблшутингу L3VPN]]&lt;br /&gt;
*[[Глава 10. L3VPN Internet Access и масштабирование]]&lt;br /&gt;
*[[Глава 11. L3VPN Дополнительные фичи]]&lt;br /&gt;
*[[Глава 12. Multicast VPNs]]&lt;br /&gt;
&lt;br /&gt;
=SNMP=&lt;br /&gt;
*[[SNMPv3]]&lt;br /&gt;
&lt;br /&gt;
=Data Center=&lt;br /&gt;
*[[DC]]&lt;br /&gt;
&lt;br /&gt;
=Automation=&lt;br /&gt;
*[[Общие сведения об автоматизации в JunOS]]&lt;br /&gt;
*[[Основы автоматизации на SLAX]]&lt;br /&gt;
*[[Пример программы на SLAX]]&lt;br /&gt;
&lt;br /&gt;
=Прочее=&lt;br /&gt;
*[[Архитектура MX]]&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=OSPF&amp;diff=2066</id>
		<title>OSPF</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=OSPF&amp;diff=2066"/>
		<updated>2021-07-18T10:41:39Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#description2:Основы OSPF. Типы пакетов. Установление соседства. Типы Area. Типы LSA. Таймеры. Типы роутеров. Метрики/SPF. OSPFv3. Realm. backbone. stub area. nssa area. totally stub area. Информация для подготовки к экзаменам Juniper.}}&lt;br /&gt;
&lt;br /&gt;
=Основы=&lt;br /&gt;
OSPF - link-state IGP протокол.&lt;br /&gt;
&lt;br /&gt;
Hello пакеты для установления и поддержания соседства.&lt;br /&gt;
&lt;br /&gt;
OSPF флудит LSA (IP 89 порт, '''224.0.0.5''' адрес) во все порты OSPF, кроме того, с которого прилетела LSA. С помощью LSA на каждом роутере строится топология сети и на основании этих данных затем производится рассчет кратчайшего пути.&lt;br /&gt;
&lt;br /&gt;
На всех роутерах одной area поддерживается одинаковая копия LSDB.&lt;br /&gt;
&lt;br /&gt;
'''Policy''' можно применять на '''export''' для summary-LSA 3 (вроде).&lt;br /&gt;
 + export               Export policy&lt;br /&gt;
&lt;br /&gt;
И только для external маршрутов на '''import'''. !!! При этом в ospf database они будут видны, но в sh route их не будет.&lt;br /&gt;
 + import               Import policy (for external routes or setting priority)&lt;br /&gt;
&lt;br /&gt;
Иерархичный дизайн сети достигается за счет использования area, которые соединяются посредством backbone area.&lt;br /&gt;
&lt;br /&gt;
Dijkstra рассчитывается только в рамках одной area (на основании одной LSDB, которая едина в рамках одной area). &lt;br /&gt;
&lt;br /&gt;
Summary metric для dest = сумме outgoing interface metrics.&lt;br /&gt;
&lt;br /&gt;
На бродкаст сегменте выбирается DR (наиб приоритет, затем наиб router ID), который занимается флудом LSA внутри area. Для роутеров не в бродкастном сегменте, подключенных через Ethernet, включаем ''interface-type p2p'', чтобы на этом линке не проводились выборы DR и чтобы уменьшить время сходимости.&lt;br /&gt;
&lt;br /&gt;
=Типы пакетов=&lt;br /&gt;
'''Hello''' - используются для установления и поддержания соседства ospf. &lt;br /&gt;
Отправляются на адрес 224.0.0.5 каждые 10 сек. Содержит в себе поля: network mask, hello interval, dead interval, options, (router priority, designated router, backup designated router, neighbor).&lt;br /&gt;
&lt;br /&gt;
'''Database description (DD)''' - используется только во время установления соседства. Определяет кто отвечает за синхронизацию LSDB (выбирается роутер с бОльшим RID). Обменивается LSA до полной синхронизации. Содержит: ospf header, sequence number, lsa header.&lt;br /&gt;
&lt;br /&gt;
'''Link-state request''' - отправляется роутером, когда тот понимает, что LSBD устарела. Содержит: ospf header, link-state type, link-state ID, advertising router.&lt;br /&gt;
&lt;br /&gt;
'''Link-state update''' - отправляется на адрес: 224.0.0.5 (всем) или 225.0.0.6 (для DR). Отправляется либо в ответ на link-state request, либо если меняется информация о состоянии линка на локальном роутере. Передает одну или несколько LSA. Содержит: ospf header, numbers of advertisement, link-state avertisement.&lt;br /&gt;
&lt;br /&gt;
'''Link-state acknowledgment''' - ответ на link-state update. Содержит: ospf header, list of LSA headers.&lt;br /&gt;
&lt;br /&gt;
=Установление соседства=&lt;br /&gt;
Соседи используют hello пакеты для установления и поддержания соседства.&lt;br /&gt;
&lt;br /&gt;
*'''Down'''&lt;br /&gt;
Самое начало, ничего не происходит.&lt;br /&gt;
&lt;br /&gt;
*'''Init'''&lt;br /&gt;
В hello-packet в списке соседей нет router-id маршрутизатора, получившего этот пакет.&lt;br /&gt;
&lt;br /&gt;
Если маршрутизатор не переходит в состояние 2-Way, а скачет - down &amp;gt; init &amp;gt; down &amp;gt; init...&lt;br /&gt;
вероятно на маршрутизаторах не совпали параметры: &lt;br /&gt;
 Area ID&lt;br /&gt;
 Authentication&lt;br /&gt;
 Network Mask&lt;br /&gt;
 Hello Interva&lt;br /&gt;
 Router Dead Interval&lt;br /&gt;
 Options fields&lt;br /&gt;
&lt;br /&gt;
Либо до удаленного маршрутизатора не доходят ваши сообщения hello &lt;br /&gt;
(причиной могут быть неверно настроенные фаерволы)&lt;br /&gt;
&lt;br /&gt;
*'''2-Way'''&lt;br /&gt;
В hello-packet в списке соседей появился RID роутера, получившего этот пакет.&lt;br /&gt;
&lt;br /&gt;
*'''ExStart'''&lt;br /&gt;
Выборы DR и BDR маршрутизаторов производятся в момент первоначальной установки соседских отношений по следующим правилам:&lt;br /&gt;
&lt;br /&gt;
* Роутер с наибольшим приоритетом становится DR;&lt;br /&gt;
* Роутер со вторым по величине приоритетом становится BDR;&lt;br /&gt;
* Если роутеры имеют равный приоритет, то в качестве DR выбирается роутер с наибольшим RID, BDR-ом становится роутер со вторым по величине RID;&lt;br /&gt;
* Роутер, с приоритетом равным нулю, не принимает участия в выборах DR и BDR;&lt;br /&gt;
* Если после выбора DR и BDR в сегменте сети добавляется роутер с более высоким приоритетом или бОльшим RID, то повторные выборы не производятся;&lt;br /&gt;
* Повторные выборы производятся только после того как DR или BDR становится недоступными.&lt;br /&gt;
&lt;br /&gt;
(Происходит обмен сообщениями DD (database descr), где заполнены только поля: router-id, neighbors, mtu.&lt;br /&gt;
&lt;br /&gt;
Если маршрутизатор не переходит в следующее состояние, то вероятнее всего причина в несовпадении  mtu на физических интерфейсах.&lt;br /&gt;
&lt;br /&gt;
*'''ExChange'''&lt;br /&gt;
Процесс обмена LSDB с помощью сообщений DD (database descr)&lt;br /&gt;
(локальной базой маршрутов, их метриками, состояний линков)&lt;br /&gt;
&lt;br /&gt;
*'''Loading'''&lt;br /&gt;
Обмен сообщениями link-state request, link-state update. На каждом маршрутизаторе должна быть одинаковая LSDB.&lt;br /&gt;
(Каждый роутер восполняет недостающие знания о новых маршрутах)&lt;br /&gt;
&lt;br /&gt;
*'''Full'''&lt;br /&gt;
Соседство установлено, LSDB синхронизированы.&lt;br /&gt;
Последующие изменения в топологии передаются через сообщения link-state update,&lt;br /&gt;
в ответ приходят link-state acknowledgment (в кач-ве подтверждения о доставке).&lt;br /&gt;
&lt;br /&gt;
=Таймеры=&lt;br /&gt;
*Hello interval - установление и поддержание соседства = 10sec для broadcast и p2p networks; 30 sec - для nonbroadcast multiple access (NBMA).&lt;br /&gt;
*Dead - интервал, в течение которого не приходит hello, чтобы считать соседа неоперабельным = 40 sec.&lt;br /&gt;
*LSA retransmission interval - когда роутер отправил LSA, он ждет 5 sec ответа от соседа, что LSA получен (LSA ACK). Если ACK не пришел - делается повторная передача LSA.&lt;br /&gt;
*Transit-delay - устанавливает время, необходимое для передачи link-state update на интерфейсе = 1sec. Менять дефолтное значение не советуется.&lt;br /&gt;
*LSA refresh - интервал обновления LSA = 50min. Если LSA не обновилась через 60min, то инфо о ней считается устаревшей и она пропадает из LSDB. &lt;br /&gt;
{{note|text=Когда делаешь ''clear ospf database purge'' как раз всем LSA устанавливается LSA refresh interval 60min (3600sec) и неактуальные сразу же сбрасываются.}}&lt;br /&gt;
Кстати, у по дефолту НЕ у Juniper LSA refresh interval = 30min.&lt;br /&gt;
&lt;br /&gt;
=Роутеры=&lt;br /&gt;
*'''ABR (Area border router)''': OSPF роутер, имеющий линки в двух area - соединяет и распространите инфо из OSPF area в backbone.&lt;br /&gt;
*'''ASBR (AS boundary router)''': может находиться как внутри backbone или других area. Имеет подключения других external routing protocols и распространяет эту инфу по сети. &lt;br /&gt;
*'''Backbone''': хотя бы один линк внутри backbone area.&lt;br /&gt;
*'''Internal''': все линки внутри одной area, backbone - частный случай internal.&lt;br /&gt;
&lt;br /&gt;
=Метрики/SPF=&lt;br /&gt;
outside the area (INTER-area routing)&lt;br /&gt;
&lt;br /&gt;
*Внутренние маршруты area (intra-area) juniper preference = 10&lt;br /&gt;
*Внешние маршруты (inter-area) juniper external-preference = 150&lt;br /&gt;
{{note|text=Метрика будет сравниваться только у маршрутов одного типа. Поэтому не всегда можно гарантировать forwarding согласно метрики. Не забываем про тип маршрута!}}&lt;br /&gt;
&lt;br /&gt;
external metrics - применяются к префиксам из других AS.&lt;br /&gt;
*TYPE 1 - учитывается external cost + cost в пути до граничного маршрутизатора.&lt;br /&gt;
*TYPE 2 - учитывается только external cost. Этот тип используется по дефолту.&lt;br /&gt;
&lt;br /&gt;
TYPE1 приоритетнее TYPE2. Далее учитывается стоимость самой метрики - чем меньше, тем приоритетнее.&lt;br /&gt;
&lt;br /&gt;
*reference-bandwidth - дефолтной расчет метрики из емкости интерфейса: cost = ref-bandwidth/bandwidth. По умолчанию ref-bandwidth = 100Mbit. Можно настроить свое значение, глобально для протокола.&lt;br /&gt;
 set protocols ospf reference-bandwidth 10g&lt;br /&gt;
&lt;br /&gt;
Если устанавливаем metric вручную на интерфейсе, то дефолтное поведение перебивается для данного интерфейса.&lt;br /&gt;
&lt;br /&gt;
=Типы Area=&lt;br /&gt;
Ненулевые area могут иметь один и тот же номер area, но такой подход - не правильный. При этом разные area с одним area-id не будут никогда считать себя одним сегментом сети.&lt;br /&gt;
&lt;br /&gt;
area-id не передаются в LSA.&lt;br /&gt;
&lt;br /&gt;
Если разбирать самые стандартные area (не stub, nssа и прочее):&lt;br /&gt;
*area1 - area0 - area3 - ok. У всех area будет полная картина сети.&lt;br /&gt;
*area1 - area2 - area3 - ok,  только area2 будет иметь маршруты всей сети, а area1 и area3 будут иметь только свои маршруты + маршруты area2.&lt;br /&gt;
*area1[1] - area0 - area1[2] - ok, НО конечно area1[1] будет видеть area1[2] как LSA3. Такой себе вариант.&lt;br /&gt;
&lt;br /&gt;
==backbone==&lt;br /&gt;
Area 0 (к ней в обязательном порядке должны подключаться остальные area).&lt;br /&gt;
&lt;br /&gt;
Но если area не имеет прямого физического подключения к backbone area, то она может соединяться с ней через virtual-link.&lt;br /&gt;
&lt;br /&gt;
==stub area==&lt;br /&gt;
Обменивается маршрутами по ospf с ABR (LSA 3), не содержит с себе external routes, не принимает от ABR external routes (не принимает LSA 4,5). Доступность внешних маршрутов достигается анонсированием 0/0 со стороны ABR в сторону stub-area. Через stub-area нельзя построить virtual-link и в ней не может размещаться ASBR. Если все же сконфигурировать ASBR внутри stub-area, то роутер разместит LSA 5 в своей локальной базе данных, но не будет пересылать ее другим роутерам даже внутри area.&lt;br /&gt;
&lt;br /&gt;
Все роутеры stub area должны быть сконфигурированы, как stub.&lt;br /&gt;
 [edit protocols ospf area 0.0.0.20]&lt;br /&gt;
 + stub&lt;br /&gt;
&lt;br /&gt;
Чтобы появился 0/0, на ABR настраиваем:&lt;br /&gt;
 [edit protocols ospf area 0.0.0.20 stub]&lt;br /&gt;
 +     default-metric 10;&lt;br /&gt;
&lt;br /&gt;
==stub with no summaries (totally stub)==&lt;br /&gt;
В неё не анонсируется вообще никаких LSA. В area не вставляются LSA 3, 4, 5. По area гуляют только LSA 1 и LSA 2 [no-summaries как раз намекает на отсутствие LSA3]. Доступность маршрутов из остальных area достигается тем же анонсированием 0/0 со стороны ABR в сторону totally stub-area. И ASBR не флудит external routes в такой area. Также virtual-link не поддерживается в такой area.&lt;br /&gt;
&lt;br /&gt;
 [edit protocols ospf area 0.0.0.20]&lt;br /&gt;
 +  stub default-metric 10 no-summaries;&lt;br /&gt;
&lt;br /&gt;
==not-so-stubby==&lt;br /&gt;
Обменивается OSPF-маршрутами с ABR (LSA3), может содержать external routes (ASBR) - НО! в этой area external = LSA7 (NSSA). Не принимает external routes от ABR. (не принимает LSA 4,5). Внешние ресурсы также через 0/0 на ABR.&lt;br /&gt;
&lt;br /&gt;
Конфигурация nssa делается на каждом роутере внутри area.&lt;br /&gt;
&lt;br /&gt;
 [edit protocols ospf area 0.0.0.30]&lt;br /&gt;
 +nssa&lt;br /&gt;
&lt;br /&gt;
на ABR:&lt;br /&gt;
    OSPF database, Area 0.0.0.30&lt;br /&gt;
 Type       ID               Adv Rtr           Seq      Age  Opt  Cksum  Len &lt;br /&gt;
 Router  *10.200.86.1      10.200.86.1      0x80000002    35  0x20 0xe809  48&lt;br /&gt;
 Router   10.200.86.3      10.200.86.3      0x80000004    36  0x20 0xbdba  72&lt;br /&gt;
 Router   10.200.86.9      10.200.86.9      0x80000004    42  0x20 0xabe2  48&lt;br /&gt;
 Network  192.168.86.37    10.200.86.9      0x80000001    42  0x20 0xf1d7  32&lt;br /&gt;
 Summary *10.100.86.8      10.200.86.1      0x80000001   129  0x20 0x67ad  28&lt;br /&gt;
 ...&lt;br /&gt;
 Summary *192.168.86.48    10.200.86.1      0x80000001   129  0x20 0x3fb6  28&lt;br /&gt;
 '''NSSA'''     172.16.0.0       10.200.86.9      &lt;br /&gt;
 '''NSSA'''     172.16.1.0       10.200.86.9      - '''пришло от ASBR (LSA7) внутри area'''&lt;br /&gt;
 '''NSSA'''     172.16.2.0       10.200.86.9      &lt;br /&gt;
    OSPF AS SCOPE link state database&lt;br /&gt;
 Type       ID               Adv Rtr           Seq      Age  Opt  Cksum  Len &lt;br /&gt;
 '''Extern'''  *172.16.0.0       10.200.86.1      &lt;br /&gt;
 '''Extern'''  *172.16.1.0       10.200.86.1      - '''сгенерировал ABR (LSA7 -&amp;gt; LSA5) и послал в area0 &lt;br /&gt;
 '''Extern'''  *172.16.2.0       10.200.86.1&lt;br /&gt;
&lt;br /&gt;
Анонс 0/0 настраивается на ABR:&lt;br /&gt;
 [edit protocols ospf area 0.0.0.30 nssa]&lt;br /&gt;
 +      '''default-lsa default-metric 1''';&lt;br /&gt;
Смотрим, что прилетело от ABR в NSSA area:&lt;br /&gt;
    OSPF database, Area 0.0.0.30&lt;br /&gt;
 Type       ID               Adv Rtr           Seq      Age  Opt  Cksum  Len &lt;br /&gt;
 NSSA     0.0.0.0          10.200.86.1      0x80000001    50  0x20 0x8681  36&lt;br /&gt;
&lt;br /&gt;
Если на ABR добавляем ''no-summaries'', то 0/0 прилетит как LSA3 (а не LSA7 (NSSA)):&lt;br /&gt;
&lt;br /&gt;
    OSPF database, Area 0.0.0.30&lt;br /&gt;
 Type       ID               Adv Rtr           Seq      Age  Opt  Cksum  Len &lt;br /&gt;
 Summary  0.0.0.0          10.200.86.1      0x80000001     3  0x20 0xae65  28&lt;br /&gt;
 '''NSSA'''     0.0.0.0          10.200.86.1      0x80000001  '''3600'''  0x20 0x8681  36&lt;br /&gt;
&lt;br /&gt;
Чтобы при настроенном ''no-summaries'' 0/0 прилетал все же как LSA 7, то добавляем в конце '''type-7''': &lt;br /&gt;
    OSPF database, Area 0.0.0.30&lt;br /&gt;
 Type       ID               Adv Rtr           Seq      Age  Opt  Cksum  Len &lt;br /&gt;
 '''Summary'''  0.0.0.0          10.200.86.1      0x80000001  '''3600'''  0x20 0xae65  28&lt;br /&gt;
 NSSA     0.0.0.0          10.200.86.1      0x80000001     5  0x20 0x8681  36&lt;br /&gt;
&lt;br /&gt;
=Типы LSA=&lt;br /&gt;
Все типы имеют одинаковый '''заголовок''':&lt;br /&gt;
*LS age - sec - время, когда LSA была впервые создана&lt;br /&gt;
*Option - E-bit = External LSA, P bit = NSSA external LSA.&lt;br /&gt;
*LS type.&lt;br /&gt;
*Link-state ID - разные типы LSA используют поле по-разному.&lt;br /&gt;
*Advertising router - роутер, который сгенерировал LSA.&lt;br /&gt;
*LS sec number&lt;br /&gt;
*LS checksum&lt;br /&gt;
*Length&lt;br /&gt;
&lt;br /&gt;
В выводе ''sh ospf database'' ID, отмеченный '''*''' - будет означать, что этот маршрут сгенерирован самим роутером.&lt;br /&gt;
&lt;br /&gt;
*'''Type 1 LSA (Router)''' — Описывает стоимость (metric) и состояние интерфейсов. Не передаются между Area. LSA1 = area scope.&lt;br /&gt;
&lt;br /&gt;
*'''Type 2 LSA (Network)''' — Отправляются DR. Описывает роутеры, подключенные в бродкаст сегменте + сам себя. Не передаются между area. В выводе ''sh ospf database'': ID = DR, attached router = роутеры в бродкаст сегменте.&lt;br /&gt;
&lt;br /&gt;
*'''Type 3 LSA (Summary)''' — Отправляются ABR. Описывают сети, которые маршрутизатор получил из предыдущих типов LSA, и передает между Area. LSA будет флудиться каждому роутеру внутри area. ABR, получив LSA3 не перешлет ее другому ABR, а сгенерирует на основании полученной LSA3, LSA1, 2 новую LSA3, и уже ее передаст в соседние area. LSA3 = area scope.&lt;br /&gt;
{{note|text=Summary не означает агрегирование! ABR передает один в один LSA1 и LSA2 в другую area без какой-либо агрегации/суммаризации по дефолту.}}&lt;br /&gt;
&lt;br /&gt;
*'''Type 4 LSA (ASBR Summary)''' — Генерируются ABR,  LSA содержит описание самих ASBR роутеров. В выводе ''sh ospf database'': ID = ASBR router.&lt;br /&gt;
&lt;br /&gt;
*'''Type 5 LSA (External)''' —  Описывают сети, полученные из других протоколов маршрутизации ASBR-ами. Рассылаются ими же. В выводе ''sh ospf database'': ID + mask = external networks.&lt;br /&gt;
&lt;br /&gt;
*'''Type 6 LSA (Group membership)''' — Не используется, некогда планировался под MOSPF.&lt;br /&gt;
&lt;br /&gt;
*'''Type 7 LSA (NSSA External)''' — Генерируются ASBR-ами в NSSA. Передаются только внутри NSSA. Но на выходе из зоны ABR-ами транслируются в LSA Type 5. В выводе ''sh ospf database'': ID + mask = external networks.&lt;br /&gt;
&lt;br /&gt;
*'''Type 9 (Graceful restart)''' - поддерживает graceful restart.&lt;br /&gt;
&lt;br /&gt;
*'''Type 10 LSA (Traffic Engineering)''' — Содержат информацию, которая в последствии находится в TED и используется при работе CSPF-алгоритма.&lt;br /&gt;
&lt;br /&gt;
'''LSA flooding scopes''': LSA 1, LSA 2 - исключительно внутри area. LSA 3 - суммирует LSA 1 + LSA2 и передает эту инфу в соседнюю area. LSA 5 (external) - передаются по всему OSPF домену. LSA 4 (about ASBR) - по всему OSPF домену. LSA 7 (external in nssa) - только внутри nssa area.&lt;br /&gt;
&lt;br /&gt;
Время жизни каждой LSA - 3600 sec (1 h).&lt;br /&gt;
&lt;br /&gt;
Junos не поддерживает: LSA6, LSA8, LSA11&lt;br /&gt;
&lt;br /&gt;
Можно вручную ограничить кол-во LSA: полезно в тех случаях, когда CE &amp;lt;&amp;gt; PE строится на OSPF.&lt;br /&gt;
 set protocols ospf database-protection maximum-lsa 1000&lt;br /&gt;
&lt;br /&gt;
 macduff&amp;gt; show ospf database &lt;br /&gt;
    OSPF database, Area 0.0.0.20&lt;br /&gt;
  Type       ID               Adv Rtr           Seq      Age  Opt  Cksum  Len &lt;br /&gt;
 Router   10.200.86.2      10.200.86.2      0x80000007   277  0x22 0xcb07  72&lt;br /&gt;
 Router   10.200.86.4      10.200.86.4      0x8000000a   106  0x22 0x7294  72&lt;br /&gt;
 Router  *10.200.86.8      10.200.86.8      0x8000000d   105  0x22 0x5fd2  72&lt;br /&gt;
 Network *192.168.86.14    10.200.86.8      0x80000003  2402  0x22 0xc01d  32&lt;br /&gt;
 Summary  10.200.86.1      10.200.86.2      0x80000002  1991  0x22 0xdc09  28&lt;br /&gt;
 Summary  10.200.86.2      10.200.86.2      0x80000004  2134  0x22 0xc41f  28&lt;br /&gt;
 Summary  10.200.86.3      10.200.86.2      0x80000002  1705  0x22 0xd210  28&lt;br /&gt;
 Summary  10.200.86.5      10.200.86.2      0x80000004  1420  0x22 0xba24  28&lt;br /&gt;
 Summary  10.200.86.6      10.200.86.2      0x80000004  1277  0x22 0xa638  28&lt;br /&gt;
 Summary  10.200.86.7      10.200.86.2      0x80000004  1134  0x22 0xb02b  28&lt;br /&gt;
 Summary  10.200.86.9      10.200.86.2      0x80000002   848  0x22 0xa03b  28&lt;br /&gt;
 Summary  192.168.86.4     10.200.86.2      0x80000004   991  0x22 0xec5f  28&lt;br /&gt;
 Summary  192.168.86.8     10.200.86.2      0x80000006  2357  0x22 0xc085  28&lt;br /&gt;
 Summary  192.168.86.24    10.200.86.2      0x80000002  1848  0x22 0x2812  28&lt;br /&gt;
 Summary  192.168.86.28    10.200.86.2      0x80000004   705  0x22 0x62d   28&lt;br /&gt;
 Summary  192.168.86.36    10.200.86.2      0x80000002  1563  0x22 0xb973  28&lt;br /&gt;
 Summary  192.168.86.44    10.200.86.2      0x80000004   563  0x22 0x51d3  28&lt;br /&gt;
 Summary  192.168.86.48    10.200.86.2      0x80000004   134  0x22 0x29f7  28&lt;br /&gt;
 ASBRSum  10.200.86.9      10.200.86.2      0x80000001   390  0x22 0x9447  28&lt;br /&gt;
    OSPF AS SCOPE link state database&lt;br /&gt;
 Type       ID               Adv Rtr           Seq      Age  Opt  Cksum  Len &lt;br /&gt;
 Extern   172.16.0.0       10.200.86.9      0x80000001   393  0x22 0x487b  36&lt;br /&gt;
 Extern   172.16.1.0       10.200.86.9      0x80000001   393  0x22 0x3d85  36&lt;br /&gt;
 Extern   172.16.2.0       10.200.86.9      0x80000001   393  0x22 0x328f  36&lt;br /&gt;
&lt;br /&gt;
=Типы интерфейсов=&lt;br /&gt;
*'''Broadcast''' - поведение аналогично тому, когда router включен в LAN сегмент. То есть дополнительно производится выбор DR, BDR среди роутеров. И если на интерфейсе висит несколько ip, то роутер сможет установить несколько соседств в каждой сети одновременно.&lt;br /&gt;
*'''Point to point (p2p)''' - соединение между одним source и одним destination. Возможно установление только '''одного''' соседства с такого типа интерфейса. Можно назначать на ethernet интерфейсы без IP адресов.&lt;br /&gt;
*'''Point to multipoint (p2mp)''' - соединение между одним source и несколькими destination. Сеть рассматривается как набор p2p линков. Т.к. нет autodiscovery механизма, от обязательно указывать соседа.&lt;br /&gt;
*'''Nonebroadcast multiaccess (NBMA)''' - работает как p2mp, но может взаимодействовать с другим оборудованием.&lt;br /&gt;
*'''Demand circuit''' - соединение на котором можно ограничить полосу или время доступа.&lt;br /&gt;
*'''Passive''' - анонсирует адреса на интерфейсе, но не участвует в установлении OSPF соседства и вообще не обменивается hello-сообщениями. Также в passive можно использовать инфо об интерфейсе и его сетях для TE вычислений.&lt;br /&gt;
*'''Disable''' - не участвует в OSPF и не передает о себе инфо в LSDB&lt;br /&gt;
*'''Peer (для OSPFv2)''' - требуется GMPLS&lt;br /&gt;
&lt;br /&gt;
Если на маршрутизаторах указаны разные типы интерфейсов, то они между собой соседство не поднимут.&lt;br /&gt;
&lt;br /&gt;
=Другие фичи=&lt;br /&gt;
*Аутентификация: простая (plain-text, simple), MD5, none. и еще IPSEC.&lt;br /&gt;
:*simple - только один ключ. По сути просто не дает левому роутеру подключиться к твоему ospf домену, из-за использованиях хоть такого метода защиты. Но ключ не шифруется. Так что только MD5, только безопасность!&lt;br /&gt;
:*md5 - можно использовать несколько ключей. Менять их по времени. Каждый md5 key - с уникальным id. По id определяется какой md5 key использовать.&lt;br /&gt;
&lt;br /&gt;
*Суммирование маршрутов (area-range), прилетающих в update сообщениях в backbone от других area. &lt;br /&gt;
Если после сети добавить &lt;br /&gt;
:*'''restrict''' - сети не просуммируются, а перестанут передаваться в backbone. То есть будет не передан и summary route и все вложенные в него сети. &lt;br /&gt;
:*'''override-metric''' - можно перезаписать значение ospf-метрики или ее тип. &lt;br /&gt;
:*'''exact''' - проадвертайзит только если в таблице маршрутизация будет четко такой же префикс.&lt;br /&gt;
&lt;br /&gt;
Настраивается только на ABR. Здесь из area 10 будет передаваться суммированный маршрут в backbone:&lt;br /&gt;
 [edit protocols ospf area 0.0.0.10]&lt;br /&gt;
 +     area-range 192.168.86.0/24 [restrict|override-metric| exact];&lt;br /&gt;
&lt;br /&gt;
Сразу после применения видно, что маршруты, сгенерированные ABR, и отправленные в area0 - скоро отвалятся.&lt;br /&gt;
    OSPF database, '''Area 0.0.0.0'''&lt;br /&gt;
 Type       ID               Adv Rtr           Seq      Age  Opt  Cksum  Len &lt;br /&gt;
 Router   10.200.86.1      10.200.86.1      0x80000027   490  0x22 0x82a8  72&lt;br /&gt;
 Router   10.200.86.2      10.200.86.2      0x80000016   312  0x22 0x74d9  84&lt;br /&gt;
 Router  *10.200.86.6      10.200.86.6      0x80000019     2  0x22 0xbe08  72&lt;br /&gt;
 Network *192.168.86.10    10.200.86.6      0x8000000a   596  0x22 0xa839  32&lt;br /&gt;
 Summary *10.200.86.5      10.200.86.6      0x80000007  2170  0x22 0x9246  28&lt;br /&gt;
 Summary *10.200.86.7      10.200.86.6      0x80000007  2034  0x22 0x884d  28&lt;br /&gt;
 Summary  10.200.86.9      10.200.86.1      0x80000002  1185  0x22 0x9c41  28&lt;br /&gt;
 Summary *192.168.86.0     10.200.86.6      0x80000001     2  0x22 0x1537  28&lt;br /&gt;
 Summary '''*192.168.86.4'''     10.200.86.6      0x80000007  '''3600'''  0x22 0xc481  28&lt;br /&gt;
 Summary  192.168.86.24    10.200.86.1      0x8000000f   385  0x22 0xa25   28&lt;br /&gt;
 Summary '''*192.168.86.28'''    10.200.86.6      0x80000008  '''3600'''  0x22 0xdb50  28&lt;br /&gt;
 Summary  192.168.86.36    10.200.86.1      0x80000002  1185  0x22 0xb579  28&lt;br /&gt;
{{note|text=!!!Такой метод будет работать только для '''summary LSA'''. Для суммирования external LSA можно сделать area 30 NSSA area и тогда area-range сработает (пример ниже), либо на роутере area3 создавать aggregate route и делать его export в protocols ospf.}}&lt;br /&gt;
&lt;br /&gt;
*Суммирование маршрутов от NSSA (LSA 7): аналогично работает и добавление '''restrict''' и '''override-metric''' и '''exact''':&lt;br /&gt;
 [edit protocols ospf area 0.0.0.10 nssa]&lt;br /&gt;
 +      area-range 172.16.0.0/22;&lt;br /&gt;
&lt;br /&gt;
До&lt;br /&gt;
     OSPF database, Area 0.0.0.10&lt;br /&gt;
 NSSA    *0.0.0.0          10.200.86.1      0x80000003   112  0x20 0x67f   36&lt;br /&gt;
 NSSA     172.16.0.0       10.200.86.9      0x80000002  2485  0x28 0x88ff  36&lt;br /&gt;
 NSSA     172.16.1.0       10.200.86.9      0x80000002  1886  0x28 0x7d0a  36&lt;br /&gt;
 NSSA     172.16.2.0       10.200.86.9      0x80000002  1287  0x28 0x7214  36&lt;br /&gt;
    OSPF AS SCOPE link state database&lt;br /&gt;
 Type       ID               Adv Rtr           Seq      Age  Opt  Cksum  Len &lt;br /&gt;
 Extern  *172.16.0.0       10.200.86.1      0x80000004     5  0x22 0x6d5d  36&lt;br /&gt;
 Extern  *172.16.1.0       10.200.86.1      0x80000003  3600  0x22 0x2274  36&lt;br /&gt;
 Extern  *172.16.2.0       10.200.86.1      0x80000003  3600  0x22 0x177e  36&lt;br /&gt;
&lt;br /&gt;
После:&lt;br /&gt;
    OSPF database, Area 0.0.0.10&lt;br /&gt;
 NSSA    *0.0.0.0          10.200.86.1      0x80000003   201  0x20 0x67f   36&lt;br /&gt;
 NSSA     172.16.0.0       10.200.86.9      0x80000002  2574  0x28 0x88ff  36&lt;br /&gt;
 NSSA     172.16.1.0       10.200.86.9      0x80000002  1975  0x28 0x7d0a  36&lt;br /&gt;
 NSSA     172.16.2.0       10.200.86.9      0x80000002  1376  0x28 0x7214  36&lt;br /&gt;
    OSPF AS SCOPE link state database&lt;br /&gt;
 Type       ID               Adv Rtr           Seq      Age  Opt  Cksum  Len &lt;br /&gt;
 Extern  *172.16.0.0       10.200.86.1      0x80000004    94  0x22 0x6d5d  36&lt;br /&gt;
 &lt;br /&gt;
*По дефолту в nssa будут передаваться LSA3 (summary) маршруты. Если нужно, LSA3 заменить на LSA7, то настраиваем:&lt;br /&gt;
  set protocols ospf area 4 nssa default-lsa type-7&lt;br /&gt;
&lt;br /&gt;
*Можно ограничить кол-во перфиксов, экспортируемых в OSPF.&lt;br /&gt;
*GRES возможен.&lt;br /&gt;
*BFD (Bidirectional Forwarding Detection) можно использовать для сокращения времени обнаружения аварии между роутерами.&lt;br /&gt;
*Можно отложить процесс перерасчета SPF при изменении LSDB (дефолт - 200ms):&lt;br /&gt;
 set protocols ospf spf-options delay ?&lt;br /&gt;
  &amp;lt;delay&amp;gt;              Time to wait before running an SPF (50..8000 milliseconds)&lt;br /&gt;
*Metric - определяем желаемый интерфейс для прохождения пакета. Меньшая метика - приоритетнее.&lt;br /&gt;
*Overload - выставляет метрики на интерфейсах = 65535. Если после перерасчета SPF для dest не нашлось обходных путей, роутер будет передавать транзитный трафик.&lt;br /&gt;
 set protocols ospf overload&lt;br /&gt;
*Topologies - можно использовать разные топологии для ipv4 unicast и ipv6 multicast. Для мультикаста и для юникаста с помощью метрик по-разному направлять трафик.&lt;br /&gt;
 set protocols ospf topology ipv4-multicast&lt;br /&gt;
 set protocols ospf area 0.0.0.0 interface xe-0/0/1.2056 metric 40&lt;br /&gt;
 set protocols ospf area 0.0.0.0 interface xe-0/0/1.2056 topology ipv4-multicast metric 500&lt;br /&gt;
&lt;br /&gt;
*Traffic-engineering (MPLS):&lt;br /&gt;
По дефолту выключен. Включаем, чтобы LSP участвовали как линки при расчёте SPF. Также в LSA теперь будут заноситься параметры traffic-engineering'a:&lt;br /&gt;
 set protocols ospf traffic-engineering&lt;br /&gt;
&lt;br /&gt;
*Traceoptions - как и для всех протоколов можно включить для диагностики&lt;br /&gt;
 set protocols ospf traceoptions file ospf-log&lt;br /&gt;
 set protocols ospf traceoptions file size 10m&lt;br /&gt;
 set protocols ospf traceoptions file files 10&lt;br /&gt;
 set protocols ospf traceoptions flag state detail&lt;br /&gt;
 set protocols ospf traceoptions flag error detail&lt;br /&gt;
&lt;br /&gt;
*Virtual-link. Как уже описывалось ранее, каждая area должна быть соединена с backbone area. Если у роутера нет физического линка до backbone, то делаем соединение через virtual-link. &lt;br /&gt;
&lt;br /&gt;
В настройках всего 2 параметра: - ''transit-area'', ''neighbor-id''.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Ospf-virtual-link.png|600px]]&lt;br /&gt;
&lt;br /&gt;
 R8: set protocols ospf area 0 virtual-link transit-area 1 neighbor-id 172.30.5.7&lt;br /&gt;
&lt;br /&gt;
virtual-link в SPF считается за обычный линк. Дополнительной стоимости не добавляет.&lt;br /&gt;
&lt;br /&gt;
При этом, если у нас есть подобное включение: R1 (area 5) &amp;lt;&amp;gt; R2 (area 6) &amp;lt;&amp;gt; R3 (area 7). То area 5 и area 7 не будут видеть префиксы друг друга (будут видеть только area 6). А area 6 будет получать префиксы всех area.&lt;br /&gt;
&lt;br /&gt;
То есть любая другая '''area не 0''' будет принимать LSDB от других area, но не передавать другим area. В отличие от Backbone. Backbone работает как RR :) А остальные как IBGP соседи. :)&lt;br /&gt;
&lt;br /&gt;
=OSPFv3=&lt;br /&gt;
OSPF3 router-id, area-id, LSA link-state ID - взяты из OSPFv2, то есть имеют тот же формат: IPV4 = 32bit.&lt;br /&gt;
&lt;br /&gt;
ROUTER ID = 172.30.5.4&lt;br /&gt;
&lt;br /&gt;
AREA ID = 0.0.0.1&lt;br /&gt;
&lt;br /&gt;
link state ID = 0.0.0.0, 0.0.0.1, 0.0.0.2, ...&lt;br /&gt;
&lt;br /&gt;
По принципу работы не отличается от OSPFv2, но все же есть некоторый отличия:&lt;br /&gt;
*В OSPF3 все информаци о соседях представлена в виде router-ID (lo0.0 inet address).&lt;br /&gt;
*OSPF работает по линкам, а не по сетям.&lt;br /&gt;
*OSPF3 LSA1, LSA2 не передают никакой информации о сетях (prefix).&lt;br /&gt;
*Включены 2 новых типа LSA: ''link-LSA'' и ''intra-area-prefix-LSA''. Стандартные LSA 3, 4 превратились в inter-area-prefix-LSA и inter-area-router-LSA.&lt;br /&gt;
*OSPF3 использует link-local address для обмена сообщениями между соседями (за исключением virtual-link).&lt;br /&gt;
*Для аутентификации используется IPv6 authentification header.&lt;br /&gt;
&lt;br /&gt;
'''Intra-area-prefix-LSA''': передает internal prefix, требуется, т.к. LSA 1, 2 передают только инфо о топологии.&lt;br /&gt;
&lt;br /&gt;
'''Link-LSA''': передает link-local address и сети, прикрепленные к этому link. &lt;br /&gt;
&lt;br /&gt;
==Config==&lt;br /&gt;
 [edit]&lt;br /&gt;
 routing-options {&lt;br /&gt;
 	router-id 10.200.86.1;}&lt;br /&gt;
 [edit protocols]&lt;br /&gt;
 ospf3 {&lt;br /&gt;
 	area 0.0.0.0 {&lt;br /&gt;
    		interface ge-0/0/0.80 {&lt;br /&gt;
 		interface lo0.0 {&lt;br /&gt;
 			passive; }&lt;br /&gt;
 	area 0.0.0.30 {&lt;br /&gt;
 		interface ge-0/0/0.110 }}&lt;br /&gt;
&lt;br /&gt;
 show ospf3 interface&lt;br /&gt;
 show ospf3 neighbor&lt;br /&gt;
 show ospf3 database&lt;br /&gt;
 show route protocol ospf3&lt;br /&gt;
==Realm==&lt;br /&gt;
По дефолту OSPFv3 передает инфо только о IPv6 unicast маршрутах. Чтобы OSPFv3 мог передавать и другие family, в том числе и IPv4 unicast, IPv4 multicast, IPv6 multicast, включаем '''realm''':&lt;br /&gt;
 set protocols ospf3 area 0.0.0.0 interface fe-0/1/0.0      - IPv6&lt;br /&gt;
 set protocols ospf3 realm ipv4-unicast area 0.0.0.0 interface fe-0/1/0.0 - IPv4&lt;br /&gt;
 set interfaces fe-0/1/0 unit 0 family inet6&lt;br /&gt;
&lt;br /&gt;
=Дополнительная информация=&lt;br /&gt;
*[[IS-IS]]&lt;br /&gt;
*[[BGP]]&lt;br /&gt;
*[[L3VPN]]&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=IS-IS&amp;diff=2065</id>
		<title>IS-IS</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=IS-IS&amp;diff=2065"/>
		<updated>2021-07-15T18:44:04Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#description2:Отличия ISIS и OSPF. ISIS Areas. NET. L2 network. L1 network. Leaking routes. Summarization. TLV. Выборы DIS в бродкаст сети. Аутентификация. Mesh-groups. Распространение маршрутов. Wide metric. Формат LSP. Hello PDU. Информация для подготовки к экзаменам Juniper.}}&lt;br /&gt;
&lt;br /&gt;
=Основы=&lt;br /&gt;
'''[http://bradhedlund.com/notes/is-is/ Краткое содержание, в пересказе Brad Hedlund]'''&lt;br /&gt;
&lt;br /&gt;
Был разработан для работы с CLNP/CLNS. Потом добавили возможность работать с IP (добавили tlv) - dual IS-IS.&lt;br /&gt;
&lt;br /&gt;
CLNS (Connectionless network service).&lt;br /&gt;
&lt;br /&gt;
CLNP (Connectionless network protocol).&lt;br /&gt;
&lt;br /&gt;
dual IS-IS поддерживают M, MX, T series. Чистый ISIS работает только на J, SRX series.&lt;br /&gt;
&lt;br /&gt;
Основные термины:&lt;br /&gt;
*ESs - end system = hosts.&lt;br /&gt;
*ISs - intermediate systems = routers.&lt;br /&gt;
*PDU - protocol data unit = packet.&lt;br /&gt;
*Level 1 (L1) - маршрутизация внутри area.&lt;br /&gt;
*Level 2 (L2)- маршрутизация между area и к другим AS.&lt;br /&gt;
*L1/L2 - совмещают 1 и 2 level на разных интерфейсах.&lt;br /&gt;
&lt;br /&gt;
В L1/L2 системах роутер помечает PDU в сторону Level1 attached bit'ом, который обозначает, что роутер присоединен к L2 и что его можно использовать для достижения префиксов, находящихся за L1 area.&lt;br /&gt;
&lt;br /&gt;
=Network entity title (NET)=&lt;br /&gt;
Network entity title (NET) - обозначения роутеров.&lt;br /&gt;
49.0001.1921.6803.6001.00&lt;br /&gt;
&lt;br /&gt;
49.0001 - area - число 1-13 байт.&lt;br /&gt;
&lt;br /&gt;
1921.6803.6001 - SYSTEM ID - обычно это просто ip loopback.&lt;br /&gt;
&lt;br /&gt;
00 - selector&lt;br /&gt;
&lt;br /&gt;
NET - можно назначить на любой интерфейс, на lo назначают для удобства.&lt;br /&gt;
&lt;br /&gt;
SYSTEM ID должен быть уникален в рамках AREA.&lt;br /&gt;
&lt;br /&gt;
=Отличия ISIS и OSPF=&lt;br /&gt;
В чем одинаковы:&lt;br /&gt;
*Поддерживают link-state database и находят кратчайший путь, используя алгоритм [https://youtu.be/0ZPuGE0aNKU Дейкстры]&lt;br /&gt;
*Используют hello пакеты для поддержания соседства&lt;br /&gt;
*Имеют функцию аутентификации&lt;br /&gt;
*Выбирают designated router&lt;br /&gt;
*Производят address summarization между area&lt;br /&gt;
*Используют двухуровневую иерархию&lt;br /&gt;
&lt;br /&gt;
=Areas=&lt;br /&gt;
В ISIS линки делят сеть на area, а не роутеры, как в ospf.&lt;br /&gt;
&lt;br /&gt;
По аналогии с OSPF есть backbone area: в ISIS это кучка роутеров L2. L2 роутеры могут соединять разные area.&lt;br /&gt;
&lt;br /&gt;
Ротуеры, которые не имеют соединений с другими area - L1.&lt;br /&gt;
&lt;br /&gt;
В area, которая не backbone и имеет связь с другой area - будет находиться роутер, имеющий линки, смотрящие в разные area, поэтому он будет называться L1/L2 роутером (как ABR в OSPF).&lt;br /&gt;
&lt;br /&gt;
И еще:&lt;br /&gt;
&lt;br /&gt;
; Два роутера с '''одинаковой''' AREA:&lt;br /&gt;
:  Могут сформировать '''L1''' adjacency&lt;br /&gt;
:  Могут сформировать '''L2''' adjacency&lt;br /&gt;
; Два роутера с '''разной''' AREA:&lt;br /&gt;
:  Не могут сформировать '''L1''' Adjacency&lt;br /&gt;
:  Сформируют '''L2''' Adjacency&lt;br /&gt;
&lt;br /&gt;
=Multilevel operations=&lt;br /&gt;
==L2 network==&lt;br /&gt;
[[Файл:Isis_l2_network.jpg]]&lt;br /&gt;
&lt;br /&gt;
При использовании L2 на всех роутерах будет сеть, аналогичная OSPF area 0. То есть все роутеры будут получать полные сведения о всей сети.&lt;br /&gt;
	&lt;br /&gt;
Тип LSP будет напрямую зависеть от Level соседства. Если установлено L1 соседство, то передаются LSP level1, если соседство L2, то и LSP будут L2.&lt;br /&gt;
	&lt;br /&gt;
L2 флудятся между всеми area.&lt;br /&gt;
&lt;br /&gt;
==L1 network==&lt;br /&gt;
&lt;br /&gt;
[[Файл:Isis_l1_network.jpg]]&lt;br /&gt;
&lt;br /&gt;
Между всеми роутерами установлено соседство L1 и между собой роутеры обмениваются только LSP L1. Также все роутеры имеют одинаковую LSDB.&lt;br /&gt;
	&lt;br /&gt;
Выход во внешнюю сеть в подобных сетях обеспечивается засчет предоставления 0/0 маршрута Attached роутером.&lt;br /&gt;
	&lt;br /&gt;
Пример вывода с роутера, имеющего только L1 соседство:&lt;br /&gt;
 talisker&amp;gt; show isis database     &lt;br /&gt;
 IS-IS level 1 link-state database: &lt;br /&gt;
 LSP ID                      Sequence Checksum Lifetime Attributes&lt;br /&gt;
 talisker.00-00                   0xe   0x85d1      861 L1 L2 &lt;br /&gt;
 '''macduff.00-00'''                    0xc   0xfc02      859 L1 L2 '''Attached'''&lt;br /&gt;
 macduff.02-00                    0x5   0xa7cc      859 L1 L2&lt;br /&gt;
В таблице появляется маршрут (0/0 генерируется L1 роутером, а не анонсируется с L2):&lt;br /&gt;
 talisker&amp;gt; show route protocol isis &lt;br /&gt;
 inet.0: 13 destinations, 13 routes (13 active, 0 holddown, 0 hidden)&lt;br /&gt;
 + = Active Route, - = Last Active, * = Both&lt;br /&gt;
 0.0.0.0/0          *[IS-IS/15] 00:08:07, metric 10&lt;br /&gt;
                    &amp;gt; to 192.168.86.14 via ge-0/0/0.70&lt;br /&gt;
&lt;br /&gt;
Attached-bit можно отключить на L1 роутере следующим образом:&lt;br /&gt;
 [edit protocols isis]&lt;br /&gt;
 +   ignore-attached-bit;&lt;br /&gt;
&lt;br /&gt;
==L1/L2 network==&lt;br /&gt;
[[Файл:Isis_l1_l2_network.jpg]]&lt;br /&gt;
&lt;br /&gt;
L1/L2 сеть работает как NSSA в OSPF.&lt;br /&gt;
	&lt;br /&gt;
На L1/L2 роутерах происходит &amp;quot;суммирование&amp;quot; маршрутов L1 и &amp;quot;суммированный&amp;quot; маршрут флудится внутри L2 area. (по факту суммирования не происходит, просто передаются префиксы L1 в L2. Про суммирование/аггрегирование будет ниже). Почему это везде называется суммирование - не ясно. &lt;br /&gt;
 &lt;br /&gt;
Внутри каждой L1 area у всех L1 роутеров содержится одинаковая LSDB.&lt;br /&gt;
	&lt;br /&gt;
L2 маршруты не передаются в L1.&lt;br /&gt;
	&lt;br /&gt;
External L1 по дефолту не передаются в L2, можно разрешить с помощью policy.&lt;br /&gt;
	&lt;br /&gt;
L1 роутеры изолированы от изменений топологии в других area.&lt;br /&gt;
&lt;br /&gt;
#L1 роутеры используют attached-bit, который генерируется L1/L2 роутером. Default route генерируется на L1 роутере в сторону L1/L2 роутера (который подсунул attached-bit).&lt;br /&gt;
#L1 роутеры используют кратчайший путь (по метрике) к attached роутеру.&lt;br /&gt;
&lt;br /&gt;
При разделении роутеров на разные уровни повышается мастабируемость, т.к.:&lt;br /&gt;
#L1 изолированы от общей топологии сети, вне своей area.&lt;br /&gt;
#Суммирование L1 маршрутов позволяет L2 роутерам производить SPF не всей сети, а исключая L1.&lt;br /&gt;
&lt;br /&gt;
=Действия внутри multilevel networks=&lt;br /&gt;
*L1 internal в L2 уходит без ограничений.&lt;br /&gt;
*L1 external в L2 уходит только через export-policy.&lt;br /&gt;
*L2 в L1 по умолчанию не уходит, только через export-policy.&lt;br /&gt;
&lt;br /&gt;
L1 роутеры имеют только локальную маршрутную информацию, внутри своей area. Чтобы достичь назначения вне своей area, L1 роутеры используют default route. &lt;br /&gt;
&lt;br /&gt;
В L1 PDU можно впихнуть и external routes (потребуется export policy). Но по умолчанию такие маршруты не будут передаваться L2.&lt;br /&gt;
&lt;br /&gt;
Использование wide metrics убирает обозначение internal/external routes. Все становятся просто internal =&amp;gt; все ext-L1 перетекают L2.&lt;br /&gt;
&lt;br /&gt;
L2 PDU attached роутеров передают внутренние L1 маршруты своим L2 соседям в других area. L2-r не передает от своих L2-r соседей никаких маршрутов в сторону L1, поэтому L1 роутеры и нуждаются в default route.&lt;br /&gt;
&lt;br /&gt;
Можно отключить функцию генерирования default-route на L1 роутрах:&lt;br /&gt;
 set protocols isis ignore-attached-bit&lt;br /&gt;
&lt;br /&gt;
'''БОЛЬШОЕ НО''': если у L1/L2 роутера есть соседство L2 в ДРУГОЙ area, то он будет вставлять attcahed-bit. Если такого соседства нет, то ему и не за чем добавлять attached к L1 link-state PDU.&lt;br /&gt;
&lt;br /&gt;
Использование '''ignore-attached-bit'''. Когда применяется:&lt;br /&gt;
*Иногда админу требуется, чтобы L2 routes просочились к L1 =&amp;gt; L1 больше не нуждается в default-route. Бывает, что появились криво сгенерированные (неподходящие) L1 LSP, L2 роутер будет их упаковывать в L2 LSP, чтобы передать своим L2 соседям. При этом сами L1 LSP, как таковые, флудиться не будут.&lt;br /&gt;
*Если сгенерированный def route с next-hop в сторону attached роутера не является оптимальным, то его можно просто отключить.&lt;br /&gt;
&lt;br /&gt;
=Leaking routes=&lt;br /&gt;
Настраивается на L1/L2 роутере:&lt;br /&gt;
 set policy-options policy-statement route-leak term L2-to-L1 from protocol isis&lt;br /&gt;
 set policy-options policy-statement route-leak term L2-to-L1 from level 2&lt;br /&gt;
 set policy-options policy-statement route-leak term L2-to-L1 from route-filter 192.168.16.0/20 orlonger&lt;br /&gt;
 set policy-options policy-statement route-leak term L2-to-L1 to level 1&lt;br /&gt;
 set policy-options policy-statement route-leak term L2-to-L1 then accept&lt;br /&gt;
&lt;br /&gt;
При настройке подобного policy в 2 стороны (L2-to-L1, L1-to-L2), вполне себе может образоваться петля. Чтобы ее избежать, в LSP передается up/down bit. &lt;br /&gt;
&lt;br /&gt;
На границе L2-to-L1 up/down bit = down, чтобы он точно не утек обратно/ниже из L1.&lt;br /&gt;
:- up = можно передавать маршрут. &lt;br /&gt;
:- down = уже есть утечка этого маршрута из другого level, поэтому его передача запрещена.&lt;br /&gt;
&lt;br /&gt;
=ISIS соседство=&lt;br /&gt;
IIH = ISIS Hello packet. Используются для установления соседства.&lt;br /&gt;
&lt;br /&gt;
Hold timer тоже передается в IIH. &lt;br /&gt;
*'''для non-DIS''': hello = 9 sec, hold = 3*9 = 27 sec.  &lt;br /&gt;
*'''для DIS''': hello = 3sec, hold = 3*3 sec = 9 sec&lt;br /&gt;
&lt;br /&gt;
Что проверяется при установление соседства:&lt;br /&gt;
*MTU checking = TLV 8. ISIS max mtg = 1492 bytes. Поэтому линка должен быть с mtu никак не меньше!&lt;br /&gt;
*The subnet checking = TLV 132. На p2p линке должны быть адреса из одной подсети. &lt;br /&gt;
*Protocol checking = TLV 129. CLNP ; IPv4 ; IPv6 … Тоже должны совпадать.&lt;br /&gt;
*Area checking = TLV 1. Area num используется только для L1 роутеров. Должна совпадать.&lt;br /&gt;
&lt;br /&gt;
Состояния соседства:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Isis-adjacency.png]]&lt;br /&gt;
&lt;br /&gt;
*New - момент загрузки или при настройке начальной конфигурации IS-IS.&lt;br /&gt;
*One-Way - после Hello PDU. Роутер ждет Hello PDU пакет, содержащий свой адрес в качестве соседа.&lt;br /&gt;
*Initializing - Роутер получил Hello PDU со своим локальным адресом в качестве соседа.&lt;br /&gt;
*Up - соседство установлено, LSDB синхронизированы.&lt;br /&gt;
*Down - неверная area, истек таймаут или ошибка аутентификации.&lt;br /&gt;
*Reject - состояние маршрутизатора после сбоя проверки подлинности. IS-IS маршрутизатор будет постоянно менять свое состояние между этим и состоянием Down.&lt;br /&gt;
&lt;br /&gt;
Для более быстрого распознавания потери соседа настраивается BFD. Например, для времени детектирования менее 450 мс&lt;br /&gt;
 set groups isis protocols isis interface &amp;lt;ge-*&amp;gt; bfd-liveness-detection minimum-interval 150&lt;br /&gt;
 set groups isis protocols isis interface &amp;lt;ge-*&amp;gt; bfd-liveness-detection multiplier 3&lt;br /&gt;
&lt;br /&gt;
=Cуммирование маршрутов (Summarization)=&lt;br /&gt;
На L1/L2 роутерах настраивается суммирование/агрегирование маршрутов. Суммируются external L1 routes + L2 routes от других ISIS area (+ можно просуммировать internal L1 routes (хотя они итак по дефолту передаются L2)).&lt;br /&gt;
&lt;br /&gt;
Пример, на роутере L1 есть локальные маршруты, их нужно агрегировать в 1 большой маршрут и переслать в сторону L2. Агрегирование и перенаправление в L2 будем делать на L1/L2 роутере.&lt;br /&gt;
&lt;br /&gt;
Настраиваем policy:&lt;br /&gt;
 set routing-options aggregate route 172.16.20.0/22&lt;br /&gt;
 set policy-options policy-statement term on-the-L1L2 from protocol aggregate&lt;br /&gt;
 set policy-options policy-statement term on-the-L1L2 from route-filter 172.16.20.0/22 exact&lt;br /&gt;
 set policy-options policy-statement term on-the-L1L2 to level 2&lt;br /&gt;
 set policy-options policy-statement term on-the-L1L2 then accept&lt;br /&gt;
 set protocols isis level 1 export on-the-L1L2&lt;br /&gt;
Можно применять несколько policy. В таком случае они будут обрабатываться слева направо. Пока нужный префикс не поппадет под условие с последующим терминирующим действием (accept, reject).&lt;br /&gt;
 set routing-options aggregate route 10.0.4.0/22&lt;br /&gt;
 set policy-options policy-statement internal-L1-summary term local-summary from protocols aggregate&lt;br /&gt;
 set policy-options policy-statement internal-L1-summary term local-summary from route-filter 10.0.4.0/22 exact&lt;br /&gt;
 set policy-options policy-statement internal-L1-summary term local-summary to level 2&lt;br /&gt;
 set policy-options policy-statement internal-L1-summary term local-summary then accept&lt;br /&gt;
 set policy-options policy-statement internal-L1-summary term suppress-specifics from route-filter 10.0.4.0/22 longer&lt;br /&gt;
 set policy-options policy-statement internal-L1-summary term suppress-specifics to level 2&lt;br /&gt;
 set policy-options policy-statement internal-L1-summary term suppress-specifics then reject&lt;br /&gt;
 set protocols isis export internal-L1-summary&lt;br /&gt;
&lt;br /&gt;
=Алгоритм Дейкстры=&lt;br /&gt;
Shortest-path-first (SPF) рассчитывается отдельно для разных уровней, т.к. LSDB тоже заводятся для разных уровней.&lt;br /&gt;
&lt;br /&gt;
Существуют:&lt;br /&gt;
*link-state database&lt;br /&gt;
*candidate database&lt;br /&gt;
*tree database.&lt;br /&gt;
&lt;br /&gt;
LSDB - это данные на основании которых рассчитывается sortest-path-first. LSDB = router ID + neighbor ID + cost.&lt;br /&gt;
&lt;br /&gt;
Движение по таблицам: lsdb -&amp;gt; candidate &amp;gt; tree.&lt;br /&gt;
&lt;br /&gt;
Чтобы повысить сходимость, JunOS делает рассчет spf 3 раза, до того, как истечет hold-timer в 5 сек.&lt;br /&gt;
Этот тамймер установлен железно в JunOS и не конфигурируется.&lt;br /&gt;
&lt;br /&gt;
Таймер гарантирует, что во время изменения топологии пакеты будут маршрутизироваться (несмотря не неправильность маршрутной информации).&lt;br /&gt;
&lt;br /&gt;
Таймер spf-delay - конфигурируемый таймер, немного откладывает процесс spf. По дефолту 200 мс. Может быть от 50мс, до 1000 мс. Рекомендуется устанавливать чуть больше, чем самое высокое время прохождения пакета в сети, чтобы до роутеров успевали доходить lsp.&lt;br /&gt;
&lt;br /&gt;
SPF делается в 2 шага:&lt;br /&gt;
#строится DB, где указаны все IS сети. &lt;br /&gt;
#нанесение анонсируемых префиксов на tree, и рассчет кратчайших путей до них, на каждом роутере. &lt;br /&gt;
&lt;br /&gt;
'''Partial route calculation'''&lt;br /&gt;
&lt;br /&gt;
Если какой-то роутер начинает аннонсить новый префикс или перестает анонсить старый, то нет смысла делать полный пересчет SPF. В таких случаях производится пересчет только ip reachability (только для конкретных префиксов). Каждый роутер сам решает какой пересчет (IS reachability или IP reachability) ему делать, на основании полученного lsp.&lt;br /&gt;
&lt;br /&gt;
Маршруты приходят на роутер в виде LSP, потом производится расчет SPF и только после этого заносятся в таблицу маршрутизации. Поэтому, чтобы зафильтровать определенные маршруты с помощью policy, требуется делать это на роутере, генерирующем маршруты, с помощью export-policy. Import-policy - не работает в случае с ISIS.&lt;br /&gt;
&lt;br /&gt;
=Метрики=&lt;br /&gt;
При расчете SPF используется cost на исходящих интерфейсах.&lt;br /&gt;
&lt;br /&gt;
На одном линке разными роутерами могут быть назначены разные метрики. В этом случает ISIS ругаться не будет, но SPF будет рассчитвывать кратчайший путь в разных направлениях с разными стоимостями. Это только может усложнить админам работу, но ISIS будет работать.&lt;br /&gt;
&lt;br /&gt;
Также в отличие от ospf, в isis по умолчанию используются только static metrics. Нет метрик, рассчитанных от interface bandwidth rate.&lt;br /&gt;
&lt;br /&gt;
Но это дефолтное поведение можно поправить.&lt;br /&gt;
 set protocols isis reference-bandwidth 10g&lt;br /&gt;
&lt;br /&gt;
Для протоколов: direct, BGP, aggregate, generate метрика = '''10'''.&lt;br /&gt;
&lt;br /&gt;
На passive интерфейсах metric = '''0'''.&lt;br /&gt;
&lt;br /&gt;
Для static, OSFP и RIP маршрутов метрика = стоимости маршрута протокола.&lt;br /&gt;
&lt;br /&gt;
==Wide metric==&lt;br /&gt;
Обычно в TLV типов 2, 128, 130 поле под метрику =  6 бит. Напомним, что эти TLV используются, чтобы передавать инфо о своих линках и external routes.&lt;br /&gt;
Т.е. максимальное значение метрики = '''63''' (0-63). Любое бОльшее значение метрики, настроенное на интерфейсе передается как 63.&lt;br /&gt;
&lt;br /&gt;
Как я поняла, для рассчета spf это нифига не правильно и он добавляет несколько значений по 64, чтобы достичь нужного значения.&lt;br /&gt;
&lt;br /&gt;
При внедрении функционала TE, появились 22 и 35 TLV, в них стали использовать 24-битные metrics (то есть значение метрики '''16,777,215''') и поле под total cost было расширено до 32 бит. При этом wide metrics не могут отличать internal маршруты от external.&lt;br /&gt;
&lt;br /&gt;
По умолчанию в ISIS роутер передает и small и wide metrics. Так что значения метрик можно задавать в диапазоне: [0-16,777,215].&lt;br /&gt;
&lt;br /&gt;
Можно настроить, чтобы роутер работал только с wide (рекомендуется), но стоит учесть, что тогда это автоматически уберет возможность различать internal/external routes. И в сети будут просачиваться external маршруты Level 1 в Level 2. &lt;br /&gt;
 set protocols isis level 1 wide-metrics-only&lt;br /&gt;
 set protocols isis level 2 wide-metrics-only&lt;br /&gt;
&lt;br /&gt;
=Формат LSP=&lt;br /&gt;
&lt;br /&gt;
LSP (link-state PDU ) описывает состояния соседства с другими роутерами в сети. Периодически флудится в рамках Level. Не пересекает границы уровня. Содержит TLV сегменты.&lt;br /&gt;
&lt;br /&gt;
LSP флудится при изменениях в сети или по таймеру, чтобы содержать обновленную информацию. &lt;br /&gt;
&lt;br /&gt;
PDU имеет поле remaining lifetime (2 байт), при создании PDU по дефолту таймер = 1200 sec = '''20 min'''. &lt;br /&gt;
&lt;br /&gt;
Роутер, который получил PDU, начинает отсчет до 0. До того как таймер истечет (~ 317 sec), исходная система (роутер) пересоздает PDU и флудит его.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Protocol ID || Header length || Version || ID Length || PDU Type || Version || Reserved || Max area address || PDU&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
''ID Length (6 байт), Max area address (3 байт)'' - иногда = 0х00 - это показывает, использует значения по умолчанию и что LSP совмещен с более старыми версиями протокола. &lt;br /&gt;
&lt;br /&gt;
''PDU type'' - L1 (18) / L2 (20) PDU&lt;br /&gt;
&lt;br /&gt;
''Version (1)'' - ранее использовалось как расширение под protocol ID, но в сейчас не используется вообще и значение = 0х01 (реально версия протокола).&lt;br /&gt;
&lt;br /&gt;
''Version (2)'' - текущая версия протокола = 0х01.&lt;br /&gt;
&lt;br /&gt;
'''Формат PDU headers and TLVs'''&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| PDU length || Remaining lifetime || LSP ID || Sequence number || Checksum || ATT, OL, IS Type bits || TLVs &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
''LSP ID'' - 8 байт: 6 - router's system ID, 1 - circuit ID, 1 - LSP number. Придает уникальность внутри домена.&lt;br /&gt;
&lt;br /&gt;
Circuit ID -  0x01 - for loopback или p2p interface, [0x02 - 0xff] - broadcast segment. &lt;br /&gt;
&lt;br /&gt;
Sequence number = изначальный PDU имеет значение 0x01, каждый следующий фрагмент + 1.&lt;br /&gt;
&lt;br /&gt;
''Attached bit (ATT)'' - ставится в L1 PDU, ISIS роутером, кот имеет соседство с L2. L1 роутер после этого передает пакеты к этому attached роутеру, если нужно выйти за пределы area.&lt;br /&gt;
&lt;br /&gt;
''Overload (OL)'' - ставится, когда роутер хочет оповестить остальных, что он перегружен (скорее не хватает памяти) и не сможет надежно передать transit пакет. Сейчас крайне редко используется, так как роутеры мощные. При этом роутер будет продолжать генерировать LSP от себя, но транзитный трафик через него не должен проходить. Можно использовать, когда: 1. роутер должен быть выведен из сети на время работ. 2. роутер имеет большое кол-во bgp peers.&lt;br /&gt;
&lt;br /&gt;
Можно включить или выключить overload bit на постоянной основе, а можно включить для него таймер (60-1800 сек). Таймер начинает тикать, когда ты закоммитишь конфиг + условие: должен работать rpd.&lt;br /&gt;
&lt;br /&gt;
''IS type'' - определяет уровень роутера (L1 (0x01)/ L1 + L2(0x03))&lt;br /&gt;
&lt;br /&gt;
=Hello PDU=&lt;br /&gt;
Используется для поиска, установления и поддержания соседства.&lt;br /&gt;
&lt;br /&gt;
Разные hello для LAN (broadcast) и p2p сетей.&lt;br /&gt;
 &lt;br /&gt;
*P2P Hello для L1 и L2 имеют одинаковый формат [PDU17]&lt;br /&gt;
*LAN (broadcast) Hello&lt;br /&gt;
:*L1 (01-80-c2-00-00-14) [PDU15]&lt;br /&gt;
:*L2 (01-80-c2-00-00-15) [PDU16]&lt;br /&gt;
&lt;br /&gt;
Передаются с интервалом 3 sec = DIS (designated IS), 9 sec = non-DIS .&lt;br /&gt;
&lt;br /&gt;
Суть:&lt;br /&gt;
*Идентифицировать устр-во&lt;br /&gt;
*Описать его возможности&lt;br /&gt;
*Описать параметры интерфейса.&lt;br /&gt;
&lt;br /&gt;
PDU filelds:&lt;br /&gt;
:- circuit type: L1, L2, L1/L2 router.&lt;br /&gt;
:- source ID: system ID of originated router.&lt;br /&gt;
:- hold timer: сколько ждать hello от соседа.&lt;br /&gt;
:- PDU length: в октетах (байтах).&lt;br /&gt;
:- Priority: 0-127 для DIS роутеров.&lt;br /&gt;
:- LAN ID: system ID или DIS + 1 октет.&lt;br /&gt;
&lt;br /&gt;
=Link-state PDU=&lt;br /&gt;
Служат для:&lt;br /&gt;
*Идентификации IS соседств&lt;br /&gt;
*Описывает состояния своих соседств&lt;br /&gt;
*Описывает достижимые через него адреса.&lt;br /&gt;
&lt;br /&gt;
Для построения LSDB.&lt;br /&gt;
&lt;br /&gt;
Разные LSP для L1 и L2.&lt;br /&gt;
&lt;br /&gt;
Отправляются в результате изменений в сети, во время формирования соседства и в ответ на sequence number PDU.&lt;br /&gt;
&lt;br /&gt;
Отсылаются &lt;br /&gt;
#периодически&lt;br /&gt;
#когда упал линк к соседу&lt;br /&gt;
#когда появляется новый сосед&lt;br /&gt;
#изменилась стоимость линка.&lt;br /&gt;
&lt;br /&gt;
=Sequence number PDUs=&lt;br /&gt;
'''Partial sequence number PDU''':&lt;br /&gt;
Используется для:&lt;br /&gt;
*Поддержания LSDB синзронизации&lt;br /&gt;
*Подтверждения LSPs от соседей на p2p сетях&lt;br /&gt;
*Запрашивает копию пропущенных LSP в broadcast сетях&lt;br /&gt;
&lt;br /&gt;
Разный для L1 и L2 систем. Содержит спец информацию в заголовке для определенных LSP, кот подтверждены либо запрошены.&lt;br /&gt;
&lt;br /&gt;
'''Complete sequence number PDU''':&lt;br /&gt;
&lt;br /&gt;
Используется для поддержания LSDB синхронизации. Отправляется периодически всеми IS на p2p сетях, только DIS на broadcast сетях.&lt;br /&gt;
&lt;br /&gt;
Разные типы для L2 и L1 систем.&lt;br /&gt;
&lt;br /&gt;
Содержат инфо заголовка со всех LSP.&lt;br /&gt;
&lt;br /&gt;
=TLV=&lt;br /&gt;
Type/Length/Value&lt;br /&gt;
&lt;br /&gt;
Каждый кусочек информации в ISIS определяется как объект с атрибутами:&lt;br /&gt;
*Type: предопределенный код для типа информации, кот содержит объект.&lt;br /&gt;
*Length: размер информации&lt;br /&gt;
*Value: информация определенного типа&lt;br /&gt;
&lt;br /&gt;
TLV это блоки для ISIS PDU, кот используются для обмена информации. Некоторые TLV могут быть использованы несколькими PDU, некоторые только конкретным PDU.&lt;br /&gt;
&lt;br /&gt;
ISIS использует только известные TLV.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Известные IS-IS типы TLV&lt;br /&gt;
!  TLV&amp;amp;nbsp;Number !!	Описание&lt;br /&gt;
|-&lt;br /&gt;
| 1		||	Area address: area address, закодированный внутри ISIS NET на loopback.&lt;br /&gt;
|-&lt;br /&gt;
| 2		||	IS neighbor metrics: соседи локального роутера + метрики для достижения этих соседей (0-64).&lt;br /&gt;
|-&lt;br /&gt;
| 6		||	Neighbor LAN ID&lt;br /&gt;
|-&lt;br /&gt;
| 8		||	Padding&lt;br /&gt;
|-&lt;br /&gt;
| 9		||	LSP entries&lt;br /&gt;
|-&lt;br /&gt;
| 10	||	Authentication: содержит тип аутентификации и пароль.&lt;br /&gt;
|-&lt;br /&gt;
| 22	||	Extended IS reachability: &lt;br /&gt;
*IS соседи (system ID + wide metrics) и роутеры, которые поддерживают TE. &lt;br /&gt;
*sub-TLV описывают ограничения, заданные админом (определены также типы для каждого такого ограничения). &lt;br /&gt;
*Также эти TLV заполняют TE database.&lt;br /&gt;
|-&lt;br /&gt;
| 128	||	IP internal reachability, prefix, mask, metrics: ip и mask для каждого интерфейса маршрутизатора, кот поддерживает IPv4.&lt;br /&gt;
|-&lt;br /&gt;
| 129	||	Protocols supported: какие L3 протоколы поддерживает локальный роутер (IPv4, IPv6, CLNS - для SRX, J-series).&lt;br /&gt;
|-&lt;br /&gt;
| 130	||	IP external information: netw+mask всех маршрутов, присланных в ISIS, используя policy.&lt;br /&gt;
|-&lt;br /&gt;
| 132	||	IP interface addresses: host ip address для всех интерфейсов роутера.&lt;br /&gt;
|-&lt;br /&gt;
| 134	||	TE IP router ID: router-ID локального роутера.&lt;br /&gt;
|-&lt;br /&gt;
| 135	||	Extended IP reachability: ip+mask всех интерфейсов, пожжерживающих TE.&lt;br /&gt;
|-&lt;br /&gt;
| 137	||	dynamic hostname resolution: ASCII hostname локального роутера.&lt;br /&gt;
|-&lt;br /&gt;
| 222	||	Multiple topologies IS reachability: соседи локального роутера + роутеры, поддерживающие несколько топологий ISIS.&lt;br /&gt;
|-&lt;br /&gt;
| 229	||	Multiple topologies supported: какие топологии ISIS поддерживает роутер. Каждая топология определена 12-битным полем с ID.&lt;br /&gt;
|-&lt;br /&gt;
| 232	||	IPv6 interface address: IPv6 интерфейсов.&lt;br /&gt;
|-&lt;br /&gt;
| 235	||	Multiple topologies (rout instances) IP reachability: ip интерфейсов, кот поддерживает несколько топологий.&lt;br /&gt;
|-&lt;br /&gt;
| 236	||	IPv6 reachability: инфо о линке, где работает IPv6 протокол.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Пример LSP на роутере=&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
 '''vSRX2&amp;gt; show isis database extensive''' &lt;br /&gt;
 IS-IS level 1 link-state database:&lt;br /&gt;
 &lt;br /&gt;
 vSRX2.00-00 Sequence: 0x11f, Checksum: 0xb7a0, Lifetime: 1169 secs&lt;br /&gt;
    IS neighbor: vSRX3.02                      Metric:       10&lt;br /&gt;
      Two-way fragment: vSRX3.02-00, Two-way first fragment: vSRX3.02-00&lt;br /&gt;
    IP prefix: 2.2.2.2/32                      Metric:        0 Internal Up&lt;br /&gt;
    IP prefix: 10.0.0.0/30                     Metric:       10 Internal Up&lt;br /&gt;
    IP prefix: 10.0.0.4/30                     Metric:       10 Internal Up&lt;br /&gt;
 &lt;br /&gt;
   Header: LSP ID: vSRX2.00-00, Length: 218 bytes&lt;br /&gt;
     Allocated length: 1492 bytes, Router ID: 2.2.2.2&lt;br /&gt;
     Remaining lifetime: 1169 secs, Level: 1, Interface: 0&lt;br /&gt;
     Estimated free bytes: 1187, Actual free bytes: 1274&lt;br /&gt;
     Aging timer expires in: 1169 secs&lt;br /&gt;
     Protocols: IP, IPv6&lt;br /&gt;
 &lt;br /&gt;
   Packet: LSP ID: vSRX2.00-00, Length: 218 bytes, Lifetime : 1198 secs&lt;br /&gt;
     Checksum: 0xb7a0, Sequence: 0x11f, Attributes: 0xb &amp;lt;L1 L2 Attached&amp;gt;&lt;br /&gt;
     NLPID: 0x83, Fixed length: 27 bytes, Version: 1, Sysid length: 0 bytes&lt;br /&gt;
     Packet type: 18, Packet version: 1, Max area: 0&lt;br /&gt;
 &lt;br /&gt;
   TLVs:&lt;br /&gt;
     Area address: 49.1111 (3)&lt;br /&gt;
     Speaks: IP&lt;br /&gt;
     Speaks: IPV6&lt;br /&gt;
     IP router id: 2.2.2.2&lt;br /&gt;
     IP address: 2.2.2.2&lt;br /&gt;
     Hostname: vSRX2&lt;br /&gt;
     IS neighbor: vSRX3.02, Internal, Metric: default 10&lt;br /&gt;
     IS extended neighbor: vSRX3.02, Metric: default 10&lt;br /&gt;
       IP address: 10.0.0.5&lt;br /&gt;
       Local interface index: 74, Remote interface index: 0&lt;br /&gt;
       Current reservable bandwidth:&lt;br /&gt;
         Priority 0 : 980Mbps&lt;br /&gt;
         Priority 1 : 980Mbps&lt;br /&gt;
         Priority 2 : 980Mbps&lt;br /&gt;
         Priority 3 : 980Mbps&lt;br /&gt;
         Priority 4 : 980Mbps&lt;br /&gt;
         Priority 5 : 980Mbps&lt;br /&gt;
         Priority 6 : 980Mbps&lt;br /&gt;
         Priority 7 : 980Mbps&lt;br /&gt;
       Maximum reservable bandwidth: 1000Mbps&lt;br /&gt;
       Maximum bandwidth: 1000Mbps&lt;br /&gt;
       Administrative groups:  0 &amp;lt;none&amp;gt;&lt;br /&gt;
     IP prefix: 10.0.0.0/30, Internal, Metric: default 10, Up&lt;br /&gt;
     IP prefix: 10.0.0.4/30, Internal, Metric: default 10, Up&lt;br /&gt;
     IP prefix: 2.2.2.2/32, Internal, Metric: default 0, Up&lt;br /&gt;
     IP extended prefix: 10.0.0.0/30 metric 10 up&lt;br /&gt;
     IP extended prefix: 10.0.0.4/30 metric 10 up&lt;br /&gt;
     IP extended prefix: 2.2.2.2/32 metric 0 up&lt;br /&gt;
   No queued transmissions&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Designated Intermedia System (DIS)=&lt;br /&gt;
Не выбирается на p2p линках. Выборы производятся только между роутрерами, подключенными через один ethernet сегмент.&lt;br /&gt;
&lt;br /&gt;
DIS отвечает за передачу link-state сообщений.  &lt;br /&gt;
&lt;br /&gt;
Как проверить, что на нашей сети не появился DIS:&lt;br /&gt;
 show isis database&lt;br /&gt;
 LSP ID                      Sequence Checksum Lifetime Attributes&lt;br /&gt;
 sun-r1.'''00-00'''                    0x81   0x7a6e     1153 L1&lt;br /&gt;
 sirius-r2.'''00-00'''                  0xd    0x292      616 L1&lt;br /&gt;
 canopus-r3.'''00-00'''                0xa4   0x16cf      699 L1&lt;br /&gt;
 arcturus-r4.'''00-00'''               0xc0   0xbe94      773 L1&lt;br /&gt;
 ... и т.д.&lt;br /&gt;
&lt;br /&gt;
00-00 - первая пара 00 - это как раз pseudonode-id. Раз он равен 0, то DIS в данном сегменте нет. Если значение первой пары отличается (03-00, 05-00), значит выбран DIS.&lt;br /&gt;
 &lt;br /&gt;
==Выборы DIS в бродкаст сети / multi-access сети==&lt;br /&gt;
#приоритет: (0-127) для L1 и L2 назначаются разные, по умолчанию = 64. Передаются в hello PDU. Приоритет = 0 - роутер не участвует в выборах. На не бродкастных линках приоритет = 0.&lt;br /&gt;
#наибольший mac / SNPA.&lt;br /&gt;
#для L1 и L2 DIS выбирается отдельно.&lt;br /&gt;
&lt;br /&gt;
 set protocols isis interface ge-0/0/1.212 level 1 priority 105&lt;br /&gt;
&lt;br /&gt;
ISIS сеть считается роутером, называемым pseudo-node: по факту просто создается некая сущность, типа виртуального роутрера, с которым все роутеры в бродкаст сети устанавливают соседство (в том числе и сам DIS).&lt;br /&gt;
*Каждый роутер анонсирует линк к pseudo-node, включая DIS.&lt;br /&gt;
*Каждый роутер формирует соседство с каждым роутером в бродкаст/мультиакцесс сети (в отличие от OSPF).&lt;br /&gt;
&lt;br /&gt;
==Поведение DIS==&lt;br /&gt;
*Каждый роутер флудит свои link-state PDU каждому соседу, а не только DIS. DIS таким образом использует систему из PDU (sequence number PDU).&lt;br /&gt;
*DIS является представителем pseudo-node и пересылает pseudo-node всем присоединенным роутерам.&lt;br /&gt;
*Не существует backup DIS. при падении существующего DIS просто производятся новые выборы, и новый флуд link-state PDU.&lt;br /&gt;
&lt;br /&gt;
Каждый DIS по дефолту каждые 10 сек отправляет CSNP (complete sequence number PDU) в LAN интерфейс. Также эти CSNP позволяют другим роутерам знать, когда DIS становится недоступным. Можно настроить таймер csnp (csnp-interval). Обычно для broadcast линка, где подключены только 2 роутера, этот интервал делают не очень коротким, т.к. в этом нет необходимости.&lt;br /&gt;
&lt;br /&gt;
 set protocols isis interface ge-0/0/0.0 csnp-interval (1-65535)&lt;br /&gt;
&lt;br /&gt;
Пример Isis database с DIS на сети (вывод с canopus-r3, DIS=arcturus-r4):&lt;br /&gt;
 IS-IS level 1 link-state database:&lt;br /&gt;
 sun-r1.00-00 Sequence: 0x81, Checksum: 0x7a6e, Lifetime: 120 secs&lt;br /&gt;
   IS neighbor: sirius-r2.00                  Metric:       10&lt;br /&gt;
   IS neighbor: procyon-r8.00                 Metric:       10&lt;br /&gt;
   IP prefix: 172.30.0.0/30                   Metric:       10 Internal Up&lt;br /&gt;
   IP prefix: 172.30.0.8/30                   Metric:       10 Internal Up&lt;br /&gt;
   IP prefix: 172.30.5.1/32                   Metric:        0 Internal Up&lt;br /&gt;
 sirius-r2.00-00 Sequence: 0xf, Checksum: 0x8b15, Lifetime: 808 secs&lt;br /&gt;
   IS neighbor: sun-r1.00                     Metric:       10&lt;br /&gt;
   IS neighbor: rigel-r7.00                   Metric:       10&lt;br /&gt;
   IP prefix: 172.30.0.0/30                   Metric:       10 Internal Up&lt;br /&gt;
   IP prefix: 172.30.0.12/30                  Metric:       10 Internal Up&lt;br /&gt;
   IP prefix: 172.30.0.16/30                  Metric:       10 Internal Up&lt;br /&gt;
   IP prefix: 172.30.5.2/32                   Metric:        0 Internal Up&lt;br /&gt;
 canopus-r3.00-00 Sequence: 0xa9, Checksum: 0x8a8c, Lifetime: 1155 secs&lt;br /&gt;
   IS neighbor: arcturus-r4.02                Metric:       10&lt;br /&gt;
   IP prefix: 172.30.0.12/30                  Metric:       10 Internal Up&lt;br /&gt;
   IP prefix: 172.30.0.20/30                  Metric:       10 Internal Up&lt;br /&gt;
   IP prefix: 172.30.0.24/30                  Metric:       10 Internal Up&lt;br /&gt;
   IP prefix: 172.30.1.0/24                   Metric:       10 Internal Up&lt;br /&gt;
   IP prefix: 172.30.2.0/24                   Metric:       10 Internal Up&lt;br /&gt;
   IP prefix: 172.30.5.3/32                   Metric:        0 Internal Up&lt;br /&gt;
 a-centauri-r5.00-00 Sequence: 0x96, Checksum: 0x7374, Lifetime: 1161 secs&lt;br /&gt;
   IS neighbor: arcturus-r4.03                Metric:       10&lt;br /&gt;
   IP prefix: 172.30.0.28/30                  Metric:       10 Internal Up&lt;br /&gt;
   IP prefix: 172.30.0.32/30                  Metric:       10 Internal Up&lt;br /&gt;
   IP prefix: 172.30.5.5/32                   Metric:        0 Internal Up&lt;br /&gt;
 vegan-r6.00-00 Sequence: 0x92, Checksum: 0x7aca, Lifetime: 813 secs&lt;br /&gt;
   IS neighbor: a-centauri-r5.00              Metric:       10&lt;br /&gt;
   IS neighbor: rigel-r7.00                   Metric:       10&lt;br /&gt;
   IP prefix: 172.30.0.24/30                  Metric:       10 Internal Up&lt;br /&gt;
   IP prefix: 172.30.0.32/30                  Metric:       10 Internal Up&lt;br /&gt;
   IP prefix: 172.30.0.40/30                  Metric:       10 Internal Up&lt;br /&gt;
   IP prefix: 172.30.5.6/32                   Metric:        0 Internal Up&lt;br /&gt;
 rigel-r7.00-00 Sequence: 0x9, Checksum: 0x82f5, Lifetime: 275 secs&lt;br /&gt;
   IS neighbor: sirius-r2.00                  Metric:       10&lt;br /&gt;
   IS neighbor: vegan-r6.00                   Metric:       10&lt;br /&gt;
   IS neighbor: procyon-r8.00                 Metric:       10&lt;br /&gt;
   IP prefix: 172.30.0.16/30                  Metric:       10 Internal Up&lt;br /&gt;
   IP prefix: 172.30.0.40/30                  Metric:       10 Internal Up&lt;br /&gt;
   IP prefix: 172.30.0.44/30                  Metric:       10 Internal Up&lt;br /&gt;
   IP prefix: 172.30.5.7/32                   Metric:        0 Internal Up&lt;br /&gt;
 procyon-r8.00-00 Sequence: 0x81, Checksum: 0xd174, Lifetime: 817 secs&lt;br /&gt;
   IS neighbor: sun-r1.00                     Metric:       10&lt;br /&gt;
   IS neighbor: rigel-r7.00                   Metric:       10&lt;br /&gt;
   IP prefix: 172.30.0.8/30                   Metric:       10 Internal Up&lt;br /&gt;
   IP prefix: 172.30.0.44/30                  Metric:       10 Internal Up&lt;br /&gt;
   IP prefix: 172.30.5.8/32                   Metric:        0 Internal Up&lt;br /&gt;
 '''arcturus-r4.00-00''' Sequence: 0x4, Checksum: 0xb668, Lifetime: 1157 secs&lt;br /&gt;
   IS neighbor: '''arcturus-r4.02'''                Metric:       10&lt;br /&gt;
   IS neighbor: '''arcturus-r4.03'''                Metric:       10&lt;br /&gt;
   IP prefix: 172.30.0.20/30                  Metric:       10 Internal Up&lt;br /&gt;
   IP prefix: 172.30.0.28/30                  Metric:       10 Internal Up&lt;br /&gt;
   IP prefix: 172.30.1.0/24                   Metric:       10 Internal Up&lt;br /&gt;
   IP prefix: 172.30.2.0/24                   Metric:       10 Internal Up&lt;br /&gt;
   IP prefix: 172.30.5.90/32                  Metric:        0 Internal Up&lt;br /&gt;
 '''arcturus-r4.02-00''' Sequence: 0x3, Checksum: 0xf44, Lifetime: 1158 secs&lt;br /&gt;
   IS neighbor: canopus-r3.00                 Metric:        0&lt;br /&gt;
   IS neighbor: arcturus-r4.00                Metric:        0&lt;br /&gt;
 '''arcturus-r4.03-00''' Sequence: 0x1, Checksum: 0x1495, Lifetime: 1157 secs&lt;br /&gt;
   IS neighbor: a-centauri-r5.00              Metric:        0&lt;br /&gt;
   IS neighbor: arcturus-r4.00                Metric:        0&lt;br /&gt;
&lt;br /&gt;
= Аутентификация=&lt;br /&gt;
Можно настраивать в разных местах: L1, L2, на интерфейсах.&lt;br /&gt;
&lt;br /&gt;
L1, L2 защищает hello PDU, LSP, порядковый номер pdu, отправленных в рамках определнного уровня.&lt;br /&gt;
&lt;br /&gt;
Auth на интерфейсах шифрует только hello PDUs.&lt;br /&gt;
&lt;br /&gt;
Типы:&lt;br /&gt;
*MD5 (включает checksumm ко всем пакетам)&lt;br /&gt;
*plain-text&lt;br /&gt;
*none&lt;br /&gt;
&lt;br /&gt;
Можно выборочно отключить authen для конкретных типов PDU. Опция позволяет как не защищать конкретные PDU, так и не проверять пришедшие конкретные PDU.&lt;br /&gt;
&lt;br /&gt;
 no authentification-check    | позволяет защищать исходящие пакеты, PDU, но при получении принимать все PDU, вне зависимости от того подходят ли они или нет.&lt;br /&gt;
&lt;br /&gt;
=Mesh-groups=&lt;br /&gt;
Все роутеры флудят LSP всем своим соседям. В итоге один роутер может получать несколько одинаковых копий LSP.&lt;br /&gt;
&lt;br /&gt;
Mesh-groups вводятся, чтобы в full-mesh сети сократить чрезмерный и избыточный флуд LSP.&lt;br /&gt;
 &lt;br /&gt;
Чтобы этого избежать, можно использовать mesh-groups. Члены группы не пересылают LSP внутри группы. Пересылаются только LSP, полученные извне группы.&lt;br /&gt;
&lt;br /&gt;
 set protocols isis interface ge-0/0/0.0 mesh-group 1&lt;br /&gt;
 set protocols isis interface ge-0/0/1.0 mesh-group 2&lt;br /&gt;
 set protocols isis interface ge-0/0/2.0 mesh-group blocked    | икслючает флуд любых LSP от себя, но принимает LSP от соседей.&lt;br /&gt;
&lt;br /&gt;
=Политики распространения маршрутов по умолчанию=&lt;br /&gt;
Как и OSPF, ISIS - link-state протокол. Таблица маршрутизации заполняется префиксами, прошедшими SPF алгоритм. &lt;br /&gt;
&lt;br /&gt;
LSP заполняются не из inet.0, а из того, что сконфигурировано внутри &amp;lt;protocols isis&amp;gt;. В ISIS можно ограничивать internal routes и external routes с помощью export policy. &lt;br /&gt;
&lt;br /&gt;
(в ospf можно фильтровать таким образом только external routes).&lt;br /&gt;
&lt;br /&gt;
=Распространение маршрутов =&lt;br /&gt;
Чтобы в ISIS передать маршруты, полученные из других протоколов, требуется export-policy.&lt;br /&gt;
&lt;br /&gt;
Также export работает и для ISIS маршрутов.&lt;br /&gt;
&lt;br /&gt;
В policy как действие можно не только делать accept, но и устанавливать метрику и добавлять теги. Теги полезны для выборочной редистрибьюции. На принимающей стороне можно с помощью тегов разруливать маршруты.&lt;br /&gt;
&lt;br /&gt;
Работает и import-policy на ISIS маршруты.&lt;br /&gt;
&lt;br /&gt;
=Prefix limit (для external routes)=&lt;br /&gt;
JunOS + ISIS = это достаточно надежная система, которая позволяет стабильно работать и с большим числом префиксов, но лучше этого не допускать.&lt;br /&gt;
&lt;br /&gt;
Желательно выставлять все-таки какое-то ограничение по количеству внешних маршрутов (1-4,294,967,295). При достижении лимита ISIS перестает принимать external routes + обозначает себя (через LSP) как overload. В таких случаях только ручное вмешательство спасает ситуацию.&lt;br /&gt;
 &lt;br /&gt;
То есть настраивается на ASBR, вероятно:&lt;br /&gt;
 set protocols isis level 2 prefix-export-limit 2000&lt;br /&gt;
 или&lt;br /&gt;
 set protocols isis level 1 prefix-export-limit 2000&lt;br /&gt;
&lt;br /&gt;
=Overload=&lt;br /&gt;
Настраиваем, если нужно вывести ненадолго роутер из эксплуатации.&lt;br /&gt;
&lt;br /&gt;
timeout = (60..1800 seconds).&lt;br /&gt;
&lt;br /&gt;
Если на роутере настроили overload, то при запуске протокола (rpd), overload bit = установленному интервалу.&lt;br /&gt;
НЕ с момента установления сосества, а именно со времени запуска протокола.&lt;br /&gt;
&lt;br /&gt;
Механизм взаимодействия с другими роутерами отличается от OSPF.&lt;br /&gt;
*другие роутеры игнорят PDU от роутера в расчете SPF и через роутер никакой трафик не пойдет.&lt;br /&gt;
*если роутер является border router (L1/L2), то он перестает слать attached-bit к L1.&lt;br /&gt;
&lt;br /&gt;
=Стоимость маршрутов (Junos Preference)=&lt;br /&gt;
*L1 internal = 15&lt;br /&gt;
*L2 internal = 18&lt;br /&gt;
*L1 external = 160&lt;br /&gt;
*L2 external = 165&lt;br /&gt;
т.к. best-practice - использовать wide-metrics, то в обычной жизни будем оперировать только internal preference. external - для старого формата метрик.&lt;br /&gt;
&lt;br /&gt;
Preference можно менять внутри isis level:&lt;br /&gt;
 set protocols isis level 1 preference 13          [internal]&lt;br /&gt;
 set protocols isis level 1 external-preference 16 [external]&lt;br /&gt;
&lt;br /&gt;
= Таймеры =&lt;br /&gt;
Соберем все цифры в кучу:&lt;br /&gt;
*hello: DIS = 3 sec, non-DIS = 9 sec&lt;br /&gt;
*hold (dead) = DIS = 9sec, non-DIS = 27 sec&lt;br /&gt;
*retransmit LSP = 5 sec (роутер ждет LSP ACK от роутера, которому отправлен LSP)&lt;br /&gt;
*DIS отправляет CSNP message каждые 10 sec в LAN сегмент.  [Complete Sequence Number PDU]&lt;br /&gt;
*LSP Lifetime = 20 min (1200 sec) (maximum). Запускается обратный отсчет для чистки. Если lifetime = 0, то LSP удаляется.&lt;br /&gt;
*LSP refresh = ~317 sec&lt;br /&gt;
*ISIS database purge: R1 имеет LSP c lifetime = 0, удаляет из LSDB у себя и отправляет соседям эту LSP с lifetime = 0. Сосед получил. Сразу из LSDB не удалил, подождал 60 sec обновлений для LSP. Если обновление не пришло - удалил из LSDB.&lt;br /&gt;
&lt;br /&gt;
=Использование IPv6=&lt;br /&gt;
Если в ISIS используются разные топологии для IPv4 и IPv6, то следует указать в конфиге, чтобы для ipv6 строилась своя топология:&lt;br /&gt;
 set protocols isis topologies ipv6-unicast&lt;br /&gt;
&lt;br /&gt;
=Конфигурация ISIS протокола=&lt;br /&gt;
Что обязательно:&lt;br /&gt;
*family iso на интерфейсах&lt;br /&gt;
*NET на одном из интерфейсов (обычно это lo). best practice: добавлять lo в protocols isis, даже если NET сконфигурирован не на нем. Конфиг Lo: isis работает на Lo в пассивном режиме: соседства с него не поднимает, но роутер передает о нём инфо, как о локальном линке. LSP генерируется автоматом и в L1 и в L2. (можно это действо запретить для одного из уровней).&lt;br /&gt;
*по умолчанию интерфейсы работают как L1/L2, если интерфейс должен быть только в L2, нужно выключить L1. И наоборот. Также можно глобально отключить работу одного из уровней &amp;lt;set protocols isis level 1 disable&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Побочное:&lt;br /&gt;
*metric/cost: по дефолту = 10 (даже для passive), для loopback = 0. Каждый level на интерфейсе может иметь свою метрику.&lt;br /&gt;
 set protocols isis interface ge-0/0/0.10 level 1 metric 50&lt;br /&gt;
 set protocols isis interface ge-0/0/0.10 level 2 metric 20&lt;br /&gt;
*reference bandwidth: автоматический расчет cost. cost = reference bandwidth / bandwidth. При этом на всём роутере для разных линков остаётся одинаковый коэффициент. Говорят, в больших сетях помогает инженерам, вместо ручного метода.&lt;br /&gt;
 set protocols isis reference-bandwidth&lt;br /&gt;
*остальные фичи, которые описаны в главе ISIS...&lt;br /&gt;
&lt;br /&gt;
L1/L2 router:&lt;br /&gt;
 set protocols isis traceoptions file isis-log size 10m files 10 world-readable&lt;br /&gt;
 set protocols isis traceoptions flag state detail&lt;br /&gt;
 set protocols isis traceoptions flag error detail&lt;br /&gt;
 set protocols isis export L2-to-L1 &lt;br /&gt;
 set protocols isis export export-external&lt;br /&gt;
 set protocols isis interface ge-0/0/0.110 level 1 disable&lt;br /&gt;
 set protocols isis interface ge-0/0/0.130 level 2 disable&lt;br /&gt;
 set protocols isis interface lo0.0 passive&lt;br /&gt;
&lt;br /&gt;
 set interfaces ge-0/0/0.110 family iso&lt;br /&gt;
 set interfaces ge-0/0/0.130 family iso&lt;br /&gt;
 set interfaces lo0.0 family inet address 192.168.13.4/32&lt;br /&gt;
 set interfaces lo0.0 family iso address 49.0001.1921.6801.3004.00&lt;br /&gt;
&lt;br /&gt;
L1 router:&lt;br /&gt;
 set protocols isis traceoptions file isis-log size 10m files 10 world-readable&lt;br /&gt;
 set protocols isis traceoptions flag state detail&lt;br /&gt;
 set protocols isis traceoptions flag error detail&lt;br /&gt;
 set protocols isis export export-to-L2&lt;br /&gt;
 set protocols isis level 2 disable&lt;br /&gt;
 set protocols isis interface ge-0/0/0.130&lt;br /&gt;
 set protocols isis interface lo0.0 passive&lt;br /&gt;
&lt;br /&gt;
 set interfaces ge-0/0/0.130 family iso&lt;br /&gt;
 set interfaces lo0 unit 0 family inet address 192.168.15.5/32&lt;br /&gt;
 set interfaces lo0 unit 0 family iso address 49.0002.1921.6801.5005.00&lt;br /&gt;
&lt;br /&gt;
=Траблшутинг соседства ISIS=&lt;br /&gt;
Что проверить:&lt;br /&gt;
*физика между роутерами&lt;br /&gt;
*несовпадение level&lt;br /&gt;
*mtu не должно быть меньше 1492&lt;br /&gt;
*отсутствие ip конфига на интерфейсах&lt;br /&gt;
*отсутствие/либо неверный конфиг ISO-NET: ошибочно включен iso на loopback&lt;br /&gt;
&lt;br /&gt;
на p2p линках не обязательно использовать адреса из одной сети, линк может быть unnumberd или иметь /32 сеть.&lt;br /&gt;
&lt;br /&gt;
=Мониторинг ISIS=&lt;br /&gt;
 show isis interface            | L = 3 = L1 / L2 router&lt;br /&gt;
 show isis adjacency&lt;br /&gt;
 show isis spf log&lt;br /&gt;
 show isis statistics&lt;br /&gt;
 show isis route&lt;br /&gt;
 show isis database extensive&lt;br /&gt;
&lt;br /&gt;
=Дополнительная информация=&lt;br /&gt;
*[[OSPF]]&lt;br /&gt;
*[[BGP]]&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=BGP&amp;diff=2064</id>
		<title>BGP</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=BGP&amp;diff=2064"/>
		<updated>2021-07-15T18:43:29Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#description2:BGP в Juniper. Состояния соседства BGP. Сообщения. Атрибуты BGP. Local preference. AS Path. Next-hop. Communities. Механизмы управления трафиком. Multipath. Multihop. Route Reflection. Confederations. Route damping. Blackhole. }}&lt;br /&gt;
BGP - протокол маршрутизации между AS. Path-vector protocol. &lt;br /&gt;
&lt;br /&gt;
'''IBGP''' - соседство внутри AS. Соседство строится обычно на Lo адресах.&lt;br /&gt;
&lt;br /&gt;
'''EBGP''' - соседство между разными AS. Соседство строится на p2p адресах.&lt;br /&gt;
&lt;br /&gt;
Поддерживает аутентификацию: MD5. Можно настроить key-chain, с указанием когда какой ключ использовать. Аутентификация применяется на разных уровнях protocols bgp. &lt;br /&gt;
=Состояния соседства=&lt;br /&gt;
http://habrastorage.org/getpro/habr/post_images/442/780/549/442780549c2f45cdda10773121b2800d.png&lt;br /&gt;
&lt;br /&gt;
Для установления соседства используется TCP:179.&lt;br /&gt;
*'''Idle''': all incoming connections - refused. Инициализация BGP ресурсов и подготовка к установлению TCP. Если роутер завис в состоянии Idle - проверить наличие маршрута к соседу.&lt;br /&gt;
*'''Connect''': процесс установления TCP сессии. Роутер слушает TCP 179. Если сессия установилась, то роутер отправляет Open message и переходит в OpenSent состояние. Если TCP не установилась, то роутер переходит в Active состояние и запускает заново ConnectRetryTimer.&lt;br /&gt;
*'''Active''': local router становится активным инициатором TCP-сессии. В состоянии Active - когда ответил на прилетевший TCP. Если роутер завис в Active, проверяем: связность, прохождение по tcp:179, корректность настройки BGP с двух сторон.&lt;br /&gt;
*'''OpenSent''': Open отправлен локальным роутером и роутер ждет ответа (Open) от соседа. &lt;br /&gt;
*'''OpenConfirm''': Open сообщение получено от соседа и роутер ждет Keepalive или Notification message. Если от соседа не приходит keepalive до истечения hold timer, то роутер генерирует Notification message, с инфо, что hold timer expired и переведет сессию в Idle. Если keepalive получен, то соседство переходит в Established state.&lt;br /&gt;
*'''Established''': BGP сессия установлена, пиры начинают обмениваться информацией, используя: Update, Keepalive, Notification сообщений. &lt;br /&gt;
&lt;br /&gt;
Hold timer может быть разным у пиров. При установлении сессии будет выбран наименьший.&lt;br /&gt;
&lt;br /&gt;
==Tips==&lt;br /&gt;
Если сессия установилась в Established, но через какое-то время перешла в Idle по Hold timer expared (скорее всего через 90sec = 3*keepalive), то первым делом проверьте MTU на канале между роутерами. &lt;br /&gt;
&lt;br /&gt;
Если MTU где-то по пути зарезан/не соответствует MTU на интерфейсах bgp-пиров, можно либо решить вопрос с MTU на найденном проблемном участке, либо можно установить для сессии вручную размер mss (maximum segment size):&lt;br /&gt;
 set protocols bgp group clients neighbor 1.1.1.1 tcp-mss 1470&lt;br /&gt;
&lt;br /&gt;
Признаки подобной проблемы в логах:&lt;br /&gt;
 Jan 1 00:18:18.553797 bgp_io_mgmt_cb:1777: NOTIFICATION sent to 1.1.1.1 (Internal AS 64777): code 4 (Hold Timer Expired Error), Reason: holdtime expired for 1.1.1.1 (Internal AS 64777), socket buffer sndcc: 0 rcvcc: 0 TCP state: 4, snd_una: 733415251 snd_nxt: 733415251 snd_wnd: 16384 rcv_nxt: 4248562819 rcv_adv: 4248579203, hold timer 90s, hold timer remain 0s, last sent 6s, TCP port (local 52746, remote 179)&lt;br /&gt;
 Jan 1 00:18:18.553889 BGP SEND message type 3 (Notification) length 21&lt;br /&gt;
 Jan 1 00:18:18.553901 BGP SEND Notification code 4 (Hold Timer Expired Error) subcode 0 (unused)&lt;br /&gt;
 Jan 1 00:18:18.554014 bgp_peer_close_and_restart: closing peer 1.1.1.1 (Internal AS 64777), state is 7 (Established) event HoldTime&lt;br /&gt;
 Jan 1 00:18:18.554064 RPD_BGP_NEIGHBOR_STATE_CHANGED: BGP peer 1.1.1.1 (Internal AS 64777) changed state from Established to Idle (event HoldTime) (instance master)&lt;br /&gt;
&lt;br /&gt;
=Сообщения=&lt;br /&gt;
Все сообщения имеют '''Header'''&lt;br /&gt;
 0                   1                   2                   3&lt;br /&gt;
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1&lt;br /&gt;
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
 |                                                               |&lt;br /&gt;
 +                                                               +&lt;br /&gt;
 |                                                               |&lt;br /&gt;
 +                                                               +&lt;br /&gt;
 |                           Marker                              |&lt;br /&gt;
 +                                                               +&lt;br /&gt;
 |                                                               |&lt;br /&gt;
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
 |          Length               |      Type     |&lt;br /&gt;
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&lt;br /&gt;
&lt;br /&gt;
BGP header содержит: &lt;br /&gt;
:*'''marker''' - 16 октетов, установлены в &amp;quot;1&amp;quot;. Обозначает, что это bgp-пакет&lt;br /&gt;
:*'''lenght''' - размер пакета (16bit)&lt;br /&gt;
:*'''type''' - тип сообщения&lt;br /&gt;
:** 1 - OPEN&lt;br /&gt;
:** 2 - UPDATE&lt;br /&gt;
:** 3 - NOTIFICATION&lt;br /&gt;
:** 4 - KEEPALIVE&lt;br /&gt;
:**5 - ROUTE-REFRESH [определен в RFC 2918]&lt;br /&gt;
&lt;br /&gt;
'''Типы пакетов:'''&lt;br /&gt;
*'''Open''' (type 1) - отправляется только на стадии установления соседства. Содержит параметры BGP соседа: AS, auth-type (+ ключ, если есть аутентификация).&lt;br /&gt;
*'''Update''' (type 2) - передает info о добавлении или удалении маршрутов между соседями. Update содержит в себе Path, его атрибуты и вложенные префиксы, у которых эти атрибуты одинаковые. Не отправляются по таймеру, приходят, только когда изменился сам префикс, его атрибуты или BGP-сессия. В зависимости от policy, на локальном роутере, часть routing info может быть отброшена и помещена в hidden.&lt;br /&gt;
*'''Notification''' (type 3) - в случае если что-то пошло не так: не прошел keepalive или update, пришла не поддерживаемая опция, ... Существуют стандартизированные коды ошибок (operation code | opcode). Пакет состоит из header + opcode+subcode + data (описание ошибки - для диагностики).&lt;br /&gt;
*'''Keepalive''' (type 4)- для удостоверения, что с соседством все ok. Отправляется каждые 30 sec. По дефолту hold-timer = 3 * keepalive = 90sec - время, после которого соседи рушат соседство (если в это время не пролетело ни одного keepalive). Можно выставить holdtimer = 0. Если у одного соседа = 0, у другого нет, то будет согласовано ненулевое значение holdtimer для сессии.&lt;br /&gt;
{{note|text=keepalive message = BGP header без payload}}&lt;br /&gt;
*'''Refresh''' - soft clearing BGP сессии.&lt;br /&gt;
&lt;br /&gt;
=BGP Operations=&lt;br /&gt;
BGP хранит маршруты в трех местах:&lt;br /&gt;
*Adjacency-RIB-IN: все полученные маршруты от пиров&lt;br /&gt;
*RIB-Local: маршруты локального роутера, используемые для передачи трафика. Тут хранятся только активные маршруты.&lt;br /&gt;
*Adjacency-RIB-OUT: маршруты, которые будут отправляться пирам. Передаваться могут только активные маршруты. ('''advertise-inactive''' исправляет данную ситуацию).&lt;br /&gt;
&lt;br /&gt;
Передача маршрутов производится по правилам (чтобы избежать routing loops):&lt;br /&gt;
#IBGP пиры передают маршруты, полученные от EBGP другим IBGP пирам.&lt;br /&gt;
#EBGP пиры передают маршруты, полученные от EBGP и IBGP другим EBGP пирам&lt;br /&gt;
#IBGP пиры не передают маршруты, полученные от других IBGP пиров. Поэтому для того, чтобы получить всю маршрутную информацию, требуется full-mesh связность. Либо использование RR.&lt;br /&gt;
&lt;br /&gt;
По умолчанию IBGP пиры не меняют next-hop для маршрутов, полученных от EBGP.&lt;br /&gt;
&lt;br /&gt;
Решается:&lt;br /&gt;
* настройкой '''next-hop self''' в рамках export policy к remote PE/RR.&lt;br /&gt;
* добавить p2p интерфейс с EBGP пиром в IGP как passive.&lt;br /&gt;
* анонс p2p сети по IGP. Export policy для IGP протокола.&lt;br /&gt;
* настройки статического маршрута на каждом IBGP до удаленного EBGP пира.&lt;br /&gt;
* настроить IGP соседство с EBGP пиром.&lt;br /&gt;
&lt;br /&gt;
=Атрибуты (BGP attributes)=&lt;br /&gt;
Включаются в Update сообщения и описывают BGP префиксы. Атрибуты используются для выбора активного пути.&lt;br /&gt;
 Атрибуты, при выборе best, считаются лучшими с наименьшими значением&lt;br /&gt;
 Это правило касается всех атрибутов, кроме Local Preference&lt;br /&gt;
&lt;br /&gt;
Атрибуты пути разделены на 4 категории:&lt;br /&gt;
# '''Well-known mandatory''' — все маршрутизаторы, работающие по протоколу BGP, должны распознавать эти атрибуты. Должны присутствовать во всех обновлениях (update).&lt;br /&gt;
# '''Well-known discretionary''' — все маршрутизаторы, работающие по протоколу BGP, должны распознавать эти атрибуты. Могут присутствовать в обновлениях (update), но их присутствие не обязательно.&lt;br /&gt;
# '''Optional transitive''' — могут не распознаваться всеми реализациями BGP. Если маршрутизатор не распознал атрибут, он помечает обновление как частичное (partial) и отправляет его дальше соседям, сохраняя не распознанный атрибут.&lt;br /&gt;
# '''Optional non-transitive''' — могут не распознаваться всеми реализациями BGP. Если маршрутизатор не распознал атрибут, то атрибут игнорируется и при передаче соседям отбрасывается.&lt;br /&gt;
&lt;br /&gt;
==Local preference==&lt;br /&gt;
 '''✔️Well-known Discretionary'''&lt;br /&gt;
* Указывает маршрутизаторам внутри автономной системы как выйти за её пределы. &lt;br /&gt;
* Больший приоритет выигрывает.&lt;br /&gt;
* Этот атрибут передается только в пределах одной автономной системы =&amp;gt; работает только для IBGP.&lt;br /&gt;
* На маршрутизаторах Cisco и Juniper по умолчанию значение атрибута — 100.&lt;br /&gt;
* Если EBGP-сосед получает обновление с выставленным значением local preference, он игнорирует этот атрибут.&lt;br /&gt;
* В Junos lpf можно задать через policy и в protocol bgp. Если задан обоими способами, то будет назначен lpf из policy.&lt;br /&gt;
* Обычно используется на бордерах.&lt;br /&gt;
{{note|text=Когда в сети есть 2 бордера, которые получают один и тот же маршрут извне, и бордеры навешивают одинаковый повышенный lpf через export policy, в таком случае  соседи IBGP получат маршрут с измененным lpf, но трафик не сможет по-правильному пути выйти из AS. Из-за того что бордеры тоже друг от друга будут получать маршрут с повышенным lpf. Решение: правильно менять lpf через import policy. }}&lt;br /&gt;
&lt;br /&gt;
==Autonomous system path==&lt;br /&gt;
 '''✔️Well-known Mandatory'''&lt;br /&gt;
* Описывает через какие автономные системы надо пройти, чтобы дойти до сети назначения. &lt;br /&gt;
* Номер AS добавляется при передаче обновления из одной AS eBGP-соседу в другой AS.&lt;br /&gt;
&lt;br /&gt;
Используется для:&lt;br /&gt;
* обнаружения петель&lt;br /&gt;
* влияние на path selection с помощью prepending (делается через export policy)&lt;br /&gt;
 set protocols bgp group int export longer-as-path&lt;br /&gt;
 set policy-options policy-statement longer-as-path term 1 then as-path-prepend &amp;quot;1111 1111 1111&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 show route advertising-protocol bgp 10.200.86.2 &lt;br /&gt;
 inet.0: 32 destinations, 32 routes (32 active, 0 holddown, 0 hidden)&lt;br /&gt;
  Prefix		  Nexthop	       MED     Lclpref    AS path&lt;br /&gt;
 * 172.17.0.0/24           Self                         100        '''1111 1111 1111 [1111] I'''&lt;br /&gt;
&lt;br /&gt;
'''Обозначение:'''&lt;br /&gt;
* [] - local AS&lt;br /&gt;
* {} - AS sets - группы AS, порядок не имеет значение. Возникает при агрегировании маршрутов.&lt;br /&gt;
* () - confederation&lt;br /&gt;
* ([]) - confederation sets&lt;br /&gt;
&lt;br /&gt;
Каждый сегмент атрибута AS path представлен в виде поля TLV (path segment type, path segment length, path segment value):&lt;br /&gt;
* '''path segment type''' — поле размером 1 байт для которого определены такие значения:&lt;br /&gt;
** 1 — AS_SET: неупорядоченное множество автономных систем, через которые прошел маршрут в сообщении Update,&lt;br /&gt;
** 2 — AS_SEQUENCE: упорядоченное множество автономных систем, через которые прошел маршрут в сообщении Update&lt;br /&gt;
* '''path segment length''' — поле размером 1 байт. Указывает сколько автономных систем указано в поле path segment value&lt;br /&gt;
* '''path segment value''' — номера автономных систем, каждая представлена полем размером 2 байта.&lt;br /&gt;
&lt;br /&gt;
===Операторы регулярных выражений===&lt;br /&gt;
{{re|title=&amp;lt;sub&amp;gt;Список регулярных выражений для AS Path&amp;lt;/sub&amp;gt;|Список регулярных выражений для AS Path}}&lt;br /&gt;
. - любой знак (одна точка - один любой знак, 3 точки - три любых символа).&lt;br /&gt;
&lt;br /&gt;
==Next-hop==&lt;br /&gt;
 '''✔️Well-known Mandatory'''&lt;br /&gt;
* Это IP-адрес eBGP-маршрутизатора, через который идет путь к сети назначения.&lt;br /&gt;
* Атрибут меняется при передаче префикса в другую AS (по-умолчанию подставляется ip-адрес bgp-соседа)&lt;br /&gt;
* Атрибут не меняется при передаче префикса в ту же AS&lt;br /&gt;
&lt;br /&gt;
===Next-hop resolution===&lt;br /&gt;
* '''Next-hop self'''&lt;br /&gt;
* '''Export direct into IGP:''' проанонсировать p2p сеть с EBGP peer, который прислал префикс.&lt;br /&gt;
* '''IGP passive interface:''' интерфейс в сторону EBGP соседа.&lt;br /&gt;
* '''Static routes:''' тут возникает проблема с тем, что придется на всех IBGP роутерах прописывать этот маршрут. Лучше выбрать другой способ.&lt;br /&gt;
* '''IGP adjacency on inter-AS links to EBGP peers:''' тоже плохой вариант. Опсано и зачем тогде вообще разные AS. Лучше выбрать другой способ.&lt;br /&gt;
&lt;br /&gt;
Можно изменить с помощью policy на выходе (export к IBGP):&lt;br /&gt;
 set policy-options policy-statement nexthop-self term localpref then next-hop self&lt;br /&gt;
&lt;br /&gt;
Или же на входе (import от EBGP peer):&lt;br /&gt;
 set policy-options policy-statement nexthop-peer term localpref then next-hop ''peer-address''&lt;br /&gt;
&lt;br /&gt;
==Origin==&lt;br /&gt;
 '''✔️Well-known Mandatory'''&lt;br /&gt;
Атрибут '''Origin''' — указывает на то, каким образом был получен маршрут в обновлении. Меняется с помощью policy.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Возможные значения атрибута&lt;br /&gt;
|-&lt;br /&gt;
|'''0'''&lt;br /&gt;
|IGP&lt;br /&gt;
|NLRI получена внутри исходной автономной системы&lt;br /&gt;
|-&lt;br /&gt;
|'''1'''&lt;br /&gt;
| EGP&lt;br /&gt;
| NLRI выучена по протоколу Exterior Gateway Protocol (EGP) - протокол уже давно не используется.&lt;br /&gt;
|-&lt;br /&gt;
|'''2'''&lt;br /&gt;
| Incomplete&lt;br /&gt;
| NLRI была выучена каким-то другим образом, скорей  всего через redistribution.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Atomic aggregate==&lt;br /&gt;
 '''✔️Well-known Discretionary'''&lt;br /&gt;
&lt;br /&gt;
==Aggregator==&lt;br /&gt;
 '''✔️Optional Transitive'''&lt;br /&gt;
&lt;br /&gt;
==Communities==&lt;br /&gt;
 '''✔️Optional Transitive'''&lt;br /&gt;
* Тегирование маршрутов&lt;br /&gt;
* Существуют предопределенные значения (well-known), которые не требуется определять локально на своем оборудовании&lt;br /&gt;
* По умолчанию не пересылаются соседям&lt;br /&gt;
* Одному маршруту может быть присвоено несколько communities&lt;br /&gt;
*Community могут быть критерием в policy для изменения других атрибутов BGP, например lpf.&lt;br /&gt;
* Один из вариантов применения: передается соседней AS для управления входящим трафиком&lt;br /&gt;
&lt;br /&gt;
Значения от 0x00000000 до 0x0000FFFF и от 0xFFFF0000 до 0xFFFFFFFF зарезервированы.&lt;br /&gt;
&lt;br /&gt;
Как правило community отображаются в формате ASN:VALUE.&lt;br /&gt;
В таком формате, доступны для использования community от 1:0 до 65534:65535.&lt;br /&gt;
В первой части указывается номер автономной системы, а во второй значение community, которое определяет политику маршрутизации трафика.&lt;br /&gt;
&lt;br /&gt;
Некоторые значения communities предопределены. RFC1997 определяет три значения таких community. Эти значения должны одинаково распознаваться и обрабатываться всеми реализациями BGP, которые распознают атрибут community.&lt;br /&gt;
&lt;br /&gt;
Если маршрутизатор получает маршрут, в котором указано предопределенное значение communities, то он выполняет специфическое, предопределенное действие основанное на значении атрибута.&lt;br /&gt;
&lt;br /&gt;
Предопределенные значения communities (Well-known Communities):&lt;br /&gt;
&lt;br /&gt;
===no-export (0xFFFFFF01)===&lt;br /&gt;
Все маршруты которые передаются с таким значением атрибута community не должны анонсироваться за пределы AS.&lt;br /&gt;
То есть, маршруты не анонсируются EBGP-соседям, но анонсируются внешним соседям в конфедерации.&lt;br /&gt;
&lt;br /&gt;
'''Пример использования'''&lt;br /&gt;
{{note|text=AS1 подключена к AS2 двумя линками (multinoming). AS1 анонсирует '''172.17.0/16''' в AS2. Для оптимальной маршрутизации, AS1 хочет посылать некоторые более специфичные маршруты через один из этих линков, при этом остальному интернету вовсе не обязательно получать эти специфики. Для этой цели AS1 использует community no-export, и посылает '''172.17.0/17''' в один из стыков с AS2, и '''172.17.128/17''' во второй стык. AS2 видит эти маршруты и выбирает их как более специфичные. Кроме того, эти маршруты видят все iBGP-соседи в пределах AS2. Тем не менее, за пределы AS2 в Интернет анонсируется только '''172.17.0/16'''.}}&lt;br /&gt;
{{note|text= AS customer имеет 2 ISP (AS1, AS2).  AS1 - основной. Если AS customer хочет получать выход в инет только через AS1, то в сторону AS2 можно просто посылать маршруты с no-export. Но при этом важно, что при падении AS1, AS customer будет доступна только локальным пользователям AS2, но не всему интернету.}}&lt;br /&gt;
===no-advertise (0xFFFFFF02)=== &lt;br /&gt;
Все маршруты которые передаются с таким значением атрибута community не должны анонсироваться другим BGP-соседям.&lt;br /&gt;
&lt;br /&gt;
===no-export-subconfed (0xFFFFFF03)===&lt;br /&gt;
Все маршруты которые передаются с таким значением атрибута community не должны анонсироваться внешним BGP-соседям (ни внешним для конфедерации, ни настоящим внешним соседям). В Cisco это значение встречается и под названием local-as.&lt;br /&gt;
{{note|text=Маршрутизаторы, которые не поддерживают атрибут community, будут передавать его далее, так как это transitive атрибут.}}&lt;br /&gt;
&lt;br /&gt;
 set policy-options policy-statement community ''test-community'' members ''[65510:555 65610:999]''     - [x and y]&lt;br /&gt;
 set policy-options policy-statement ''test'' term ''1'' then community (add|set|delete) ''test-community''&lt;br /&gt;
&lt;br /&gt;
 set policy-options policy-statement community ''all-community'' members '' &amp;quot;*:*&amp;quot; ''&lt;br /&gt;
&lt;br /&gt;
С communities широко используются регулярные выражения.&lt;br /&gt;
&lt;br /&gt;
===Примеры===&lt;br /&gt;
&lt;br /&gt;
100:* - all posible community values with AS 100.&lt;br /&gt;
&lt;br /&gt;
11.1:666 - 1101:666, 1111:666, 1121:666, etc.&lt;br /&gt;
&lt;br /&gt;
 show route community *:20&lt;br /&gt;
 show route community-name ''community-test'' detail&lt;br /&gt;
&lt;br /&gt;
===Список операторов регулярных выражений для Community===&lt;br /&gt;
{{re|title=Список операторов регулярных выражений для Community}}&lt;br /&gt;
&lt;br /&gt;
===Действия с community===&lt;br /&gt;
*add - добавляет к текущим community префикса указанное community&lt;br /&gt;
*delete - удаляет только указанное community&lt;br /&gt;
*set - заменяет существующие community на указанное&lt;br /&gt;
&lt;br /&gt;
==Multi exit discriminator (MED)==&lt;br /&gt;
&lt;br /&gt;
 '''✔️Optional Non-transitive'''&lt;br /&gt;
&lt;br /&gt;
* Используется для информирования eBGP-соседей о том, какой путь в автономную систему более предпочтительный. &lt;br /&gt;
* Атрибут передается между автономными системами, но в Junos передается только EBGP пиру и не распространяется дальше по AS.&lt;br /&gt;
* Маршрутизаторы внутри соседней автономной системы используют этот атрибут, но, как только обновление выходит за пределы AS, атрибут MED отбрасывается.&lt;br /&gt;
* Чем меньше значение атрибута, тем более предпочтительна точка входа в автономную систему.&lt;br /&gt;
* Исходя из названия - используется только в тех случаях, когда между AS есть несколько линков.&lt;br /&gt;
*Можно использовать для балансировки.&lt;br /&gt;
&lt;br /&gt;
Сравнение MED (при прочих равных) происходит если один и тот же префикс приходит от одной AS. &lt;br /&gt;
&lt;br /&gt;
Если будет анонс этого префикса с более низким MED, но из другой AS, то он не будет рассматриваться как вероятный вариант для использования. &lt;br /&gt;
&lt;br /&gt;
Это дефолтное поведение, которое можно изменить с помощью:&lt;br /&gt;
*''always-compare-med'': при этом не будет иметь значение разные AS или одна, просто активным станет маршрут с самым низким MED.&lt;br /&gt;
*''cisco-non-determenistic'': выбор основан на том, когда маршрут пришел. Juniper не рекомендует использовать.&lt;br /&gt;
&lt;br /&gt;
MED назначается с помощью policy.&lt;br /&gt;
===Возможные операции с MED===&lt;br /&gt;
Внутри policy ''metric'' - это обозначение MED атрибута.&lt;br /&gt;
&lt;br /&gt;
Можно использовать как в ''from'', так и в ''then''. ''Then'': назначение метки - ''metric 50'', добавить к существующей метки - ''metric add 50'', вычесть из ''metric subtract 50''.&lt;br /&gt;
&lt;br /&gt;
MED можно назначить внутри ''protocols bgp'':&lt;br /&gt;
&lt;br /&gt;
 [edit protocols bgp group AS-100]&lt;br /&gt;
    type external&lt;br /&gt;
    local-as 200&lt;br /&gt;
    neighbor 1.1.1.1 metric-out 50                    &amp;lt;= определенное значение&lt;br /&gt;
    neighbor 2.2.2.2 metric-out igp                   &amp;lt;= текущаф IGP метрика&lt;br /&gt;
    neighbor 3.3.3.3 metric-out minimum-igp           &amp;lt;= миимальная IGP мтерика, когда-либо изученная&lt;br /&gt;
    neighbor 4.4.4.4 metric-out igp 5                 &amp;lt;= добавит или вычесть из IGP метрики&lt;br /&gt;
&lt;br /&gt;
MED также можно назначить аналогичным образом через policy:&lt;br /&gt;
&lt;br /&gt;
 [edit policy-optinos policy-sttement new-metric]&lt;br /&gt;
    term IGP&lt;br /&gt;
       then metric igp ''offset''&lt;br /&gt;
    term minimum-igp&lt;br /&gt;
       then metric minimum-igp ''offset''&lt;br /&gt;
&lt;br /&gt;
При использовании ''metric igp'' на префикс вешается MED, равный IGP метрики до роутера, который прислал этот префикс. При изменениях IGP metric, будет меняться и MED.&lt;br /&gt;
&lt;br /&gt;
При использовании ''metric minimum-igp'' MED не будет меняться при изменениях IGP метрики.&lt;br /&gt;
&lt;br /&gt;
При агрегировании маршрутов - MED становится = 0.&lt;br /&gt;
&lt;br /&gt;
Если между роутерами передаются агрегированный маршрут и вложенный в него в MED, то вложенный будет передан с MED, а агрегированный - с MED = 0.&lt;br /&gt;
&lt;br /&gt;
Это дефолтное поведение и альтернатив этому нет.&lt;br /&gt;
&lt;br /&gt;
==Weight (проприетарный атрибут Cisco)==&lt;br /&gt;
Атрибут '''Weight''': &lt;br /&gt;
* Позволяет назначить &amp;quot;вес&amp;quot; различным путям локально на маршрутизаторе. &lt;br /&gt;
* Используется в тех случаях, когда у одного маршрутизатора есть несколько выходов из автономной системы (сам маршрутизатор является точкой выхода). &lt;br /&gt;
* Имеет значение только локально, в пределах маршрутизатора. &lt;br /&gt;
* Не передается в обновлениях.&lt;br /&gt;
* Чем больше значение атрибута, тем более предпочтителен путь выхода.&lt;br /&gt;
&lt;br /&gt;
=Механизмы управления трафиком=&lt;br /&gt;
==Входящим==&lt;br /&gt;
*AS path prepend&lt;br /&gt;
*Community (если поддерживает провайдер)&lt;br /&gt;
*MED (подключение к одной и той же AS)&lt;br /&gt;
*Анонс разных префиксов через разных ISP&lt;br /&gt;
&lt;br /&gt;
==Исходящим==&lt;br /&gt;
*Проприетарный атрибут Cisco weight (локально на маршрутизаторе)&lt;br /&gt;
*Local Preference (локально в AS)&lt;br /&gt;
*Косвенно можно политикой навешивать med на префиксы от пира и в зависимости от этого будет также регулироваться исходящий трафик.&lt;br /&gt;
&lt;br /&gt;
=Выбор лучшего пути (BGP Active Route Selection)=&lt;br /&gt;
# Проверяем, что резолвится next-hop (без это маршрут и активным то не будет :/ )&lt;br /&gt;
# Route Preference (Admin distance)&lt;br /&gt;
# БОльший local preference (''Inactive reason: '''Local Preference''''')&lt;br /&gt;
# Кратчайший AS-path (''Inactive reason: '''AS path''''')&lt;br /&gt;
# Меньший Origin value (''Inactive reason: '''Origin''''')&lt;br /&gt;
# Меньший MED value (''Inactive reason: '''Route Metric or MED comparison''''')&lt;br /&gt;
# EBGP peer предпочтительней IBGP peer (''Inactive reason: '''Interior &amp;gt; Exterior &amp;gt; Exterior via Interior''''')&lt;br /&gt;
# C кратчайшей IGP метрикой к Protocol next-hop (''Inactive reason: '''Not Best in its group – IGP metric''''')&lt;br /&gt;
# Если префикс получен по IBGP, то используем префикс от пира с наименьшим RID (''Inactive reason: '''Not Best in its group – Router ID''''')&lt;br /&gt;
# Если префикс получен по EBGP, то используем более старый активный префикс (считается более стабильным) (''Inactive reason: '''Not Best in its group – Active preferred''''')&lt;br /&gt;
# При использовании RR: кратчайший cluster list length (''Inactive reason: '''Not Best in its group – Cluster list length''''')&lt;br /&gt;
# Наименьший router-ID (''Inactive reason: '''Not Best in its group – Router ID''''')&lt;br /&gt;
# Наименьший Source IP address (''Inactive reason: '''Not Best in its group - Update source''''') &lt;br /&gt;
&lt;br /&gt;
В Juniper можно посмотреть причину неактивности маршрута: ''Inactive reason'' в выводе ''sh route protocol bgp x.x.x.x extensive''&lt;br /&gt;
&lt;br /&gt;
Дефолтное поведение для EBGP маршрутов может быть изменено: '''path-selection external-router-id'''. При включении этой функции для роутера выбор активного EBGP маршрута от разных роутеров будет делаться по наименьшему router-id.&lt;br /&gt;
&lt;br /&gt;
*Route Preference (Admin distance) - не передается по ibgp, ebgp. Может только навешиваться через import-policy или в настройках bgp на любом уровне иерархии.&lt;br /&gt;
&lt;br /&gt;
=Multipath=&lt;br /&gt;
Один и тот же маршрут прилетает с двух пиров одной AS или несколько копий маршрута прилетает с одного пира. Активный маршрут будет вставлен в routing table с несколькими next-hop и трафик будет балансироваться между двумя пирами (в forwarding table все же будет вставляться один next-hop). Для inactive маршрутов будет указан один next-hop. Multipath не вставит маршруты с одинаковым MED-plus-IGP cost, при разных IGP метриках до пиров. На роутере глобально должен быть включен load-balancing.&lt;br /&gt;
&lt;br /&gt;
При включенном multipath, алгоритм выбора лучшего пути игнорирует router ID и peer ID. &lt;br /&gt;
&lt;br /&gt;
До включения:&lt;br /&gt;
 mortlach&amp;gt; show route protocol bgp terse    &lt;br /&gt;
 inet.0: 30 destinations, 34 routes (30 active, 0 holddown, 0 hidden)&lt;br /&gt;
 + = Active Route, - = Last Active, * = Both&lt;br /&gt;
 A Destination        P Prf   Metric 1   Metric 2  Next hop	AS path&lt;br /&gt;
 	* 172.17.0.0/24	B 170	100	&amp;gt;192.168.86.21	I&lt;br /&gt;
 			B 170	100	&amp;gt;192.168.86.42	I&lt;br /&gt;
 	* 172.17.1.0/24	B 170	100	&amp;gt;192.168.86.21	I&lt;br /&gt;
 			B 170	100	&amp;gt;192.168.86.42	I&lt;br /&gt;
 	* 172.17.2.0/24	B 170	100	&amp;gt;192.168.86.21	I&lt;br /&gt;
 			B 170	100	&amp;gt;192.168.86.42	I&lt;br /&gt;
 	* 172.17.3.0/24	B 170	100	&amp;gt;192.168.86.21	I&lt;br /&gt;
 			B 170	100	&amp;gt;192.168.86.42	I&lt;br /&gt;
 mortlach&amp;gt; show route forwarding-table destination 172.17.0.0/24    &lt;br /&gt;
 Routing table: default.inet&lt;br /&gt;
 Internet:&lt;br /&gt;
 Destination	Type	RtRef	Next hop	Type Index NhRef Netif&lt;br /&gt;
 172.17.0.0/24	user	0			indr 262142     5&lt;br /&gt;
 				192.168.86.21      ucst   547     5 '''ge-0/0/0.90 - выбран активным, из-за меньшего router-ID (10.200.86.4 vs 10.200.86.8)'''&lt;br /&gt;
&lt;br /&gt;
После:&lt;br /&gt;
 mortlach&amp;gt; show route protocol bgp terse&lt;br /&gt;
 inet.0: 30 destinations, 34 routes (30 active, 0 holddown, 0 hidden)&lt;br /&gt;
 + = Active Route, - = Last Active, * = Both&lt;br /&gt;
 A Destination        P Prf   Metric 1   Metric 2 Next hop AS path&lt;br /&gt;
 	* 172.17.0.0/24	B 170	100	192.168.86.21	I&lt;br /&gt;
 					&amp;gt;192.168.86.42&lt;br /&gt;
 			B 170	100	&amp;gt;192.168.86.42	I&lt;br /&gt;
 	* 172.17.1.0/24	B 170	100	192.168.86.21	I&lt;br /&gt;
 					&amp;gt;192.168.86.42&lt;br /&gt;
 			B 170	100	&amp;gt;192.168.86.42	I&lt;br /&gt;
 	* 172.17.2.0/24	B 170	100	192.168.86.21	I&lt;br /&gt;
 					&amp;gt;192.168.86.42&lt;br /&gt;
 			B 170	100	&amp;gt;192.168.86.42	I&lt;br /&gt;
 	* 172.17.3.0/24	B 170	100	192.168.86.21	I&lt;br /&gt;
 					&amp;gt;192.168.86.42&lt;br /&gt;
 			B 170	100	&amp;gt;192.168.86.42	I&lt;br /&gt;
 &lt;br /&gt;
 mortlach&amp;gt; show route forwarding-table destination 172.17.0.0/24    &lt;br /&gt;
 Routing table: default.inet&lt;br /&gt;
 Internet:&lt;br /&gt;
 Destination        Type RtRef Next hop           Type Index NhRef Netif&lt;br /&gt;
 172.17.0.0/24      user     0      indr 262143     5&lt;br /&gt;
  192.168.86.42      ucst   588     7 '''ge-0/0/0.50''' - '''изменился, т.к. router ID уже не влияет на выбор лучшего пути'''&lt;br /&gt;
&lt;br /&gt;
==Link Bandwidth Extended Community==&lt;br /&gt;
При включенном multipath можно задать желаемую балансировку между линками через extended community.&lt;br /&gt;
Это механизм описан в draft-ietf-idr-link-bandwidth-06, и не является стандартизированным, следовательно, возможно, он не будет работать с некоторыми вендорами. В JunOS поддерживается.&lt;br /&gt;
&lt;br /&gt;
Позволяет делать балансировку пропорционально заданным в community скоростям.&lt;br /&gt;
&lt;br /&gt;
Пример использования:&lt;br /&gt;
&lt;br /&gt;
R1 и R2 соединены напрямую через два сабинтерфейса, на каждом из которых висит своя /30 сеть&lt;br /&gt;
&lt;br /&gt;
 |     | ge-0/0/0.10 ----- ge-0/0/0.10 |    |&lt;br /&gt;
 |  R1 |                               | R2 |&lt;br /&gt;
 |     | ge-0/0/0.20 ----- ge-0/0/0.20 |    |&lt;br /&gt;
&lt;br /&gt;
Конфиг R1:&lt;br /&gt;
 R1&amp;gt; show configuration protocols bgp &lt;br /&gt;
 group ebgp {&lt;br /&gt;
     multipath;&lt;br /&gt;
     neighbor 10.1.0.2 {&lt;br /&gt;
         description R2;&lt;br /&gt;
         export from-direct;&lt;br /&gt;
         peer-as 2222;}&lt;br /&gt;
     neighbor 10.2.0.2 {&lt;br /&gt;
         description R2;&lt;br /&gt;
         export from-direct;&lt;br /&gt;
         peer-as 2222;}}&lt;br /&gt;
&lt;br /&gt;
Конфиг R2:&lt;br /&gt;
 set interfaces lo0 unit 0 family inet address 2.2.2.2/32&lt;br /&gt;
 &lt;br /&gt;
 set policy-options policy-statement bw20 then community add bw20&lt;br /&gt;
 set policy-options policy-statement bw80 then community add bw80&lt;br /&gt;
&lt;br /&gt;
 set policy-options policy-statement from-direct term redistribute-direct from protocol direct&lt;br /&gt;
 set policy-options policy-statement from-direct term redistribute-direct then accept&lt;br /&gt;
 set policy-options policy-statement from-direct term default then reject&lt;br /&gt;
&lt;br /&gt;
 set policy-options community bw20 members bandwidth:2222:2500000; '''// 2500000 байт в секунду — это 20% от 100Мегабит'''&lt;br /&gt;
 set policy-options community bw80 members bandwidth:2222:10000000; '''// 10000000 байт в секунду — это 80% от 100Мегабит'''&lt;br /&gt;
 &lt;br /&gt;
 R2&amp;gt; show configuration protocols bgp &lt;br /&gt;
 group ebgp {&lt;br /&gt;
     neighbor 10.1.0.1 {&lt;br /&gt;
         description R1;&lt;br /&gt;
         export [ bw20 from-direct ]; '''// На одно из  соседств навешивается community bw20'''&lt;br /&gt;
         peer-as 1111;}&lt;br /&gt;
     neighbor 10.2.0.1 {&lt;br /&gt;
         description R1;&lt;br /&gt;
         export [ bw80 from-direct ]; '''// На второе соседство навешивается community bw80'''&lt;br /&gt;
         peer-as 1111;}}&lt;br /&gt;
&lt;br /&gt;
Что получилось:&lt;br /&gt;
&lt;br /&gt;
 R1&amp;gt; show route 2.2.2.2 extensive        &lt;br /&gt;
 &lt;br /&gt;
 inet.0: 11 destinations, 19 routes (11 active, 0 holddown, 0 hidden)&lt;br /&gt;
 2.2.2.2/32 (2 entries, 1 announced)&lt;br /&gt;
 TSI:&lt;br /&gt;
 KRT in-kernel 2.2.2.2/32 -&amp;gt; {10.2.0.2, 10.1.0.2}&lt;br /&gt;
        *BGP    Preference: 170/-101&lt;br /&gt;
                Next hop type: Router, Next hop index: 262145&lt;br /&gt;
                Address: 0x9404010&lt;br /&gt;
                Next-hop reference count: 8&lt;br /&gt;
                Source: 10.1.0.2&lt;br /&gt;
                '''Next hop: 10.2.0.2 via ge-0/0/0.20 balance 80%'''&lt;br /&gt;
                '''Next hop: 10.1.0.2 via ge-0/0/0.10 balance 20%, selected'''&lt;br /&gt;
                State: &amp;lt;Active Ext&amp;gt;&lt;br /&gt;
                Local AS:  1111 Peer AS:  2222&lt;br /&gt;
                Age: 1:20:49 &lt;br /&gt;
                Task: BGP_2222.10.1.0.2+179&lt;br /&gt;
                Announcement bits (1): 0-KRT &lt;br /&gt;
                AS path: 2222 I&lt;br /&gt;
                '''Communities: bandwidth:2222:2500000'''&lt;br /&gt;
                '''Accepted Multipath'''&lt;br /&gt;
                Localpref: 100&lt;br /&gt;
                Router ID: 2.2.2.2&lt;br /&gt;
&lt;br /&gt;
=Multihop=&lt;br /&gt;
Возможность поднять EBGP peering между роутерами, не имеющих прямого физического соединения. Сессия устанавливается на lo интерфейсах.&lt;br /&gt;
&lt;br /&gt;
Важно в конфиге задать multihop. В таблице маршрутизации должен быть маршрут до пира.&lt;br /&gt;
&lt;br /&gt;
При поднятии сессии на Lo интерфейсах используем:&lt;br /&gt;
*''set system default-address-selection'' - будет браться адрес lo автоматически&lt;br /&gt;
*local-address (bgp, group или neighbor) - более специфичен, поэтому если надо будет - перебьет уже настроенный default-address-selection&lt;br /&gt;
&lt;br /&gt;
TTL = 1 задаем, чтобы соседство установилось точно с одним ближайшим роутером. (либо другое значение, если роутер далеко)&lt;br /&gt;
&lt;br /&gt;
 blair&amp;gt; show route 10.200.86.4    &lt;br /&gt;
 10.200.86.4/32	*[IS-IS/18] 00:00:03, metric 10&lt;br /&gt;
 		  to 192.168.86.49 via ge-0/0/0.80&lt;br /&gt;
 		&amp;gt; to 192.168.86.17 via ge-0/0/0.100&lt;br /&gt;
Config&lt;br /&gt;
 set protocols bgp group int type internal&lt;br /&gt;
 set protocols bgp group int multihop ttl 1&lt;br /&gt;
 set protocols bgp group int local-address 10.200.86.1&lt;br /&gt;
 set protocols bgp group int neighbor 10.200.86.4 &lt;br /&gt;
&lt;br /&gt;
Т.к. между роутерами теперь 2 физических линка, то можно балансировать трафик между ними.&lt;br /&gt;
&lt;br /&gt;
=Modifying AS Path=&lt;br /&gt;
==Option 1: remove-private==&lt;br /&gt;
Диапазон: 64512 - 65534&lt;br /&gt;
&lt;br /&gt;
Роутер, на котором настроен remove-private перед передачей префиксов удаляет из AS path AS из указанного выше диапазона.&lt;br /&gt;
&lt;br /&gt;
Можно настраивать на всех уровнях: protocols bgp, group, neighbor.&lt;br /&gt;
&lt;br /&gt;
==Option 2: local-as==&lt;br /&gt;
 set routing-options autonomous-system 1111&lt;br /&gt;
 set protocols bgp group ebgp neighbor 10.1.0.2 peer-as 2222&lt;br /&gt;
 set protocols bgp group ebgp neighbor 10.1.0.2 local-as 3333&lt;br /&gt;
&lt;br /&gt;
При такой конфигурации R1, EBGP-сосед, который '''ожидает''', что у R1 будет AS3333 сможет установить соседство с R1, хотя, по факту R1 принадлежит AS1111.&lt;br /&gt;
Результат:&lt;br /&gt;
 R1&amp;gt; show bgp neighbor &lt;br /&gt;
 Peer: 10.1.0.2+179 AS 2222     Local: 10.1.0.1+62745 '''AS 3333''' &lt;br /&gt;
   Type: External    State: Established    Flags: &amp;lt;Sync&amp;gt;&lt;br /&gt;
   Last State: OpenConfirm   Last Event: RecvKeepAlive&lt;br /&gt;
   ...&lt;br /&gt;
   Holdtime: 90 Preference: 170 Localpref: 110 '''Local AS: 3333 Local System AS: 1111'''&lt;br /&gt;
   Number of flaps: 0&lt;br /&gt;
   Peer ID: 2.2.2.2         Local ID: 1.1.1.1           Active Holdtime: 90&lt;br /&gt;
   ...&lt;br /&gt;
&lt;br /&gt;
'''Зачем это нужно'''&lt;br /&gt;
&lt;br /&gt;
Предположим, оператор с AS1111 купил сеть оператора с AS3333. У AS3333 были свои клиенты, подключенные по BGP, которые не готовы или не хотят изменять конфигурацию на своих роутерах. В таком случае можно временно применить опцию local-as, чтобы выступить для них от лица предыдущей AS (в примере - 3333), но внутри сети перевести инфораструктуру на AS1111.&lt;br /&gt;
&lt;br /&gt;
Если добавить ключевое слово private:&lt;br /&gt;
 set protocols bgp group ebgp neighbor 10.1.0.2 peer-as 2222&lt;br /&gt;
 set protocols bgp group ebgp neighbor 10.1.0.2 local-as 3333 '''private'''&lt;br /&gt;
&lt;br /&gt;
То R1 вообще не будет добавлять AS3333 при анонсе маршрутов, получаемых от 10.1.0.2 своим соседям.&lt;br /&gt;
&lt;br /&gt;
==as-override==&lt;br /&gt;
 CE1 '''(AS 65500)''' &amp;lt;&amp;gt; PE (AS 1111) &amp;lt;&amp;gt; P (AS 1111) &amp;lt;&amp;gt; PE (AS 1111) &amp;lt;&amp;gt; CE2 '''(AS 65500)'''&lt;br /&gt;
&lt;br /&gt;
Если на сети ISP есть 2 сессии с пирами из одной AS, то при передаче маршрутов, полученных от одного site этой AS второму site'у, второй site не примет такой префикс, потому что в AS path будет дважды указана его AS - это routing loop. &lt;br /&gt;
 65500 1111 I   - '''роутер с AS 65500 не примет префикс с таким AS path.'''&lt;br /&gt;
&lt;br /&gt;
 set protocols bgp group int neighbor 10.200.86.4 as-override&lt;br /&gt;
Можно конфигурировать для группы или соседа.&lt;br /&gt;
&lt;br /&gt;
Роутер ISP на полученном префиксе смотрит в AS path, AS пира заменяем на свою. При передаче префикса второму site ISP делает стандартный prepend своей AS. В итоге пиру в AS 65500 прилетит префикс с таким AS path: &lt;br /&gt;
 1111 1111 I&lt;br /&gt;
&lt;br /&gt;
==loops==&lt;br /&gt;
Еще один способ решения ситуации, описанной в примере выше - чтобы CE2 получил маршрут своего удаленного site: &lt;br /&gt;
&lt;br /&gt;
На CE2:&lt;br /&gt;
 set routing-options autonomous-system 65500 loops 2&lt;br /&gt;
Тогда на CE2 прилетит префикс с AS path:&lt;br /&gt;
 1111 65500 I &lt;br /&gt;
и роутер это сожрет.&lt;br /&gt;
&lt;br /&gt;
=Опции настройки для пиров=&lt;br /&gt;
*'''passive''' - локальный роутер перестает слать open message. Чтобы сессия поднялась, open message теперь должно прийти от удаленного пира.&lt;br /&gt;
 blair# top show | compare &lt;br /&gt;
 set protocols bgp group int neighbor 10.200.86.4 passive&lt;br /&gt;
&lt;br /&gt;
 Feb 11 22:07:58.812668 BGP SEND message type 1 (Open) length 59&lt;br /&gt;
 Feb 11 22:07:58.856999 BGP RECV message type 1 (Open) length 59&lt;br /&gt;
После задания passive для пира:&lt;br /&gt;
 Feb 11 22:12:22.128876 BGP RECV message type 1 (Open) length 59&lt;br /&gt;
* '''allow''' - принимает open message только из указанной сети. Можно указать только для определенной группы:&lt;br /&gt;
 set protocols bgp group int allow 10.200.86.0/24&lt;br /&gt;
*'''prefix-limit''': ограничивает значение полученных префиксов от пира. Можно применять на разных уровнях иерархии.&lt;br /&gt;
 set protocols bgp group int neighbor 10.200.86.4 family inet unicast prefix-limit maximum 1500&lt;br /&gt;
 set protocols bgp group int neighbor 10.200.86.4 family inet unicast prefix-limit teardown 100 ('''%''') idle-timeout 10 ('''min''');}}}&lt;br /&gt;
*'''hold-time''': меняем hold timer. По дефолту 90 sec. Можно применять на разных уровнях иерархии.&lt;br /&gt;
 set protocols bgp hold-time 120&lt;br /&gt;
*'''advertise-peer-as''': позволяет EBGP маршруты передавать обратно EBGP пиру. Но тогда и у пира должен быть настроен as loops, чтобы он не отбросил префикс с лупом в AS-Path.&lt;br /&gt;
 set protocols bgp group int advertise-peer-as&lt;br /&gt;
&lt;br /&gt;
=Route Reflection=&lt;br /&gt;
Описан в RFC 4456&lt;br /&gt;
&lt;br /&gt;
'''Концепция'''&lt;br /&gt;
&lt;br /&gt;
Заменяем full-mesh на сети между PE.&lt;br /&gt;
*Позволяет iBGP-спикеру анонсировать другим iBGP-маршрутизаторам маршруты, полученные через iBGP&lt;br /&gt;
*RR пересылает только активные маршруты клиентам (это iBGP соседи RR, которые не являются RR)&lt;br /&gt;
*RR по умолчанию не меняет IBGP атрибуты.&lt;br /&gt;
*Для предотвращения петель существуют два новых атрибута: &lt;br /&gt;
:*'''Cluster List''' (1 или более cluster ID)&lt;br /&gt;
:*'''Originator ID''' - ID роутера, который первым переслал маршрут в AS.&lt;br /&gt;
&lt;br /&gt;
==Распространение маршрутов при использовании RR==&lt;br /&gt;
[[Файл:RR.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Будем использовать следующие обозначения:&lt;br /&gt;
*IBGP rr-client - IBGP сосед в кластере&lt;br /&gt;
*IBGP NON-rr-client - IBGP сосед не в кластере&lt;br /&gt;
*EBGP - EBGP сосед&lt;br /&gt;
&lt;br /&gt;
Распространение маршрутов происходит следующим образом:&lt;br /&gt;
*IBGP rr-client &amp;gt; IBGP rr-client + IBGP NON-rr-client&lt;br /&gt;
*IBGP NON-rr-client &amp;gt; IGBP rr-client&lt;br /&gt;
*IBGP NON-rr-client &amp;lt;&amp;gt; IBGP NON-rr-client - '''не передается'''&lt;br /&gt;
&lt;br /&gt;
*EGBP &amp;gt; IBGP rr-client + NON-rr-client&lt;br /&gt;
&lt;br /&gt;
Если включить '''no-client-reflect''', то это запретит анонсить префиксы между клиентами кластера. В таком случае, если требуется сохранить связность между этими клиентами - нужно настроить между ними full-mesh. Такой вариант развитий по идее может понадобиться только при иерархичном роут-рефлектинге (о нем ниже). &lt;br /&gt;
&lt;br /&gt;
RR добавляет/изменяет атрибуты (без политик по дефолту):&lt;br /&gt;
*'''Originator ID'''&lt;br /&gt;
Router ID первого роутера, который заслал маршрут в AS.&lt;br /&gt;
&lt;br /&gt;
*'''Cluster List (Cluster ID)'''&lt;br /&gt;
Список, включающий ID всех RR, которые обрабатывали данный префикс.&lt;br /&gt;
Если RR получит маршрут, у которого в cluster list будет ID этого RR, то он его дропнет.&lt;br /&gt;
Участвует при выборе активного маршрута (активным становится с наименьшим cluster list).&lt;br /&gt;
Cluster ID добавляется к cluster list, когда маршрут отправляется. Cluster ID должен быть уникальным в рамках AS.&lt;br /&gt;
При использовании нескольких RR, можно для всех использовать одинаковый cluster ID.&lt;br /&gt;
&lt;br /&gt;
+ такой схемы: в таблице будет меньше маршрутов и при такой схеме можно добиться хорошей отказоустойчивости в сети.&lt;br /&gt;
&lt;br /&gt;
Правила работы с Originator и Cluster List:&lt;br /&gt;
*для EBGP или любого другого протокола, отличного от IBGP, originator и сluster list не добавляются &lt;br /&gt;
*для IBGP client&amp;lt;&amp;gt;client / client&amp;lt;&amp;gt;non-client:&lt;br /&gt;
:*originator добавится только если до этого его не существовало. &lt;br /&gt;
:*Cluster list дополнится новым cluster ID. &lt;br /&gt;
:*Cluster ID будет установлен, если его не было ранее.&lt;br /&gt;
&lt;br /&gt;
'''2 RR в кластере'''&lt;br /&gt;
&lt;br /&gt;
Соседство между RR можно устанавливать как внутри отдельной группы для кластера, так и в отдельной группе.&lt;br /&gt;
В обоих случаях при передаче маршрутов между RR петель не будет, т.к. cluster ID будет одинаковыми.&lt;br /&gt;
Каждый из RR в кластере устанавливает IBGP с другими RR, не входящих в кластер.&lt;br /&gt;
В подобных схемах все-таки тоже стараются использовать уникальные cluster ID.&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
&lt;br /&gt;
Если на сети несколько RR, то соседство между ними может быть как в отдельной группе от RR-clients (IBGP), так и в той же группе что и клиенты. &lt;br /&gt;
Между RR - full-mesh.&lt;br /&gt;
&lt;br /&gt;
 set protocols bgp group RR type internal&lt;br /&gt;
 set protocols bgp group RR peer-as 65513&lt;br /&gt;
 set protocols bgp group RR neighbor 2.2.2.2&lt;br /&gt;
 set protocols bgp group RR neighbor 3.3.3.3&lt;br /&gt;
&lt;br /&gt;
RR-clients конфигурируются в отдельной группе, где должен быть включен: &amp;quot;cluster x.x.x.x&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 set protocols bgp group RR-clients cluster 1.1.1.1&lt;br /&gt;
&lt;br /&gt;
Со стороны клиентов конфигурация стандартная для IBGP - простое соседство с RR на lo0 адресах (с включенным multihop!!)&lt;br /&gt;
&lt;br /&gt;
==Hierarchical Route Reflection==&lt;br /&gt;
[[Файл:Hierarch_RR.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Отличие от предыдущих: в схеме появляются не только RR и client, но еще и роутеры, выполняющие обе функции в рамках разных кластеров.&lt;br /&gt;
Clients могут устанавливать IBPG между собой full-mesh. Это удобно использовать, чтобы clients могли использовать маршруты от других clients нативно, без обработки RR. &lt;br /&gt;
Чтобы RR не флудил копиями маршрутов, на нем можно включить '''no-client-reflect''', это отключит пересылку маршрутов, полученных внутри кластера. Внешние маршруты при этом продолжают пересылаться.&lt;br /&gt;
&lt;br /&gt;
==Modifying Attributes on the RR==&lt;br /&gt;
&lt;br /&gt;
Все атрибуты BGP изменяются через policy.&lt;br /&gt;
Если на RR есть EBGP, то с большой вероятностью будет активна ф-ия: next-hop-self. При этом, у маршрутов, полученных от client, также next-hop будет меняться.&lt;br /&gt;
Что приведет к не оптимальному форвардингу трафика (должен идти напрямую к original роутеру, а будет идти через RR).&lt;br /&gt;
Чтобы менять next-hop только у external: в policy матчим по interface ли neighbor.&lt;br /&gt;
&lt;br /&gt;
 set policy-option policy-statement nhs term EBGP from protocol bgp&lt;br /&gt;
 set policy-option policy-statement nhs term EBGP from neighbor 2.2.2.2&lt;br /&gt;
 set policy-option policy-statement nhs term EBGP the next-hop self&lt;br /&gt;
&lt;br /&gt;
=Fake-group=&lt;br /&gt;
Данная проблема описана в KB20870 (https://kb.juniper.net/InfoCenter/index?page=content&amp;amp;id=KB20870).&lt;br /&gt;
&lt;br /&gt;
Более подробное описание и рекомендации по предотвращению https://www.juniper.net/documentation/en_US/junos/topics/example/bgp-vpn-session-flap-prevention.html&lt;br /&gt;
&lt;br /&gt;
По факту функционал RR включается/выключается только при добавлении/удалении соседу в группе с клиентами (с '''cluster''').&lt;br /&gt;
&lt;br /&gt;
Если на маршрутизаторе настроены '''EBGP с клиентами''' или '''IBGP c RR''', для которых в конфигурации группы '''включены vpn-address-family''', (inet-vpn, inet6 inet-mpvn, inet-mdt, inet6-mpvn, l2vpn, iso-vpn) и на маршрутизаторе в этих группах производится добавления первого соседа или удаления последнего, Juniper рестартует BGP сессии с RR и c EBGP пирами в VPN-address-family для отсылки NLRI с новой (удалением старой) address-family.&lt;br /&gt;
&lt;br /&gt;
Для предотвращения подобных ситуаций можно предпринять следующие шаги:&lt;br /&gt;
* на каждом RR создана fake группа (для исключения проблемы удаления последнего соседа в группе).&lt;br /&gt;
* на каждом PE создана fake группа (для исключения проблемы включения нового клиента с EBGP + vpn-family)&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
Fake группа имеет следующий вид для '''RR и PE''':&lt;br /&gt;
 group fake-vpn {&lt;br /&gt;
    type '''external''';&lt;br /&gt;
    description &amp;quot;-- Preventing mpbgp sessions flap --&amp;quot;;&lt;br /&gt;
    '''passive''';&lt;br /&gt;
    family inet {&lt;br /&gt;
        any;&lt;br /&gt;
    family inet-vpn {&lt;br /&gt;
        any;&lt;br /&gt;
    family iso-vpn {&lt;br /&gt;
        unicast;&lt;br /&gt;
    family l2vpn {&lt;br /&gt;
        signaling;&lt;br /&gt;
    family evpn {&lt;br /&gt;
        signaling;&lt;br /&gt;
    family inet-mvpn {&lt;br /&gt;
        signaling;&lt;br /&gt;
    family inet-mdt {&lt;br /&gt;
        signaling;&lt;br /&gt;
    '''neighbor 101.101.101.101''' {&lt;br /&gt;
        '''peer-as 101''';&lt;br /&gt;
&lt;br /&gt;
=IPv6 (6PE)=&lt;br /&gt;
Если у нас есть настроенная ipv4 сеть и мы захотели передавать трафик и для ipv6 адресов (используя MPLS), то:&lt;br /&gt;
&lt;br /&gt;
- требуется настроить family inet6 labeled-unicast explicit-null на сессии pe&amp;lt;&amp;gt;rr&lt;br /&gt;
 set protocols bgp group ibgp-rr family inet6 labeled-unicast explicit-null&lt;br /&gt;
эта family навешивает на ipv6 префикс '''label 2''' (explicit-null для ipv6), что позволяет на сети в качестве транспорта использовать mpls, а на последнем роутере делать lookup в таблице inet6.0.&lt;br /&gt;
&lt;br /&gt;
- на сети у нас скорей всего уже будет включен mapping ipv4 адресов в ipv6:&lt;br /&gt;
 set system allow-v4mapped-packets &lt;br /&gt;
- при передаче префиксов pe-&amp;gt;rr должен быть настроен в политике hext-hop self. При этом для ipv6 префиксов будет подставляться mapped ipv6 адрес lo0.&lt;br /&gt;
 rr&amp;gt; show route receive-protocol bgp 172.30.5.5 &lt;br /&gt;
 inet.0: 56 destinations, 58 routes (55 active, 0 holddown, 1 hidden)&lt;br /&gt;
  Prefix		  Nexthop	       MED     Lclpref    AS path&lt;br /&gt;
 * 192.168.31.0/24         '''172.30.5.5'''                   100        64514 I&lt;br /&gt;
 * 192.168.32.0/24         '''172.30.5.5'''                   200        64514 I&lt;br /&gt;
 inet6.0: 7 destinations, 8 routes (7 active, 0 holddown, 0 hidden)&lt;br /&gt;
  Prefix		  Nexthop	       MED     Lclpref    AS path&lt;br /&gt;
  fd17:f0f4:f691:5::31/128&lt;br /&gt;
 *                         '''::ffff:172.30.5.5'''            100        64514 I&lt;br /&gt;
- на rr адреса '''::ffff:172.30.5.5''' не будет, поэтому полученный префикс будет в hidden, из-за неотрезовленного next-hop. Чтобы решить эту проблему прописываем статику:&lt;br /&gt;
 rr&amp;gt; show configuration routing-options &lt;br /&gt;
 rib inet6.0 static route ::ffff:172.30.5.0/124 receive;&lt;br /&gt;
'''receive''' в данном случае позволяет сделать маршрут активным, не прибегая к форвардингу трафика.&lt;br /&gt;
&lt;br /&gt;
- после этого рефлектор спокойно рефлектит маршрут своим клиентам.&lt;br /&gt;
&lt;br /&gt;
- далее, pe получит префикс, но с принятым next-hop   '''::ffff:172.30.5.5''' это префикс опять же не станет активным в таблице. Тут решение static с next-hop receive - не проканает, ибо нам нужно передавать трафик к префиксу, а не просто вставить его в таблицу маршрутизации. Тут прибегнем к варианту, который маршруты ldp для desct-ipv4 замапит в dest-ipv6 из inet.3 и поместит их в inet6.3 (для резолва ipv6 префиксов):&lt;br /&gt;
 set protocols mpls ipv6-tunneling&lt;br /&gt;
&lt;br /&gt;
 rigel-r7&amp;gt; show route protocol ldp 172.30.5.5 &lt;br /&gt;
 '''inet.3''': 25 destinations, 32 routes (8 active, 0 holddown, 22 hidden)&lt;br /&gt;
 '''172.30.5.5/32'''      *[LDP/9] 01:17:08, metric 20&lt;br /&gt;
                      to 172.30.0.41 via ge-0/0/0.240, Push 319216&lt;br /&gt;
                    &amp;gt; to 172.30.0.46 via ge-0/0/3.244, Push 340912&lt;br /&gt;
&lt;br /&gt;
 rigel-r7&amp;gt; show route protocol ldp ::ffff:172.30.5.5 &lt;br /&gt;
 '''inet6.3:''' 8 destinations, 10 routes (8 active, 0 holddown, 0 hidden)&lt;br /&gt;
 '''::ffff:172.30.5.5/128'''   *[LDP/9] 01:17:20, metric 20&lt;br /&gt;
                      to 172.30.0.41 via ge-0/0/0.240, Push 319216&lt;br /&gt;
                    &amp;gt; to 172.30.0.46 via ge-0/0/3.244, '''Push 340912'''&lt;br /&gt;
&lt;br /&gt;
ну и проверяем, что и сам префикс стал активным:&lt;br /&gt;
 rigel-r7&amp;gt; show route fd17:f0f4:f691:5::31/128 &lt;br /&gt;
 inet6.0: 20 destinations, 22 routes (20 active, 0 holddown, 0 hidden)&lt;br /&gt;
 fd17:f0f4:f691:5::31/128 *[BGP/170] 00:50:51, localpref 100, from 172.30.5.41 AS path: 64514 I&lt;br /&gt;
                      to 172.30.0.41 via ge-0/0/0.240, '''Push 2''', Push 319216(top)&lt;br /&gt;
                    &amp;gt; to 172.30.0.46 via ge-0/0/3.244, '''Push 2, Push 340912(top)'''&lt;br /&gt;
&lt;br /&gt;
Кстати, ipv6 tunneling перетаскивает как ldp, так и rsvp маршруты в inet6.3.&lt;br /&gt;
&lt;br /&gt;
=Confederations=&lt;br /&gt;
 Описан в RFC 3065&lt;br /&gt;
&lt;br /&gt;
'''Принципы'''&lt;br /&gt;
&lt;br /&gt;
Цель: разбить global AS на sub-AS.&lt;br /&gt;
*sub-AS должна иметь уникальный номер (зачастую берут приватные AS).&lt;br /&gt;
*Внутри sub-AS между роутерами: full-mesh IBGP. Если внутри sub-AS будет слишком большая сеть, то в нее можно внедрить RR.&lt;br /&gt;
*Между sub-AS - EBGP = confederation BGP = CBGP. При прохождении маршрута через CBGP линк, роутер меняет AS path, включая туда AS sub-AS - этот метод - защита от петель. Другие атрибуты BGP не меняются.&lt;br /&gt;
&lt;br /&gt;
Также в отличие от стандартного EBGP, в CBGP обычно соседство строится на loopback (добавляем multihop в настройки).&lt;br /&gt;
&lt;br /&gt;
==AS-path segment==&lt;br /&gt;
*AS Confederation Sequence&lt;br /&gt;
При прохождение через CBGP линк, роутер добавляет sub-AS к AS-path в &amp;quot;()&amp;quot; в последовательности, как шел маршрут по сети.&lt;br /&gt;
&lt;br /&gt;
AS Confederation Sequence не используется при выборе активного пути.&lt;br /&gt;
&lt;br /&gt;
Этот атрибут имеет type code 3.&lt;br /&gt;
&lt;br /&gt;
 AS-path: (65000 65001 65002) 100 200&lt;br /&gt;
&lt;br /&gt;
*AS Confederation Set&lt;br /&gt;
При агрегировании маршрутов внутри конфедерации, AS confederation sequence становится AS confederation set.&lt;br /&gt;
&lt;br /&gt;
Этот атрибут имеет type code 4.&lt;br /&gt;
&lt;br /&gt;
 10.10.10.0/24 (65000 65001) 100 &lt;br /&gt;
 10.10.20.0/24 (65000 65002) 100&lt;br /&gt;
 10.10.0.0/16 ({65000 65001 65002}) 100 &lt;br /&gt;
&lt;br /&gt;
Оба атрибута используются только для предотвращения петель внутри конфедерации.&lt;br /&gt;
&lt;br /&gt;
При анонсировании маршрутов из конфедерации дальше по сети по EBGP, private AS (sub-AS) стираются, поэтому все конфедерации извне видны как одна большая глобальная AS.&lt;br /&gt;
При этом не требуется отдельно включать (remove-private). В случае с конфедерациями, все приватные AS итак сотрутся.&lt;br /&gt;
&lt;br /&gt;
Но все роутеры внутри конфедерации обязательно должны знать номер глобальной AS.&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
Включение самой конфедерации на роутере - определяется в routing-options:&lt;br /&gt;
&lt;br /&gt;
 set routing-options autonomus-system 65000&lt;br /&gt;
 set routing-options confederation 100 members [65000 65001 65002]&lt;br /&gt;
&lt;br /&gt;
confederation ''&amp;lt;&amp;gt;'' - это номер public AS.&lt;br /&gt;
&lt;br /&gt;
в качестве members - определяются все AS, включенные в конфедерацию.&lt;br /&gt;
&lt;br /&gt;
R1&lt;br /&gt;
 внутри конфедерации: &lt;br /&gt;
 set protocols bgp group sub-AS-65001 type '''internal'''&lt;br /&gt;
 set protocols bgp group sub-AS-65001 local-address 192.168.1.3&lt;br /&gt;
 set protocols bgp group sub-AS-65001 neighbor 192.168.1.1&lt;br /&gt;
 set protocols bgp group sub-AS-65001 neighbor 192.168.1.2&lt;br /&gt;
 set protocols bgp group sub-AS-65001 neighbor 192.168.1.4&lt;br /&gt;
&lt;br /&gt;
CBGP-link 1:&lt;br /&gt;
 set protocols bgp group sub-AS-65000 type '''external'''&lt;br /&gt;
 set protocols bgp group sub-AS-65000 '''multihop'''&lt;br /&gt;
 set protocols bgp group sub-AS-65000 local-address 192.168.1.3&lt;br /&gt;
 set protocols bgp group sub-AS-65000 peer-as 65000&lt;br /&gt;
 set protocols bgp group sub-AS-65000 neighbor 192.168.0.3&lt;br /&gt;
&lt;br /&gt;
CBGP-link 2:&lt;br /&gt;
 set protocols bgp group sub-AS-65002 type '''external '''&lt;br /&gt;
 set protocols bgp group sub-AS-65002 '''multihop'''&lt;br /&gt;
 set protocols bgp group sub-AS-65002 local-address 192.168.1.3&lt;br /&gt;
 set protocols bgp group sub-AS-65002 peer-as 65002&lt;br /&gt;
 set protocols bgp group sub-AS-65002 neighbor 192.168.2.4&lt;br /&gt;
&lt;br /&gt;
=Route damping (flapping)=&lt;br /&gt;
При различных обстоятельствах на сети могут возникать флапы маршрутов, что приводит к загрузке CPU на роутерах.&lt;br /&gt;
&lt;br /&gt;
Чтобы избежать подобного поведения есть некоторые механизмы защиты от флапов, например: '''BGP route flap damping'''.&lt;br /&gt;
&lt;br /&gt;
Damping игнорируется IBGP и работает только с EBGP и CBGP (confederation BGP).&lt;br /&gt;
&lt;br /&gt;
Damping уменьшает кол-во update message, путем обозначения флапающих маршрутов непригодными стать активными маршрутами.&lt;br /&gt;
&lt;br /&gt;
'''Принцип работы:'''&lt;br /&gt;
&lt;br /&gt;
Когда маршрут прилетает на наш роутер (на котором настроен route damping), на префикс назначается значение merit = 0. &lt;br /&gt;
&lt;br /&gt;
Как только роутер распознает некую нестабильность маршрута (префикс просто перестает долетать до роутера (или линк упал)):&lt;br /&gt;
*назначается merit = 1000, включается счетчик decay half-life. Если на роутер снова прилетит префикс, до того, как истечет таймер, то значение merit увеличится еще на 1000 +1000. И подобное поведение будет повторяться до превышения значения merit до supress (3000) - префикс в таком случае будет признан непригодным для использования.&lt;br /&gt;
&lt;br /&gt;
После того, как префикс пропал и заново прилетел на роутер по BGP, его значение merit = 2000 (при дефолтных настройках) &lt;br /&gt;
 Merit (last update/now): 1969/1938&lt;br /&gt;
                Default damping parameters used&lt;br /&gt;
                Last update:       00:00:27 First update:       00:00:49&lt;br /&gt;
                Flaps: 2&lt;br /&gt;
&lt;br /&gt;
После этого при исчезновении маршрута с роутера, его не будет видно в inet.0, но инфо можно будет посмотреть в &lt;br /&gt;
 blair&amp;gt; show route damping history detail    &lt;br /&gt;
&lt;br /&gt;
После того, как будет превышен supress threshold, инфо о маршруте можно будет посмотреть:&lt;br /&gt;
 blair&amp;gt; show route damping suppressed detail    &lt;br /&gt;
&lt;br /&gt;
Либо в hidden, если маршрут приходит от пира.&lt;br /&gt;
&lt;br /&gt;
*если префикс передается от роутера, то он передается со значением merit = 1000.&lt;br /&gt;
*если изменяется path attribute, то префиксу ставится значение 500.&lt;br /&gt;
*decay half-life - кол-во минут после которого значение merit уменьшается вдвое, при поведении маршрута более стабильно. default = 15 min.&lt;br /&gt;
*max-supress - максимальное кол-во минут, которое маршрут проводит в состоянии hold-down. default = 60 min.&lt;br /&gt;
*reuse threshold - произвольное значение, после которого маршрут снова можно использовать. default = 750.&lt;br /&gt;
*supress threshold- произвольное значение, после которого маршрут больше нельзя использовать. default = 3000.&lt;br /&gt;
==Config==&lt;br /&gt;
Как только включаем на роутере damping, без заданных параметров, для работы будут использоваться дефолтные значения.&lt;br /&gt;
&lt;br /&gt;
Параметры задаются через policy. '''Disable''' - для определенных префиксов удаляет merit, и убирает префикс из damping процесса (могут быть например public DNS).&lt;br /&gt;
&lt;br /&gt;
 set policy-options damping c11 half-life 30&lt;br /&gt;
 set policy-options damping c11 reuse 1000&lt;br /&gt;
 set policy-options damping c11 max-suppress 500&lt;br /&gt;
&lt;br /&gt;
 set policy-options policy-statement c11-damping then damping c11&lt;br /&gt;
&lt;br /&gt;
 set protocols bgp group c11 type external&lt;br /&gt;
 set protocols bgp group c11 damping&lt;br /&gt;
 set protocols bgp group c11 import c11-damping&lt;br /&gt;
&lt;br /&gt;
=Blackhole=&lt;br /&gt;
Когда на сети определено специальное community для blackhole, и клиент посылает префикс, помеченный этим community, нужно реализовать блокировку трафика на нашей сети к этом префиксу. И желательно разослать этот префикс другим пирам и апстримам с их blackhole-community.&lt;br /&gt;
&lt;br /&gt;
Блокировку трафика можно организовать несколькими способами.&lt;br /&gt;
&lt;br /&gt;
1. зарулить трафик на префикс, у которого next-hop = discard. &lt;br /&gt;
 set policy-options policy-statement blackhole from protocol bgp&lt;br /&gt;
 set policy-options policy-statement blackhole from community blackhole&lt;br /&gt;
 set policy-options policy-statement blackhole then next-hop 192.168.0.101&lt;br /&gt;
 set policy-options policy-statement blackhole then accept&lt;br /&gt;
 set routing-options static route 192.168.0.101/32 discard&lt;br /&gt;
 set routing-options static route 192.168.0.102/32 discard&lt;br /&gt;
&lt;br /&gt;
здесь без accept - видимо не происходит еще один lookup и next-hop остается unusable.&lt;br /&gt;
Либо resolve происходит, но с next-hop discard маршрут не считается активным и остается в hidden.&lt;br /&gt;
&lt;br /&gt;
Тема discard не раскрыта :)&lt;br /&gt;
 &lt;br /&gt;
2. зарулить на discard interface (dsc). - подробно лучше смотреть в документации Juniper.&lt;br /&gt;
&lt;br /&gt;
3. сделать у префикса сразу next-hop discard.&lt;br /&gt;
&lt;br /&gt;
 set policy-options policy-statement blackhole from protocol bgp &lt;br /&gt;
 set policy-options policy-statement blackhole from community blackhole&lt;br /&gt;
 set policy-options policy-statement blackhole then '''next-hop''' discard&lt;br /&gt;
 set policy-options policy-statement blackhole then '''accept'''&lt;br /&gt;
 set policy-options community blackhole members &amp;quot;6451[0-9]:666&amp;quot;&lt;br /&gt;
&lt;br /&gt;
без accept маршрут будет в hidden и не передастся своим ibgp соседям. (в hidden, так как next-hop unusable)&lt;br /&gt;
&lt;br /&gt;
Политику применяем на клиентов и на ibgp сессии в рамках нашей aAS (+cbgp, если используем конфедерации)&lt;br /&gt;
&lt;br /&gt;
Чтобы разослать префикс другим ebgp пирам добавляем еще одну строчку в политику:&lt;br /&gt;
 set policy-options policy-statement blackhole then community add upstream-blackhole&lt;br /&gt;
&lt;br /&gt;
TIPS:&lt;br /&gt;
*если в политике делать только then discard - это заблочит распространение префикса на сети, что не совсем решает проблему. Через нашу сеть все-равно будет идти трафик до этого dest, просто обходными путями.&lt;br /&gt;
*обычно клиенты шлют /32 префиксы с blackhole-community, а на import фильтрах у уважающих себя операторов есть ограничение по длине префикса (&amp;lt;24).&lt;br /&gt;
&lt;br /&gt;
Поэтому, чтобы получить /32, добавляем в политику условие:&lt;br /&gt;
 set policy-options policy-statement blackhole from route-filter 0.0.0.0/0 prefix-length-range /32-/32&lt;br /&gt;
&lt;br /&gt;
=BFD=&lt;br /&gt;
Как известно, этот механизм используется в качестве обмена hello сообщениями с заданным интервалом, ниже, чем дефолтный интервал в других протоколах. Что позволяет протоколу быстрее обнаружить падение сессии.&lt;br /&gt;
&lt;br /&gt;
Сильно нагружает CPU RE, поэтому с ним сильно перебарщивать не стоит.&lt;br /&gt;
&lt;br /&gt;
minimum-interval - минимальный интервал получения и отправления &amp;quot;hello&amp;quot; BFD. То есть это интервал с которым локальный роутер отправляет hello и интервал, с которым локальный роутер ждет ответа на свой hello. Также в конфиге можно отдельно задать transmit и receive minimum interval.&lt;br /&gt;
&lt;br /&gt;
BFD + graceful restart - не рекомендуется.&lt;br /&gt;
&lt;br /&gt;
BFD + Routing Engine switchover event - не рекомендуется ниже 5000мс.&lt;br /&gt;
&lt;br /&gt;
BFD + NSR - не рекомендуется ниже 2500мс.&lt;br /&gt;
&lt;br /&gt;
для очень больших сетей с большим кол-вом bfd сессий - не ниже 300мс&lt;br /&gt;
&lt;br /&gt;
=IPv6=&lt;br /&gt;
Есть несколько способов настраивать BGP между роутерами, работающими с ipv6.&lt;br /&gt;
*Прямая ipv6 сессия на ipv6 адресах:&lt;br /&gt;
&lt;br /&gt;
На интерфейсах обычные p2p адреса из /126 (/30) сеточки. Это самый примитивный вариант.&lt;br /&gt;
 group r7-ipv6 {&lt;br /&gt;
    type external;&lt;br /&gt;
    export export-direct;&lt;br /&gt;
    peer-as 54591;&lt;br /&gt;
    neighbor fc09:c0:ffee::1;}&lt;br /&gt;
&lt;br /&gt;
Настраиваем сессию на ipv6 адресах в отдельной группе. Если настраивать в группе, в которой настроены также сессии на ipv4-адресах, то сессия на ipv6 поднимется, но роутеры маршрутами обмениваться не будут.&lt;br /&gt;
&lt;br /&gt;
*Сессия на ipv4 адресах, передающая ipv6 префиксы. ipv6 адреса на интерфейсах ipv4-compatible, то есть вида &lt;br /&gt;
 a-centauri-r5&amp;gt; show configuration interfaces ge-0/0/0.304 &lt;br /&gt;
 description --c32;&lt;br /&gt;
 vlan-id 304;&lt;br /&gt;
 family inet {&lt;br /&gt;
    address 192.168.0.13/30;}&lt;br /&gt;
 family inet6 {&lt;br /&gt;
    '''address ::ffff:192.168.0.13/126;'''&lt;br /&gt;
- сессия строится на ipv4 адресах. в группе или на neighbor настроена передача family inet6 unicast.&lt;br /&gt;
 a-centauri-r5&amp;gt; show configuration protocols bgp group c31-c32 &lt;br /&gt;
 type external;&lt;br /&gt;
 family inet unicast&lt;br /&gt;
 family inet6 unicast&lt;br /&gt;
 export export-ipv6&lt;br /&gt;
 peer-as 64514&lt;br /&gt;
 neighbor 192.168.0.10&lt;br /&gt;
- глобально требуется также включить:&lt;br /&gt;
 a-centauri-r5&amp;gt; show configuration system&lt;br /&gt;
 allow-v4mapped-packets&lt;br /&gt;
*Для IPv6 eBGP в рамках VRF нужно указывать ''routing-instance &amp;lt;&amp;gt; routing-options router-id &amp;lt;&amp;gt;''. Иначе сессия не поднимется. Будет прилетать ошибка:&lt;br /&gt;
 May 21 00:16:05.676938 BGP RECV version 4 as 54591 holdtime 90 id '''0.0.0.0''' parmlen 30&lt;br /&gt;
Либо использовать отдельные lo, который будет выступать в роли router-id для сессии.&lt;br /&gt;
*На link-local адресах&lt;br /&gt;
&lt;br /&gt;
=Дополнительная информация=&lt;br /&gt;
*[[OSPF]]&lt;br /&gt;
*[[IS-IS]]&lt;br /&gt;
*[[L3VPN]]&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=OSPF&amp;diff=2063</id>
		<title>OSPF</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=OSPF&amp;diff=2063"/>
		<updated>2021-07-15T18:42:41Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#description2:Основы OSPF. Типы пакетов. Установление соседства. Типы Area. Типы LSA. Таймеры. Типы роутеров. Метрики/SPF. OSPFv3. Realm. backbone. stub area. nssa area. totally stub area.  Информация для подготовки к экзаменам Juniper.}}&lt;br /&gt;
&lt;br /&gt;
{{#description2:Основы OSPF. Типы пакетов. Установление соседства. Типы Area. Типы LSA. Таймеры. Типы роутеров. Метрики/SPF. OSPFv3. Realm. backbone. stub area. nssa area. totally stub area.  Информация для подготовки к экзаменам Juniper.}}&lt;br /&gt;
&lt;br /&gt;
=Основы=&lt;br /&gt;
OSPF - link-state IGP протокол.&lt;br /&gt;
&lt;br /&gt;
Hello пакеты для установления и поддержания соседства.&lt;br /&gt;
&lt;br /&gt;
OSPF флудит LSA (IP 89 порт, '''224.0.0.5''' адрес) во все порты OSPF, кроме того, с которого прилетела LSA. С помощью LSA на каждом роутере строится топология сети и на основании этих данных затем производится рассчет кратчайшего пути.&lt;br /&gt;
&lt;br /&gt;
На всех роутерах одной area поддерживается одинаковая копия LSDB.&lt;br /&gt;
&lt;br /&gt;
'''Policy''' можно применять на '''export''' для summary-LSA 3 (вроде).&lt;br /&gt;
 + export               Export policy&lt;br /&gt;
&lt;br /&gt;
И только для external маршрутов на '''import'''. !!! При этом в ospf database они будут видны, но в sh route их не будет.&lt;br /&gt;
 + import               Import policy (for external routes or setting priority)&lt;br /&gt;
&lt;br /&gt;
Иерархичный дизайн сети достигается за счет использования area, которые соединяются посредством backbone area.&lt;br /&gt;
&lt;br /&gt;
Dijkstra рассчитывается только в рамках одной area (на основании одной LSDB, которая едина в рамках одной area). &lt;br /&gt;
&lt;br /&gt;
Summary metric для dest = сумме outgoing interface metrics.&lt;br /&gt;
&lt;br /&gt;
На бродкаст сегменте выбирается DR (наиб приоритет, затем наиб router ID), который занимается флудом LSA внутри area. Для роутеров не в бродкастном сегменте, подключенных через Ethernet, включаем ''interface-type p2p'', чтобы на этом линке не проводились выборы DR и чтобы уменьшить время сходимости.&lt;br /&gt;
&lt;br /&gt;
=Типы пакетов=&lt;br /&gt;
'''Hello''' - используются для установления и поддержания соседства ospf. &lt;br /&gt;
Отправляются на адрес 224.0.0.5 каждые 10 сек. Содержит в себе поля: network mask, hello interval, dead interval, options, (router priority, designated router, backup designated router, neighbor).&lt;br /&gt;
&lt;br /&gt;
'''Database description (DD)''' - используется только во время установления соседства. Определяет кто отвечает за синхронизацию LSDB (выбирается роутер с бОльшим RID). Обменивается LSA до полной синхронизации. Содержит: ospf header, sequence number, lsa header.&lt;br /&gt;
&lt;br /&gt;
'''Link-state request''' - отправляется роутером, когда тот понимает, что LSBD устарела. Содержит: ospf header, link-state type, link-state ID, advertising router.&lt;br /&gt;
&lt;br /&gt;
'''Link-state update''' - отправляется на адрес: 224.0.0.5 (всем) или 225.0.0.6 (для DR). Отправляется либо в ответ на link-state request, либо если меняется информация о состоянии линка на локальном роутере. Передает одну или несколько LSA. Содержит: ospf header, numbers of advertisement, link-state avertisement.&lt;br /&gt;
&lt;br /&gt;
'''Link-state acknowledgment''' - ответ на link-state update. Содержит: ospf header, list of LSA headers.&lt;br /&gt;
&lt;br /&gt;
=Установление соседства=&lt;br /&gt;
Соседи используют hello пакеты для установления и поддержания соседства.&lt;br /&gt;
&lt;br /&gt;
*'''Down'''&lt;br /&gt;
Самое начало, ничего не происходит.&lt;br /&gt;
&lt;br /&gt;
*'''Init'''&lt;br /&gt;
В hello-packet в списке соседей нет router-id маршрутизатора, получившего этот пакет.&lt;br /&gt;
&lt;br /&gt;
Если маршрутизатор не переходит в состояние 2-Way, а скачет - down &amp;gt; init &amp;gt; down &amp;gt; init...&lt;br /&gt;
вероятно на маршрутизаторах не совпали параметры: &lt;br /&gt;
 Area ID&lt;br /&gt;
 Authentication&lt;br /&gt;
 Network Mask&lt;br /&gt;
 Hello Interva&lt;br /&gt;
 Router Dead Interval&lt;br /&gt;
 Options fields&lt;br /&gt;
&lt;br /&gt;
Либо до удаленного маршрутизатора не доходят ваши сообщения hello &lt;br /&gt;
(причиной могут быть неверно настроенные фаерволы)&lt;br /&gt;
&lt;br /&gt;
*'''2-Way'''&lt;br /&gt;
В hello-packet в списке соседей появился RID роутера, получившего этот пакет.&lt;br /&gt;
&lt;br /&gt;
*'''ExStart'''&lt;br /&gt;
Выборы DR и BDR маршрутизаторов производятся в момент первоначальной установки соседских отношений по следующим правилам:&lt;br /&gt;
&lt;br /&gt;
* Роутер с наибольшим приоритетом становится DR;&lt;br /&gt;
* Роутер со вторым по величине приоритетом становится BDR;&lt;br /&gt;
* Если роутеры имеют равный приоритет, то в качестве DR выбирается роутер с наибольшим RID, BDR-ом становится роутер со вторым по величине RID;&lt;br /&gt;
* Роутер, с приоритетом равным нулю, не принимает участия в выборах DR и BDR;&lt;br /&gt;
* Если после выбора DR и BDR в сегменте сети добавляется роутер с более высоким приоритетом или бОльшим RID, то повторные выборы не производятся;&lt;br /&gt;
* Повторные выборы производятся только после того как DR или BDR становится недоступными.&lt;br /&gt;
&lt;br /&gt;
(Происходит обмен сообщениями DD (database descr), где заполнены только поля: router-id, neighbors, mtu.&lt;br /&gt;
&lt;br /&gt;
Если маршрутизатор не переходит в следующее состояние, то вероятнее всего причина в несовпадении  mtu на физических интерфейсах.&lt;br /&gt;
&lt;br /&gt;
*'''ExChange'''&lt;br /&gt;
Процесс обмена LSDB с помощью сообщений DD (database descr)&lt;br /&gt;
(локальной базой маршрутов, их метриками, состояний линков)&lt;br /&gt;
&lt;br /&gt;
*'''Loading'''&lt;br /&gt;
Обмен сообщениями link-state request, link-state update. На каждом маршрутизаторе должна быть одинаковая LSDB.&lt;br /&gt;
(Каждый роутер восполняет недостающие знания о новых маршрутах)&lt;br /&gt;
&lt;br /&gt;
*'''Full'''&lt;br /&gt;
Соседство установлено, LSDB синхронизированы.&lt;br /&gt;
Последующие изменения в топологии передаются через сообщения link-state update,&lt;br /&gt;
в ответ приходят link-state acknowledgment (в кач-ве подтверждения о доставке).&lt;br /&gt;
&lt;br /&gt;
=Таймеры=&lt;br /&gt;
*Hello interval - установление и поддержание соседства = 10sec для broadcast и p2p networks; 30 sec - для nonbroadcast multiple access (NBMA).&lt;br /&gt;
*Dead - интервал, в течение которого не приходит hello, чтобы считать соседа неоперабельным = 40 sec.&lt;br /&gt;
*LSA retransmission interval - когда роутер отправил LSA, он ждет 5 sec ответа от соседа, что LSA получен (LSA ACK). Если ACK не пришел - делается повторная передача LSA.&lt;br /&gt;
*Transit-delay - устанавливает время, необходимое для передачи link-state update на интерфейсе = 1sec. Менять дефолтное значение не советуется.&lt;br /&gt;
*LSA refresh - интервал обновления LSA = 50min. Если LSA не обновилась через 60min, то инфо о ней считается устаревшей и она пропадает из LSDB. &lt;br /&gt;
{{note|text=Когда делаешь ''clear ospf database purge'' как раз всем LSA устанавливается LSA refresh interval 60min (3600sec) и неактуальные сразу же сбрасываются.}}&lt;br /&gt;
Кстати, у по дефолту НЕ у Juniper LSA refresh interval = 30min.&lt;br /&gt;
&lt;br /&gt;
=Роутеры=&lt;br /&gt;
*'''ABR (Area border router)''': OSPF роутер, имеющий линки в двух area - соединяет и распространите инфо из OSPF area в backbone.&lt;br /&gt;
*'''ASBR (AS boundary router)''': может находиться как внутри backbone или других area. Имеет подключения других external routing protocols и распространяет эту инфу по сети. &lt;br /&gt;
*'''Backbone''': хотя бы один линк внутри backbone area.&lt;br /&gt;
*'''Internal''': все линки внутри одной area, backbone - частный случай internal.&lt;br /&gt;
&lt;br /&gt;
=Метрики/SPF=&lt;br /&gt;
outside the area (INTER-area routing)&lt;br /&gt;
&lt;br /&gt;
*Внутренние маршруты area (intra-area) juniper preference = 10&lt;br /&gt;
*Внешние маршруты (inter-area) juniper external-preference = 150&lt;br /&gt;
{{note|text=Метрика будет сравниваться только у маршрутов одного типа. Поэтому не всегда можно гарантировать forwarding согласно метрики. Не забываем про тип маршрута!}}&lt;br /&gt;
&lt;br /&gt;
external metrics - применяются к префиксам из других AS.&lt;br /&gt;
*TYPE 1 - учитывается external cost + cost в пути до граничного маршрутизатора.&lt;br /&gt;
*TYPE 2 - учитывается только external cost. Этот тип используется по дефолту.&lt;br /&gt;
&lt;br /&gt;
TYPE1 приоритетнее TYPE2. Далее учитывается стоимость самой метрики - чем меньше, тем приоритетнее.&lt;br /&gt;
&lt;br /&gt;
*reference-bandwidth - дефолтной расчет метрики из емкости интерфейса: cost = ref-bandwidth/bandwidth. По умолчанию ref-bandwidth = 100Mbit. Можно настроить свое значение, глобально для протокола.&lt;br /&gt;
 set protocols ospf reference-bandwidth 10g&lt;br /&gt;
&lt;br /&gt;
Если устанавливаем metric вручную на интерфейсе, то дефолтное поведение перебивается для данного интерфейса.&lt;br /&gt;
&lt;br /&gt;
=Типы Area=&lt;br /&gt;
Ненулевые area могут иметь один и тот же номер area, но такой подход - не правильный. При этом разные area с одним area-id не будут никогда считать себя одним сегментом сети.&lt;br /&gt;
&lt;br /&gt;
area-id не передаются в LSA.&lt;br /&gt;
&lt;br /&gt;
Если разбирать самые стандартные area (не stub, nssа и прочее):&lt;br /&gt;
*area1 - area0 - area3 - ok. У всех area будет полная картина сети.&lt;br /&gt;
*area1 - area2 - area3 - ok,  только area2 будет иметь маршруты всей сети, а area1 и area3 будут иметь только свои маршруты + маршруты area2.&lt;br /&gt;
*area1[1] - area0 - area1[2] - ok, НО конечно area1[1] будет видеть area1[2] как LSA3. Такой себе вариант.&lt;br /&gt;
&lt;br /&gt;
==backbone==&lt;br /&gt;
Area 0 (к ней в обязательном порядке должны подключаться остальные area).&lt;br /&gt;
&lt;br /&gt;
Но если area не имеет прямого физического подключения к backbone area, то она может соединяться с ней через virtual-link.&lt;br /&gt;
&lt;br /&gt;
==stub area==&lt;br /&gt;
Обменивается маршрутами по ospf с ABR (LSA 3), не содержит с себе external routes, не принимает от ABR external routes (не принимает LSA 4,5). Доступность внешних маршрутов достигается анонсированием 0/0 со стороны ABR в сторону stub-area. Через stub-area нельзя построить virtual-link и в ней не может размещаться ASBR. Если все же сконфигурировать ASBR внутри stub-area, то роутер разместит LSA 5 в своей локальной базе данных, но не будет пересылать ее другим роутерам даже внутри area.&lt;br /&gt;
&lt;br /&gt;
Все роутеры stub area должны быть сконфигурированы, как stub.&lt;br /&gt;
 [edit protocols ospf area 0.0.0.20]&lt;br /&gt;
 + stub&lt;br /&gt;
&lt;br /&gt;
Чтобы появился 0/0, на ABR настраиваем:&lt;br /&gt;
 [edit protocols ospf area 0.0.0.20 stub]&lt;br /&gt;
 +     default-metric 10;&lt;br /&gt;
&lt;br /&gt;
==stub with no summaries (totally stub)==&lt;br /&gt;
В неё не анонсируется вообще никаких LSA. В area не вставляются LSA 3, 4, 5. По area гуляют только LSA 1 и LSA 2 [no-summaries как раз намекает на отсутствие LSA3]. Доступность маршрутов из остальных area достигается тем же анонсированием 0/0 со стороны ABR в сторону totally stub-area. И ASBR не флудит external routes в такой area. Также virtual-link не поддерживается в такой area.&lt;br /&gt;
&lt;br /&gt;
 [edit protocols ospf area 0.0.0.20]&lt;br /&gt;
 +  stub default-metric 10 no-summaries;&lt;br /&gt;
&lt;br /&gt;
==not-so-stubby==&lt;br /&gt;
Обменивается OSPF-маршрутами с ABR (LSA3), может содержать external routes (ASBR) - НО! в этой area external = LSA7 (NSSA). Не принимает external routes от ABR. (не принимает LSA 4,5). Внешние ресурсы также через 0/0 на ABR.&lt;br /&gt;
&lt;br /&gt;
Конфигурация nssa делается на каждом роутере внутри area.&lt;br /&gt;
&lt;br /&gt;
 [edit protocols ospf area 0.0.0.30]&lt;br /&gt;
 +nssa&lt;br /&gt;
&lt;br /&gt;
на ABR:&lt;br /&gt;
    OSPF database, Area 0.0.0.30&lt;br /&gt;
 Type       ID               Adv Rtr           Seq      Age  Opt  Cksum  Len &lt;br /&gt;
 Router  *10.200.86.1      10.200.86.1      0x80000002    35  0x20 0xe809  48&lt;br /&gt;
 Router   10.200.86.3      10.200.86.3      0x80000004    36  0x20 0xbdba  72&lt;br /&gt;
 Router   10.200.86.9      10.200.86.9      0x80000004    42  0x20 0xabe2  48&lt;br /&gt;
 Network  192.168.86.37    10.200.86.9      0x80000001    42  0x20 0xf1d7  32&lt;br /&gt;
 Summary *10.100.86.8      10.200.86.1      0x80000001   129  0x20 0x67ad  28&lt;br /&gt;
 ...&lt;br /&gt;
 Summary *192.168.86.48    10.200.86.1      0x80000001   129  0x20 0x3fb6  28&lt;br /&gt;
 '''NSSA'''     172.16.0.0       10.200.86.9      &lt;br /&gt;
 '''NSSA'''     172.16.1.0       10.200.86.9      - '''пришло от ASBR (LSA7) внутри area'''&lt;br /&gt;
 '''NSSA'''     172.16.2.0       10.200.86.9      &lt;br /&gt;
    OSPF AS SCOPE link state database&lt;br /&gt;
 Type       ID               Adv Rtr           Seq      Age  Opt  Cksum  Len &lt;br /&gt;
 '''Extern'''  *172.16.0.0       10.200.86.1      &lt;br /&gt;
 '''Extern'''  *172.16.1.0       10.200.86.1      - '''сгенерировал ABR (LSA7 -&amp;gt; LSA5) и послал в area0 &lt;br /&gt;
 '''Extern'''  *172.16.2.0       10.200.86.1&lt;br /&gt;
&lt;br /&gt;
Анонс 0/0 настраивается на ABR:&lt;br /&gt;
 [edit protocols ospf area 0.0.0.30 nssa]&lt;br /&gt;
 +      '''default-lsa default-metric 1''';&lt;br /&gt;
Смотрим, что прилетело от ABR в NSSA area:&lt;br /&gt;
    OSPF database, Area 0.0.0.30&lt;br /&gt;
 Type       ID               Adv Rtr           Seq      Age  Opt  Cksum  Len &lt;br /&gt;
 NSSA     0.0.0.0          10.200.86.1      0x80000001    50  0x20 0x8681  36&lt;br /&gt;
&lt;br /&gt;
Если на ABR добавляем ''no-summaries'', то 0/0 прилетит как LSA3 (а не LSA7 (NSSA)):&lt;br /&gt;
&lt;br /&gt;
    OSPF database, Area 0.0.0.30&lt;br /&gt;
 Type       ID               Adv Rtr           Seq      Age  Opt  Cksum  Len &lt;br /&gt;
 Summary  0.0.0.0          10.200.86.1      0x80000001     3  0x20 0xae65  28&lt;br /&gt;
 '''NSSA'''     0.0.0.0          10.200.86.1      0x80000001  '''3600'''  0x20 0x8681  36&lt;br /&gt;
&lt;br /&gt;
Чтобы при настроенном ''no-summaries'' 0/0 прилетал все же как LSA 7, то добавляем в конце '''type-7''': &lt;br /&gt;
    OSPF database, Area 0.0.0.30&lt;br /&gt;
 Type       ID               Adv Rtr           Seq      Age  Opt  Cksum  Len &lt;br /&gt;
 '''Summary'''  0.0.0.0          10.200.86.1      0x80000001  '''3600'''  0x20 0xae65  28&lt;br /&gt;
 NSSA     0.0.0.0          10.200.86.1      0x80000001     5  0x20 0x8681  36&lt;br /&gt;
&lt;br /&gt;
=Типы LSA=&lt;br /&gt;
Все типы имеют одинаковый '''заголовок''':&lt;br /&gt;
*LS age - sec - время, когда LSA была впервые создана&lt;br /&gt;
*Option - E-bit = External LSA, P bit = NSSA external LSA.&lt;br /&gt;
*LS type.&lt;br /&gt;
*Link-state ID - разные типы LSA используют поле по-разному.&lt;br /&gt;
*Advertising router - роутер, который сгенерировал LSA.&lt;br /&gt;
*LS sec number&lt;br /&gt;
*LS checksum&lt;br /&gt;
*Length&lt;br /&gt;
&lt;br /&gt;
В выводе ''sh ospf database'' ID, отмеченный '''*''' - будет означать, что этот маршрут сгенерирован самим роутером.&lt;br /&gt;
&lt;br /&gt;
*'''Type 1 LSA (Router)''' — Описывает стоимость (metric) и состояние интерфейсов. Не передаются между Area. LSA1 = area scope.&lt;br /&gt;
&lt;br /&gt;
*'''Type 2 LSA (Network)''' — Отправляются DR. Описывает роутеры, подключенные в бродкаст сегменте + сам себя. Не передаются между area. В выводе ''sh ospf database'': ID = DR, attached router = роутеры в бродкаст сегменте.&lt;br /&gt;
&lt;br /&gt;
*'''Type 3 LSA (Summary)''' — Отправляются ABR. Описывают сети, которые маршрутизатор получил из предыдущих типов LSA, и передает между Area. LSA будет флудиться каждому роутеру внутри area. ABR, получив LSA3 не перешлет ее другому ABR, а сгенерирует на основании полученной LSA3, LSA1, 2 новую LSA3, и уже ее передаст в соседние area. LSA3 = area scope.&lt;br /&gt;
{{note|text=Summary не означает агрегирование! ABR передает один в один LSA1 и LSA2 в другую area без какой-либо агрегации/суммаризации по дефолту.}}&lt;br /&gt;
&lt;br /&gt;
*'''Type 4 LSA (ASBR Summary)''' — Генерируются ABR,  LSA содержит описание самих ASBR роутеров. В выводе ''sh ospf database'': ID = ASBR router.&lt;br /&gt;
&lt;br /&gt;
*'''Type 5 LSA (External)''' —  Описывают сети, полученные из других протоколов маршрутизации ASBR-ами. Рассылаются ими же. В выводе ''sh ospf database'': ID + mask = external networks.&lt;br /&gt;
&lt;br /&gt;
*'''Type 6 LSA (Group membership)''' — Не используется, некогда планировался под MOSPF.&lt;br /&gt;
&lt;br /&gt;
*'''Type 7 LSA (NSSA External)''' — Генерируются ASBR-ами в NSSA. Передаются только внутри NSSA. Но на выходе из зоны ABR-ами транслируются в LSA Type 5. В выводе ''sh ospf database'': ID + mask = external networks.&lt;br /&gt;
&lt;br /&gt;
*'''Type 9 (Graceful restart)''' - поддерживает graceful restart.&lt;br /&gt;
&lt;br /&gt;
*'''Type 10 LSA (Traffic Engineering)''' — Содержат информацию, которая в последствии находится в TED и используется при работе CSPF-алгоритма.&lt;br /&gt;
&lt;br /&gt;
'''LSA flooding scopes''': LSA 1, LSA 2 - исключительно внутри area. LSA 3 - суммирует LSA 1 + LSA2 и передает эту инфу в соседнюю area. LSA 5 (external) - передаются по всему OSPF домену. LSA 4 (about ASBR) - по всему OSPF домену. LSA 7 (external in nssa) - только внутри nssa area.&lt;br /&gt;
&lt;br /&gt;
Время жизни каждой LSA - 3600 sec (1 h).&lt;br /&gt;
&lt;br /&gt;
Junos не поддерживает: LSA6, LSA8, LSA11&lt;br /&gt;
&lt;br /&gt;
Можно вручную ограничить кол-во LSA: полезно в тех случаях, когда CE &amp;lt;&amp;gt; PE строится на OSPF.&lt;br /&gt;
 set protocols ospf database-protection maximum-lsa 1000&lt;br /&gt;
&lt;br /&gt;
 macduff&amp;gt; show ospf database &lt;br /&gt;
    OSPF database, Area 0.0.0.20&lt;br /&gt;
  Type       ID               Adv Rtr           Seq      Age  Opt  Cksum  Len &lt;br /&gt;
 Router   10.200.86.2      10.200.86.2      0x80000007   277  0x22 0xcb07  72&lt;br /&gt;
 Router   10.200.86.4      10.200.86.4      0x8000000a   106  0x22 0x7294  72&lt;br /&gt;
 Router  *10.200.86.8      10.200.86.8      0x8000000d   105  0x22 0x5fd2  72&lt;br /&gt;
 Network *192.168.86.14    10.200.86.8      0x80000003  2402  0x22 0xc01d  32&lt;br /&gt;
 Summary  10.200.86.1      10.200.86.2      0x80000002  1991  0x22 0xdc09  28&lt;br /&gt;
 Summary  10.200.86.2      10.200.86.2      0x80000004  2134  0x22 0xc41f  28&lt;br /&gt;
 Summary  10.200.86.3      10.200.86.2      0x80000002  1705  0x22 0xd210  28&lt;br /&gt;
 Summary  10.200.86.5      10.200.86.2      0x80000004  1420  0x22 0xba24  28&lt;br /&gt;
 Summary  10.200.86.6      10.200.86.2      0x80000004  1277  0x22 0xa638  28&lt;br /&gt;
 Summary  10.200.86.7      10.200.86.2      0x80000004  1134  0x22 0xb02b  28&lt;br /&gt;
 Summary  10.200.86.9      10.200.86.2      0x80000002   848  0x22 0xa03b  28&lt;br /&gt;
 Summary  192.168.86.4     10.200.86.2      0x80000004   991  0x22 0xec5f  28&lt;br /&gt;
 Summary  192.168.86.8     10.200.86.2      0x80000006  2357  0x22 0xc085  28&lt;br /&gt;
 Summary  192.168.86.24    10.200.86.2      0x80000002  1848  0x22 0x2812  28&lt;br /&gt;
 Summary  192.168.86.28    10.200.86.2      0x80000004   705  0x22 0x62d   28&lt;br /&gt;
 Summary  192.168.86.36    10.200.86.2      0x80000002  1563  0x22 0xb973  28&lt;br /&gt;
 Summary  192.168.86.44    10.200.86.2      0x80000004   563  0x22 0x51d3  28&lt;br /&gt;
 Summary  192.168.86.48    10.200.86.2      0x80000004   134  0x22 0x29f7  28&lt;br /&gt;
 ASBRSum  10.200.86.9      10.200.86.2      0x80000001   390  0x22 0x9447  28&lt;br /&gt;
    OSPF AS SCOPE link state database&lt;br /&gt;
 Type       ID               Adv Rtr           Seq      Age  Opt  Cksum  Len &lt;br /&gt;
 Extern   172.16.0.0       10.200.86.9      0x80000001   393  0x22 0x487b  36&lt;br /&gt;
 Extern   172.16.1.0       10.200.86.9      0x80000001   393  0x22 0x3d85  36&lt;br /&gt;
 Extern   172.16.2.0       10.200.86.9      0x80000001   393  0x22 0x328f  36&lt;br /&gt;
&lt;br /&gt;
=Типы интерфейсов=&lt;br /&gt;
*'''Broadcast''' - поведение аналогично тому, когда router включен в LAN сегмент. То есть дополнительно производится выбор DR, BDR среди роутеров. И если на интерфейсе висит несколько ip, то роутер сможет установить несколько соседств в каждой сети одновременно.&lt;br /&gt;
*'''Point to point (p2p)''' - соединение между одним source и одним destination. Возможно установление только '''одного''' соседства с такого типа интерфейса. Можно назначать на ethernet интерфейсы без IP адресов.&lt;br /&gt;
*'''Point to multipoint (p2mp)''' - соединение между одним source и несколькими destination. Сеть рассматривается как набор p2p линков. Т.к. нет autodiscovery механизма, от обязательно указывать соседа.&lt;br /&gt;
*'''Nonebroadcast multiaccess (NBMA)''' - работает как p2mp, но может взаимодействовать с другим оборудованием.&lt;br /&gt;
*'''Demand circuit''' - соединение на котором можно ограничить полосу или время доступа.&lt;br /&gt;
*'''Passive''' - анонсирует адреса на интерфейсе, но не участвует в установлении OSPF соседства и вообще не обменивается hello-сообщениями. Также в passive можно использовать инфо об интерфейсе и его сетях для TE вычислений.&lt;br /&gt;
*'''Disable''' - не участвует в OSPF и не передает о себе инфо в LSDB&lt;br /&gt;
*'''Peer (для OSPFv2)''' - требуется GMPLS&lt;br /&gt;
&lt;br /&gt;
Если на маршрутизаторах указаны разные типы интерфейсов, то они между собой соседство не поднимут.&lt;br /&gt;
&lt;br /&gt;
=Другие фичи=&lt;br /&gt;
*Аутентификация: простая (plain-text, simple), MD5, none. и еще IPSEC.&lt;br /&gt;
:*simple - только один ключ. По сути просто не дает левому роутеру подключиться к твоему ospf домену, из-за использованиях хоть такого метода защиты. Но ключ не шифруется. Так что только MD5, только безопасность!&lt;br /&gt;
:*md5 - можно использовать несколько ключей. Менять их по времени. Каждый md5 key - с уникальным id. По id определяется какой md5 key использовать.&lt;br /&gt;
&lt;br /&gt;
*Суммирование маршрутов (area-range), прилетающих в update сообщениях в backbone от других area. &lt;br /&gt;
Если после сети добавить &lt;br /&gt;
:*'''restrict''' - сети не просуммируются, а перестанут передаваться в backbone. То есть будет не передан и summary route и все вложенные в него сети. &lt;br /&gt;
:*'''override-metric''' - можно перезаписать значение ospf-метрики или ее тип. &lt;br /&gt;
:*'''exact''' - проадвертайзит только если в таблице маршрутизация будет четко такой же префикс.&lt;br /&gt;
&lt;br /&gt;
Настраивается только на ABR. Здесь из area 10 будет передаваться суммированный маршрут в backbone:&lt;br /&gt;
 [edit protocols ospf area 0.0.0.10]&lt;br /&gt;
 +     area-range 192.168.86.0/24 [restrict|override-metric| exact];&lt;br /&gt;
&lt;br /&gt;
Сразу после применения видно, что маршруты, сгенерированные ABR, и отправленные в area0 - скоро отвалятся.&lt;br /&gt;
    OSPF database, '''Area 0.0.0.0'''&lt;br /&gt;
 Type       ID               Adv Rtr           Seq      Age  Opt  Cksum  Len &lt;br /&gt;
 Router   10.200.86.1      10.200.86.1      0x80000027   490  0x22 0x82a8  72&lt;br /&gt;
 Router   10.200.86.2      10.200.86.2      0x80000016   312  0x22 0x74d9  84&lt;br /&gt;
 Router  *10.200.86.6      10.200.86.6      0x80000019     2  0x22 0xbe08  72&lt;br /&gt;
 Network *192.168.86.10    10.200.86.6      0x8000000a   596  0x22 0xa839  32&lt;br /&gt;
 Summary *10.200.86.5      10.200.86.6      0x80000007  2170  0x22 0x9246  28&lt;br /&gt;
 Summary *10.200.86.7      10.200.86.6      0x80000007  2034  0x22 0x884d  28&lt;br /&gt;
 Summary  10.200.86.9      10.200.86.1      0x80000002  1185  0x22 0x9c41  28&lt;br /&gt;
 Summary *192.168.86.0     10.200.86.6      0x80000001     2  0x22 0x1537  28&lt;br /&gt;
 Summary '''*192.168.86.4'''     10.200.86.6      0x80000007  '''3600'''  0x22 0xc481  28&lt;br /&gt;
 Summary  192.168.86.24    10.200.86.1      0x8000000f   385  0x22 0xa25   28&lt;br /&gt;
 Summary '''*192.168.86.28'''    10.200.86.6      0x80000008  '''3600'''  0x22 0xdb50  28&lt;br /&gt;
 Summary  192.168.86.36    10.200.86.1      0x80000002  1185  0x22 0xb579  28&lt;br /&gt;
{{note|text=!!!Такой метод будет работать только для '''summary LSA'''. Для суммирования external LSA можно сделать area 30 NSSA area и тогда area-range сработает (пример ниже), либо на роутере area3 создавать aggregate route и делать его export в protocols ospf.}}&lt;br /&gt;
&lt;br /&gt;
*Суммирование маршрутов от NSSA (LSA 7): аналогично работает и добавление '''restrict''' и '''override-metric''' и '''exact''':&lt;br /&gt;
 [edit protocols ospf area 0.0.0.10 nssa]&lt;br /&gt;
 +      area-range 172.16.0.0/22;&lt;br /&gt;
&lt;br /&gt;
До&lt;br /&gt;
     OSPF database, Area 0.0.0.10&lt;br /&gt;
 NSSA    *0.0.0.0          10.200.86.1      0x80000003   112  0x20 0x67f   36&lt;br /&gt;
 NSSA     172.16.0.0       10.200.86.9      0x80000002  2485  0x28 0x88ff  36&lt;br /&gt;
 NSSA     172.16.1.0       10.200.86.9      0x80000002  1886  0x28 0x7d0a  36&lt;br /&gt;
 NSSA     172.16.2.0       10.200.86.9      0x80000002  1287  0x28 0x7214  36&lt;br /&gt;
    OSPF AS SCOPE link state database&lt;br /&gt;
 Type       ID               Adv Rtr           Seq      Age  Opt  Cksum  Len &lt;br /&gt;
 Extern  *172.16.0.0       10.200.86.1      0x80000004     5  0x22 0x6d5d  36&lt;br /&gt;
 Extern  *172.16.1.0       10.200.86.1      0x80000003  3600  0x22 0x2274  36&lt;br /&gt;
 Extern  *172.16.2.0       10.200.86.1      0x80000003  3600  0x22 0x177e  36&lt;br /&gt;
&lt;br /&gt;
После:&lt;br /&gt;
    OSPF database, Area 0.0.0.10&lt;br /&gt;
 NSSA    *0.0.0.0          10.200.86.1      0x80000003   201  0x20 0x67f   36&lt;br /&gt;
 NSSA     172.16.0.0       10.200.86.9      0x80000002  2574  0x28 0x88ff  36&lt;br /&gt;
 NSSA     172.16.1.0       10.200.86.9      0x80000002  1975  0x28 0x7d0a  36&lt;br /&gt;
 NSSA     172.16.2.0       10.200.86.9      0x80000002  1376  0x28 0x7214  36&lt;br /&gt;
    OSPF AS SCOPE link state database&lt;br /&gt;
 Type       ID               Adv Rtr           Seq      Age  Opt  Cksum  Len &lt;br /&gt;
 Extern  *172.16.0.0       10.200.86.1      0x80000004    94  0x22 0x6d5d  36&lt;br /&gt;
 &lt;br /&gt;
*По дефолту в nssa будут передаваться LSA3 (summary) маршруты. Если нужно, LSA3 заменить на LSA7, то настраиваем:&lt;br /&gt;
  set protocols ospf area 4 nssa default-lsa type-7&lt;br /&gt;
&lt;br /&gt;
*Можно ограничить кол-во перфиксов, экспортируемых в OSPF.&lt;br /&gt;
*GRES возможен.&lt;br /&gt;
*BFD (Bidirectional Forwarding Detection) можно использовать для сокращения времени обнаружения аварии между роутерами.&lt;br /&gt;
*Можно отложить процесс перерасчета SPF при изменении LSDB (дефолт - 200ms):&lt;br /&gt;
 set protocols ospf spf-options delay ?&lt;br /&gt;
  &amp;lt;delay&amp;gt;              Time to wait before running an SPF (50..8000 milliseconds)&lt;br /&gt;
*Metric - определяем желаемый интерфейс для прохождения пакета. Меньшая метика - приоритетнее.&lt;br /&gt;
*Overload - выставляет метрики на интерфейсах = 65535. Если после перерасчета SPF для dest не нашлось обходных путей, роутер будет передавать транзитный трафик.&lt;br /&gt;
 set protocols ospf overload&lt;br /&gt;
*Topologies - можно использовать разные топологии для ipv4 unicast и ipv6 multicast. Для мультикаста и для юникаста с помощью метрик по-разному направлять трафик.&lt;br /&gt;
 set protocols ospf topology ipv4-multicast&lt;br /&gt;
 set protocols ospf area 0.0.0.0 interface xe-0/0/1.2056 metric 40&lt;br /&gt;
 set protocols ospf area 0.0.0.0 interface xe-0/0/1.2056 topology ipv4-multicast metric 500&lt;br /&gt;
&lt;br /&gt;
*Traffic-engineering (MPLS):&lt;br /&gt;
По дефолту выключен. Включаем, чтобы LSP участвовали как линки при расчёте SPF. Также в LSA теперь будут заноситься параметры traffic-engineering'a:&lt;br /&gt;
 set protocols ospf traffic-engineering&lt;br /&gt;
&lt;br /&gt;
*Traceoptions - как и для всех протоколов можно включить для диагностики&lt;br /&gt;
 set protocols ospf traceoptions file ospf-log&lt;br /&gt;
 set protocols ospf traceoptions file size 10m&lt;br /&gt;
 set protocols ospf traceoptions file files 10&lt;br /&gt;
 set protocols ospf traceoptions flag state detail&lt;br /&gt;
 set protocols ospf traceoptions flag error detail&lt;br /&gt;
&lt;br /&gt;
*Virtual-link. Как уже описывалось ранее, каждая area должна быть соединена с backbone area. Если у роутера нет физического линка до backbone, то делаем соединение через virtual-link. &lt;br /&gt;
&lt;br /&gt;
В настройках всего 2 параметра: - ''transit-area'', ''neighbor-id''.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Ospf-virtual-link.png|600px]]&lt;br /&gt;
&lt;br /&gt;
 R8: set protocols ospf area 0 virtual-link transit-area 1 neighbor-id 172.30.5.7&lt;br /&gt;
&lt;br /&gt;
virtual-link в SPF считается за обычный линк. Дополнительной стоимости не добавляет.&lt;br /&gt;
&lt;br /&gt;
При этом, если у нас есть подобное включение: R1 (area 5) &amp;lt;&amp;gt; R2 (area 6) &amp;lt;&amp;gt; R3 (area 7). То area 5 и area 7 не будут видеть префиксы друг друга (будут видеть только area 6). А area 6 будет получать префиксы всех area.&lt;br /&gt;
&lt;br /&gt;
То есть любая другая '''area не 0''' будет принимать LSDB от других area, но не передавать другим area. В отличие от Backbone. Backbone работает как RR :) А остальные как IBGP соседи. :)&lt;br /&gt;
&lt;br /&gt;
=OSPFv3=&lt;br /&gt;
OSPF3 router-id, area-id, LSA link-state ID - взяты из OSPFv2, то есть имеют тот же формат: IPV4 = 32bit.&lt;br /&gt;
&lt;br /&gt;
ROUTER ID = 172.30.5.4&lt;br /&gt;
&lt;br /&gt;
AREA ID = 0.0.0.1&lt;br /&gt;
&lt;br /&gt;
link state ID = 0.0.0.0, 0.0.0.1, 0.0.0.2, ...&lt;br /&gt;
&lt;br /&gt;
По принципу работы не отличается от OSPFv2, но все же есть некоторый отличия:&lt;br /&gt;
*В OSPF3 все информаци о соседях представлена в виде router-ID (lo0.0 inet address).&lt;br /&gt;
*OSPF работает по линкам, а не по сетям.&lt;br /&gt;
*OSPF3 LSA1, LSA2 не передают никакой информации о сетях (prefix).&lt;br /&gt;
*Включены 2 новых типа LSA: ''link-LSA'' и ''intra-area-prefix-LSA''. Стандартные LSA 3, 4 превратились в inter-area-prefix-LSA и inter-area-router-LSA.&lt;br /&gt;
*OSPF3 использует link-local address для обмена сообщениями между соседями (за исключением virtual-link).&lt;br /&gt;
*Для аутентификации используется IPv6 authentification header.&lt;br /&gt;
&lt;br /&gt;
'''Intra-area-prefix-LSA''': передает internal prefix, требуется, т.к. LSA 1, 2 передают только инфо о топологии.&lt;br /&gt;
&lt;br /&gt;
'''Link-LSA''': передает link-local address и сети, прикрепленные к этому link. &lt;br /&gt;
&lt;br /&gt;
==Config==&lt;br /&gt;
 [edit]&lt;br /&gt;
 routing-options {&lt;br /&gt;
 	router-id 10.200.86.1;}&lt;br /&gt;
 [edit protocols]&lt;br /&gt;
 ospf3 {&lt;br /&gt;
 	area 0.0.0.0 {&lt;br /&gt;
    		interface ge-0/0/0.80 {&lt;br /&gt;
 		interface lo0.0 {&lt;br /&gt;
 			passive; }&lt;br /&gt;
 	area 0.0.0.30 {&lt;br /&gt;
 		interface ge-0/0/0.110 }}&lt;br /&gt;
&lt;br /&gt;
 show ospf3 interface&lt;br /&gt;
 show ospf3 neighbor&lt;br /&gt;
 show ospf3 database&lt;br /&gt;
 show route protocol ospf3&lt;br /&gt;
==Realm==&lt;br /&gt;
По дефолту OSPFv3 передает инфо только о IPv6 unicast маршрутах. Чтобы OSPFv3 мог передавать и другие family, в том числе и IPv4 unicast, IPv4 multicast, IPv6 multicast, включаем '''realm''':&lt;br /&gt;
 set protocols ospf3 area 0.0.0.0 interface fe-0/1/0.0      - IPv6&lt;br /&gt;
 set protocols ospf3 realm ipv4-unicast area 0.0.0.0 interface fe-0/1/0.0 - IPv4&lt;br /&gt;
 set interfaces fe-0/1/0 unit 0 family inet6&lt;br /&gt;
&lt;br /&gt;
=Дополнительная информация=&lt;br /&gt;
*[[IS-IS]]&lt;br /&gt;
*[[BGP]]&lt;br /&gt;
*[[L3VPN]]&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=IPv6_%D0%B2_%D0%BC%D1%83%D0%BB%D1%8C%D1%82%D0%B8%D0%BA%D0%B0%D1%81%D1%82%D0%B5&amp;diff=2062</id>
		<title>IPv6 в мультикасте</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=IPv6_%D0%B2_%D0%BC%D1%83%D0%BB%D1%8C%D1%82%D0%B8%D0%BA%D0%B0%D1%81%D1%82%D0%B5&amp;diff=2062"/>
		<updated>2021-07-15T18:41:02Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#description2: Основы PIM IPv6. Формат. Адресация. Протокол MLD. PIM ASM IPv6. PIM SSM IPv6. Информация для подготовки к экзаменам Juniper Networks.}}&lt;br /&gt;
&lt;br /&gt;
=Основы=&lt;br /&gt;
Используется также как и в IPv4:&lt;br /&gt;
*RPF check&lt;br /&gt;
*PIM-DM, PIM-SM для ASM&lt;br /&gt;
*SSM&lt;br /&gt;
&lt;br /&gt;
Используется по-другому, в отличие от IPv4:&lt;br /&gt;
*IGMP -&amp;gt; MLD&lt;br /&gt;
*IPv6 include scoping&lt;br /&gt;
*не поддерживается MSDP: протокол посчитали не масштабируемым. Взамен него можно использовать внедрение инфо об RP в каждый адрес источника. Такой метод позволит работать междоменному ASM.&lt;br /&gt;
&lt;br /&gt;
==Формат==&lt;br /&gt;
&lt;br /&gt;
128 бит:&lt;br /&gt;
&lt;br /&gt;
0-7 = 1111111 - начало, определяющее, что это мультикаст адрес.&lt;br /&gt;
&lt;br /&gt;
8-11: флаги 0RPT: 0 = rezerved, R = встроенный адрес RP, P = unicast-prefix-based multicast address, T: 0 = permanent, 1 = non-permanent.&lt;br /&gt;
&lt;br /&gt;
12-15: scop (ограничение): 1 = interface-local, 2 = link-local, 4 = admin-local, 5 = site-local, 8 = organization-local, E = global&lt;br /&gt;
&lt;br /&gt;
16-128: группа.&lt;br /&gt;
&lt;br /&gt;
==Адресация==&lt;br /&gt;
- все узлы: = 224.0.0.1&lt;br /&gt;
:*FF01:0:0:0:0:0:0:1 (interface-local)&lt;br /&gt;
:*FF02:0:0:0:0:0:0:1 (link-local)&lt;br /&gt;
&lt;br /&gt;
-все роутеры: = 224.0.0.2&lt;br /&gt;
:*FF01:0:0:0:0:0:0:2 (interface-local)&lt;br /&gt;
:*FF02:0:0:0:0:0:0:2 (link-local)&lt;br /&gt;
:*FF05:0:0:0:0:0:0:2 (site-local)&lt;br /&gt;
&lt;br /&gt;
-Ethernet адреса:&lt;br /&gt;
:*33:33 + последние 32 бита IPv6 мультикаст адреса.&lt;br /&gt;
&lt;br /&gt;
=MLD=&lt;br /&gt;
MLD - sub-protocol of ICMPv6. Сообщения MLD передаются внутри ICMPv6, next-header значение = 58.&lt;br /&gt;
&lt;br /&gt;
Source-addr = link-local IPv6.&lt;br /&gt;
&lt;br /&gt;
TTL = 1 и включает IPv6 router alert header.&lt;br /&gt;
&lt;br /&gt;
MLDv1 = IGMPv2&lt;br /&gt;
MLDv2 = IGMPv3&lt;br /&gt;
&lt;br /&gt;
Типы сообщений:&lt;br /&gt;
&lt;br /&gt;
- Query: general, multicast address-specific, multicast address and source-specific query (MLDv2).&lt;br /&gt;
&lt;br /&gt;
- Multicast listener report.&lt;br /&gt;
&lt;br /&gt;
- Multicast listener done (MLDv1) = leave message.&lt;br /&gt;
&lt;br /&gt;
=ASM=&lt;br /&gt;
Может использовать как PIM-DM, так и PIM-SM.&lt;br /&gt;
&lt;br /&gt;
В PIM-SM:&lt;br /&gt;
&lt;br /&gt;
- RP discovery:&lt;br /&gt;
:*Static-RP&lt;br /&gt;
:*BSR&lt;br /&gt;
:*Auto-RP - не работает.&lt;br /&gt;
&lt;br /&gt;
- RP redundancy:&lt;br /&gt;
:*Anycast-RP with PIM-Anycast&lt;br /&gt;
:*Anycast-RP with MSDP - не работает&lt;br /&gt;
&lt;br /&gt;
- Interdomain multicast:&lt;br /&gt;
:*Embedded RP (внедренная RP)&lt;br /&gt;
:*MSDP - не работает.&lt;br /&gt;
&lt;br /&gt;
'''Embedded RP'''&lt;br /&gt;
Идея: позволить всем роутерам использовать 1 RP, чтобы изучить источники для групп. The domain ownin the multicast address вкладывает инфо об RP в IPv6 адрес группы.&lt;br /&gt;
&lt;br /&gt;
в полях IPv6:&lt;br /&gt;
*флаги: если R = 1, значит используется embedded RP. При этом P=T=1.&lt;br /&gt;
*RIID: RP interface ID.&lt;br /&gt;
&lt;br /&gt;
=SSM=&lt;br /&gt;
- Interdomain multicast:&lt;br /&gt;
:*MSDP не используем&lt;br /&gt;
:*Embedded RP используем&lt;br /&gt;
&lt;br /&gt;
- Требуется MLDv2 include option - также как и в IGMPv3 позволяет формировать получатели запрос на &amp;quot;канал&amp;quot;, а не просто на группу.&lt;br /&gt;
&lt;br /&gt;
- Блок адресов: FF3x::/96, x = scoping value.&lt;br /&gt;
&lt;br /&gt;
=Дополнительная информация=&lt;br /&gt;
*[[Глава 2. Multicast, IGMP]]&lt;br /&gt;
*[[Глава 3. Routing protocols (DVMRP, PIM-DM, PIM-SM)]]&lt;br /&gt;
*[[MSDP | Глава 4. MSDP]]&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=%D0%9F%D0%BE%D0%BB%D0%B8%D1%82%D0%B8%D0%BA%D0%B8_%D0%B2_%D0%BC%D1%83%D0%BB%D1%8C%D1%82%D0%B8%D0%BA%D0%B0%D1%81%D1%82%D0%B5&amp;diff=2061</id>
		<title>Политики в мультикасте</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=%D0%9F%D0%BE%D0%BB%D0%B8%D1%82%D0%B8%D0%BA%D0%B8_%D0%B2_%D0%BC%D1%83%D0%BB%D1%8C%D1%82%D0%B8%D0%BA%D0%B0%D1%81%D1%82%D0%B5&amp;diff=2061"/>
		<updated>2021-07-15T18:40:30Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#description2:IGMP join фильтрация. Политики на PIM соседство. Фильтрация PIM join. Фильтрация PIM register. Фильтрация BSR. Фильтрация MSDP SA сообщений. Фильтрация мультикаст трафика. Информация для подготовки к экзаменам Juniper Networks}}&lt;br /&gt;
&lt;br /&gt;
Используя policy, можно&lt;br /&gt;
*более эффективно использовать полосу&lt;br /&gt;
*исключить различные проблемы в сети (не большое кол-во state в сети (S,G)), благодаря указанию конкретных групп, конкретных источников; &lt;br /&gt;
*можно предотвратить DoS атак.&lt;br /&gt;
&lt;br /&gt;
=IGMP join=&lt;br /&gt;
*можно указать через policy группу (route-filter) и источник (source-address) на которые нельзя подписываться.&lt;br /&gt;
 set policy-options policy-statement block-igmp term 1 from route-filter 235.4.5.6/32 exact&lt;br /&gt;
 set policy-options policy-statement block-igmp term 1 from source-address 10.66.66.2 exact&lt;br /&gt;
 set policy-options policy-statement block-igmp term 1 then reject&lt;br /&gt;
 set protocols igmp interface ge-0/0/0.0 group-policy block-igmp&lt;br /&gt;
 &lt;br /&gt;
*можно ограничить кол-во подписок на интерфейсе.&lt;br /&gt;
 set protocols igmp interface ge-0/0/0.0 group-limit 100&lt;br /&gt;
&lt;br /&gt;
*каждый join считается как отдельная подписка: (*,g), (s,g) - 2 разных подписки&lt;br /&gt;
*каждый join на разные источники для одной и той же группы - 2 разные подписки: (s1,g), (s2,g).&lt;br /&gt;
*если закоммитить число групп, которое по факту меньше числа уже изученных групп, то все записи сотрутся и хостам придется переподписаться.&lt;br /&gt;
&lt;br /&gt;
=Policy for PIM-SM=&lt;br /&gt;
==Соседство==&lt;br /&gt;
Фильтруем нежелательных соседей.&lt;br /&gt;
 set policy-options policy-statement no-macduff term 1 from route-filter 192.168.86.14/32 exact&lt;br /&gt;
 set policy-options policy-statement no-macduff term 1 then reject&lt;br /&gt;
 set protocols pim interface ge-0/0/0.70 neighbor-policy no-macduff&lt;br /&gt;
&lt;br /&gt;
 show pim statistics | find &amp;quot;Hello drop&amp;quot;&lt;br /&gt;
 Hello dropped on neighbor policy              4&lt;br /&gt;
&lt;br /&gt;
Если пришел пакет от роутера с адресом, описанном в policy, такой пакет будет отброшен. Если соседство уже было установлено до создания policy, то соседство будет сохраняться до истечения holdtime.&lt;br /&gt;
&lt;br /&gt;
Для указания соседей в policy лучше использовать /32 - linknet адрес, '''не lo''', потому что пакеты идут hop by hop, используя только p2p адреса.&lt;br /&gt;
&lt;br /&gt;
==Join/prune==&lt;br /&gt;
===Фильтруем вх/исх сообщения===&lt;br /&gt;
Есть несколько параметров по которым можно отстроить policy: ''neighbor, interface, route-filter, source-address-filter''.&lt;br /&gt;
*''neighbor'': прописываем физический интерфейсный адрес, т.к. join передается от хопа к хопу.&lt;br /&gt;
*''interface'': вх логический интерфейс.&lt;br /&gt;
*''route-filter'': multicast group&lt;br /&gt;
*''source-address-filter'': source address (если исползуем ASM, то адрес RP).&lt;br /&gt;
&lt;br /&gt;
Пример для фильтрации входящих join:&lt;br /&gt;
 set protocols pim import no-join&lt;br /&gt;
 set policy-options policy-statement no-join term 1 from route-filter 235.4.5.6/32 exact&lt;br /&gt;
 set policy-options policy-statement no-join term 1 from source-address-filter 10.66.66.2/32 exact&lt;br /&gt;
 set policy-options policy-statement no-join term 1 then reject&lt;br /&gt;
&lt;br /&gt;
Для исходящих join/prune все тоже самое, только &lt;br /&gt;
 set protocols pim export ...&lt;br /&gt;
&lt;br /&gt;
Диагностика:&lt;br /&gt;
 &amp;gt; show pim statistics | match &amp;quot;Rx Join/Prunes filtered&amp;quot;&lt;br /&gt;
 Rx Joins/Prunes filtered                     12&lt;br /&gt;
&lt;br /&gt;
===Join suppression===&lt;br /&gt;
Есть отдельная функция, которая позволяет блокировать отправляемые Join сообщения в сторону upstream роутера, если он видит в сети join от других роутеров к той же сети (т.к. join отправляются на общий адрес 224.0.0.13, то все роутеры в широковещательном сегменте видят сообщения).&lt;br /&gt;
&lt;br /&gt;
*''reset-tracking-bit'' - активирует подавление PIM join сообщений на каждом PIM интерфейсе роутера. При этом в пакете сбрасывается значение tracking-bit (1-&amp;gt;0).&lt;br /&gt;
&lt;br /&gt;
Когда получено несколько одинаковых PIM join на роутер, то активируется некий произвольный временной интервал (66-84 мс), и роутер не передает PIM join в сторону upstream.&lt;br /&gt;
*''override-interval'' - max время задержки отправки join при обнаружении такого же join.&lt;br /&gt;
*''propagation-delay'' - время, которое upstream роутер, получив prune, ждет join от downstream роутеров.&lt;br /&gt;
&lt;br /&gt;
 set protocols pim reset-tracking-bit&lt;br /&gt;
 set protocols pim propagation-delay 100&lt;br /&gt;
 set protocols pim override-interval 3500&lt;br /&gt;
&lt;br /&gt;
==Register==&lt;br /&gt;
Работает только для ASM, т.к. в SSM получатели уже знают информацию об источниках.&lt;br /&gt;
&lt;br /&gt;
Можно настроить register filter в двух вариантах:&lt;br /&gt;
#Если на RP - то фильтр на вход&lt;br /&gt;
#Если на DR - то фильтр на выход&lt;br /&gt;
&lt;br /&gt;
Пример для source RP:&lt;br /&gt;
 set protocols pim rp '''rp'''-register-policy &lt;br /&gt;
 set protocols pim rp ''no-register''&lt;br /&gt;
 set policy-options policy-statement ''no-register'' term 1 from route-filter 235.4.5.6/32 exact&lt;br /&gt;
 set policy-options policy-statement ''no-register'' term 1 from source-address-filter 10.66.66.2/32 exact&lt;br /&gt;
 set policy-options policy-statement ''no-register'' term 1 then reject&lt;br /&gt;
&lt;br /&gt;
Пример для source DR аналогичен по конфигурации, только &lt;br /&gt;
 set protocols pim rp '''dr'''-register-policy ''no-register''&lt;br /&gt;
&lt;br /&gt;
В результате такой фильтрации source DR не будет слать к RP трафик от источника 10.66.66.2 с группой 235.4.5.6. Поэтому при использовании ASM получатели не смогут получать трафик от этого источника, а при использовании SSM получатели его все-равно получат.&lt;br /&gt;
&lt;br /&gt;
Для диагностики:&lt;br /&gt;
 show pim statistics | match &amp;quot;Rx register msgs filtering drop&amp;quot;&lt;br /&gt;
 Rx Register msgs filtering drop               3&lt;br /&gt;
&lt;br /&gt;
=BSR messages=&lt;br /&gt;
Обычно используется, чтобы BSR из разных доменов не распространяли информацию о своих RP.&lt;br /&gt;
&lt;br /&gt;
 set policy-options policy-statement block-bsr-import term 1 from interface ge-0/0/0.0&lt;br /&gt;
 set policy-options policy-statement block-bsr-import term 1 then reject&lt;br /&gt;
 set policy-options policy-statement block-bsr-export term 1 from interface ge-0/0/0.0&lt;br /&gt;
 set policy-options policy-statement block-bsr-export term 1 then reject&lt;br /&gt;
 set protocols pim rp bootstrap-import block-bsr-import&lt;br /&gt;
 set protocols pim rp bootstrap-export block-bsr-export&lt;br /&gt;
&lt;br /&gt;
 show pim statistics interface ge-0/0/0.0 | match &amp;quot;V2 Bootstrap&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Еще один метод не распространять информацию об RP в другой домен - настроить PIMv1 на интерфейсе (т.к. BSR работает только с v2).&lt;br /&gt;
&lt;br /&gt;
=MSDP SA messages=&lt;br /&gt;
&lt;br /&gt;
*SA import&lt;br /&gt;
Для policy используются следующие критерии: neighbor, interface, route-filter (группа), source-address-filter (источник).&lt;br /&gt;
&lt;br /&gt;
При применении policy проходят только явно разрешенные SA сообщения, для этого обязательно включить accept-all. &lt;br /&gt;
 set policy-option policy-statement block-SA-imort term 1 from neighbor 192.168.1.2 &lt;br /&gt;
 set policy-option policy-statement block-SA-imort term 1 from interface ge-0/0/0.0 &lt;br /&gt;
 set policy-option policy-statement block-SA-imort term 1 from route-filter 224.7.7.7/32 exact &lt;br /&gt;
 set policy-option policy-statement block-SA-imort term 1 from source-address-filter 10.0.107.2/32 exact&lt;br /&gt;
 set policy-option policy-statement block-SA-imort term 1 then reject&lt;br /&gt;
&lt;br /&gt;
 set protocols msdp group AS65009 peer 192.168.1.2 import block-SA-import&lt;br /&gt;
&lt;br /&gt;
 show msdp source-active detail | mat Filtered&lt;br /&gt;
*SA export&lt;br /&gt;
Все тоже самое как и для import, только:&lt;br /&gt;
 set protocols msdp group AS65009 peer 192.168.1.2 export block-SA-export&lt;br /&gt;
&lt;br /&gt;
*SA limit&lt;br /&gt;
- Дефолтное ограничение - 25000. Можно ставить 1-1млн.&lt;br /&gt;
&lt;br /&gt;
- Лимит можно ставить глобально, на группу, на пира. Применятся ВСЕ, а не более специфичные.&lt;br /&gt;
&lt;br /&gt;
- Лимит можно ставить и для конкретной группы источников. При этом для пира стоит общее ограничение и для конкретной группы - применятся оба ограничения.&lt;br /&gt;
&lt;br /&gt;
 set protocols msdp active-source-limit maximum 10000 threshold 8000&lt;br /&gt;
 set protocols msdp group AS65009 peer 192.168.100.10 source 10.1.0.0/16 active-source-limit 500&lt;br /&gt;
 set protocols msdp group AS65009 peer 192.168.100.10 active-source-limit 10000 threshold 8000&lt;br /&gt;
&lt;br /&gt;
=Multicast traffic=&lt;br /&gt;
Описано в RFC 2365, называется Administrative scoping (административные ограничения).&lt;br /&gt;
&lt;br /&gt;
В основном используется для непрохождения трафика между доменам. Админу нужно задать огрничение для домена - с помощью пограничных интерфейсов.&lt;br /&gt;
&lt;br /&gt;
В Junos 2 метода:&lt;br /&gt;
*Named scoping&lt;br /&gt;
Каждая группа должна быть именована. Один интерфейс может принадлежать нескольким группам.&lt;br /&gt;
 set routing-options multicast scope auto-rp-deiscovery prefix 224.0.1.40/32&lt;br /&gt;
 set routing-options multicast scope auto-rp-deiscovery interface ge-0/0/0.0&lt;br /&gt;
 set routing-options multicast scope scoped-range prefix 239.0.0.0/8&lt;br /&gt;
 set routing-options multicast scope scoped-range interface ge-0/0/0.0&lt;br /&gt;
 show multicast scope&lt;br /&gt;
&lt;br /&gt;
В примере показано как контролировать auto-RP трафик между доменами, чтобы не использовать RP другого домена.&lt;br /&gt;
 &lt;br /&gt;
*Scope policies&lt;br /&gt;
Более гибкий подход. Используя разные термы можно делать выборку по разным интерфейсам, тогда как в named-scope это займет кучу конфига.&lt;br /&gt;
&lt;br /&gt;
Named scope и scoping policy - взаимоисключающие. При этом в named группа - 239.192/16 автоматически добавляется на интерфейсе, а при использовании scoping policy - автоматически не добавляется, нужно писать ручками. &lt;br /&gt;
&lt;br /&gt;
 set policy-option policy-stetment mcast-scope term 1 from interface ge-0/0/0.0&lt;br /&gt;
 set policy-option policy-stetment mcast-scope term 1 from route-filter 239.0.0.0/8 orlonger&lt;br /&gt;
 set policy-option policy-stetment mcast-scope term 1 from route-filter 224.0.1.40/32 exact&lt;br /&gt;
 set policy-option policy-stetment mcast-scope term 1 from route-filter 224.0.1.39/32 exact&lt;br /&gt;
 set policy-option policy-stetment mcast-scope term 1 then reject&lt;br /&gt;
 set routing-options multicast scope-policy mcast-scope&lt;br /&gt;
&lt;br /&gt;
Известные административные ограничения:&lt;br /&gt;
*site-local: 239.255/16&lt;br /&gt;
*organization-local: 239.192/14 - private use in network.&lt;br /&gt;
*unassigned: 239/10, 239.64/10, 239.128/10&lt;br /&gt;
*link-local: 224/24&lt;br /&gt;
&lt;br /&gt;
=Дополнительная информация=&lt;br /&gt;
*[[Глава 2. Multicast, IGMP]]&lt;br /&gt;
*[[Глава 3. Routing protocols (DVMRP, PIM-DM, PIM-SM)]]&lt;br /&gt;
*[[MSDP | Глава 4. MSDP]]&lt;br /&gt;
*[[Глава 5. PIM-SSM]]&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=%D0%93%D0%BB%D0%B0%D0%B2%D0%B0_5._PIM-SSM&amp;diff=2060</id>
		<title>Глава 5. PIM-SSM</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=%D0%93%D0%BB%D0%B0%D0%B2%D0%B0_5._PIM-SSM&amp;diff=2060"/>
		<updated>2021-07-15T18:39:29Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#description2:PIM ASM. Как работает PIM SSM. Адресное пространство PIM SSM. Использование IGMPv3 и SSM. PIM-SM + SSM. Конфигурация PIM SSM. Траблшутинг. Информация для подготовки к экзаменам Juniper Networks}}&lt;br /&gt;
&lt;br /&gt;
==ASM==&lt;br /&gt;
&lt;br /&gt;
*Нахождение источника - задача сети.&lt;br /&gt;
:*PIM-DM: флуд от источника всем получателям. Из-за этого хранится много (S,G) =&amp;gt; проблемы с масштабируемостью.&lt;br /&gt;
:*PIM-SM: регистрация источника на RP. Более сложный механизм.&lt;br /&gt;
:*Междоменный мультикаст: MSDP.&lt;br /&gt;
&lt;br /&gt;
*Поддерживает несколько типов приложений:&lt;br /&gt;
:*One-to-many&lt;br /&gt;
:*Many-to-many&lt;br /&gt;
&lt;br /&gt;
*Распределение адресного пространства - адреса групп должны быть уникальными в глобальной сети.&lt;br /&gt;
:* Выделены блоки SDP/SAP, GLOP, Admin scoped.&lt;br /&gt;
&lt;br /&gt;
==SSM==&lt;br /&gt;
&lt;br /&gt;
*Нахождение источника - задача приложения у получателя.&lt;br /&gt;
:*Получатель уже знает о необходимом источнике.&lt;br /&gt;
:*Получатель подписывает на определенный канал - (S,G). &lt;br /&gt;
:*Приложение должно поддерживать IGMPv3.&lt;br /&gt;
*Для междоменного мультикаста больше не нужно использование MSDP и RP.&lt;br /&gt;
*Использует часть PIM-SM функционала:&lt;br /&gt;
:*Всегда используется (S,G) source-based tree.&lt;br /&gt;
*В основном использует 1 тип приложений: One-to-many&lt;br /&gt;
*Распределние адресного пространства:&lt;br /&gt;
:*Выделен блок: 232/8.&lt;br /&gt;
:*Один и тот же адрес группы может использоваться разными источниками на просторах всего интернета. Из-за этого усложнены DoS атаки.&lt;br /&gt;
&lt;br /&gt;
==Как работает==&lt;br /&gt;
*Получатель знает все источники и группы, к которым он может подписаться (может быть заранее полученный список каналов на приставке).&lt;br /&gt;
*От получателя subscribe (S,G), используя IGMPv3 (include mode).&lt;br /&gt;
*DR на сегменте получателя шлет join (S,G) в сторону источника и начинает строить source-based tree.&lt;br /&gt;
*DR на сегменте источника как только получил join (S,G) - начинает слать трафик по shortest path tree (spt) к получателю.&lt;br /&gt;
&lt;br /&gt;
==Разница в терминологии==&lt;br /&gt;
&lt;br /&gt;
*'''Address identifier:''' (G) vs (S,G) &lt;br /&gt;
*'''Address destination:''' group vs channel&lt;br /&gt;
*'''Receiver protocol:''' IGMPv1,2,3 vs IGMPv3&lt;br /&gt;
*'''Receiver Operations:''' Join,Leave vs Subscribe/Unsubscribe&lt;br /&gt;
*'''Address range:''' 224/4, exclude 232/8 vs 232/8&lt;br /&gt;
&lt;br /&gt;
==Адресное пространство==&lt;br /&gt;
SSM не работает с shared-tree. SSM не обрабатывает сообщения вида: (*,G).&lt;br /&gt;
&lt;br /&gt;
Junos позволяет определить другое поведение для адресных блоков:&lt;br /&gt;
*Добавлять адресное пространство для использования только SSM.&lt;br /&gt;
 set routing-options multicast ssm-groups 227.0.0.0/24&lt;br /&gt;
*Позволяет ASM использовать SSM блок.&lt;br /&gt;
 set routing-options multicast asm-override-ssm&lt;br /&gt;
&lt;br /&gt;
==IGMPv3 + SSM==&lt;br /&gt;
&lt;br /&gt;
ASM использует 1,2,3 версии протокола. Group joins не определяют конкретный источник. 3 версия предусматривает работу именно с (S,G), что не очень то подходит по ASM, поэтому для ASM IGMPv3 работает только в режиме exclude.&lt;br /&gt;
&lt;br /&gt;
SSM использует только 3 версию. При подписке должны быть определены источник и группа. Этот функционал может обеспечить IGMPv3 include mode.&lt;br /&gt;
&lt;br /&gt;
В IGMPv3 включены 2 новых опции:&lt;br /&gt;
*include (этот режим обеспечивает определение источника для группы =&amp;gt; используется только SSM)&lt;br /&gt;
*exclude (этот режим позволяет исключать определенный источник из join сообщения =&amp;gt; поддерживается ASM)&lt;br /&gt;
&lt;br /&gt;
'''IGMPv3 работа получателя'''&lt;br /&gt;
*получатель отправляет membership report на DA = 224.0.0.22&lt;br /&gt;
&lt;br /&gt;
membership report  включает в себя 3 основных типа:&lt;br /&gt;
*current-state record: MODE_IS_INCLUDE, MODE_IS_EXCLUDE;&lt;br /&gt;
*filter-mode-change (когда происходит смена режима): CHANGE_TO_INCLUDE_MODE, CHANGE_TO_EXCLUDE_MODE;&lt;br /&gt;
*source-list-change (когда происходит подписка/отписка): ALLOW_NEW_SOURCES, BLOCK_OLD_SOURCES;&lt;br /&gt;
&lt;br /&gt;
Для SSM модели используется только 3 операции:&lt;br /&gt;
*подписка: ALLOW_NEW_SOURCES&lt;br /&gt;
*поддержание подписки: MODE_IS_INCLUDE&lt;br /&gt;
*отписка: BLOCK_OLD_SOURCES&lt;br /&gt;
&lt;br /&gt;
'''Типы Query'''&lt;br /&gt;
*general query -&amp;gt;224.0.0.1&lt;br /&gt;
*group-specific query&lt;br /&gt;
*group-source-specific-query (include source address).&lt;br /&gt;
&lt;br /&gt;
==PIM-SM + SSM==&lt;br /&gt;
&lt;br /&gt;
SSM это упрощенная форма PIM-SM. Используется только часть функционала от PIM-SM.&lt;br /&gt;
&lt;br /&gt;
Блок 232/8 работает только с обменом сообщений для source-based tree. Никаких сообщений для shared-tree.&lt;br /&gt;
&lt;br /&gt;
*Сегмент получателя (receiver DR):&lt;br /&gt;
:*игнорируются любый (*,G) сообщения&lt;br /&gt;
:*не должен отправлять (*,G) upstream роутерам&lt;br /&gt;
&lt;br /&gt;
*Сегмент источника (source DR):&lt;br /&gt;
:*не должен отправлять register сообщения к RP, когда получен трафик от источника.&lt;br /&gt;
&lt;br /&gt;
*RP роутер:&lt;br /&gt;
:*игнорирует register сообщения от source DR.&lt;br /&gt;
:*игнорирует SA сообщения от  MSDP пиров.&lt;br /&gt;
&lt;br /&gt;
*Другие роутеры:&lt;br /&gt;
:*игнорируют все (*,G) сообщения от downstream роутеров.&lt;br /&gt;
&lt;br /&gt;
Вообще, PIM-SM позволяет использовать как ASM, так и SSM. В зависимости от получаемых сообщений и сконфигурированных SSM блоков, DR роутер устанавливает либо shared tree к RP, либо source-based tree к источнику.&lt;br /&gt;
&lt;br /&gt;
==Config==&lt;br /&gt;
&lt;br /&gt;
На интерфейсах к сторону получателей - IGMPv3. При этом на такие интерфейсы буду приходить и запросы от IGMPv1, v2, которые будет использовать для своей работы ASM.&lt;br /&gt;
*На сети нужен ASM + SSM: в этом случае конфиг должен быть как для стандартной PIM-SM модели с определенным RP discovery механизмом.&lt;br /&gt;
*На сети нужен только SSM: в этом случае нужно просто сконфигурировать все интерфейсы в sparse mode.&lt;br /&gt;
&lt;br /&gt;
Для использования адресного пространства совместно:&lt;br /&gt;
 set routing-options multicast ssm-groups 227.0.0.0/24&lt;br /&gt;
 set routing-options multicast asm-override-ssm&lt;br /&gt;
&lt;br /&gt;
===SSM-mapping===&lt;br /&gt;
Если получатели не поддерживают IGMPv3, SSM maps могут переделать join из (*,G) в (S,G):&lt;br /&gt;
&lt;br /&gt;
1.&lt;br /&gt;
 set policy-options policy-statement ''ssm-mapping-policy'' term 1 from route-filter 232.7.7.7/32 exact&lt;br /&gt;
 set policy-options policy-statement ''ssm-mapping-policy'' term 1 then accept&lt;br /&gt;
2.&lt;br /&gt;
 set routing-options multicast ssm-map ''ssm-mapping-example'' policy ''ssm-mapping-policy''&lt;br /&gt;
 set routing-options multicast ssm-map ''ssm-mapping-example'' source 192.168.100.10&lt;br /&gt;
3.&lt;br /&gt;
 set protocols igmp interface ge-0/0/0.0 ssm-map ''ssm-mapping-example''&lt;br /&gt;
&lt;br /&gt;
 result: (*, 232.7.7.7) -&amp;gt; (192.168.100.10, 232.7.7.7)&lt;br /&gt;
&lt;br /&gt;
Для IPv6 делается все точно по такому же алгоритму, только в конце ssm-map применяется в рамках протокола mld.&lt;br /&gt;
&lt;br /&gt;
Для troubleshoting используются все те же команды.&lt;br /&gt;
&lt;br /&gt;
==Troubleshooting==&lt;br /&gt;
 show pim interfaces&lt;br /&gt;
 show pim neighbors extensive      || можно посмотреть RX Join groups!!&lt;br /&gt;
 show pim statictics&lt;br /&gt;
 show pim join extensive           || помимо прочего, полезно: &amp;quot;Upstream state: Join to Source, Prune to RP&amp;quot; &lt;br /&gt;
 show pim source detail&lt;br /&gt;
 show pim rps                      || какие rp известны, через какой механизм, какой набор групп приходит&lt;br /&gt;
 show pim rps extensive            || помимо того, что выше - видны конкретные группы, статус, time active и много всяких подробностей&lt;br /&gt;
 show pim bootsrap                 || активный BSR роутер&lt;br /&gt;
 show multicast rpf x.x.x.x&lt;br /&gt;
 show multicast next-hops&lt;br /&gt;
 show multicast usage&lt;br /&gt;
 show multicast route extensive      || можно посмотреть и трафик, относящийся к группе &lt;br /&gt;
 show route table inet.1          || таблица форвардинга - показана пара G+S&lt;br /&gt;
 show route table inet.0 | net.2     || проверяем, что source-address есть в этой таблице и доступен&lt;br /&gt;
 traceoptions             || для диагностики не забываем включать&lt;br /&gt;
 &lt;br /&gt;
До того, как проверять PIM, проверяем unicast связность от роутера до источника мультикаста (по таблицам маршрутизации)&lt;br /&gt;
 show pim neighbors &lt;br /&gt;
 Instance: PIM.master&lt;br /&gt;
 Interface           IP V Mode        Option       Uptime Neighbor addr &lt;br /&gt;
 xe-1/1/0.910         4 2             HPLGT       13w2d5h 212.1.253.189  &lt;br /&gt;
 xe-1/2/0.822         4 2             HPLG       03:08:00 192.168.152.49 &lt;br /&gt;
&lt;br /&gt;
 B = Bidirectional Capable = bidirectional mode supported&lt;br /&gt;
 G = Generation Identifier = gracefull restart turned on for pim&lt;br /&gt;
 H = Hello Option Holdtime, &lt;br /&gt;
 L = Hello Option LAN Prune Delay,&lt;br /&gt;
 P = Hello Option DR Priority, &lt;br /&gt;
 T = Tracking Bit      = Join Suppression supported, если нет T - то у соседа настроен: ''reset-tracking-bit''&lt;br /&gt;
&lt;br /&gt;
 show pim neighbors detail&lt;br /&gt;
 Interface: xe-1/2/0.822&lt;br /&gt;
    Address: 192.168.152.49,	IPv4, PIM v2, ''sg Join Count: 2'', tsg Join Count: 0&lt;br /&gt;
        BFD: Disabled&lt;br /&gt;
        Hello Option Holdtime: 105 seconds 102 remaining&lt;br /&gt;
        Hello Option DR Priority: 1&lt;br /&gt;
        Hello Option Generation ID: 1593016797&lt;br /&gt;
        Hello Option LAN Prune Delay: delay 1000 ms override 3000 ms&lt;br /&gt;
   Address: 192.168.152.50,	IPv4, PIM v2, Mode: Sparse, sg Join Count: 0, tsg Join Count: 0&lt;br /&gt;
        Hello Option Holdtime: 65535 seconds&lt;br /&gt;
        Hello Option DR Priority: 1&lt;br /&gt;
        Hello Option Generation ID: 1898464853&lt;br /&gt;
        Hello Option LAN Prune Delay: delay 500 ms override 2000 ms&lt;br /&gt;
                                      Join Suppression supported&lt;br /&gt;
PIM Join и PIM Prune можно посмотреть в '''pim statistics''' (как принятые так и отправленные).&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; show multicast route group 235.69.101.1 extensive    &lt;br /&gt;
 Instance: master Family: INET&lt;br /&gt;
 Group: 235.69.101.1&lt;br /&gt;
    Source: 192.168.151.11/32&lt;br /&gt;
    Upstream interface: xe-1/2/0.822&lt;br /&gt;
    Downstream interface list: &lt;br /&gt;
        xe-1/2/0.900&lt;br /&gt;
    Number of outgoing interfaces: 1&lt;br /&gt;
    Session description: Unknown&lt;br /&gt;
    '''Statistics: 447 kBps, 332 pps, 7110535 packets'''&lt;br /&gt;
    Next-hop ID: 1048579&lt;br /&gt;
    Upstream protocol: PIM&lt;br /&gt;
    Route state: Active&lt;br /&gt;
    '''Forwarding state: Forwarding'''&lt;br /&gt;
    Cache lifetime/timeout: 360 seconds&lt;br /&gt;
    Wrong incoming interface notifications: 28&lt;br /&gt;
    Uptime: 06:01:21&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; show pim statistics interface xe-1/2/0.822 &lt;br /&gt;
 Instance: PIM.master Family: INET&lt;br /&gt;
 PIM Interface statistics for xe-1/2/0.822&lt;br /&gt;
 PIM Message type        Received       Sent  Rx errors&lt;br /&gt;
 '''V2 Hello                     389        413          0'''&lt;br /&gt;
 V2 Register                    0          0          0&lt;br /&gt;
 V2 Register Stop               0          0          0&lt;br /&gt;
 '''V2 Join Prune                  0        195          0'''&lt;br /&gt;
&lt;br /&gt;
В monitor traffic interface не будут отображаться PIM Join, PIM Prune. Если требуется помониторить входящие и исходящие пакеты, то можно только замиррорить трафик.&lt;br /&gt;
 &amp;gt; show route table inet.1 &lt;br /&gt;
 235.69.101.1,192.168.151.11/32*[PIM/105] 05:57:24&lt;br /&gt;
                      Multicast (IPv4) Composite&lt;br /&gt;
 235.69.101.20,192.168.151.12/32*[PIM/105] 05:57:24&lt;br /&gt;
                      Multicast (IPv4) Composite&lt;br /&gt;
&lt;br /&gt;
==Дополнительная информация==&lt;br /&gt;
*[[Глава 3. Routing protocols (DVMRP, PIM-DM, PIM-SM)]]&lt;br /&gt;
*[[Глава 2. Multicast, IGMP]]&lt;br /&gt;
*[[Политики в мультикасте | Глава 6. Политики в мультикасте]]&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=MSDP&amp;diff=2059</id>
		<title>MSDP</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=MSDP&amp;diff=2059"/>
		<updated>2021-07-15T18:38:54Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#description2:Описание и работа протокола MSDP. Процесс установления сессии. Флудинг SA-сообщений (source-active). FPR-check для SA сообщений (Peer RPF-check). Mesh groups. Настройка. Траблшутинг. Anycast RP. Материалы для подготовки к экзаменам Juniper Networks}}&lt;br /&gt;
==Описание и работа протокола MSDP==&lt;br /&gt;
Используется только для IPv4.&lt;br /&gt;
&lt;br /&gt;
Междоменный обмен мультикастом, использующий PIM-SM.&lt;br /&gt;
&lt;br /&gt;
Проблема заключается в том, что если источник и получатель находятся в разных доменах (разные AS в данном случае), то они не смогут &amp;quot;найти друг друга&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
+: Каждый ISP сам решает где расположить RP.&lt;br /&gt;
&lt;br /&gt;
+: Между доменами в качестве маршрутизации используется BGP (делаем RPF check). Если топологии unicast и multicast одинаковые - BGP в inet.0. Если разные - MP-BGP в inet.2.&lt;br /&gt;
&lt;br /&gt;
MSDP распространяет информацию от RP об источниках из других доменов (т.к. их меньше в сети, чем получателей), используя Source-active message (SA).&lt;br /&gt;
&lt;br /&gt;
Как это происходит:&lt;br /&gt;
*RP (AS1) знает об источнике&lt;br /&gt;
*RP (AS1) шлет инфу об источнике к RP (AS2), используя SA message.&lt;br /&gt;
*RP (AS2) получает (S,G) и т.о. все получатели смогут соединиться с этим новым источником из другой AS.&lt;br /&gt;
&lt;br /&gt;
Обычно запускается на PIM-SM RP, но можно использовать и на non-RP роутерах.&lt;br /&gt;
&lt;br /&gt;
При сконфигурированном MSDP также строятся shared tree (от RP к получателю), source tree (от RP к источнику). И также как и в PIM-SM при получении первого мультикаст пакета DR роутером, он пытается построить shortest-path tree.&lt;br /&gt;
&lt;br /&gt;
MSPD устанавливает соседство, используя TCP (639 порт). Как только установилось соседство между MSDP peers =&amp;gt; возможен обмен SA message.&lt;br /&gt;
&lt;br /&gt;
В SA-message содержится: originating RP, source, group.&lt;br /&gt;
&lt;br /&gt;
Когда у RP в одной AS появляется получатель и нужная группа находится в другой AS,  RP как и в PIM-SM начинает слать PIM-join к источнику (в другую AS).&lt;br /&gt;
&lt;br /&gt;
===Процесс установления сессии===&lt;br /&gt;
*Роутер с наибольшим ip становится пассивным и слушает TCP 639 от активных роутеров.&lt;br /&gt;
&lt;br /&gt;
Состояния:&lt;br /&gt;
*'''Disable''': MSDP peer не сконфигурирован.&lt;br /&gt;
*'''Inactive''': MSDP peer сконфигурирован, но не слушает или не подключен.&lt;br /&gt;
*'''Connect''': active MSDP peer пытается установить TCP сессию.&lt;br /&gt;
*'''Listen''': passive MSDP peer сконфигурирован и слушает 639 порт.&lt;br /&gt;
*'''Established''': TCP сессия установлена.&lt;br /&gt;
&lt;br /&gt;
===Флудинг SA-сообщений (source-active):===&lt;br /&gt;
*Исходное SA сообщение отправляется, когда источник в первый раз зарегистрировался на RP.&lt;br /&gt;
*Если источник все еще активен, RP будет отправлять SA сообщения каждые 60 секунд.&lt;br /&gt;
*SA сообщения проходят RPF-check, когда прилетают к MSDP peer.&lt;br /&gt;
*Если сообщение прошло RPF-check, MSDP peer хранит его в своем кэше (inet.4). Также сообщения пересылаются всем MSDP пирам, за исключением пира, от которого пришло SA.&lt;br /&gt;
 clear msdp cache&lt;br /&gt;
&lt;br /&gt;
===FPR-check для SA сообщений (Peer RPF-check)===&lt;br /&gt;
SA сообщения флудятся всем пирам, исключая тот, от которого пришло сообщение. SA сообщения обязательно должны пройти RPF check.&lt;br /&gt;
&lt;br /&gt;
Проверяется то, чтобы originated RP и MSDP peer сидят за одним интерфейсом, и трафик передается только в сторону от originated RP.&lt;br /&gt;
{{note|text=Не используется для предоствращения петель! Но за счет того, что некоторые SA отвалятся - уменьшает их количество в сети.}}&lt;br /&gt;
&lt;br /&gt;
''RPF check проходит, если:''&lt;br /&gt;
&lt;br /&gt;
*Originating RP = MSDP peer данного маршрутизатора.&lt;br /&gt;
*SA сообщения получены от non-originating RP:&lt;br /&gt;
:* сообщение получено от MSDP peer, который является BGP next-hop для originating RP.&lt;br /&gt;
:* IGP next-hop MSDP peer = next-hop to originating RP.&lt;br /&gt;
:* MSDP peer находится в последней AS, в AS-path к originating RP.&lt;br /&gt;
&lt;br /&gt;
''RPF-check не делается, если:''&lt;br /&gt;
&lt;br /&gt;
* SA сообщение от MSDP peer из mesh группы.&lt;br /&gt;
* SA сообщение от default MSDP peer. (случай с stub доменом, где используется всего один единственный MSDP peer).&lt;br /&gt;
&lt;br /&gt;
===Mesh groups===&lt;br /&gt;
Используют для уменьшения флуда SA сообщений =&amp;gt; между MSDP peers внутри mesh group не распространяются SA-message, т.к. смысла в них нет. Все члены Mesh-group получат SA от originating members.&lt;br /&gt;
&lt;br /&gt;
Обычно используют для intra-domain, потому что SA не проходят RPF-check, а автоматически становятся accept.&lt;br /&gt;
&lt;br /&gt;
Флуд в mesh-groups:&lt;br /&gt;
*SA, полученные от соседей по mesh группы не передаются другим членам. Сообщения принимаются и флудятся другим MSDP peers (не из этой же mesh-group).&lt;br /&gt;
*SA, полученные от пиров, не состоящих в группах - подвергаются обычному RPF-check. Если проверка прошла успешно - SA флудятся всем остальным пирам (в других AS и в mesh-group).&lt;br /&gt;
&lt;br /&gt;
===Конфигурация===&lt;br /&gt;
 set protocols msdp local-address 10.200.86.2&lt;br /&gt;
 set protocols msdp group anycast-rp mode mesh-group&lt;br /&gt;
 set protocols msdp group anycast-rp peer 10.200.86.9&lt;br /&gt;
 set protocols msdp group anycast-rp peer 10.200.86.3&lt;br /&gt;
 set protocols msdp group customers mode mesh-group&lt;br /&gt;
 set protocols msdp group customers export export-msdp-groups&lt;br /&gt;
 set protocols msdp group customers export export-msdp-sources&lt;br /&gt;
 set protocols msdp group customers peer 192.168.86.13 local-address 192.168.86.14&lt;br /&gt;
 set protocols msdp group customers peer 192.168.86.37 local-address 192.168.86.38&lt;br /&gt;
&lt;br /&gt;
 set protocols msdp peer 192.168.2.1 default-peer      || используем, чтобы убедиться, что все SA принимаются от этого пира (диагностика)&lt;br /&gt;
&lt;br /&gt;
===Troubleshoting===&lt;br /&gt;
&lt;br /&gt;
 show msdp&lt;br /&gt;
 show mspd peer 212.1.254.14 detail&lt;br /&gt;
 show msdp source-active &lt;br /&gt;
 show route table inet.4        || SA cache&lt;br /&gt;
 show msdp statisctics&lt;br /&gt;
&lt;br /&gt;
''Traceoptions''&lt;br /&gt;
 set protocols msdp traceoptions file msdp-debug&lt;br /&gt;
 set protocols msdp traceoptions file size 10m&lt;br /&gt;
 set protocols msdp traceoptions file files 30&lt;br /&gt;
 set protocols msdp traceoptions file world-readable&lt;br /&gt;
 set protocols msdp traceoptions flag state&lt;br /&gt;
 set protocols msdp traceoptions flag general detail&lt;br /&gt;
 set protocols msdp traceoptions flag source-active detail&lt;br /&gt;
&lt;br /&gt;
==Anycast RP==&lt;br /&gt;
&lt;br /&gt;
Обеспечивает работу нескольких RP для группы, что хорошо в плане отказоустойчивости.&lt;br /&gt;
&lt;br /&gt;
''Принцип:''&lt;br /&gt;
Несколько RP используют один общий ip (anycast). Эффект достигается засчет введения нескольких RP, использующих одинаковый IP. Источники и получатели при этом используют ближайшую по unicast RP.&lt;br /&gt;
&lt;br /&gt;
Может возникнуть проблема, что получатель и источник сойдутся на разных RP. Для решения этой проблемы используем MSDP.&lt;br /&gt;
&lt;br /&gt;
При этом надежность становится значительно лучше:&lt;br /&gt;
*failover timeout  зависит только от сходимости IGP.&lt;br /&gt;
*распределение нагрузки на RP для группы - становится возможным.&lt;br /&gt;
&lt;br /&gt;
MSDP работает только с IPv4.&lt;br /&gt;
Anycast-PIM поддерживает IPv4, IPv6.&lt;br /&gt;
&lt;br /&gt;
===Настройка===&lt;br /&gt;
&lt;br /&gt;
*Создаем уникальный ip на loopback (основной для протоколов маршрутизации) - помечаем его как primary. Также для надежности лучше его прописать как router-id.&lt;br /&gt;
*Создаем неуникальный ip на loopback (для anyacst-RP) - назначаем его как local RP.&lt;br /&gt;
*Non-RP роутеры должны &amp;quot;изучить&amp;quot; anycast-RP, используя любой discovery механизм (обычно все-таки это static RP, так как он самый простой).&lt;br /&gt;
*Включаем MSDP mesh peering с другими anycast-RP роутерами.&lt;br /&gt;
'''RP:'''&lt;br /&gt;
 tormore# top show | compare &lt;br /&gt;
 [edit interfaces lo0 unit 0 family inet address 10.200.86.9/32]&lt;br /&gt;
 +       primary;&lt;br /&gt;
 [edit interfaces lo0 unit 0 family inet]&lt;br /&gt;
         address 10.200.86.9/32 { ... }&lt;br /&gt;
 +       address 10.200.86.100/32;&lt;br /&gt;
 [edit]&lt;br /&gt;
 +  routing-options {&lt;br /&gt;
 +      router-id 10.200.86.9;&lt;br /&gt;
 +  }&lt;br /&gt;
 [edit protocols pim] &lt;br /&gt;
 +    rp {&lt;br /&gt;
 +        local {&lt;br /&gt;
 +            family inet {&lt;br /&gt;
 +                address 10.200.86.100;&lt;br /&gt;
 +                anycast-pim {&lt;br /&gt;
 +                    rp-set {&lt;br /&gt;
 +                        address 10.200.86.3;&lt;br /&gt;
 +                    local-address 172.30.5.9;&lt;br /&gt;
 tormore# top show | compare &lt;br /&gt;
 [edit protocols]&lt;br /&gt;
 +   msdp {&lt;br /&gt;
 +       group rp {&lt;br /&gt;
 +           mode mesh-group;&lt;br /&gt;
 +           local-address 10.200.86.9;&lt;br /&gt;
 +           peer 10.200.86.2;&lt;br /&gt;
&lt;br /&gt;
 tormore&amp;gt; show msdp &lt;br /&gt;
 Peer address    Local address   State       Last up/down Peer-Group   SA Count&lt;br /&gt;
 10.200.86.2     10.200.86.9     Established     00:04:34 rp           1/1&lt;br /&gt;
&lt;br /&gt;
 tormore&amp;gt; show route receive-protocol msdp 10.200.86.2 &lt;br /&gt;
 inet.4: 1 destinations, 1 routes (1 active, 0 holddown, 0 hidden)&lt;br /&gt;
 235.4.5.6,10.66.66.2/32*[MSDP/175/1] 00:00:53, from 10.200.86.2&lt;br /&gt;
                    &amp;gt; to 10.200.86.100 via ge-0/0/0.120&lt;br /&gt;
==Дополнительная информация==&lt;br /&gt;
*[[Глава 2. Multicast, IGMP]]&lt;br /&gt;
*[[Глава 3. Routing protocols (DVMRP, PIM-DM, PIM-SM)]]&lt;br /&gt;
*[[Политики в мультикасте | Глава 6. Политики в мультикасте]]&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=%D0%93%D0%BB%D0%B0%D0%B2%D0%B0_3._Routing_protocols_(DVMRP,_PIM-DM,_PIM-SM)&amp;diff=2058</id>
		<title>Глава 3. Routing protocols (DVMRP, PIM-DM, PIM-SM)</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=%D0%93%D0%BB%D0%B0%D0%B2%D0%B0_3._Routing_protocols_(DVMRP,_PIM-DM,_PIM-SM)&amp;diff=2058"/>
		<updated>2021-07-15T18:38:08Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#description2: PIM Dense mode. PIM Sparse mode. SPT switchover. Static RP. Auto-RP. Bootstrap. Anycast RP. Конфигурация PIM. PIM BFD. Траблшутинг PIM. Информация для подготовки к экзаменам Juniper.}}&lt;br /&gt;
&lt;br /&gt;
=DVMRP=&lt;br /&gt;
&lt;br /&gt;
''Distance vector multicast routing protocol''&lt;br /&gt;
*Первый, нах! протокол маршрутизации для мультикаст.&lt;br /&gt;
*Dense-mode implementation&lt;br /&gt;
*Distance-vector&lt;br /&gt;
*Для RPF не использует Unicast таблицу.&lt;br /&gt;
*Можно использовать туннелирование между островками Unicast.&lt;br /&gt;
*Для передачи routing info использует отдельный протокол.&lt;br /&gt;
&lt;br /&gt;
=PIM=&lt;br /&gt;
&lt;br /&gt;
''Protocol Independent Multicast''&lt;br /&gt;
*Использует unicast routing table для RPF check. Использует любой IGP, BGP или оба.&lt;br /&gt;
*'''ASM [any-source multicast]: Sparse / Dense / Sparse-Dense/ Bidirectional''' modes.&lt;br /&gt;
*Version 1 (encapsulate messages into IGMP, sent to 224.0.0.2)/ 2 (encapsulate messages into protocol 103, sent to 224.0.0.13). Могут использоваться совместно даже на одном интерфейсе.&lt;br /&gt;
*Отдельно есть SSM [source-specific multicast]&lt;br /&gt;
&lt;br /&gt;
==Dense mode==&lt;br /&gt;
Пригоден для использования с большим количеством получателей в сети. &lt;br /&gt;
&lt;br /&gt;
===Сообщения PIM DM===&lt;br /&gt;
*'''Hello''': для нахождения и поддержания соседства.&lt;br /&gt;
*'''Join/prune''': имеют одинаковый формат сообщения. В dense mode используются prune сообщения - сообщить upstream роутеру об отказе от группы.&lt;br /&gt;
*'''Graft/graft-ack''': graft используется для запроса трафика у upstream роутера, которому уже пришел prune запрос.&lt;br /&gt;
*'''Assert''':  для выбора gesignated forwarder (DF) для сегмента, где &amp;gt; 1 роутера.&lt;br /&gt;
&lt;br /&gt;
===Соседство PIM DM===&lt;br /&gt;
&lt;br /&gt;
Соседство устанавливается и поддерживается с помощью hello сообщений. В зависимости от версии шлем на нужный адрес. &lt;br /&gt;
*Version 1 (encapsulate messages into IGMP, sent to 224.0.0.2)&lt;br /&gt;
*Version 2 (encapsulate messages into protocol 103, sent to 224.0.0.13).&lt;br /&gt;
&lt;br /&gt;
hello сообщения могут содержать hold-time - как долго сосед будет в состоянии up без отправки hello. В Junos если holdtimer = 0, то роутер будет использовать локальный таймер. По умолчанию = 105 сек.&lt;br /&gt;
&lt;br /&gt;
===Выборы Designated router PIM DM===&lt;br /&gt;
'''Dense''': целесообразно использовать только в том случае, если используем IGMPv1, т.к. он не имеет встречного механизма выбора query роутера.&lt;br /&gt;
&lt;br /&gt;
===Flooding===&lt;br /&gt;
Для доставки multicast использует SPT. &lt;br /&gt;
*Все роутеры получат одну копию исходного потока.&lt;br /&gt;
*Каждый роутер проводит RPF check. Пакеты, которые не прошли RPF check - отбрасываются.&lt;br /&gt;
*Пакеты прошедшие RPF check копируются и флудятся во все порты (OIL), за исключением порта, откуда трафик пришел (IIF).&lt;br /&gt;
*(S,G) создается на каждом роутере (даже на котором вообще нет получителей).&lt;br /&gt;
*Роутеры, не имеющие напрямую включенных получателей должны периодически посылать prune, чтобы быть исключенными из SPT дерева.&lt;br /&gt;
&lt;br /&gt;
===Отбрасывание нежелательного трафика (Prunning)===&lt;br /&gt;
Prune отправляется в случае: &lt;br /&gt;
#Если нет получателей, подключенных к роутеру.&lt;br /&gt;
#Если на роутер пришел prune от downstream роутера.&lt;br /&gt;
&lt;br /&gt;
Информация (S,G) хранится на роутере 3 минуты. Если появляется новый получатель или отваливается старый, роутер не мгновенно среагирует на изменения, не будет ждать таймаут 3 минуты, а сразу обновит инфо.&lt;br /&gt;
&lt;br /&gt;
Prune нужно отправлять периодически, так как есть определенный таймаут, после которого возобновляется вещание multicast трафика во все порты.&lt;br /&gt;
&lt;br /&gt;
===Source-based tree===&lt;br /&gt;
&lt;br /&gt;
В итоге после отправки всех prune, на сети вырисовывается shortest-path tree, по которому и ходит в дальнейшем трафик.&lt;br /&gt;
&lt;br /&gt;
===Prunning on milti-access network===&lt;br /&gt;
&lt;br /&gt;
При отправке роутером (R2) prune к upstrem роутеру, может пострадать другой роутер из этого же multi-access сегмента (R1).&lt;br /&gt;
&lt;br /&gt;
У роутера из этого же сегмента (R1) есть 2 сек, чтобы отправить join к upstream роутеру и тем самым убить prune от R2.&lt;br /&gt;
&lt;br /&gt;
При этом на R2 будет литься трафик, но сам роутер не будет его передавать другим роутрам, так как нет получателей.&lt;br /&gt;
&lt;br /&gt;
===Grafting back===&lt;br /&gt;
&lt;br /&gt;
SPT уже установлено, но в сети появился новый получатель.&lt;br /&gt;
&lt;br /&gt;
Роутер, получивший IGMP report от получателя, генерирует Graft-message и шлет его по SPT к источнику на upstream-router. Истоник известен, т.к. на всех роутерах хранятся (S,G) записи.&lt;br /&gt;
&lt;br /&gt;
Роутер, ближайший к источнику в ответ на graft сообщение генерирует graft-ack сообщение и посылает его к конечному свитчу. На этом же роутере сохранена запись (S,G), но без OIL interfaces. После получения report, список OIL интерфейсов обновляется, в сторону источника отправляется Join сообщение.&lt;br /&gt;
&lt;br /&gt;
После этого получатель видит свой заветный трафик, не ожидая никаких таймаутов.&lt;br /&gt;
&lt;br /&gt;
===Assert mechanism in Multiaccess networks===&lt;br /&gt;
&lt;br /&gt;
В multi-access сегменте несколько роутеров могут начать посылать трафик вниз к получателям. Чтобы этого избежать, проводятся выборы DF.&lt;br /&gt;
&lt;br /&gt;
Assert сообщение содержит информацию: source, group, metric preference, metric. Наименьшее значение metric pref / metric - выигрывает. если значения равны, то выигрывает наибольший ip роутера.&lt;br /&gt;
&lt;br /&gt;
При этом downstream роутер как-то хитро переподписывается на группу, что получает в итоге трафик от одного роутера.&lt;br /&gt;
&lt;br /&gt;
===Конфигурация PIM DM===&lt;br /&gt;
По дефлту при добавлении интерфейса в protocols pim, включается version 2, sparse mode.&lt;br /&gt;
 set protocols pim assert-timeout 180&lt;br /&gt;
 set protocols pim interface ge-0/0/0.0 mode dense priority 1 hello-interval 30&lt;br /&gt;
&lt;br /&gt;
===Траблшутинг PIM DM===&lt;br /&gt;
 show pim interfaces&lt;br /&gt;
 show pim neighbors&lt;br /&gt;
 show pim neighbors detail&lt;br /&gt;
 show pim join extensive&lt;br /&gt;
 show pim source detail&lt;br /&gt;
 show multicast rpf ''&amp;lt;src addr&amp;gt;''&lt;br /&gt;
 show multicast route extensive&lt;br /&gt;
 show route table inet.1&lt;br /&gt;
 show route table inet.1 extensive&lt;br /&gt;
 show multicast next-hops&lt;br /&gt;
 show pim statistics&lt;br /&gt;
 show multicast usage&lt;br /&gt;
&lt;br /&gt;
Поддерживается traceoptions.&lt;br /&gt;
&lt;br /&gt;
Пинг source:&lt;br /&gt;
 mtrace from-source group 224.7.7.7 ttl 20 source &amp;lt;src ip&amp;gt; || запускается от роутера, ближнего к получателю&lt;br /&gt;
Пинг получателя: тоже как-то можно продиагностировать, но придется заморочиться.&lt;br /&gt;
 ping 224.7.7.7 ttl 10 interface ge-0/0/0.900 bypass-routing || запускается от роутера, ближнего к получателю.&lt;br /&gt;
&lt;br /&gt;
==Sparse mode==&lt;br /&gt;
Shared tree (rendezvous point tree) = (*,G) &lt;br /&gt;
&lt;br /&gt;
Source-based tree (shortest path tree (SPT)) = (S,G)&lt;br /&gt;
&lt;br /&gt;
Более приспособлена к реальности: поток получают только роутеры, заинтересованные в потоке. Работа в 2х режимах: ASM/SSM. При работе ASM, требуется RP.&lt;br /&gt;
&lt;br /&gt;
*'''DR''' (designated router) - занимается только отправкой register-message, join message в multi-access сети.&lt;br /&gt;
*'''DF''' (designated forwarder) - занимается передачей трафика в multi-access netw.&lt;br /&gt;
&lt;br /&gt;
===Сообщение PIM SM===&lt;br /&gt;
*'''Hello''': поиск соседей, поддержание соседства, выбор DR в multi-access netw. (отправляется на dst-address 224.0.0.13, src-adderss - p2p интерфейса)&lt;br /&gt;
*'''Join/Prune''': подписка/отписка. (отправляется на dst-address 224.0.0.13, src-address - p2p интерфейса)&lt;br /&gt;
*'''Assert messages''': выборы designated router (DR).&lt;br /&gt;
*'''Register / register-stop''': сообщения между source и RP.&lt;br /&gt;
*'''Bootstrap and candidate-RP''': для работы bootstrap.&lt;br /&gt;
&lt;br /&gt;
===Выбор Designated router в PIM SM===&lt;br /&gt;
'''Sparse''': выбор роутера проводится со стороны как получателей и так и источников.&lt;br /&gt;
&lt;br /&gt;
*receiver DR: отправляет PIM join и PIM prune сообщения от получателей к RP.&lt;br /&gt;
*source DR: отправляет PIM register сообщения от источника к RP.&lt;br /&gt;
&lt;br /&gt;
Выбор основан на DR priority field в hello сообщениях. По умолчанию = 1. Можно задавать вручную. Больший приоритет - выигрышней. Если приоритеты равны, то выигрывает с наибольшим ip.&lt;br /&gt;
 set protocols pim interfaces xe-0/0/0.50 priority 50&lt;br /&gt;
&lt;br /&gt;
Можно активировать выбор DR и на p2p линке.&lt;br /&gt;
 set protocols pim dr-election-on-p2p&lt;br /&gt;
&lt;br /&gt;
===Описание Join процесса===&lt;br /&gt;
'''Receiver -&amp;gt; RP'''&lt;br /&gt;
&lt;br /&gt;
От подписчика на роутер поступает (*,G) report. Роутер не знает какой именно источник будет использоваться, поэтому он направляет пакет к upstream роутеру не в сторону источника, а в сторону RP. &lt;br /&gt;
&lt;br /&gt;
Строится ''rendevous-point tree (RPT)'' или ''shared tree''.&lt;br /&gt;
&lt;br /&gt;
'''Source DR -&amp;gt; RP'''&lt;br /&gt;
&lt;br /&gt;
Источник начинает вещание группы. Далее source DR роутер инкапсулирует мультикаст трафик в PIM register сообщение и посылает его к RP.&lt;br /&gt;
&lt;br /&gt;
RP получает register сообщение, деинкапсулирует его и начинает слать чистый мультикаст в интерфейс к которого пришел report на подписку к этой группе.&lt;br /&gt;
&lt;br /&gt;
Если у RP есть подписчики на нужную группу, то RP шлет join (S,G) к источнику. После этого строится source-based tree. И роутер, подключенный к источнику сможет слать чистый мультикаст в направлении RP. В короткий промежуток времени RP получит 2 копии одного и того же трафика, чтобы отписаться от инкапсулированного мультикаста, RP шлет register-stop к source DR.&lt;br /&gt;
&lt;br /&gt;
Если на RP приходят register от источника, но у него нет подписчиков на эту группу, то RP отправит register-stop в сторону источника.&lt;br /&gt;
&lt;br /&gt;
Если между RP и источником есть роутер, то промежуточный роутер примет register-stop, начнет отбрасывать мультикаст трафик, но источник как слал его так и будет слать дальше.&lt;br /&gt;
&lt;br /&gt;
Если появится новый источник, то заново повторится весь сценарий: register -&amp;gt; RP, (S,G) -&amp;gt; source, multicast -&amp;gt; RP, register-stop -&amp;gt; source.&lt;br /&gt;
&lt;br /&gt;
Также на RP будет сохранена запись (S,G), т.е. если появятся получатели, то RP пошлет запрос сразу к источнику.&lt;br /&gt;
&lt;br /&gt;
Также роутер между источником и RP каждые 3 минуты будет отправлять register на RP, чтобы  RP знало, что источник все еще жив.&lt;br /&gt;
&lt;br /&gt;
====Требования к туннелированию====&lt;br /&gt;
&lt;br /&gt;
Для RP и source DR требуется туннелирование. (Не требуется только если RP=DR).&lt;br /&gt;
&lt;br /&gt;
Возможности туннелирования зависят от платформы. Иногда требуется даже докупать доп оборудование (платы).&lt;br /&gt;
&lt;br /&gt;
На MX сериях туннелирование включается так:&lt;br /&gt;
 set chassis fpc X pic X tunnel-services bandwidth 1g&lt;br /&gt;
&lt;br /&gt;
Проверка:&lt;br /&gt;
  show interfaces terse | match &amp;quot;pe|pd&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===SPT switchover===&lt;br /&gt;
&lt;br /&gt;
В ситуациях, когда есть роутеры (R6), для которых путь до источника через RP является не оптимальным, происходит перестроение дерева.&lt;br /&gt;
&lt;br /&gt;
На R6 есть получатель. R6 отправляет (*,G) к RP. От RP приходит пакет (S,G). В таком случае R6 узнает об источнике.&lt;br /&gt;
&lt;br /&gt;
Если R6 видит более оптимальный путь до источника, то он шлет (S,G) к источнику по этому пути (до R1 - ближайший к источнику). &lt;br /&gt;
&lt;br /&gt;
Upstream роутер, получив (S,G) также ищет более короткий путь и шлет (S,G) join вверх по топологии.&lt;br /&gt;
&lt;br /&gt;
Когда между R1 и R6 установлено source-based tree, мультикаст трафик может идти напрямую от R1 к R6.&lt;br /&gt;
Есть небольшой промежуток времени, когда R6 будет получать 2 копии мультикаст.&lt;br /&gt;
&lt;br /&gt;
R6 отправляет prune сообщение (S,G) uptream роутеру в сторону RP. RP проверит, что больше нет получателей конкретной группы и отправит prune (S,G) к source DR.&lt;br /&gt;
&lt;br /&gt;
В итоге трафик польется оптимальным путем.&lt;br /&gt;
&lt;br /&gt;
Но на R6 (ближний к получателю) останется 2 записи о группе:&lt;br /&gt;
*(S,G) - где в качестве upstream state будет указан: '''Join to source, Prune from RP'''. И в incoming interface: интерфейс в сторону R1 (ближний к источнику).&lt;br /&gt;
*(*,G) - в качестве upstream state указан: '''Join to RP'''. Incoming interface: интерфейс в сторону RP.&lt;br /&gt;
&lt;br /&gt;
'''(S,G)''' - более специфичный.&lt;br /&gt;
&lt;br /&gt;
На RP при этом будет храниться информация следующего вида:&lt;br /&gt;
'''(S,G) Sate''': Group x.x.x.x, Source: y.y.y.y, Upstream State: '''Prune to Source'''&lt;br /&gt;
&lt;br /&gt;
===RP===&lt;br /&gt;
&lt;br /&gt;
В sparse обязательно должна использоваться RP.&lt;br /&gt;
* RP должна быть расположена оптимально, желательно поближе к источникам, чтобы не гонять большие объемы трафика от источников и максимально исключить перестроение на spt.&lt;br /&gt;
*Инкапсуляция и деинкапсуляция трафика от источника делается посредством использования tunnel-services. Tunnel-services не требуется, если DR = RP.&lt;br /&gt;
*Для одной группы - 1 RP.&lt;br /&gt;
*Для надежности, есть 3 механизма нахождения rp: '''static, auto-RP, bootstrap'''. Можно использовать все сразу, тогда по предпочтительности: BSR -&amp;gt; auto-RP -&amp;gt; static.&lt;br /&gt;
*Anycast-RP может быть использована с любым из механизмов нахождения RP (можно потом почитать здесь: http://www.cisco.com/c/en/us/products/collateral/ios-nx-os-software/ip-multicast/whitepaper_c11-508498.html).&lt;br /&gt;
&lt;br /&gt;
====Static RP====&lt;br /&gt;
Прописывается вручную. Минус - никакого резервирования. В случае, когда RP - умерла, требуется ручками поправить конфигурацию.&lt;br /&gt;
&lt;br /&gt;
Можно задавать приоритет. Чем меньше значение, тем приоритетнее RP среди других.&lt;br /&gt;
&lt;br /&gt;
Дефолтное значение приоритета = 1.&lt;br /&gt;
&lt;br /&gt;
'''Override''': при использовании нескольких механизмов поиска RP, static - менее приоритетный. Override - сделает его приоритетной остальных.&lt;br /&gt;
&lt;br /&gt;
'''PE = RP:'''&lt;br /&gt;
 set protocols pim rp local address x.x.x.x&lt;br /&gt;
 set protocols pim rp local group-ranges 227.0.0.0/24     - RP только для этих групп (без range: все IPv4, IPv6 группы)&lt;br /&gt;
 set protocols pim rp local override        &lt;br /&gt;
'''PE =/=  RP:'''&lt;br /&gt;
 set protocols pim rp static address x.x.x.x&lt;br /&gt;
&lt;br /&gt;
====Auto-RP====&lt;br /&gt;
*Используется с PIMv1 и v2.&lt;br /&gt;
*Нестандартное проприетарное решение (вроде от Cisco, нет RFC).&lt;br /&gt;
*Позволяет резервировать RP, но не делает балансировку между RP.&lt;br /&gt;
*Использует мультикаст для распространения инфо, связанной с RP - dense-mode.&lt;br /&gt;
*По PIM домену распространяет набор соответствий group-RP.&lt;br /&gt;
Компоненты:&lt;br /&gt;
*''Candidate-RP (C-RP)'': периодически отсылают инфо о себе на 224.0.1.39 (слушает только mapping agent) (announce messages).&lt;br /&gt;
&lt;br /&gt;
'''Announce message''':&lt;br /&gt;
 C-RP IP | 224.0.1.39 | group 224/4&lt;br /&gt;
*''Mapping agent'': слушает C-RP, выбирает RP для каждой группы (наибольший ip), анонсирует победителя RP для группы на 224.0.1.40 (Discovery message - слушают все auto-rp роутеры). &lt;br /&gt;
&lt;br /&gt;
'''Discovery message/mapping message''':&lt;br /&gt;
 Mapping agent IP | 224.0.1.40 | RP 1 - group 224/4&lt;br /&gt;
&lt;br /&gt;
RP выбирается для групп.&lt;br /&gt;
&lt;br /&gt;
Если RP сдохнет, то mapping agent выбирает новую RP. В общем, время падения составляет несколько минут.&lt;br /&gt;
&lt;br /&gt;
'''Конфигурация'''&lt;br /&gt;
&lt;br /&gt;
Обязательно на всех роутерах включить ''sparse-dense mode'' и включить 2 группы, по которым передается служебная инфо. Dense - для передачи служебной информации, Sparse - трафик.&lt;br /&gt;
 set protocols pim interface all mode sparse-dense&lt;br /&gt;
 set protocols pim dense-groups 224.0.1.39&lt;br /&gt;
 set protocols pim dense-groups 224.0.1.40&lt;br /&gt;
&lt;br /&gt;
'''Non-RP:'''&lt;br /&gt;
 set protocols pim rp auto-rp discovery&lt;br /&gt;
''discovery'' - только получение mapping (group-RP) сообщений.&lt;br /&gt;
&lt;br /&gt;
'''C-RP:'''&lt;br /&gt;
 set protocols pim rp local address 10.200.86.3&lt;br /&gt;
 set protocols pim rp auto-rp announce  &lt;br /&gt;
''announce'' - '''без local address''': только слушает announce сообщения, '''с local address''': слушает и отправляет announce.&lt;br /&gt;
&lt;br /&gt;
'''RP + mapping agent:'''&lt;br /&gt;
 set protocols pim rp local address 10.200.86.3&lt;br /&gt;
 set protocols pim rp auto-rp mapping &lt;br /&gt;
''mapping'' - позволяет отправку (и получение) как announce (C-RP), так и mapping (group-RP) сообщений. Если на роутере не будет настроен local address, то роутер сможет ''отправлять'' только announce.&lt;br /&gt;
&lt;br /&gt;
Несколько '''Mapping Agent''', настраиваем только на них:&lt;br /&gt;
 set protocols pim auto-rp mapping mapping-agent-election&lt;br /&gt;
Mapping agent с наименьшим IP (проиграл) перестает слать mapping messages в сеть, при получении mapping message от агента с бОльшим IP.&lt;br /&gt;
 set protocols pim auto-rp mapping no-mapping-agent-election&lt;br /&gt;
&lt;br /&gt;
====Bootstrap====&lt;br /&gt;
*Работает только с PIMv2. Для распространения информации используют сообщения PIMv2.&lt;br /&gt;
*backup RP обеспечивает средство защиты от падения RP и некую балансировку для одних и тех же групп между RP. Но по прежнему для 1 активной группы - используется 1 RP.&lt;br /&gt;
*сообщения между роутерами происходит с source Lo interface роутера. Поэтому Lo обязательно должны быть routable. Можно проверить: ''show pim bootstrap''&lt;br /&gt;
&lt;br /&gt;
'''Компоненты:'''&lt;br /&gt;
*Candidate-RP: заявляет о себе BSR через unicast (advertisement message).&lt;br /&gt;
*Bootstrap router: выбирается на основании наивысшего приоритета (далее наивысшего ip), получает оповещения от C-RP. Определяет RP/group соответствие - это RP-set. Включает RP-set в bootstrap сообщения и распространяет по сети.&lt;br /&gt;
&lt;br /&gt;
BSR - всего лишь роутер, который будет передавать информацию: RP-set: RP &amp;lt;-&amp;gt; группы. То есть в выводе: ''sh pim rps'' мы увидим все RP.&lt;br /&gt;
&lt;br /&gt;
'''Выборы:'''&lt;br /&gt;
#Выбор BSR: каждый роутер предполагает, что он BSR. Генерирует BSR-сообщения другим BSR (ip+приоритет+пустой RP-set). Когда роутер получает BSR-сообщение с бОльшим приоритетом (или бОльшим ip), он перестает генерировать сообщения. Выбранный BSR-роутер продолжает генерировать сообщения, остальные лузеры-BSR просто передают эти сообщения своим соседям. Т.о. все роутеры знают об активном BSR. BSR генерирует BSR сообщение, в котором содержится ip BSR, пустой RP-set. DA = 224.0.0.13. &lt;br /&gt;
#C-RP передают инфо о себе BSR: свой ip, перечисляют group range.&lt;br /&gt;
#BSR собирает C-RP оповещения, складывает их в RP-set (RP+group range). Отправляет RP-set всем PIM роутерам.&lt;br /&gt;
#Каждый PIM роутер выбирает для группы действующую RP: делает hash из C-RP ip, group range, mask. Наименьший hash для группы определяет выбранную RP.&lt;br /&gt;
Чтобы исключить роутер из выборов (чтобы он перестал отправлять BSR сообщения), можно ему поставить приоритет = 0.&lt;br /&gt;
&lt;br /&gt;
'''Конфигурация'''&lt;br /&gt;
&lt;br /&gt;
BSR [C-RP]:&lt;br /&gt;
 set protocols pim rp local 10.200.86.3&lt;br /&gt;
 set protocols pim rp bootstrap priority 200&lt;br /&gt;
&lt;br /&gt;
Non-RP: особого конфига не нужно, просто должен быть включен PIM на интерфейсах.&lt;br /&gt;
&lt;br /&gt;
 blair&amp;gt; show pim bootstrap &lt;br /&gt;
 Instance: PIM.master &lt;br /&gt;
 BSR                     Pri Local address           Pri State      Timeout &lt;br /&gt;
 10.200.86.3             200 10.200.86.1             100 Candidate      110&lt;br /&gt;
&lt;br /&gt;
 oban&amp;gt; show pim rps    &lt;br /&gt;
 Instance: PIM.master &lt;br /&gt;
 Address family INET&lt;br /&gt;
 RP address      Type        Mode   Holdtime Timeout Groups Group prefixes&lt;br /&gt;
 10.200.86.1     bootstrap   sparse      150     145      0 224.0.0.0/24&lt;br /&gt;
 10.200.86.3     bootstrap   sparse      150    None      1 235.0.0.0/8&lt;br /&gt;
 10.200.86.9     bootstrap   sparse      150     145      0 232.1.1.0/24&lt;br /&gt;
 10.200.86.3     static      sparse      150    None      1 235.0.0.0/8&lt;br /&gt;
&lt;br /&gt;
====Anycast RP====&lt;br /&gt;
Для load-balancing между RP и для обеспечения резерва (redundancy) - лучший способ: использовать Anycast RP.&lt;br /&gt;
&lt;br /&gt;
Может использоваться как с MSDP, так и без него. С использованием MSDP у ваших. Anycast RP будет полное и одинаковое представление об источниках. При выходе одной RP из строя - второй RP не придется изучать инфу о новых source. Лучше использовать MSDP между RP.&lt;br /&gt;
&lt;br /&gt;
С MSDP:&lt;br /&gt;
* на lo добавляем еще один адрес [anycast - общий для нескольких PE роутеров]. Изначальный адрес lo лучше сделать primary, anycast адрес - оставить как есть.&lt;br /&gt;
 [edit interfaces lo0 unit 0 family inet address 172.30.5.1/32]&lt;br /&gt;
 +       primary;&lt;br /&gt;
 +       preferred;&lt;br /&gt;
 [edit interfaces lo0 unit 0 family inet]&lt;br /&gt;
         address 172.30.5.1/32 { ... }&lt;br /&gt;
 +       address '''172.30.5.254/32;'''&lt;br /&gt;
*nni линки и lo добавляем в protocols pim. Указываем новый адрес lo как адрес RP&lt;br /&gt;
 set protocols pim rp local address 172.30.5.254&lt;br /&gt;
 set protocols pim interface ge-0/0/0.208&lt;br /&gt;
 set protocols pim interface ge-0/0/2.200&lt;br /&gt;
 set protocols pim interface ge-0/0/3.204&lt;br /&gt;
 set protocols pim interface lo0.0&lt;br /&gt;
&lt;br /&gt;
*строим MSDP-соседство между PE, которые буду выполнять роль RP. Соседство на lo-primary адресах.&lt;br /&gt;
 set protocols msdp peer 172.30.5.2 local-address 172.30.5.1&lt;br /&gt;
 *'''если не хотим использовать MSDP, то можно и без него.''' Используем все предыдущие шаги и потом:&lt;br /&gt;
&lt;br /&gt;
 set protocols pim rp local family inet address 172.30.5.254 anycast-pim rp-set address 172.30.5.2&lt;br /&gt;
 set protocols pim rp local family inet address 172.30.5.254 anycast-pim local-address 172.30.5.1&lt;br /&gt;
&lt;br /&gt;
===Конфигурация дополнительных фич протокола PIM===&lt;br /&gt;
====Shortest-path tree cutover (не переключаться на shotest-path tree) ====&lt;br /&gt;
&lt;br /&gt;
 set protocols pim spt-threshold infinity no-spt&lt;br /&gt;
 set policy-options policy-statement no-spt term 1 from route-filter 235.4.5.6/32 exact&lt;br /&gt;
 set policy-options policy-statement no-spt term 1 from source-address-filter 10.66.66.2/32 exact&lt;br /&gt;
 set policy-options policy-statement no-spt term 1 then accept&lt;br /&gt;
 set policy-options policy-statement no-spt term 2 then reject&lt;br /&gt;
&lt;br /&gt;
Делается для того, чтобы ограничить дополнительный статус (S,G), который создается при переключении на source-based tree.&lt;br /&gt;
&lt;br /&gt;
Или если из-за других причин не выгодно, чтобы последний роутер перестраивался на SPT.&lt;br /&gt;
&lt;br /&gt;
====Балансировка PIM join====&lt;br /&gt;
Если до источника есть несколько равнозначных путей, использоваться будет только 1 (т.к. пройдет RFP-check только 1, альтернативные пути будут простаивать).  Имеется ввиду, что будут балансироваться как join к upstream роутеру, так и трафик в сторону downstream. &lt;br /&gt;
&lt;br /&gt;
С помощью join-load-balance можно использоваться несколько интерфейсов к источнику.&lt;br /&gt;
&lt;br /&gt;
Включается на не RP-роутерах.&lt;br /&gt;
 set protocols pim join-load-balance&lt;br /&gt;
&lt;br /&gt;
====BFD====&lt;br /&gt;
Bidirectional Forwarding Detection работает можно настроить также и для PIM.&lt;br /&gt;
&lt;br /&gt;
set protocols pim interface ge-1/0/0.900 family inet bfd-liveness-detection&lt;br /&gt;
&lt;br /&gt;
====Таймеры====&lt;br /&gt;
 set protocols pim join-prune-timeout 230   || by default 210&lt;br /&gt;
&lt;br /&gt;
 set protocols pim reset-tracking bit       || в multi-access сетях для настройки подавления join от нескольких роутеров. &lt;br /&gt;
&lt;br /&gt;
 set protocols pim propagation-delay 500    || время, кот определяет как долго ждать выполнения prune на upstream роутере. В теч этого времени роутер ждет любых prune override join message от других роутеров.&lt;br /&gt;
&lt;br /&gt;
 set protocols pim override-interval 2000   || макс время для задержки отправки join сообщений. Если в multi-access появился prune, то таймер гарантирует, что не все downstream роутеры среагируют одновременно join сообщением.&lt;br /&gt;
&lt;br /&gt;
===Траблшутинг===&lt;br /&gt;
&lt;br /&gt;
 show pim interfaces&lt;br /&gt;
 show pim neighbors extensive      || можно посмотреть RX Join groups!!&lt;br /&gt;
 show pim statictics       || статистика различных пакетов&lt;br /&gt;
 show multicast usage&lt;br /&gt;
 show multicast route extensive    || информация об группах, присутствующих на данном роутере&lt;br /&gt;
 show route table inet.1.         || таблица форвардинга&lt;br /&gt;
 show multicast next-hops&lt;br /&gt;
 show pim join extensive           || помимо прочего, полезно: &amp;quot;Upstream state: Join to Source, Prune to RP&amp;quot; &lt;br /&gt;
 show pim source detail&lt;br /&gt;
 show multicast rpf x.x.x.x&lt;br /&gt;
 show pim rps                      || какие rp известны, через какой механизм, какой набор групп приходит&lt;br /&gt;
 show pim rps extensive            || помимо того, что выше - видны конкретные группы, статус, time active и много всяких подробностей&lt;br /&gt;
 show pim bootsrap                 || активный BSR роутер&lt;br /&gt;
 traceoptions         || для диагностики не забываем включать&lt;br /&gt;
 &lt;br /&gt;
 show pim neighbors &lt;br /&gt;
 Instance: PIM.master&lt;br /&gt;
 Interface           IP V Mode        Option       Uptime Neighbor addr &lt;br /&gt;
 xe-1/1/0.910         4 2             HPLGT       13w2d5h 212.1.253.189  &lt;br /&gt;
 xe-1/2/0.822         4 2             HPLG       03:08:00 192.168.152.49 &lt;br /&gt;
&lt;br /&gt;
 B = Bidirectional Capable = bidirectional mode supported&lt;br /&gt;
 G = Generation Identifier = gracefull restart turned on for pim&lt;br /&gt;
 H = Hello Option Holdtime, &lt;br /&gt;
 L = Hello Option LAN Prune Delay,&lt;br /&gt;
 P = Hello Option DR Priority, &lt;br /&gt;
 T = Tracking Bit      = Join Suppression supported, если нет T - то у соседа настроен: ''reset-tracking-bit''&lt;br /&gt;
&lt;br /&gt;
 show pim neighbors detail&lt;br /&gt;
 Interface: xe-1/2/0.822&lt;br /&gt;
    Address: 192.168.152.49,	IPv4, PIM v2, ''sg Join Count: 2'', tsg Join Count: 0&lt;br /&gt;
        BFD: Disabled&lt;br /&gt;
        Hello Option Holdtime: 105 seconds 102 remaining&lt;br /&gt;
        Hello Option DR Priority: 1&lt;br /&gt;
        Hello Option Generation ID: 1593016797&lt;br /&gt;
        Hello Option LAN Prune Delay: delay 1000 ms override 3000 ms&lt;br /&gt;
   Address: 192.168.152.50,	IPv4, PIM v2, Mode: Sparse, sg Join Count: 0, tsg Join Count: 0&lt;br /&gt;
        Hello Option Holdtime: 65535 seconds&lt;br /&gt;
        Hello Option DR Priority: 1&lt;br /&gt;
        Hello Option Generation ID: 1898464853&lt;br /&gt;
        Hello Option LAN Prune Delay: delay 500 ms override 2000 ms&lt;br /&gt;
                                      Join Suppression supported&lt;br /&gt;
&lt;br /&gt;
 pim {&lt;br /&gt;
    traceoptions {&lt;br /&gt;
        file pim.log size 10m;&lt;br /&gt;
        flag all;&lt;br /&gt;
&lt;br /&gt;
PIM Join и PIM Prune можно посмотреть в '''pim statistics''' (как принятые так и отправленные).&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; show pim statistics interface xe-1/2/0.822 &lt;br /&gt;
 Instance: PIM.master Family: INET&lt;br /&gt;
 PIM Interface statistics for xe-1/2/0.822&lt;br /&gt;
 PIM Message type        Received       Sent  Rx errors&lt;br /&gt;
 '''V2 Hello                     389        413          0'''&lt;br /&gt;
 V2 Register                    0          0          0&lt;br /&gt;
 V2 Register Stop               0          0          0&lt;br /&gt;
 '''V2 Join Prune                  0        195          0'''&lt;br /&gt;
&lt;br /&gt;
В monitor traffic interface не будут отображаться PIM Join, PIM Prune. Если требуется помониторить входящие и исходящие пакеты, то можно только замиррорить трафик.&lt;br /&gt;
&lt;br /&gt;
При включенном traceoptions, join также отчетливо видны (исходящие):&lt;br /&gt;
 traceoptions {&lt;br /&gt;
    file pim.log size 10m;&lt;br /&gt;
    flag all;&lt;br /&gt;
    flag join detail;&lt;br /&gt;
    flag prune detail;&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; show log pim.log | match 235.69.101.&lt;br /&gt;
 Oct 13 13:21:50.354863 group 235.69.101.1 joins 1 prunes 0&lt;br /&gt;
 Oct 13 13:21:50.354881 group 235.69.101.2 joins 1 prunes 0&lt;br /&gt;
 Oct 13 13:21:50.354897 group 235.69.101.4 joins 1 prunes 0&lt;br /&gt;
 Oct 13 13:21:50.354913 group 235.69.101.11 joins 1 prunes 0&lt;br /&gt;
 Oct 13 13:21:50.354929 group 235.69.101.19 joins 1 prunes 0&lt;br /&gt;
 Oct 13 13:21:50.354944 group 235.69.101.20 joins 1 prunes 0&lt;br /&gt;
&lt;br /&gt;
==Bidirectional mode==&lt;br /&gt;
То же самое что и Sparse, только в bidirectional PIM роутеры строят shared bidirectional trees (*,G) и не производят переключение на SPT. За счет этого в процессе работы используются только (*,G).&lt;br /&gt;
&lt;br /&gt;
Считается, что этот режим более масштабируемый для сети.&lt;br /&gt;
&lt;br /&gt;
В отличие от PIM-SM, в данном режиме не требуется PIM Register tunneling.&lt;br /&gt;
&lt;br /&gt;
т.к не происходит перестроение на SPT - может наблюдаться неоптимальный мультикаст роутинг.&lt;br /&gt;
&lt;br /&gt;
=Дополнительная информация=&lt;br /&gt;
*[[Глава 5. PIM-SSM]]&lt;br /&gt;
*[[Политики в мультикасте | Глава 6. Политики в мультикасте]]&lt;br /&gt;
*[[MSDP | Глава 4. MSDP]]&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=%D0%93%D0%BB%D0%B0%D0%B2%D0%B0_2._Multicast,_IGMP&amp;diff=2057</id>
		<title>Глава 2. Multicast, IGMP</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=%D0%93%D0%BB%D0%B0%D0%B2%D0%B0_2._Multicast,_IGMP&amp;diff=2057"/>
		<updated>2021-07-15T18:37:27Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#description2: multicast адресация. Routing tables junos. IGMP сообщения. IGMPv2. IGMPv3. Конфигурация IGMP. Траблшутинг IGMP.Информация для подготовки к экзаменам Juniper.}}&lt;br /&gt;
&lt;br /&gt;
== Общее ==&lt;br /&gt;
&lt;br /&gt;
Мультикаст = поток UDP на определенные адреса.&lt;br /&gt;
&lt;br /&gt;
== Адресация ==&lt;br /&gt;
&lt;br /&gt;
- 224/24 - local network control block [разничные протоколы маршрутизации, использующие мультикаст: OSPF, rip, igmp, ldp ...]&lt;br /&gt;
&lt;br /&gt;
- 224.2.0.0/16 - SDP/SAP, адреса, использующиеся для передачи multicast session.&lt;br /&gt;
&lt;br /&gt;
- 232/8 - под SSM&lt;br /&gt;
&lt;br /&gt;
- 233/8 - используется под глобальную мультикаст-адресацию (GLOP) || 233.[first byte of AS].[second byte of AS].1-255 || только для 16-ти битных AS&lt;br /&gt;
&lt;br /&gt;
- 234/8 - unicast-prefix-based IPv4&lt;br /&gt;
&lt;br /&gt;
- 239/8 - administratively scoped block || это адреса, которые могут быть использованы в разных частях сети. Тоже самое, что и private IP.&lt;br /&gt;
&lt;br /&gt;
== Multicast IP =&amp;gt; multicast mac ==&lt;br /&gt;
Если не заморачиваться почему так, то правило перевода простое:&lt;br /&gt;
&lt;br /&gt;
Конвертируем последние 23 бита IP в десятичную систему счисления. &lt;br /&gt;
*224.10.8.5: 0001010.00001000.00000101 =&amp;gt; 0a.08.05&lt;br /&gt;
&lt;br /&gt;
Прибавляем к &amp;quot;01-00-5e&amp;quot; переведенное значение.&lt;br /&gt;
*01-00-5e + 0a-08-05 = 01-00-5e-0a-08-05&lt;br /&gt;
&lt;br /&gt;
Проблема в том, что для разных мультикаст-групп (адресов) - мак-адреса будут пересекаться, т.к. не учитываются первые биты ip-адреса.&lt;br /&gt;
&lt;br /&gt;
== Multicast forwarding ==&lt;br /&gt;
*'''unicast forwarding''' основан на '''dest ip'''.&lt;br /&gt;
*'''multicast forwarding''' основан на '''source ip'''.&lt;br /&gt;
&lt;br /&gt;
Предотвращение петель:&lt;br /&gt;
*RPF-check для источника: сравнивается с какого интерфейса фактически пришел мультикаст пакет с тем, откуда по unicast table пакет должен приходить (источник или RP).  Если сходится - RPF done, не сходится - RPF fail. Префиксы, прошедшие RPF-check хранятся в inet.1.&lt;br /&gt;
*Multicast трафик никогда не форвардится в сторону источника.&lt;br /&gt;
&lt;br /&gt;
 show multicast rpf ''&amp;lt;group ip&amp;gt;''&lt;br /&gt;
&lt;br /&gt;
=== Routing tables ===&lt;br /&gt;
&lt;br /&gt;
'''inet.0''' - дефолтная таблица для проведения RPF-check [можно использовать inet.2, которая для этого и предназначена]. Если unicast и multicast топологии одинаковые, то inet.0 и inet.2 будут одинаковы.&lt;br /&gt;
&lt;br /&gt;
'''inet.1''' - записываются результаты RPF-check, форвардинг производится на основании этой таблицы.&lt;br /&gt;
 &amp;gt;show route table inet.1  &lt;br /&gt;
 inet.1: 238 destinations, 238 routes (238 active, 0 holddown, 0 hidden)&lt;br /&gt;
 + = Active Route, - = Last Active, * = Both&lt;br /&gt;
 224.0.0.0/4        *[Multicast/180] 74w2d 13:10:11&lt;br /&gt;
                       MultiResolve&lt;br /&gt;
 224.0.0.0/24       *[Multicast/180] 74w2d 13:10:11&lt;br /&gt;
                      MultiDiscard&lt;br /&gt;
 232.0.0.0/8        *[Multicast/180] 74w2d 13:10:11&lt;br /&gt;
                      MultiResolve&lt;br /&gt;
 232.192.1.1,10.200.86.1/32*[PIM/105] 6w0d 08:32:53&lt;br /&gt;
                      Multicast (IPv4) Composite&lt;br /&gt;
 232.192.1.1,10.200.86.2/32*[PIM/105] 8w3d 15:25:48&lt;br /&gt;
                      Multicast (IPv4) Composite&lt;br /&gt;
 232.192.1.2,10.200.86.1/32*[PIM/105] 6w0d 08:32:52&lt;br /&gt;
                       Multicast (IPv4) Composite&lt;br /&gt;
 232.192.1.2,10.200.86.2/32*[PIM/105] 8w3d 15:25:52&lt;br /&gt;
                      Multicast (IPv4) Composite&lt;br /&gt;
 232.192.1.4,10.200.86.1/32*[PIM/105] 23:11:56&lt;br /&gt;
                      Multicast (IPv4) Composite&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
'''Detailed'''&lt;br /&gt;
 232.192.1.1.10.200.86.1/64 (1 entry, 1 announced)&lt;br /&gt;
        *PIM    Preference: 105         &lt;br /&gt;
                Next hop type: Multicast (IPv4) Composite, Next hop index: 1048796&lt;br /&gt;
                Address: 0xa4edf30&lt;br /&gt;
                Next-hop reference count: 28&lt;br /&gt;
                State: &amp;lt;Active Int Ext AckRequest&amp;gt;&lt;br /&gt;
                Local AS: 100 &lt;br /&gt;
                Age: 6w0d 8:35:30 &lt;br /&gt;
                Validation State: unverified &lt;br /&gt;
                Task: PIM.master&lt;br /&gt;
                Announcement bits (1): 0-KRT &lt;br /&gt;
                AS path: I&lt;br /&gt;
                AS path: Recorded&lt;br /&gt;
'''inet.2''' - если для multicast на сети должна быть использована другая топология, то используем эту таблицу. inet.2 в таком случае будет использоваться для RPF-check.&lt;br /&gt;
&lt;br /&gt;
MP-BGP и multitopology IS-IS могут напрямую заполнять маршрутной информацией inet.2. &lt;br /&gt;
&lt;br /&gt;
Чтобы ISIS стал заполнять inet.2 - нужно включить &lt;br /&gt;
 set protocols isis topologies ipv4-multicast &lt;br /&gt;
Все остальные протоколы для заполнения таблицы должны заниматься копированием в inet.2 маршрутов с помощью '''RIB-groups'''.&lt;br /&gt;
&lt;br /&gt;
'''IMPORT-RIB''': для протокола PIM import-rib копирует маршруты из протокола в указанную таблицу. То есть указываем только одну таблицу. Указанная таблица будет использоваться для RPF.&lt;br /&gt;
&lt;br /&gt;
Для остальных протоколов первая таблица &amp;lt;&amp;gt; - откуда копируются маршруты, вторая &amp;lt;to-inet2&amp;gt; - куда копируются.&lt;br /&gt;
&lt;br /&gt;
 set routing-options rib-groups mcast-table import-rib inet.2&lt;br /&gt;
 set protocols pim rib-group inet mcast-table&lt;br /&gt;
&lt;br /&gt;
 set routing-options rib-groups import-rib to-inet2 [inet.0 inet.2]&lt;br /&gt;
 set routing-options rib-groups import-policy static *''по желанию/необходимости''&lt;br /&gt;
 set protocols ospf rib-groups to-inet.2&lt;br /&gt;
 set routing-options interface-routes rib-group inet to-inet2&lt;br /&gt;
&lt;br /&gt;
В обычном понимании: если задаём ''export-ribs'', то при этом указывается только одна таблица, куда будут скопированы маршруты. Но для PIM не работает export-ribs.&lt;br /&gt;
&lt;br /&gt;
== Automatic Multicast Tunnel Gateway [AMT protocol]==&lt;br /&gt;
Возможность соединять multicast-enabled сеть и ipv4-only сеть (без мультикаст). Позволяет получать мультикаст трафик, там, где не включен мультикаст.&lt;br /&gt;
&lt;br /&gt;
AMT протокол дает возможность искать и устанавливать соседство между relay-роутерами и gateway-роутерами.&lt;br /&gt;
&lt;br /&gt;
Relay-роутеры - обычные мультикаст роутеры (с native-multicast), на которых аггрегируется большое кол-во AMT-туннелей.&lt;br /&gt;
&lt;br /&gt;
Трафик до пользователей в multicast сети идет как multicast. Запросы трафика - multicast join.&lt;br /&gt;
&lt;br /&gt;
Трафик до пользователей в ipv4-only сети получают в виде UDP unicast stream. Запросы делаю в виде UDP IGMP request.&lt;br /&gt;
&lt;br /&gt;
Работает только с PIM-SSM.&lt;br /&gt;
&lt;br /&gt;
Работает только с IPv4.&lt;br /&gt;
&lt;br /&gt;
== IGMP ==&lt;br /&gt;
''Internet group management protocol''&lt;br /&gt;
&lt;br /&gt;
IGMP не протокол маршрутизации. Работает между получателями и роутером, с которого отдается мультикаст в сегменте. Он просто передает информацию роутеру о заинтересованных получателях и получателях, которые хотят покинуть группу.&lt;br /&gt;
&lt;br /&gt;
Для IPv6 используется точно такой же по принципу работы протокол MLD.&lt;br /&gt;
===Сообщения===&lt;br /&gt;
'''Report/Join message''': отправляет хост, когда хочет подписаться на какую-то группу.  DA = group address. После того как хост подписался на группу, он должен отвечать на query message от роутера. TTL = 1, т.к. сообщение должно долететь только до ближайшего маршрутизатора.&lt;br /&gt;
&lt;br /&gt;
'''General query''':  роутер шлет general query на 224.0.0.1 всем хотсам (роутер при этом называется query-router (опрашивающий)). Хосты в ответ присылают группы, на которые они еще хотят быть подписаны. TTL тоже = 1.&lt;br /&gt;
&lt;br /&gt;
Чтобы не дублировались ответы с одной группой от разных хостов, хосты шлют ответы с разным временным интервалом. Если хост видит, что о его группе сообщил другой хост, то он не будет отправлять ответ роутеру. Роутер итак сохранит интерфейс как downstream для данной группы.&lt;br /&gt;
&lt;br /&gt;
Если в домене несколько query-роутеров, то в качестве активного будет выбран с наименьшим ip. &lt;br /&gt;
&lt;br /&gt;
'''Leave message''': &lt;br /&gt;
*''IGMP2'': Хост отправляет leave message для конкретной группы на общий адрес 224.0.0.2.&lt;br /&gt;
*''IGMP1'': Хост просто перестает отвечать на query от роутра. Если больше нет подписчиков на группу, роутер по истечению какого-то интервала перестает слать трафик в интерфейс.&lt;br /&gt;
 &lt;br /&gt;
'''Group-specific query''': &lt;br /&gt;
*''IGMP2'': Когда роутер получил leave от хоста, он отправляет general-specific query на адрес этой группы, чтобы понять есть ли еще заинтересованные получатели.&lt;br /&gt;
&lt;br /&gt;
=== Разные версии протокола ===&lt;br /&gt;
&lt;br /&gt;
*'''IGMP v 1'''&lt;br /&gt;
:*Чтобы получить трафик от конкретной группы, хост отправляет роутеру report message.&lt;br /&gt;
:*Для отключения от группы хост просто перестает отвечать роутеру на query.&lt;br /&gt;
:*Таймаут, после которого роутер перестает вещать группу в downstream interface = 260.&lt;br /&gt;
(robustness count * igmp_query interval) + (1*IGMP response interval) = (2*125)+(1*10) = 260&lt;br /&gt;
:*Для выбора query-router нет отдельного механизма. Выбирать должен routing protocol.&lt;br /&gt;
&lt;br /&gt;
*'''IGMP v 2'''&lt;br /&gt;
:*Чтобы подписаться, хосты шлют report-message.&lt;br /&gt;
:*Чтобы отписаться, хосты шлют leave-group message.&lt;br /&gt;
:*Чтобы проверить наличие подписчиков, роутер шлет group-specific message.&lt;br /&gt;
:*Таймаут, после которого роутер перестает вещать: нет ответа от хостов в течение 2 сек (дефолт).&lt;br /&gt;
robusness count * IGMP last member query interval = 2*1 = 2&lt;br /&gt;
:*Query-router - с наименьшим ip. Если падает query-router, его роль выполняет non-query router.&lt;br /&gt;
&lt;br /&gt;
*'''IGMP v 3'''&lt;br /&gt;
Все улучшения для v 2. [активная подписка и отписка на группы].&lt;br /&gt;
&lt;br /&gt;
Используется для SSM, поэтому report message (на адрес 224.0.0.22 - all IGMPv3) может содержать source information.&lt;br /&gt;
&lt;br /&gt;
===L2 switches===&lt;br /&gt;
&lt;br /&gt;
Свитчи обрабатывают мультикаст трафик как бродкаст, по умолчанию, т.е. шлет трафик во все порты.&lt;br /&gt;
&lt;br /&gt;
IGMP-snooping позволяет выделить мультикаст трафик. С помощью IGMP сообщений, свитч может понять где получатели и слать трафик только к ним.&lt;br /&gt;
Делит порты на multicast-router interface (откуда приходят query, либо заданы статически), host-side interface (все остальные).&lt;br /&gt;
&lt;br /&gt;
Передача трафика:&lt;br /&gt;
&lt;br /&gt;
#Весь трафик направлен в multicast-router интерфейс.&lt;br /&gt;
#Если через IGMP-snooping свитч узнает о портах, за которыми сидят получатели, то шлет трафик туда.&lt;br /&gt;
#224/8 сеть бродкастом идет во все порты, кроме входящего.&lt;br /&gt;
&lt;br /&gt;
Стандартное расширение IGMP позволяет только обрабатывать query от роутера и сообщения от получателей. Не генерирует IGMP сообщения.&lt;br /&gt;
&lt;br /&gt;
IGMP snooping proxy ведет себя как роутер для получателей (генерирует query), работает как получатели для роутера (генерирует leave и join сообщения).&lt;br /&gt;
&lt;br /&gt;
Тем самым уменьшается кол-во report-сообщений для роутера.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
На интерфейсах с активным pim, автоматически включается IGMPv2.&lt;br /&gt;
&lt;br /&gt;
Можно менять дефолтные значения всяких таймеров.&lt;br /&gt;
&lt;br /&gt;
Можно статически подписываться на какую-то группу (полезно для тестов). При этом интерфейс просто добавляется в outgoing list.&lt;br /&gt;
&lt;br /&gt;
По умолчанию на Juniper используется IGMPv2, но при необходимости можно задать на интерфейсах нужную версию.&lt;br /&gt;
 set protocols pim interface ge-0/0/0.910&lt;br /&gt;
 set protocols igmp interface ge-0/0/0.910 version 1&lt;br /&gt;
 set protocols igmp interface ge-0/0/0.910 static group 239.100.1.1&lt;br /&gt;
&lt;br /&gt;
== Troubleshoting ==&lt;br /&gt;
 show igmp interfaces&lt;br /&gt;
 show igmp groups&lt;br /&gt;
 show igmp statistics&lt;br /&gt;
 включение traceoptions&lt;br /&gt;
&lt;br /&gt;
==Дополнительная информация==&lt;br /&gt;
*[[Глава 3. Routing protocols (DVMRP, PIM-DM, PIM-SM)]]&lt;br /&gt;
*[[Глава 5. PIM-SSM]]&lt;br /&gt;
*[[MSDP | Глава 4. MSDP]]&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=%D0%A0%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_MPLS_%D0%B2_%D1%8F%D0%B4%D1%80%D0%B5_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=2056</id>
		<title>Реализация MPLS в ядре сети</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=%D0%A0%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_MPLS_%D0%B2_%D1%8F%D0%B4%D1%80%D0%B5_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=2056"/>
		<updated>2021-07-15T18:35:44Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#description2:Дизайн и использование MPLS на ядре сети. RSVP auto-mesh. LDP tunneling. MPLS мастрабирование. L3VPN масштабирование. BGP Considerations для L3VPN. P2MP LSP. Информация для подготовки к экзаменам Juniper.}}&lt;br /&gt;
&lt;br /&gt;
=Core MPLS Designs=&lt;br /&gt;
==RSVP auto-mesh==&lt;br /&gt;
Когда на сети используется RSVP, но для конкретных функций (L3VPN, VPLS, ...) требуется full-mesh, то чтобы не прописывать все LSP руками, можно использовать '''RSVP-full-mesh'''.&lt;br /&gt;
&lt;br /&gt;
Строится, когда: &lt;br /&gt;
* От PE пришел iBGP маршрут (inet.0, VPLS, L3VPN)&lt;br /&gt;
* IP PE из определенного диапазона.&lt;br /&gt;
 [edit routing-options]&lt;br /&gt;
 dynamic-tunnels {&lt;br /&gt;
    tunnel-1 {&lt;br /&gt;
        rsvp-te tunnel-1 {&lt;br /&gt;
            label-switched-path-template {&lt;br /&gt;
                default-template;&lt;br /&gt;
            }&lt;br /&gt;
            destination-networks {&lt;br /&gt;
                10.200.86.0/26;&lt;br /&gt;
&lt;br /&gt;
В книге описано, что просто туннель не поднимется (лаба на mx80), т.к. требуется маршрут до Lo PE с меткой в inet.0. '''Решение:''' Нужно временно включить LDP и set protocols mpls traffic-engineering bgp-igp-both-ribs'', ждем пока построятся RSVP LSP, потом отключаем LDP.&lt;br /&gt;
&lt;br /&gt;
Но по факту в лабе завелось и без дополнительных манипуляций с LDP (лаба на vSRX). =)&lt;br /&gt;
&lt;br /&gt;
В итоге, когда приходят пакеты по iBGP, то до ''protocol next-hop'' (Lo PE, который должен попадать в dest-networks) автоматически поднимается туннель.&lt;br /&gt;
 '''bgp.l3vpn.0''': 1 destinations, 1 routes (1 active, 0 holddown, 0 hidden)&lt;br /&gt;
 + = Active Route, - = Last Active, * = Both&lt;br /&gt;
 ''10.200.86.3:1212:12.12.12.12/32''&lt;br /&gt;
                   *[BGP/170] 12:34:36, localpref 100, from 10.200.86.3&lt;br /&gt;
                      AS path: I&lt;br /&gt;
                    &amp;gt; to 192.168.86.1 via ge-0/0/0.30, label-switched-path '''10.200.86.3:dt-rsvp-tunnel-1'''&lt;br /&gt;
&lt;br /&gt;
 '''bgp.l2vpn.0''': 1 destinations, 1 routes (1 active, 0 holddown, 0 hidden)&lt;br /&gt;
 + = Active Route, - = Last Active, * = Both&lt;br /&gt;
 ''10.200.86.9:1515:1:1/96''&lt;br /&gt;
                   *[BGP/170] 12:16:54, localpref 100, from 10.200.86.9&lt;br /&gt;
                      AS path: I&lt;br /&gt;
                    &amp;gt; to 192.168.86.1 via ge-0/0/0.30, label-switched-path '''10.200.86.9:dt-rsvp-tunnel-1'''&lt;br /&gt;
&lt;br /&gt;
 '''inet.3''': 3 destinations, 3 routes (3 active, 0 holddown, 0 hidden)&lt;br /&gt;
 + = Active Route, - = Last Active, * = Both&lt;br /&gt;
 10.200.86.0/26     *[Tunnel/300] 12:10:07&lt;br /&gt;
                      Tunnel&lt;br /&gt;
 ''10.200.86.3/32''     *[RSVP/7/3] 00:03:04, metric 4&lt;br /&gt;
                    &amp;gt; to 192.168.86.1 via ge-0/0/0.30, label-switched-path '''10.200.86.3:dt-rsvp-tunnel-1'''&lt;br /&gt;
 ''10.200.86.9/32''     *[RSVP/7/3] 00:03:04, metric 5&lt;br /&gt;
                    &amp;gt; to 192.168.86.1 via ge-0/0/0.30, label-switched-path '''10.200.86.9:dt-rsvp-tunnel-1'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 lagavulin&amp;gt; show mpls lsp name '''10.200.86.3:dt-rsvp-tunnel-1''' detail&lt;br /&gt;
 Ingress LSP: 2 sessions&lt;br /&gt;
 10.200.86.3&lt;br /&gt;
  From: 10.200.86.7, State: Up, ActiveRoute: 0, LSPname: 10.200.86.3:dt-rsvp-tunnel-1&lt;br /&gt;
  ActivePath:  (primary)&lt;br /&gt;
  PathDomain: Inter-domain&lt;br /&gt;
  LSPtype: '''Dynamic Configured'''&lt;br /&gt;
  LoadBalance: Random&lt;br /&gt;
  Encoding type: Packet, Switching type: Packet, GPID: IPv4&lt;br /&gt;
 *Primary                    State: Up&lt;br /&gt;
    Priorities: 7 0&lt;br /&gt;
    SmartOptimizeTimer: 180&lt;br /&gt;
    Computed ERO (S [L] denotes strict [loose] hops): (CSPF metric: 4)&lt;br /&gt;
 192.168.86.1 S 192.168.86.41 S 192.168.86.50 S 192.168.86.25 S&lt;br /&gt;
    Received RRO (ProtectionFlag 1=Available 2=InUse 4=B/W 8=Node 10=SoftPreempt 20=Node-ID):&lt;br /&gt;
          192.168.86.1 192.168.86.41 192.168.86.50 192.168.86.25&lt;br /&gt;
&lt;br /&gt;
*Можно добавлять разные фичи TE:&lt;br /&gt;
 [edit protocols mpls]&lt;br /&gt;
 label-switched-path default-template {&lt;br /&gt;
    template;&lt;br /&gt;
    link-protection;&lt;br /&gt;
&lt;br /&gt;
*Если до одного и того же Lo PE есть динамический и статический LSP, то будет выбран статический, т.к. у него ''preference 2'' меньше:&lt;br /&gt;
 inet.3: 3 destinations, 4 routes (3 active, 0 holddown, 0 hidden)&lt;br /&gt;
 10.200.86.3/32     *[RSVP/7/'''[[1]]'''] 00:00:26, metric 4&lt;br /&gt;
                    &amp;gt; to 192.168.86.1 via ge-0/0/0.30, label-switched-path lagavulin-to-oban&lt;br /&gt;
                    [RSVP/7/'''[[3]]'''] 00:02:32, metric 4&lt;br /&gt;
                    &amp;gt; to 192.168.86.1 via ge-0/0/0.30, label-switched-path 10.200.86.3:dt-rsvp-tunnel-1&lt;br /&gt;
*Если по iBGP перестают прилетать маршруты, то туннель через 15 минут умрет: &lt;br /&gt;
 lagavulin&amp;gt; show dynamic-tunnels database&lt;br /&gt;
 Table: inet.3&lt;br /&gt;
 Destination-network: 10.200.86.0/26&lt;br /&gt;
 Tunnel to: 10.200.86.9/32 ('''expires in 00:14:46 seconds''')&lt;br /&gt;
  Reference count: 0&lt;br /&gt;
  Next-hop type: rsvp-te&lt;br /&gt;
    10.200.86.9:dt-rsvp-tunnel-1&lt;br /&gt;
&lt;br /&gt;
==LDP tunneling==&lt;br /&gt;
Комбинация LDP и RSVP. Core - RSVP + TE, доступ - LDP.&lt;br /&gt;
&lt;br /&gt;
===Процесс построения===&lt;br /&gt;
&lt;br /&gt;
[[Файл:ldp_tunneling.png]]&lt;br /&gt;
* Роутер A (PE) - LDP. Egress: начинает анонсировать себя с меткой 3 в сторону B.&lt;br /&gt;
* Роутер B (PE) - LDP + RSVP. Анонс LoA с меткой 20 в сторону C. B: '''mpls.0''': 20 pop -&amp;gt; A&lt;br /&gt;
* Роутер C (P)  - RSVP (с LDP-tunneling). Анонс LoA с меткой 30 в сторону E. С: '''mpls.0''': 30 swap 20 -&amp;gt; B.&lt;br /&gt;
* Роутер D (P)  - между E&amp;lt;&amp;gt;C - RSVP LSP, где D - предпоследний роутер.&lt;br /&gt;
* Роутер E (P)  - LDP + RSVP. Анонс LoA с меткой 40 в сторону F. E: '''mpls.0''': 40 swap 30 -&amp;gt; C. Но C не direct connected, а доступен через туннель =&amp;gt; идем смотреть в inet.3. E: '''inet.3''': LoC push 100 -&amp;gt; D. =&amp;gt; E: '''mpls.0''': 40 swap 30 push 100&lt;br /&gt;
* Роутер F (PE) - LDP. Ingress: '''inet.3''': LoA: push 40 -&amp;gt; E.&lt;br /&gt;
&lt;br /&gt;
В обратную сторону строится точно также.&lt;br /&gt;
&lt;br /&gt;
Когда туннель построен, между ingress (C) и egress (E) роутерами RSVP LSP установится LDP соседство! Устанавливается по UDP 646 на Lo P (''берется из конфигурации туннеля''), ''не hello механизм, но тоже работает’’.&lt;br /&gt;
&lt;br /&gt;
Обязательно на P роутерах включить в LDP Lo, чтобы поднялся туннель C - E.&lt;br /&gt;
&lt;br /&gt;
Схема работает только в пределах области.&lt;br /&gt;
&lt;br /&gt;
При включенном LDP tunneling будут видны скрытые маршруты в inet.3&lt;br /&gt;
&lt;br /&gt;
Можно использовать, когда не все устройства в сети поддерживают RSVP, но на ядре требуется TE. Также TE как таковой не требуется вообще на PE, нужно только на ядре, на P роутерах. Поэтому RSVP можно запустить только на ядре, а PE будут подцепляться по LDP.&lt;br /&gt;
&lt;br /&gt;
При конфигурации может возникнуть проблема с переносом маршрутов из inet.3 в inet.0 (на PE роутерах). Решается как обычно: ''set protocols mpls traffic-engineering bgp-ibgp-both-ribs''. Или любым другим способом.&lt;br /&gt;
&lt;br /&gt;
===Configuration===&lt;br /&gt;
[[Файл:ldp_tunneling_laba.png]]&lt;br /&gt;
&lt;br /&gt;
'''PE (LDP + RSVP)''':&lt;br /&gt;
 [protocols mpls]&lt;br /&gt;
    traffic-engineering bgp-igp-both-ribs;&lt;br /&gt;
    label-switched-path talisker-to-oban {&lt;br /&gt;
       to 10.200.86.3;&lt;br /&gt;
       ldp-tunneling;&lt;br /&gt;
 [protocols ldp]&lt;br /&gt;
    interface ge-0/0/0.70;&lt;br /&gt;
    interface ge-0/0/0.120;&lt;br /&gt;
    interface all;&lt;br /&gt;
'''С другой стороны на PE''':&lt;br /&gt;
 [protocols mpls]&lt;br /&gt;
    traffic-engineering bgp-igp-both-ribs;&lt;br /&gt;
    label-switched-path oban-to-talisker {&lt;br /&gt;
       to 10.200.86.4;&lt;br /&gt;
       ldp-tunneling;&lt;br /&gt;
&lt;br /&gt;
===Проверка===&lt;br /&gt;
Между крайние PE,  на которых настроено туннелирование, установили соседство между собой по LDP:&lt;br /&gt;
 talisker&amp;gt; show ldp neighbor&lt;br /&gt;
 Address            Interface          Label space ID         Hold time&lt;br /&gt;
 10.200.86.3        lo0.0              10.200.86.3:0            42&lt;br /&gt;
&lt;br /&gt;
На PE, к которому подключается CE:&lt;br /&gt;
 macduff&amp;gt; show route 10.200.86.1&lt;br /&gt;
 inet.0: 30 destinations, 40 routes (30 active, 0 holddown, 0 hidden)&lt;br /&gt;
 10.200.86.1/32     *[LDP/9] 00:19:03, metric 1&lt;br /&gt;
                    &amp;gt; to 192.168.86.13 via ge-0/0/0.70, Push 300016&lt;br /&gt;
                    [OSPF/10] 00:19:03, metric 4&lt;br /&gt;
                    &amp;gt; to 192.168.86.13 via ge-0/0/0.70&lt;br /&gt;
&lt;br /&gt;
 talisker&amp;gt; show route label 300016 detail&lt;br /&gt;
 mpls.0: 14 destinations, 14 routes (14 active, 0 holddown, 0 hidden)&lt;br /&gt;
 300016 (1 entry, 1 announced)&lt;br /&gt;
        *LDP    Preference: 9&lt;br /&gt;
                Next hop type: Router, Next hop index: 548&lt;br /&gt;
                Address: 0x934c3b8&lt;br /&gt;
                Next-hop reference count: 2&lt;br /&gt;
                Next hop: 192.168.86.33 via ge-0/0/0.120 weight 0x1, selected&lt;br /&gt;
                Label-switched-path talisker-to-oban&lt;br /&gt;
                Label operation: Swap 299776, Push 299968(top)&lt;br /&gt;
                Label TTL action: prop-ttl, prop-ttl(top)&lt;br /&gt;
                State: &amp;lt;Active Int NhAckRequest&amp;gt;&lt;br /&gt;
                Local AS:  1111&lt;br /&gt;
                Age: 19:37      Metric: 1&lt;br /&gt;
                Task: LDP&lt;br /&gt;
                Announcement bits (1): 0-KRT&lt;br /&gt;
                AS path: I&lt;br /&gt;
                Prefixes bound to route: 10.200.86.1/32&lt;br /&gt;
&lt;br /&gt;
 tormore&amp;gt; show route label 299968 detail&lt;br /&gt;
 mpls.0: 18 destinations, 18 routes (18 active, 0 holddown, 0 hidden)&lt;br /&gt;
 299968(S=0) (1 entry, 1 announced)&lt;br /&gt;
        *RSVP   Preference: 7/1&lt;br /&gt;
                Next hop type: Router, Next hop index: 581&lt;br /&gt;
                Address: 0x934d258&lt;br /&gt;
                Next-hop reference count: 2&lt;br /&gt;
                Next hop: 192.168.86.38 via ge-0/0/0.130 weight 0x1, selected&lt;br /&gt;
                Label-switched-path talisker-to-oban&lt;br /&gt;
                Label operation: Pop&lt;br /&gt;
                State: &amp;lt;Active Int AckRequest&amp;gt;&lt;br /&gt;
                Local AS:  1111&lt;br /&gt;
                Age: 1:09:29    Metric: 1&lt;br /&gt;
                Task: RSVP&lt;br /&gt;
                Announcement bits (1): 0-KRT&lt;br /&gt;
                AS path: I&lt;br /&gt;
&lt;br /&gt;
 oban&amp;gt; show route label 299776 detail&lt;br /&gt;
 mpls.0: 14 destinations, 14 routes (14 active, 0 holddown, 0 hidden)&lt;br /&gt;
 299776 (1 entry, 1 announced)&lt;br /&gt;
        *LDP    Preference: 9&lt;br /&gt;
                Next hop type: Router, Next hop index: 544&lt;br /&gt;
                Address: 0x934c568&lt;br /&gt;
                Next-hop reference count: 2&lt;br /&gt;
                Next hop: 192.168.86.26 via ge-0/0/0.110, selected&lt;br /&gt;
                Label operation: Pop&lt;br /&gt;
                State: &amp;lt;Active Int&amp;gt;&lt;br /&gt;
                Local AS:  1111&lt;br /&gt;
                Age: 26:53      Metric: 1&lt;br /&gt;
                Task: LDP&lt;br /&gt;
                Announcement bits (1): 0-KRT&lt;br /&gt;
                AS path: I&lt;br /&gt;
                Prefixes bound to route: 10.200.86.1/32&lt;br /&gt;
=MPLS Scaling=&lt;br /&gt;
==Hierarchical LSP==&lt;br /&gt;
Иерархичные LSP позволяют роутеру воспринимать core-to-core линки, как физические интерфейсы.&lt;br /&gt;
То есть протокол IGP может анонсировать метрики и TE характеристики LSP, как обычного интерфейса.&lt;br /&gt;
&lt;br /&gt;
Для внедрения иерархичных LSP требуется OSPF.&lt;br /&gt;
&lt;br /&gt;
===Configuration===&lt;br /&gt;
*LSP задаём, как te-link - это даёт возможность другим роутером увидеть данный линк внутри TED&lt;br /&gt;
*Конфигурируем логический интерфейс.&lt;br /&gt;
*Link-management&lt;br /&gt;
Вся конфигурация задается только на P роутерах.&lt;br /&gt;
&lt;br /&gt;
 lagavulin&amp;gt; show configuration protocols &lt;br /&gt;
 rsvp {&lt;br /&gt;
    interface ge-0/0/1.0;&lt;br /&gt;
    interface ge-0/0/2.0;&lt;br /&gt;
    peer-interface peer-talisker;&lt;br /&gt;
 }&lt;br /&gt;
 mpls {&lt;br /&gt;
    label-switched-path lagavulin-to-talisker {&lt;br /&gt;
    to 10.200.86.4;&lt;br /&gt;
  }&lt;br /&gt;
    interface ge-0/0/1.0;&lt;br /&gt;
    interface ge-0/0/2.0;&lt;br /&gt;
  }&lt;br /&gt;
 ospf { &lt;br /&gt;
    traffic-engineering;&lt;br /&gt;
    area 0.0.0.0 {&lt;br /&gt;
    interface lo0.0 {&lt;br /&gt;
       passive;&lt;br /&gt;
    interface ge-0/0/1.0&lt;br /&gt;
    interface ge-0/0/2.0;&lt;br /&gt;
    peer-interface peer-talisker;&lt;br /&gt;
 link-management {&lt;br /&gt;
    te-link lagavulin-to-talisker-te {&lt;br /&gt;
       local-address 192.168.87.1;&lt;br /&gt;
       remote-address 192.168.87.2;&lt;br /&gt;
       te-metric 1;&lt;br /&gt;
       label-switched-path lagavulin-to-talisker;&lt;br /&gt;
    peer peer-talisker {&lt;br /&gt;
       address 10.200.86.4;&lt;br /&gt;
       te-link lagavulin-to-talisker-te;&lt;br /&gt;
&lt;br /&gt;
*Для самого туннеля задаются отдельные ip: конечный и начальный (как у любого туннеля). &lt;br /&gt;
*Te-metric - та самая метрика, которая будет сравниваться при построении кратчайшего пути&lt;br /&gt;
 lagavulin&amp;gt; show link-management &lt;br /&gt;
 Peer name: peer-talisker, System identifier: 55629&lt;br /&gt;
    State: Up, Control address: 10.200.86.4&lt;br /&gt;
    Hello interval: 150, Hello dead interval: 500&lt;br /&gt;
       TE links:&lt;br /&gt;
           lagavulin-to-talisker-te&lt;br /&gt;
  TE link name: lagavulin-to-talisker-te, State: Up&lt;br /&gt;
     Local identifier: 2684274792, Remote identifier: 2684274792,&lt;br /&gt;
     Local address: 192.168.87.1, Remote address: 192.168.87.2, Encoding: Packet,&lt;br /&gt;
     Switching: Packet, Minimum bandwidth: 0bps, Maximum bandwidth: 0bps,&lt;br /&gt;
     Total bandwidth: 0bps, Available bandwidth: 0bps&lt;br /&gt;
         Name                         State Local ID Remote ID Bandwidth Used LSP-name&lt;br /&gt;
         lagavulin-to-talisker Up     14956    0            0bps               Yes '''dalwhinnie-to-tormore'''&lt;br /&gt;
В итоге видим, что ''dalwhinnie-to-tormore'' туннелируется в ''lagavulin-to-talisker''.&lt;br /&gt;
 dalwhinnie&amp;gt; show mpls lsp name dalwhinnie-to-tormore detail &lt;br /&gt;
    Ingress LSP: 1 sessions&lt;br /&gt;
    10.200.86.9&lt;br /&gt;
    From: 10.200.86.5, State: Up, ActiveRoute: 0, LSPname: dalwhinnie-to-tormore&lt;br /&gt;
    ActivePath: (primary)&lt;br /&gt;
    LoadBalance: Random&lt;br /&gt;
    Encoding type: Packet, Switching type: Packet, GPID: IPv4&lt;br /&gt;
      *Primary State: Up&lt;br /&gt;
      SmartOptimizeTimer: 180&lt;br /&gt;
      Computed ERO (S [L] denotes strict [loose] hops): (CSPF metric: 60)&lt;br /&gt;
      192.168.86.29 S '''192.168.87.2''' S 192.168.86.33 S &lt;br /&gt;
      Received RRO (ProtectionFlag 1=Available 2=InUse 4=B/W 8=Node 10=SoftPreempt):&lt;br /&gt;
      192.168.86.29 192.168.87.2 192.168.86.33&lt;br /&gt;
      Total 1 displayed, Up 1, Down 0&lt;br /&gt;
&lt;br /&gt;
На роутере, где будет настроен и начинаться hierarchical LSP будет делаться дополнительный ''push'' метки, для прохождения пакета внутри hierarchical LSP.&lt;br /&gt;
&lt;br /&gt;
Причём на P роутере, транзитном для hierarchal LSP, не будет никакой информации о LSP, вложенном в hierarchical LSP. В этом, наверное и заключается основное преимущество метода - '''масштабируемость'''.&lt;br /&gt;
&lt;br /&gt;
==Hierarchical RSVP Domains==&lt;br /&gt;
Смысл: разбить путь прохождения пакета на части: PE-P, P-P, P-PE LSP.&lt;br /&gt;
&lt;br /&gt;
PE имеют RSVP-TE LSP до ближайших P роутеров. Между Р роутерами - full-mesh.&lt;br /&gt;
&lt;br /&gt;
При таком подходе нельзя использовать MPLS VPN сервисы, т.к. Пропадает целостность РЕ-РЕ LSP.&lt;br /&gt;
&lt;br /&gt;
Но такой подход даёт возможность использовать совмещённый LDP+RSVP.&lt;br /&gt;
&lt;br /&gt;
Использовать функции ТЕ в сore и различные механизмы защиты (link-protection, link-node-protection).&lt;br /&gt;
&lt;br /&gt;
==RSVP Refresh reduction==&lt;br /&gt;
Для решения проблем с масштабируемостью в самом протоколе RSVP, были сделаны несколько дополнений:&lt;br /&gt;
*'''reliable messages''': внедрены 2 новых объекта MESSAGE_ID, MESSAGE_ID_ACK.&lt;br /&gt;
*'''boundle messages''': группировка/объединение уже существующих сообщений RSVP.&lt;br /&gt;
*'''summary refresh update''': объединяет несколько path или resv  сообщений в один  update.&lt;br /&gt;
  [edit protocols rsvp]&lt;br /&gt;
    Interface ge-0/0/0.120&lt;br /&gt;
    Aggregate&lt;br /&gt;
=L3VPN scaling=&lt;br /&gt;
Кол-во VRF-таблиц может быть до 9000 в рамках одного роутера (кончено же зависит от платформы).&lt;br /&gt;
&lt;br /&gt;
Кол-во маршрутов (в целом) сильно зависит от платформы, но на MX960 можно поддерживать до 1,5 млн.&lt;br /&gt;
&lt;br /&gt;
==BGP Considerations==&lt;br /&gt;
===Route-reflection in VPN Environments===&lt;br /&gt;
RR должен иметь LSP до любого PE, которому он будет передавать MPLS VPN маршруты. Иначе RR не сможет сделать валидными MPLS VPN маршруты, т.к. next-hop будет unusable и RR просто не будет передавать их остальным PE (''no active'').&lt;br /&gt;
&lt;br /&gt;
В качестве RR лучше делать P роутеры.&lt;br /&gt;
&lt;br /&gt;
На RR не требуется конфигурация самих VRF, RR просто должны уметь работать с MPLS VPN маршрутами (family inet-vpn). ''keep all'' будет включен при включении Cluster ID.&lt;br /&gt;
&lt;br /&gt;
PE роутеры буду фильтровать полученные маршруты по RT. От RR будут прилетать все маршруты из ''bgp.l3vpn.0''.&lt;br /&gt;
&lt;br /&gt;
Чтобы без дополнительных действий происходило обновление маршрутов на RR, требуется использовать '''refresh''': BGP-speaker просит обновить все NLRI.&lt;br /&gt;
{{note|text=При использовании RR, на PE, получивших l2vpn, l3pvn маршруты, выбор активного пути (до RR) не будет опираться на стандартный BGP-алгоритм выбора best path. Для использования стандартного best path: ''l2vpn-use-bgp-rules''}}&lt;br /&gt;
&lt;br /&gt;
VRR не начнет передавать получить vpn маршруты от других RR, пока на локальном RR не появятся первые клиенты.&lt;br /&gt;
&lt;br /&gt;
Схема: blair - RR, lagavulin - PE1, oban - PE2.&lt;br /&gt;
PE1 и PE2 передают маршруты RR. &lt;br /&gt;
====LDP====&lt;br /&gt;
При использовании LDP, нужно разрешить RR участвовать в LDP, чтобы обеспечить возможность делать resolve для next-hop в таблице inet.3.&lt;br /&gt;
&lt;br /&gt;
При включении LDP на RR - проблема с unusable маршрутами исчезает.&lt;br /&gt;
====RSVP====&lt;br /&gt;
При использовании RSVP требуется LSP от RR до каждого PE.&lt;br /&gt;
&lt;br /&gt;
Требуется создать LSP: lagavulin (PE) &amp;lt;&amp;gt; blair (RR), blair (RR) &amp;lt;&amp;gt; oban (PE).&lt;br /&gt;
&lt;br /&gt;
*И обязательно, что бы RR делал ''next-hop self'', без этого PE будет принимать VPN маршрут, но делать его ''unusable'', т.к. indirect nexp-hop будет недоступен. И трафик пойдет тогда по LSP от PE к RR, потом по LSP от RR к PE.&lt;br /&gt;
*Либо между PE потребуется иметь LPS (RSVP).&lt;br /&gt;
&lt;br /&gt;
Либо можно заставить RR думать, что у него есть LSP до PE. &lt;br /&gt;
&lt;br /&gt;
* Позволить ''bgp.l3vpn.0'' использовать другую (не inet.3) таблицу для resovle next-hop.&lt;br /&gt;
 blair&amp;gt;&lt;br /&gt;
 [edit routing-options]&lt;br /&gt;
 resolution {&lt;br /&gt;
    rib bgp.l3vpn.0 { &lt;br /&gt;
       resolution-ribs inet.0;&lt;br /&gt;
&lt;br /&gt;
Между PE тогда должна быть LSP.&lt;br /&gt;
&lt;br /&gt;
* С помощью rib-groups скопировать маршруты из inet.0 в inet.3&lt;br /&gt;
 blair&amp;gt;&lt;br /&gt;
 [edit routing-options rib-groups inet.0-to-inet.3]&lt;br /&gt;
    import-rib [ inet.0 inet.3 ];&lt;br /&gt;
 [edit protocols ospf rib-group]&lt;br /&gt;
    inet.0-to-inet.3;&lt;br /&gt;
&lt;br /&gt;
Чтобы не все маршруты, а только /32 попадали в inet.3, можно сделать следующее&lt;br /&gt;
 routing-options { &lt;br /&gt;
   rib inet.3 {&lt;br /&gt;
      static {&lt;br /&gt;
         route 0.0.0.0/0 discard;&lt;br /&gt;
Или с помощью policy решить эту же проблему:&lt;br /&gt;
 policy-options policy-statement Loopbacks-Only &lt;br /&gt;
    term Loopbacks {&lt;br /&gt;
       from {&lt;br /&gt;
          route-filter 10.200.86.0/24 prefix-length-range /32-/32;&lt;br /&gt;
       then accept; &lt;br /&gt;
    term Reject-All-Else { &lt;br /&gt;
       then reject;&lt;br /&gt;
&lt;br /&gt;
 routing-options &lt;br /&gt;
    rib-groups {&lt;br /&gt;
       inet.0-to-inet.3 {&lt;br /&gt;
          import-rib [ inet.0 inet.3 ]; &lt;br /&gt;
          import-policy Loopbacks-Only;&lt;br /&gt;
&lt;br /&gt;
===BGP Route-target Family===&lt;br /&gt;
По дефолту при создании L3VPN, L2VPN, РЕ роутер будет пересылать маршруты о своих VPN по всей сети. Удаленный PE будет получать все маршруты, но использовать только те, которые подходят по созданные на нем VPN.&lt;br /&gt;
&lt;br /&gt;
С использованием '''route target filtering''': PE присылает RR список необходимых RT. RR применяет route filter и отправляет только соответствующие маршруты.&lt;br /&gt;
&lt;br /&gt;
В family '''route-target''' (на PE) можно  задавать параметры prefix-limit, external-paths, advertise-default.&lt;br /&gt;
&lt;br /&gt;
При передаче маршрутов от RR, он меняет hext-hop и originator ID на свои.&lt;br /&gt;
&lt;br /&gt;
Чтобы изменить такое дефолтное поведение на PE добавляем ''family route-target'': &lt;br /&gt;
 tormore&amp;gt;  &lt;br /&gt;
 [edit protocols bgp group ibgp] &lt;br /&gt;
 type internal; &lt;br /&gt;
 local-address 10.200.86.9; &lt;br /&gt;
 family inet-vpn {&lt;br /&gt;
    unicast; }&lt;br /&gt;
 family route-target; &lt;br /&gt;
 neighbor 10.200.86.7; &lt;br /&gt;
 neighbor 10.200.86.3;  &lt;br /&gt;
 neighbor 10.200.86.5;&lt;br /&gt;
&lt;br /&gt;
'''Проверка'''&lt;br /&gt;
 tormore&amp;gt; show route table bgp.rtarget.0&lt;br /&gt;
 '''bgp.rtarget.0''': 2 destinations, 5 routes (2 active, 0 holddown, 0 hidden) + = Active Route, - = Last Active, * = Both&lt;br /&gt;
 1:1:1/96&lt;br /&gt;
               *[BGP/170] 00:01:58, localpref 100, from 10.200.86.3 &lt;br /&gt;
                  AS path: I&lt;br /&gt;
               &amp;gt; to 192.168.86.38 via ge-0/0/3.0&lt;br /&gt;
               [BGP/170] 00:01:54, localpref 100, from 10.200.86.5&lt;br /&gt;
                  AS path: I&lt;br /&gt;
               &amp;gt; to 192.168.86.38 via ge-0/0/3.0, Push 100496&lt;br /&gt;
               to 192.168.86.34 via ge-0/0/2.0, Push 655505 &lt;br /&gt;
               [BGP/170] 00:02:03, localpref 100, from 10.200.86.7&lt;br /&gt;
                  AS path: I&lt;br /&gt;
               &amp;gt; to 192.168.86.34 via ge-0/0/2.0, Push 655489&lt;br /&gt;
 '''1:2:2/96'''&lt;br /&gt;
               *[RTarget/5] 00:02:15 &lt;br /&gt;
                  '''Local'''&lt;br /&gt;
               [BGP/170] 00:01:54, localpref 100, from 10.200.86.5 AS path: I&lt;br /&gt;
               &amp;gt; to 192.168.86.38 via ge-0/0/3.0, Push 100496&lt;br /&gt;
                 to 192.168.86.34 via ge-0/0/2.0, Push 655505&lt;br /&gt;
&lt;br /&gt;
'''Local''' обозначает, что локальный роутер также импортирует маршруты с 2:2 target. Таким образом РЕ видит каким удаленным РЕ какие VPN маршруты стоит отправлять.&lt;br /&gt;
&lt;br /&gt;
==VPLS==&lt;br /&gt;
===P2MP LSP===&lt;br /&gt;
В случае использования P2P LSP, source PE должен расплодить несколько копий трафика и послать по разным LSP.&lt;br /&gt;
&lt;br /&gt;
В случае использования P2MP: source PE отправляет трафик, копирование трафика происходит на определенном роутере, на котором происходит дальнейшее разветвление путей передачи трафика (''branch point'').&lt;br /&gt;
&lt;br /&gt;
Таким образом уменьшится число копий трафика в сети. Копирование будет происходить только на ''branch points''. Понятно, что при внедрении VPLS может быть много точек, поэтому будет логично использовать P2MP.&lt;br /&gt;
&lt;br /&gt;
Для VPLS внедрение P2MP делается внутри routing-instance.&lt;br /&gt;
=====Configuration=====&lt;br /&gt;
Здесь не описано, но дополнительно требуется создать p2mp LSP между PE роутерами. &lt;br /&gt;
&lt;br /&gt;
Описание настройки есть здесь: http://juniper-exam.ru/index.php/%D0%93%D0%BB%D0%B0%D0%B2%D0%B0_2._Label_Distribution_Protocols_(RSVP,_LDP)#P2MP&lt;br /&gt;
 dalwhinnie&amp;gt; show configuration routing-instances oak &lt;br /&gt;
 instance-type vpls;&lt;br /&gt;
 interface ge-1/0/0.0;&lt;br /&gt;
 route-distinguisher 10.200.86.1:100;&lt;br /&gt;
 '''provider-tunnel''' { &lt;br /&gt;
    rsvp-te {&lt;br /&gt;
       label-switched-path-template { &lt;br /&gt;
          default-template;&lt;br /&gt;
 vrf-target target:300:200; &lt;br /&gt;
 protocols {&lt;br /&gt;
    vpls {&lt;br /&gt;
       site-range 5; &lt;br /&gt;
       no-tunnel-services;&lt;br /&gt;
       site oak-ce1 {&lt;br /&gt;
          site-identifier 1;&lt;br /&gt;
          interface ge-1/0/0.0;&lt;br /&gt;
&lt;br /&gt;
''default-template'' можно заменить на свой, указав желаемые параметры для LSP.&lt;br /&gt;
&lt;br /&gt;
===Filtering BUM Traffic===&lt;br /&gt;
Еще один способ уменьшить количество трафика Layer 2 broadcast, unknown unicast и multicast traffic - создать ''firewall family vpls filter'' и применить его [edit routing-instance oak forwarding-options family vpls].&lt;br /&gt;
&lt;br /&gt;
=Дополнительная информация=&lt;br /&gt;
*[[Глава 2. Label Distribution Protocols (RSVP, LDP)]]&lt;br /&gt;
*[[Отказоустойчивость и оптимизация в MPLS]]&lt;br /&gt;
*[[Traffic engineering]]&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=EVPN&amp;diff=2055</id>
		<title>EVPN</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=EVPN&amp;diff=2055"/>
		<updated>2021-07-15T18:35:08Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#description2: Основы EVPN. Конфигурация EVPN. Траблшутинг EVPN. Multi-homing EVPN. L2 процессы внутри EVPN. L3 процессы внутри EVPN. MP-BGP EVPN Route Summary. High Availability в EVPN. Информация для подготовки к экзаменам Juniper.}}&lt;br /&gt;
&lt;br /&gt;
=Основы EVPN=&lt;br /&gt;
Обеспечивает виртуальную многоточечную связность между разными L2 доменами через IP или MPLS сеть. Внедрить можно уже на существующей сети, потому что в ядре уже используются нужные технологии: MPLS или IP.&lt;br /&gt;
&lt;br /&gt;
Отлично подходит для соединения data-centers sites.&lt;br /&gt;
&lt;br /&gt;
CE, включенный в EVPN видит всю сеть как один бродкаст домен (большой свитч).&lt;br /&gt;
&lt;br /&gt;
Control-plane mac-learning =&amp;gt; all-active multihoming, traffic load balancing, MAC mobility.&lt;br /&gt;
&lt;br /&gt;
Имеет хорошую возможность эффективно роутить вх и исх трафик, даже при миграции хостов в data-centers. &lt;br /&gt;
&lt;br /&gt;
Имеет хорошие показатели по сходимости при link failure и node failure.&lt;br /&gt;
&lt;br /&gt;
По аналогии с другими VPN, для EVPN на PE роутера создается отдельный Instance (EVIs), который логически разделяет клиентов. &lt;br /&gt;
&lt;br /&gt;
CE имеют соединение с PE. PE обмениваются между собой информацией, использую MP-BGP и инкапсулированный трафик также передают между PE.&lt;br /&gt;
&lt;br /&gt;
'''Особенность''': есть mac-learning, который осуществляется на control plane. Новый мак-адрес изученный PE, передается остальным удаленным PE, используя '''MP-BGP MAC route'''. Mac-learning в EVPN намного более тонко работает, чем в VPLS.&lt;br /&gt;
&lt;br /&gt;
MAC-learning на control-plane позволяет примерять policy и другие опции к MAC, изученными между PE, что делает подобный mac-learning более эффективным и дает возможность обеспечивать защиту на сети.&lt;br /&gt;
&lt;br /&gt;
С использованием EVPN, можно реализовать на сети много разных топологий: E-LINE, E-LAN, E-TREE.&lt;br /&gt;
&lt;br /&gt;
EVPN полезно внедрять ISP, предоставляющим своим клиентам L2VPN, L3VPN, Internet access и которые дополнительно хотели бы для существующих клиентов предоставить облачные сервисы и хранение данных.&lt;br /&gt;
&lt;br /&gt;
Также EVPN эффективно использовать для соединения разных data-centers (DC) site. &lt;br /&gt;
&lt;br /&gt;
EVPN обладает такими функциями:&lt;br /&gt;
*'''Multi-homing между CE-PE''' с поддержанием active-active линков.&lt;br /&gt;
Дает возможность подключиться одному CE к нескольким PE, при этом трафик передается по всем активным линкам.&lt;br /&gt;
&lt;br /&gt;
'''Aliasing''' дает возможность удаленным PE делать балансировку к multi-homed PE, через core, даже в том случае, когда удаленный PE изучил мак с одного из Multi-homed PE.&lt;br /&gt;
&lt;br /&gt;
*В EVPN есть механизмы для '''предотвращения BUM петель'''.&lt;br /&gt;
&lt;br /&gt;
В случае, когда CE не поддерживает балансировку или PE не имеет средств защиты от BUM петель, тогда можно организовать multi-homing с одним активным линком между PE и CE. &lt;br /&gt;
&lt;br /&gt;
*'''Быстрое восстановление сервиса'''.&lt;br /&gt;
С помощью multi-homing, обеспечивается быстрое восстановление сервиса, т.к. при падении PE или линка до PE, трафик переходит на другой активный линк.&lt;br /&gt;
&lt;br /&gt;
Трафик с другой стороны: удаленный PE обновляет свою forwarding table и также посылает трафик в сторону оставшихся активных PE.&lt;br /&gt;
&lt;br /&gt;
*Поддержка '''миграции виртуальных машин или MAC mobility'''.&lt;br /&gt;
У PE есть возможность отслеживать перемещение мак-адреса виртуальной машины (VM).&lt;br /&gt;
При этом, когда VM переместилась, то новый PE, который изучил ее MAC, делает MAC route update. Старый PE, получив такой update, удаляет у себя информацию об этом MAC. &lt;br /&gt;
&lt;br /&gt;
*'''Интеграция L3 роутинга с оптимальным forwarding'''.&lt;br /&gt;
Для L2 домена можно внедрить L3 routing, путем добавления IRB интерфейса для влана в EVPN instance. Хосты будут использовать этот irb как default gateway.&lt;br /&gt;
&lt;br /&gt;
Irb IP и MAC анонсируются остальным удаленным PE EVPN путем ''Default Gateway Synchronization''. Это полезно с той точки зрения, что все PE будут в курсе Def GW и при переезде VM на другой PE, PE будет проксировать arp от имени изученного Def GW и маршрутизировать трафик от VM напрямую к destination.&lt;br /&gt;
&lt;br /&gt;
Таким же образом, через snooping ARP и DHCP пакетов, происходит заучивание ip-адресов хостов EVPN дата-центров. Называется это ''Host MAC/IP Synchronization'''. После этого появляется возможность передавать трафик PE, ближайшему к хосту. Этот метод совместим c MAC migration. &lt;br /&gt;
&lt;br /&gt;
''Asymmetric IRB Forwarding'': L2 заголовок перезаписывает ingress PE перед отправкой пакета. Это позволяет dest PE обойтись без L3 lookup, когда он производит передачу пакета.&lt;br /&gt;
&lt;br /&gt;
*Уменьшение утилизации полосы пропускания для multi-destination трафика между разными частями дата-центра в разных местах.&lt;br /&gt;
:*PE делают Proxy ARP: изучая ip хостов и Def GW.&lt;br /&gt;
:*P2MP or MP2MP LSPs между сторонами дата-центров.&lt;br /&gt;
*Поддерживает инкапсуляцию разных данных. Например, GRE tunnels с IPSEC.&lt;br /&gt;
&lt;br /&gt;
=Конфигурация EVPN=&lt;br /&gt;
Пример конфига разбирается на примере лабы, поднятой в книге: Day One - EVPN&lt;br /&gt;
&lt;br /&gt;
[[Файл:EVPN_laba.png|1000px]]&lt;br /&gt;
&lt;br /&gt;
Для поддержки trio-based FPCs, требуется включение '''enhanced-ip'''&lt;br /&gt;
 blair# set chassis network-services enhanced-ip    &lt;br /&gt;
&lt;br /&gt;
==В уровне ядра==&lt;br /&gt;
*OSPF, на всех интерфейсах. Также включаем TE внутри OSPF.&lt;br /&gt;
*MPLS с RSVP-TE LSP между всеми PE (full-mesh). LSP будут использоваться как для EVPN, так и для IP VPN.&lt;br /&gt;
*MP-BGP для EVPN и IP VPN. Конфигурируется сессия с P-роутером, который в свою очередь также является и RR (и советуют настроить bfd-detection). Включаем необходимые family: inet-vpn, evpn.&lt;br /&gt;
&lt;br /&gt;
==На уровне доступа==&lt;br /&gt;
*В сторону CE настраиваем отдельный логический интерфейс для каждого instance с требуемыми вланами.&lt;br /&gt;
&lt;br /&gt;
*ESI - Ethernet Segment ID: требуется для multi-homing. Первый октет = Type, остальные - ID. Вид: ''00:11:11:11:11:11:11:11:11:11''.&lt;br /&gt;
&lt;br /&gt;
Задаем ''all-active'', что обеспечивает балансировку между линками CE &amp;lt;&amp;gt; PE.&lt;br /&gt;
*LACP даже с одним линком имеет смысл: дает возможность определить действительно ли по линку ходит трафик или нет. Если LACP развалится, значит сигнальные сообщения не проходят по физическим линкам внутри LACP. Также при добавлении или исключении линка из LACP не страдает передача трафика. LACP в лабе настроен между двумя PE и свитчем на стороне CE.&lt;br /&gt;
&lt;br /&gt;
 set interface xe-1/0/0 gither-options 802.3.ad ae0 '''hold-time up 180000 down 0''' &lt;br /&gt;
&lt;br /&gt;
*Задается одинаковый system-id для LACP на обоих РЕ (Node's System ID, encoded as a MAC address). При этом СЕ свитч думает, что LACP установлен с одним устройством.&lt;br /&gt;
 interfaces {&lt;br /&gt;
    ae0 {&lt;br /&gt;
       flexible-vlan-tagging;&lt;br /&gt;
       encapsulation flexible-ethernet-services;&lt;br /&gt;
       esi {&lt;br /&gt;
          00:22:22:22:22:22:22:22:22:22;&lt;br /&gt;
          all-active; }&lt;br /&gt;
    aggregated-ether-options {&lt;br /&gt;
       lacp {&lt;br /&gt;
          '''system-id 00:00:00:00:00:02'''; }}&lt;br /&gt;
&lt;br /&gt;
==Сервисы==&lt;br /&gt;
*'''EVPN VLAN-based''': один влан, который принадлежит одному bridge домену.&lt;br /&gt;
Пример конфига:&lt;br /&gt;
 routing-instances {&lt;br /&gt;
    EVPN-1 {&lt;br /&gt;
        instance-type '''evpn''';&lt;br /&gt;
        '''vlan-id 100''';&lt;br /&gt;
        interface ae0.100;&lt;br /&gt;
        routing-interface '''irb.100''';&lt;br /&gt;
        route-distinguisher 11.11.11.11:1;&lt;br /&gt;
        vrf-target target:65000:1;&lt;br /&gt;
        protocols {&lt;br /&gt;
            evpn {&lt;br /&gt;
                '''default-gateway do-not-advertise'''; }}}}&lt;br /&gt;
 &lt;br /&gt;
 interfaces {&lt;br /&gt;
    irb {&lt;br /&gt;
        unit 100 {&lt;br /&gt;
            family inet {&lt;br /&gt;
                address 100.1.1.1/24;  }&lt;br /&gt;
            '''mac 00:00:00:01:01:01'''; }}}&lt;br /&gt;
&lt;br /&gt;
Для этого EVPN используется только 1 влан = 100, в данном случае.&lt;br /&gt;
&lt;br /&gt;
mac 00:00:00:01:01:01 - для irb-интерфейсов одного EVPN в разных site, используют одинаковые ip/mac. Делается для упрощения конфига, уменьшения control plane перегрузки, и минимизации времени восстановления при падении PE.&lt;br /&gt;
&lt;br /&gt;
default-gateway do-not-advertise - т.к. для irb указаны одинаковые ip/mac, то можно выключить функцию анонсирования MAC/IP binding между PE.&lt;br /&gt;
&lt;br /&gt;
*'''EVPN VLAN-aware''': несколько пользователей с независимыми vlan и ip.&lt;br /&gt;
Оба сервиса могут использовать vlan translation (настраивается на PE), что дает возможность использовать разные вланы в разных site.&lt;br /&gt;
&lt;br /&gt;
Хорошей практикой считается настраивать VLAN-aware, даже когда используется всего 1 vlan. Так сказать, задел на будущее.&lt;br /&gt;
&lt;br /&gt;
Пример конфига:&lt;br /&gt;
 routing-instances {&lt;br /&gt;
    EVPN-2 {&lt;br /&gt;
       instance-type '''virtual-switch''';&lt;br /&gt;
       interface ae0.200;&lt;br /&gt;
       route-distinguisher 11.11.11.11:2;&lt;br /&gt;
       vrf-target target:65000:2;&lt;br /&gt;
       protocols {&lt;br /&gt;
          evpn {&lt;br /&gt;
             '''extended-vlan-list 200-202''';&lt;br /&gt;
             '''default-gateway advertise'''; }}&lt;br /&gt;
 bridge-domains {&lt;br /&gt;
    V200 {&lt;br /&gt;
       vlan-id 200;&lt;br /&gt;
       routing-interface irb.200; }&lt;br /&gt;
    V201 {&lt;br /&gt;
       vlan-id 201;&lt;br /&gt;
       routing-interface irb.201;}&lt;br /&gt;
    V202 {&lt;br /&gt;
        vlan-id 202;&lt;br /&gt;
        routing-interface irb.202; }}}}&lt;br /&gt;
 interfaces {&lt;br /&gt;
         irb {&lt;br /&gt;
             unit 200 {&lt;br /&gt;
                 family inet {&lt;br /&gt;
                     address '''200.1.1.1/24'''; }&lt;br /&gt;
                 mac '''00:00:c8:01:01:01'''; }&lt;br /&gt;
             unit 201 {&lt;br /&gt;
                 family inet {&lt;br /&gt;
                     address '''201.1.1.1/24'''; }&lt;br /&gt;
                 mac '''00:00:c9:01:01:01'''; }&lt;br /&gt;
             unit 202 {&lt;br /&gt;
                 family inet {&lt;br /&gt;
                     address '''202.1.1.1/24'''; }&lt;br /&gt;
                 mac '''00:00:ca:01:01:01''' }}}&lt;br /&gt;
&lt;br /&gt;
extended-vlan-list 200-202 - определяет список вланов, которые будут передаваться через ядро.&lt;br /&gt;
&lt;br /&gt;
Пример настройки vlan-translation на PE:&lt;br /&gt;
 interfaces {&lt;br /&gt;
    ae0 {&lt;br /&gt;
       flexible-vlan-tagging;&lt;br /&gt;
       encapsulation flexible-ethernet-services;&lt;br /&gt;
       esi {&lt;br /&gt;
          00:22:22:22:22:22:22:22:22:22;&lt;br /&gt;
          all-active; }&lt;br /&gt;
    aggregated-ether-options {&lt;br /&gt;
       lacp {&lt;br /&gt;
          system-id 00:00:00:00:00:02; }}&lt;br /&gt;
    unit 100 {&lt;br /&gt;
       encapsulation vlan-bridge;&lt;br /&gt;
       vlan-id 100;&lt;br /&gt;
       family bridge; }&lt;br /&gt;
    unit 200 {&lt;br /&gt;
        family bridge {&lt;br /&gt;
        interface-mode trunk;&lt;br /&gt;
        vlan-id-list [ 200 201 '''202''' ];&lt;br /&gt;
        '''vlan-rewrite {'''&lt;br /&gt;
            '''translate 222 202'''; }}}}}&lt;br /&gt;
&lt;br /&gt;
*'''IP-VPN''': За маршрутизацию между VLAN отвечает irb-интерфейс, присвоенный в общий IP VPN. Также через него можно осуществлять маршрутизацию и с внешним миром.&lt;br /&gt;
&lt;br /&gt;
Можно добавлять разные irb в разные IP VPN, чтобы разделить L3 трафик.&lt;br /&gt;
&lt;br /&gt;
Пример конфига:&lt;br /&gt;
 routing-instances {&lt;br /&gt;
         IPVPN-1 {&lt;br /&gt;
             instance-type vrf;&lt;br /&gt;
             interface irb.100;&lt;br /&gt;
             interface irb.200;&lt;br /&gt;
             interface irb.201;&lt;br /&gt;
             interface irb.202;&lt;br /&gt;
             route-distinguisher 11.11.11.11:111;&lt;br /&gt;
             vrf-import IpVpnDiscardEvpnSubnets;&lt;br /&gt;
             vrf-export IpVpnAddCommunities;&lt;br /&gt;
             vrf-table-label;&lt;br /&gt;
&lt;br /&gt;
 policy-options {&lt;br /&gt;
         prefix-list PL-EVPN {&lt;br /&gt;
             100.1.1.0/24;&lt;br /&gt;
             200.1.1.0/24;&lt;br /&gt;
             201.1.1.0/24;&lt;br /&gt;
             202.1.1.0/24; }&lt;br /&gt;
         policy-statement IpVpnAddCommunities {&lt;br /&gt;
             term 10 {&lt;br /&gt;
                 from {&lt;br /&gt;
                     prefix-list-filter PL-EVPN orlonger; }&lt;br /&gt;
                 then {&lt;br /&gt;
                     community add COMM-EVPN;&lt;br /&gt;
                     community add COMM-IPVPN-1;&lt;br /&gt;
                     accept; }}&lt;br /&gt;
             term 100 {&lt;br /&gt;
                 then accept;}}&lt;br /&gt;
          policy-statement IpVpnDiscardEvpnSubnets {&lt;br /&gt;
             term 10 {&lt;br /&gt;
                from community COMM-EVPN;&lt;br /&gt;
                then reject; }&lt;br /&gt;
             term 100 {&lt;br /&gt;
                from community COMM-IPVPN-1;&lt;br /&gt;
                then accept; }}&lt;br /&gt;
          community COMM-EVPN members 65000:1234;&lt;br /&gt;
          community COMM-IPVPN-1 members target:65000:101;}&lt;br /&gt;
&lt;br /&gt;
- vrf-export IpVpnAddCommunities; - добавляет community помимо ipvpn (основное) еще и evpn (дополнительно обозначает evpn subnets and hosts). &lt;br /&gt;
&lt;br /&gt;
- vrf-import IpVpnDiscardEvpnSubnets; - т.к. evpn subnets and hosts уже синхронизируются путем ''Host MAC/IP Synchronization'', то передавать эту информацию через IP VPN - избыточно, поэтому маршруты с таким community будут отброшены, прилетев на PE.&lt;br /&gt;
&lt;br /&gt;
==Remote PE==&lt;br /&gt;
В лабе, удаленный PE31 получает все маршруты от других PE в сети. При этом в RI IP-VPN на нем настроен только vrf-target target:65000:101, который соответствует COMM-IPVPN-1, таким образом, маршруты с community, соответствующие EVPN, будут просто игнорироваться для этого site.&lt;br /&gt;
&lt;br /&gt;
'''Aliasing''':&lt;br /&gt;
&lt;br /&gt;
Также, на данном PE31 будут получены маршруты Data-Center 1 от двух PE, участвующих в multi-homing. Чтобы PE31 мог балансировать между ними нагрузку (балансировка применяется к L2 и L3), требуется настроить BGP особым образом: &lt;br /&gt;
 bgp {&lt;br /&gt;
 	group Internal {&lt;br /&gt;
 		type internal;&lt;br /&gt;
 		'''family inet-vpn''' {&lt;br /&gt;
 			'''any'''; }&lt;br /&gt;
 		'''multipath''';&lt;br /&gt;
 		neighbor 1.1.1.1 {&lt;br /&gt;
 			'''local-address 31.31.31.31''';&lt;br /&gt;
 			bfd-liveness-detection {&lt;br /&gt;
 				minimum-interval 200;&lt;br /&gt;
 				multiplier 3;}}}}&lt;br /&gt;
 policy-options {&lt;br /&gt;
 	policy-statement lb {&lt;br /&gt;
 		then {&lt;br /&gt;
 			'''load-balance per-packet'''; }}}&lt;br /&gt;
 routing-options {&lt;br /&gt;
 	router-id 31.31.31.31;&lt;br /&gt;
 	autonomous-system 65000;&lt;br /&gt;
 	'''forwarding-table''' {&lt;br /&gt;
 		'''export lb'''; }}&lt;br /&gt;
&lt;br /&gt;
=Траблшутинг EVPN=&lt;br /&gt;
&lt;br /&gt;
==На уровне ядра==&lt;br /&gt;
*OSPF adjacencies&lt;br /&gt;
*MP-BGP sessions to P. Families: bgp.l3vpn.0, bgp.evpn.0, IPVPN-1.inet.0, EVPN-1.evpn.0, EVPN-2.evpn.0, and__default_evpn__.evpn.0.&lt;br /&gt;
*BFD session: show bfd session&lt;br /&gt;
*LSPs to all remote PE - are up.&lt;br /&gt;
&lt;br /&gt;
==На уровне доступа==&lt;br /&gt;
*PE-CE links: interfaces are UP, LACP is ok.&lt;br /&gt;
&lt;br /&gt;
==Multi-homing==&lt;br /&gt;
Несколько PE соединяются с одним CE. Это важная фитча. Обеспечивает надежную работу при link-fail или node-fail. Также обеспечивает балансировку для PE &amp;lt;&amp;gt; CE линков.&lt;br /&gt;
&lt;br /&gt;
Для ее корректной работы требуется настройка одинакового ESI на разных multi-homing PE. Таким образом PE узнают друг о друге.&lt;br /&gt;
&lt;br /&gt;
ES route имеет Type 4 и имеет несколько других важных полей (то, что будет прилетать на удаленный PE):&lt;br /&gt;
*Router's IP addr = loopback addr.&lt;br /&gt;
*ESI: 10 октетов. ES route будет принят PE только в том случае, если ESI для двух PE будет полностью совпадать.&lt;br /&gt;
*ES Import RT community - полученный из ESI. Представляет из себя только 6 октетов. Поэтому для разных ESI, community может быть одинаковым. То есть судя только по community нельзя точно определить подходит ли пришедший route, но такой дополнительный метод проверки тем не менее значительно уменьшает кол-во routes, которое требуется рассмотреть в дальнейшем PE.&lt;br /&gt;
&lt;br /&gt;
Для проверки и просмотра полученных ES routes:&lt;br /&gt;
 PE11&amp;gt; show route table bgp.evpn.0 detail | '''find &amp;quot;4:/1&amp;quot;'''&lt;br /&gt;
 '''4:12.12.12.12:0::111111111111111111:12.12.12.12/304''' (1 entry, 0 announced)&lt;br /&gt;
             *BGP    Preference: 170/-101&lt;br /&gt;
                     Route Distinguisher: 12.12.12.12:0&lt;br /&gt;
                     Next hop type: Indirect&lt;br /&gt;
                     Address: 0x95c606c&lt;br /&gt;
                     ...&lt;br /&gt;
                     Cluster list: 1.1.1.1&lt;br /&gt;
                     Originator ID: 12.12.12.12&lt;br /&gt;
                     Communities: '''es-import-target:11-11-11-11-11-11'''&lt;br /&gt;
&lt;br /&gt;
Также в таблице ''default.evpn.evpn.0'' будут хранится все ES route локального PE, в том виде, когда к ним еще не присоединилась community конкретного EVI&lt;br /&gt;
 PE11&amp;gt; show route table __default_evpn__.evpn.0 | find 4:&lt;br /&gt;
 4:11.11.11.11:0::111111111111111111:11.11.11.11/304&lt;br /&gt;
                   *[EVPN/170] 04:40:23&lt;br /&gt;
                      Indirect&lt;br /&gt;
 4:12.12.12.12:0::111111111111111111:12.12.12.12/304&lt;br /&gt;
                   *[BGP/170] 04:40:04, localpref 100, from 1.1.1.1&lt;br /&gt;
                      AS path: I, validation-state: unverified&lt;br /&gt;
                    &amp;gt; to 10.11.12.12 via ae1.0, label-switched-path from-11-to-12&lt;br /&gt;
&lt;br /&gt;
===Designated forwarder===&lt;br /&gt;
Сразу после установления Multi-homing peering между PE выбирается Designated Forwarder для ES.&lt;br /&gt;
&lt;br /&gt;
Выбор производится для каждого EVI в каждом ESI.&lt;br /&gt;
&lt;br /&gt;
Выборы:&lt;br /&gt;
#сортировка по Lo addr (от меньшего к большему, как я понимаю)&lt;br /&gt;
#роутерам по-порядку назначаются номера, начиная с 0. Роутер с наименьшим номеров - стал DF.&lt;br /&gt;
#далее производится выбор DF для каждого vlana. V mod N (V = VLAN, N = кол-во PE в multi-homing). Если в EVPN несколько вланов, то берется наименьший vid. &lt;br /&gt;
&lt;br /&gt;
Передачей BUM трафика занимается '''DF PE'''. Backup PE будет отбрасывать BUM.&lt;br /&gt;
 cse@PE11&amp;gt; show evpn instance EVPN-1 esi 00:11:11:11:11:11:11:11:11:11 extensive&lt;br /&gt;
 Instance: EVPN-1&lt;br /&gt;
 Number of ethernet segments: 2&lt;br /&gt;
    ESI: 00:11:11:11:11:11:11:11:11:11&lt;br /&gt;
      Status: Resolved by IFL ae0.100&lt;br /&gt;
      Local interface: ae0.100, Status: Up/Forwarding&lt;br /&gt;
      Number of remote PEs connected: 1&lt;br /&gt;
        Remote PE        MAC label  Aliasing label  Mode&lt;br /&gt;
        12.12.12.12      300688     300688          all-active&lt;br /&gt;
 '''Designated forwarder: 11.11.11.11'''&lt;br /&gt;
 '''Backup forwarder: 12.12.12.12'''&lt;br /&gt;
 Advertised MAC label: 300976&lt;br /&gt;
 Advertised aliasing label: 300976&lt;br /&gt;
 Advertised split horizon label: 299984&lt;br /&gt;
&lt;br /&gt;
Проверка int на возможность передачи BUM трафика:&lt;br /&gt;
 cse@'''PE11'''&amp;gt; show interfaces '''ae0.100''' detail | find EVPN&lt;br /&gt;
 EVPN multi-homed status:'''Forwarding''', EVPN multi-homed ESI Split Horizon&lt;br /&gt;
 Label: 299984&lt;br /&gt;
      Flags: Is-Primary&lt;br /&gt;
 cse@'''PE12'''&amp;gt; show interfaces '''ae0.100''' detail | find EVPN&lt;br /&gt;
 EVPN multi-homed status: '''Blocking BUM Traffic to ESI''', EVPN multi-homed ESI Split&lt;br /&gt;
 Horizon Label: 299888&lt;br /&gt;
      Flags: Is-Primary&lt;br /&gt;
&lt;br /&gt;
===Auto-Discovery===&lt;br /&gt;
Multi-homed-PE пересылают всем удаленным PE два типа маршрутов:&lt;br /&gt;
====Auto-discovery route for ESI====&lt;br /&gt;
&lt;br /&gt;
Для более быстрого восстановления используется этот механизм auto-discovery routes, также называемый ''MAC Mass Withdraw''. В случае, когда рвется линк между PE-CE, PE сбрасывает route, содержащий пачку маков. &lt;br /&gt;
&lt;br /&gt;
Передаваемые маршруты имеют следующие параметры:&lt;br /&gt;
*RT, соответствующий EVI&lt;br /&gt;
*ESI&lt;br /&gt;
*ESI label extended community: split horizont label + multi-homing mode (all-active/single-active). &lt;br /&gt;
&lt;br /&gt;
'''Split horizont label''' - для исключения петель при получении маршрута, от нескольких CE - ''Split Horizong filtering''. Когда non-DF передает пакеты DF-router'у в этом же EVI, он первым делом добавляет split hor label к этому пакету. DF, видя метку, не передает такой пакет обратно CE.&lt;br /&gt;
&lt;br /&gt;
'''Label stack'''&lt;br /&gt;
*Transpotr label&lt;br /&gt;
*Inclusive Multicast Label&lt;br /&gt;
*Split Horizonf Label&lt;br /&gt;
*BUM traffic.&lt;br /&gt;
&lt;br /&gt;
====Auto-Discovery route per EVI====&lt;br /&gt;
В all-active multi-homing есть Aliasing (load-balancing). Большинство изученных маков будут передаваться от PE1 из multi-homing, но при этом aliasing будет обеспечивать балансировку обратного трафика и второму PE2. &lt;br /&gt;
&lt;br /&gt;
Для single-active: функция тоже будет работать в качестве обеспечения ''Backup-path''. &lt;br /&gt;
&lt;br /&gt;
Auto-discovery route содержит:&lt;br /&gt;
*RT, соответствующий EVI&lt;br /&gt;
*ESI&lt;br /&gt;
*Aliasing Label&lt;br /&gt;
Когда PE изучает новый MAC, то PE отправляет MAC Advertisment route, который состоит из MAC, MPLS service label, ESI (от remote PE). &lt;br /&gt;
&lt;br /&gt;
remote PE сравнивает полученный ESI с ESI в обоих Auto-Discovery routes и определяет состав multi-homing PEs, которым он сможет направить обратный трафик по MAC.&lt;br /&gt;
&lt;br /&gt;
Когда remote PE отправляет пакет обратно PE1, отправившего MAC Advertisement route, используется '''service label'''. &lt;br /&gt;
&lt;br /&gt;
Когда remote PE отправляет пакет обратно пиру PE1 (PE2), используется '''aliasing label'''.&lt;br /&gt;
&lt;br /&gt;
Для каждого EVPN можно увидеть метки от remote PE.&lt;br /&gt;
 show evpn instance EVPN-1 extensive&lt;br /&gt;
&lt;br /&gt;
===Inclusive multicast===&lt;br /&gt;
Type = 3&lt;br /&gt;
&lt;br /&gt;
Каждый PE передает Inclusive Multicast (IM) route для разрешения передачи BUM трафика.&lt;br /&gt;
*RT, сопоставляемый с EVI&lt;br /&gt;
*Ethernet tag ID = VLAN ID&lt;br /&gt;
*PMSI Tunnel Attribute - обозначение multicast технологии и IM MPLS метки.&lt;br /&gt;
PMSI Attr - это атрибут, использующийся для NG BGP Multicast VPN: P2MP, RSVP-TE LSPs, P2MP mLDP LSPs, PIM-SM trees.&lt;br /&gt;
&lt;br /&gt;
PE получил пакет от CE: PE делает копию пакета, соответствующую каждому remote PE. Навешивает на пакет метку: обычно сначала это IM метка + transport метка. &lt;br /&gt;
&lt;br /&gt;
Но в случает с multi-homed non-DF, с начала добавляется Split Horizont Label.&lt;br /&gt;
&lt;br /&gt;
На удаленном PE: снимается transport label, распознается IM метка и BUM трафик.&lt;br /&gt;
&lt;br /&gt;
*P2MP LSPs: эффективная утилизация полосы в ядре, но могут быть проблемы с масштабируемостью, т.к. нужно выбирать точку копирования трафика.&lt;br /&gt;
&lt;br /&gt;
Чтобы избежать подобных проблем: используем чистый EVPN, где точка копирования трафика уже выбрана - ingress PE.&lt;br /&gt;
 PE11&amp;gt; show route table EVPN-1.evpn.0 | find '''“3\:12”'''&lt;br /&gt;
 3:12.12.12.12:1::100::12.12.12.12/304&lt;br /&gt;
                   *[BGP/170] 1d 17:37:16, localpref 100, from 1.1.1.1&lt;br /&gt;
                      AS path: I, validation-state: unverified&lt;br /&gt;
                    &amp;gt; to 10.11.1.1 via xe-1/2/0.0, label-switched-path from-11-to-12&lt;br /&gt;
&lt;br /&gt;
Наличие IM от каждого remote PE можно проверить тут:&lt;br /&gt;
 PE11&amp;gt; show evpn instance EVPN-1 extensive&lt;br /&gt;
&lt;br /&gt;
Проверить PMSI tunnel attribute можно так:&lt;br /&gt;
 PE11&amp;gt; show route table EVPN-1.evpn.0 detail&lt;br /&gt;
 3:21.21.21.21:1::100::21.21.21.21/304 (1 entry, 1 announced)&lt;br /&gt;
 *BGP Preference: 170/-101&lt;br /&gt;
 Route Distinguisher: 21.21.21.21:1&lt;br /&gt;
 PMSI: Flags 0x0: Label 311168: '''Type INGRESS-REPLICATION 21.21.21.21'''&lt;br /&gt;
&lt;br /&gt;
==L2 процессы внутри EVPN==&lt;br /&gt;
===MAC learning===&lt;br /&gt;
Когда PE изучает новый MAC на EVI access interface, он добавляет MAC в соответствующую L2 forwarding table (MAC-VRF). Затем передает MAC Advertisment route остальным PE. &lt;br /&gt;
&lt;br /&gt;
MAC Adv route:&lt;br /&gt;
*RT&lt;br /&gt;
*MAC&lt;br /&gt;
*Ethernet tag = VLAN ID&lt;br /&gt;
*ESI&lt;br /&gt;
*IP, если известен или если сконфигурирован IRB.&lt;br /&gt;
*MPLS service label / MAC route label&lt;br /&gt;
*Default Gateway Extended Community - что сконфигурировано на IRB.&lt;br /&gt;
*MAC Mobility Extended Community.&lt;br /&gt;
&lt;br /&gt;
Как только изучен MAC, PE передает MAC Adv route без привязки к IP. Как только появилась привязка, PE посылает новый MAC Adv route. Этот процесс - ''Host Mac/IP Synchronization.&lt;br /&gt;
&lt;br /&gt;
PE также передает MAC/IP локального IRB интерфейса, используя Def Gateway Ext Community, которое сигнализирует удаленному PE, что он должен роутить трафик от имени другого PE. Этот процесс - ''Default Gateway Synchronization''.&lt;br /&gt;
&lt;br /&gt;
ESI - для балансировки, при работе multi-homing PE. Multi-homed PEs анонсируют свою связь через одинаковый ESI (в Auto Discovery route). Когда remote PE получает MAC adv route, видит в нем ESI, понимает какие PE относятся к этому ESI и при необходимости послать трафик к MAC, балансирует между PE1 и PE2.&lt;br /&gt;
&lt;br /&gt;
Также ESI полезно при передаче MAC между multi-homing пирами. PE1 получил MAC от пира, next-hop = local interface PE1. Локальный интерфейс PE1 будет в приоритете, по сравнению с ядром. Поэтому когда на PE1 прилетит MAC adv route от remote PE, то он будет просто отброшен.&lt;br /&gt;
&lt;br /&gt;
 PE11&amp;gt; show evpn instance EVPN-1 extensive&lt;br /&gt;
 PE11&amp;gt; show evpn mac-table&lt;br /&gt;
&lt;br /&gt;
Отображение MAC, ESI, IP (если есть). По сути тоже самое, что и forwarding table&lt;br /&gt;
 PE11&amp;gt; show evpn database instance EVPN-1&lt;br /&gt;
&lt;br /&gt;
Если для MAC есть IP, то его можно посмотреть так:&lt;br /&gt;
 PE11&amp;gt; show route table EVPN-1.evpn.0 evpn-mac-address 00:50:56:8c:76:67&lt;br /&gt;
 2:22.22.22.22:1::100::00:50:56:8c:76:67::100.1.1.10/304&lt;br /&gt;
 *[BGP/170] 1d 01:03:50, localpref 100, from 1.1.1.1&lt;br /&gt;
                      AS path: I, validation-state: unverified&lt;br /&gt;
                    &amp;gt; to 10.11.1.1 via xe-1/2/0.0, label-switched-path from-11-to-22&lt;br /&gt;
&lt;br /&gt;
===L2 forwarding and aliasing===&lt;br /&gt;
Сама функция описана выше. Проверка:&lt;br /&gt;
 PE11&amp;gt; show evpn mac-table&lt;br /&gt;
 Routing instance : EVPN-1&lt;br /&gt;
 Bridging domain : __EVPN-1__, VLAN : 100&lt;br /&gt;
   MAC                 MAC      Logical          NH     RTR&lt;br /&gt;
 address             flags    interface         Index     ID&lt;br /&gt;
 00:00:09:c1:b0:d7   DC                     '''1048609'''   1048609&lt;br /&gt;
&lt;br /&gt;
Чтобы понять что это за PE, сначала ищем какому ESI принадлежит next-hop:&lt;br /&gt;
 PE11&amp;gt; show evpn instance EVPN-1 extensive&lt;br /&gt;
 Instance: EVPN-1&lt;br /&gt;
  Route Distinguisher: 11.11.11.11:1&lt;br /&gt;
  VLAN ID: 100&lt;br /&gt;
  Number of ethernet segments: 2&lt;br /&gt;
    ESI: 00:22:22:22:22:22:22:22:22:22&lt;br /&gt;
      Status: Resolved by NH '''1048609'''&lt;br /&gt;
      Number of remote PEs connected: 2&lt;br /&gt;
   '''Remote PE   MAC label  Aliasing label''' Mode&lt;br /&gt;
   '''21.21.21.21 300848     300848''' all-active&lt;br /&gt;
   '''22.22.22.22 301040     301040''' all-active&lt;br /&gt;
&lt;br /&gt;
Затем ищем метку для ESI:&lt;br /&gt;
 PE11&amp;gt; show route table mpls.0 | match EVPN-1 | match esi&lt;br /&gt;
 301184      *[EVPN/7] 2d 03:35:55, routing-instance EVPN-1, route-type Egress- MAC, ESI 00:11:11:11:11:11:11:11:11:11&lt;br /&gt;
 '''301200      *[EVPN/7] 2d 03:35:55, routing-instance EVPN-1, route-type Egress- MAC, ESI 00:22:22:22:22:22:22:22:22:22'''&lt;br /&gt;
&lt;br /&gt;
Ищем next-hop для этой метки:&lt;br /&gt;
 PE11&amp;gt; show route label 301200&lt;br /&gt;
 301200		*[EVPN/7] 2d 03:44:05, routing-instance EVPN-1, route-type Egress-&lt;br /&gt;
 MAC, ESI 00:22:22:22:22:22:22:22:22:22&lt;br /&gt;
      &amp;gt; to 10.11.1.1 via xe-1/2/0.0, '''label-switched-path from-11-to-21'''&lt;br /&gt;
         to 10.11.1.1 via xe-1/2/0.0, '''label-switched-path from-11-to-22'''&lt;br /&gt;
&lt;br /&gt;
При проверке Aliasing в лабе, выявили несколько мест, где балансируется трафик.&lt;br /&gt;
*CE к multi-homed PE1, PE2.&lt;br /&gt;
*PE балансируют при отправке к remote PE - чисто EVPN балансировка! '''Per flow.'''&lt;br /&gt;
*Несколько LSP могут также делать балансировку.&lt;br /&gt;
*LAG в разных местах.&lt;br /&gt;
&lt;br /&gt;
===MAC mobility===&lt;br /&gt;
Переместили тачку в новый data-center. Новый PE изучил новый для себя MAC. Старый PE получил MAC Adv route и:&lt;br /&gt;
#Обновил свою forwarding table&lt;br /&gt;
#MAC Mobility Extended Community включает в себя порядковый номер, который увеличивается при каждом новом перемещении тачки. Используется для определения MAC-flapping.&lt;br /&gt;
&lt;br /&gt;
==L3 процессы внутри EVPN==&lt;br /&gt;
===Синхронизация Default Gateway===&lt;br /&gt;
Функция для оптимизированного роутинга исходящего трафика от VM к любому адресу назначения и входящего трафика к VM по оптимизированному пути, при миграции VM в другую локацию.&lt;br /&gt;
&lt;br /&gt;
#Конфигурируем IRB во VLAN или bridge domain.&lt;br /&gt;
#Добавляем IRB в IP VPN.&lt;br /&gt;
#Как только IRB начал выступать в качестве Def GW, PE передает MAC/IP Adv route (Def GW Ext Community) остальным PE и VM могут иметь связь с любым адресом назначения.&lt;br /&gt;
#Интеграция между IP VPN и EVPN требуется для Aliasing между multi-homed PE.&lt;br /&gt;
&lt;br /&gt;
В лабе в примере для всех IRB.100 на всех site специально заданы одинаковые IP/MAC, для упрощения конфига. При таком варианте синхронизация осуществляется как бы статически. + в vrf задано: ''evpn default-gateway do-not-advertise''.&lt;br /&gt;
&lt;br /&gt;
В обычном случае при задании разных mac/ip для irb, будем видеть следующее:&lt;br /&gt;
 PE11&amp;gt; show route table EVPN-2.evpn.0 | match “200.1.1./”&lt;br /&gt;
 	2:22.22.22.22:2::200::00:00:c8:01:01:01::200.1.1.1/304&lt;br /&gt;
 	2:22.22.22.22:2::201::00:00:c9:01:01:02::201.1.1.2/304&lt;br /&gt;
 	2:22.22.22.22:2::202::00:00:ca:01:01:01::202.1.1.1/304&lt;br /&gt;
&lt;br /&gt;
 PE11&amp;gt; show bridge evpn peer-gateway-macs&lt;br /&gt;
 	Routing instance : EVPN-2&lt;br /&gt;
 	Bridging domain : V201, VLAN : 201&lt;br /&gt;
 		Installed GW MAC addresses:&lt;br /&gt;
 		00:00:c9:01:01:02&lt;br /&gt;
&lt;br /&gt;
 PE11&amp;gt; show route table EVPN-2.evpn.0 detail evpn-ethernet-tag-id 201 evpn-macaddress 00:00:c9:01:01:02&lt;br /&gt;
 EVPN-2.evpn.0: 40 destinations, 40 routes (40 active, 0 holddown, 0 hidden)&lt;br /&gt;
 2:22.22.22.22:2::'''201::00:00:c9:01:01:02::201.1.1.2'''/304 (1 entry, 1 announced)&lt;br /&gt;
 	*BGP Preference: 170/-101&lt;br /&gt;
 		Route Distinguisher: 22.22.22.22:2&lt;br /&gt;
 		Next hop type: Indirect&lt;br /&gt;
 		Source: 1.1.1.1&lt;br /&gt;
 		Protocol next hop: 22.22.22.22&lt;br /&gt;
 		AS path: I (Originator)&lt;br /&gt;
 		Cluster list: 1.1.1.1&lt;br /&gt;
 		Originator ID: 22.22.22.22&lt;br /&gt;
 		'''Communities: target:65000:2 evpn-default-gateway'''&lt;br /&gt;
 		Import Accepted&lt;br /&gt;
 		'''Route Label: 300288'''       - service label&lt;br /&gt;
 		ESI: 00:00:00:00:00:00:00:00:00:00&lt;br /&gt;
 		Localpref: 100&lt;br /&gt;
 		Router ID: 1.1.1.1&lt;br /&gt;
 		Primary Routing Table bgp.evpn.0&lt;br /&gt;
&lt;br /&gt;
===Inter-VLAN Routing===&lt;br /&gt;
Функция ''Asymmetric IRB Forwarding'' - маршрутизация трафика между хостами разных EVPN VLANs, соединенных разными PE.&lt;br /&gt;
&lt;br /&gt;
Ingress PE (Def GW) передает пакеты таким образом, который исключает необходимость делать route lookup в IP VPN VRF на egress PE. Вместо этого egress PE делает lookup в MAC-VRF по EVI dest host.&lt;br /&gt;
&lt;br /&gt;
Если egress PE является multi-homed, то ingress PE может делать aliasing.&lt;br /&gt;
&lt;br /&gt;
Что происходит на PE, когда он изучает новый MAC/IP:&lt;br /&gt;
*Появляется запись в IP VPN RVF: protocol '''EVPN''', next-hop IRB.vlan.&lt;br /&gt;
*Remote PE добавит полученную запись в IP VPN VRF: protocol '''BGP'''.&lt;br /&gt;
&lt;br /&gt;
*PE передаст MAC/IP Adv route всем remote PE. Remote PE добавят полученный route в IP VPN VRF: protocol '''EVPN'''. &lt;br /&gt;
&lt;br /&gt;
Т.о. на remote PE будет 2 записи, изученные по разным протоколам. Разница:&lt;br /&gt;
*BGP: VPN label + transport label (or tunnel label)&lt;br /&gt;
*EVPN: более сложный механизм для передачи пакета: Ingress PE перезаписывает Ethernet header (dest MAC, vlan) на значение, соответствующее хосту назначения. А soucre MAC теперь будет соответствовать local IRB MAC. Затем добавляет service или aliasing label + transport label.&lt;br /&gt;
&lt;br /&gt;
BGP route - избыточные, их можно заблочить с помощью policy.&lt;br /&gt;
&lt;br /&gt;
Проверяем.&lt;br /&gt;
&lt;br /&gt;
В лабе: PE21: irb.200 - 200.1.1.26&lt;br /&gt;
&lt;br /&gt;
 Local PE:&lt;br /&gt;
 PE21&amp;gt; show route 200.1.1.26&lt;br /&gt;
 IPVPN-1.inet.0: 20 destinations, 20 routes (20 active, 0 holddown, 0 hidden)&lt;br /&gt;
 200.1.1.26/32 	*[EVPN/7] 00:04:52&lt;br /&gt;
 		&amp;gt; via irb.200&lt;br /&gt;
&lt;br /&gt;
 Remote PE:&lt;br /&gt;
 PE11&amp;gt; show route 200.1.1.26&lt;br /&gt;
 IPVPN-1.inet.0: 20 destinations, 20 routes (20 active, 0 holddown, 0 hidden)&lt;br /&gt;
 200.1.1.26/32 *[EVPN/7] 00:49:50&lt;br /&gt;
 		&amp;gt; to 10.11.1.1 via xe-1/2/0.0, label-switched-path from-11-to-21&lt;br /&gt;
 		to 10.11.1.1 via xe-1/2/0.0, label-switched-path from-11-to-22&lt;br /&gt;
&lt;br /&gt;
 Layer 2 Ethernet header rewrite&lt;br /&gt;
 PE11&amp;gt; show route 200.1.1.26 detail&lt;br /&gt;
 IPVPN-1.inet.0: 20 destinations, 20 routes (20 active, 0 holddown, 0 hidden)&lt;br /&gt;
 200.1.1.26/32 (1 entry, 1 announced)&lt;br /&gt;
 	*EVPN Preference: 7&lt;br /&gt;
 		Next hop type: Indirect&lt;br /&gt;
 		Next-hop reference count: 2&lt;br /&gt;
 		Next hop: 10.11.1.1 via xe-1/2/0.0, selected&lt;br /&gt;
 			'''Label-switched-path from-11-to-21'''&lt;br /&gt;
 			'''Label operation: Push 300256, Push 302448(top)'''&lt;br /&gt;
 		Load balance label: Label 300256: None; Label 302448: None;&lt;br /&gt;
 		Session Id: 0x152&lt;br /&gt;
 		Next hop type: Router, Next hop index: 696&lt;br /&gt;
 		Next hop: 10.11.1.1 via xe-1/2/0.0&lt;br /&gt;
 			'''Label-switched-path from-11-to-22'''&lt;br /&gt;
 			'''Label operation: Push 300320, Push 302464(top)'''&lt;br /&gt;
 		Label TTL action: no-prop-ttl, no-prop-ttl(top)&lt;br /&gt;
 		Load balance label: Label 300320: None; Label 302464: None;&lt;br /&gt;
 		Session Id: 0x152&lt;br /&gt;
 		Protocol next hop: 21.21.21.21&lt;br /&gt;
 		Label operation: Push 300256&lt;br /&gt;
 		Label TTL action: no-prop-ttl&lt;br /&gt;
 		Load balance label: Label 300256: None;&lt;br /&gt;
 		Composite next hop: 0x9569bac 643 INH Session ID: 0x150&lt;br /&gt;
 		Ethernet header rewrite:&lt;br /&gt;
 			'''SMAC: 00:00:c8:01:01:01, DMAC: 00:00:09:c1:b0:d4'''&lt;br /&gt;
 			'''TPID: 0x8100, TCI: 0x00c8, VLAN ID: 200, Ethertype: 0x0800'''&lt;br /&gt;
 		Indirect next hop: 0x96ae310 1048596 INH Session ID: 0x150&lt;br /&gt;
 		Protocol next hop: 22.22.22.22&lt;br /&gt;
 		Label operation: Push 300320&lt;br /&gt;
 		Label TTL action: no-prop-ttl&lt;br /&gt;
 		Load balance label: Label 300320: None;&lt;br /&gt;
 		Composite next hop: 0x9569b50 645 INH Session ID: 0x14f&lt;br /&gt;
 		Ethernet header rewrite:&lt;br /&gt;
 			'''SMAC: 00:00:c8:01:01:01, DMAC: 00:00:09:c1:b0:d4'''&lt;br /&gt;
 			'''TPID: 0x8100, TCI: 0x00c8, VLAN ID: 200, Ethertype: 0x0800'''&lt;br /&gt;
&lt;br /&gt;
 PE11&amp;gt; show evpn database instance EVPN-2 vlan-id 200&lt;br /&gt;
 PE11&amp;gt; show evpn database instance EVPN-2 vlan-id 200 extensive&lt;br /&gt;
&lt;br /&gt;
 PE11&amp;gt; show evpn instance EVPN-2 extensive | find segments&lt;br /&gt;
 Number of ethernet segments: 2&lt;br /&gt;
 ESI: 00:22:22:22:22:22:22:22:22:22&lt;br /&gt;
 Status: Resolved by NH 1048590&lt;br /&gt;
 Number of remote PEs connected: 2&lt;br /&gt;
 	Remote PE 	MAC label	Aliasing label	Mode&lt;br /&gt;
 	22.22.22.22	'''300320 		300320''' 			all-active&lt;br /&gt;
 	21.21.21.21	'''300256 		300256'''			all-active&lt;br /&gt;
&lt;br /&gt;
 Для проверки работы Aliasing, смотрим forwarding table:&lt;br /&gt;
 PE11&amp;gt; show route forwarding-table destination 200.1.1.26 extensive | find IPVPN-1&lt;br /&gt;
 Routing table: IPVPN-1.inet [Index 7]&lt;br /&gt;
 Destination: 200.1.1.26/32&lt;br /&gt;
 Nexthop:&lt;br /&gt;
 Next-hop type: composite Index: 643 Reference: 2&lt;br /&gt;
 Next-hop type: indirect Index: 1048596 Reference: 4&lt;br /&gt;
 Nexthop:&lt;br /&gt;
 Next-hop type: composite Index: 645 Reference: 2&lt;br /&gt;
 Next-hop type: indirect Index: 1048597 Reference: 4&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 PE11&amp;gt; clear mpls lsp statistics&lt;br /&gt;
 PE11&amp;gt; show mpls lsp statistics ingress&lt;br /&gt;
 Ingress LSP: 4 sessions&lt;br /&gt;
 To 			From 		State 	Packets Bytes 	LSPname&lt;br /&gt;
 12.12.12.12	11.11.11.11 Up 		2 		148 	from-11-to-12&lt;br /&gt;
 21.21.21.21	11.11.11.11 Up 		9942 	2545152 from-11-to-21&lt;br /&gt;
 22.22.22.22	11.11.11.11 Up 		9943 	2545408 from-11-to-22&lt;br /&gt;
 31.31.31.31	11.11.11.11 Up 		0 		0 		from-11-to-31&lt;br /&gt;
&lt;br /&gt;
Для L3 балансировка также осуществляется с нескольких местах. &lt;br /&gt;
&lt;br /&gt;
===Inbound Routing from IP VPN Site===&lt;br /&gt;
Интеграция IP VPN и EVPN положительно сказывается и на оптимизации входящего к хостам трафика, если он с источником находится не на одном site.&lt;br /&gt;
&lt;br /&gt;
Egress PE, получив IP/MAC route от ingress PE, добавляет этот маршрут как изученный по BGP в VRF.table. После этого есть возможность смаршрутизировать трафик напрямую к data-center PE, ближайшему к хосту.&lt;br /&gt;
&lt;br /&gt;
При миграции хоста, роутинг становился сложнее, т.к. не меняется обновление MAC/IP route и host route занимает некоторое время. Во время переезда у remote PE может сохраниться старая инфа о хосте и он пошлет туда трафик. &lt;br /&gt;
&lt;br /&gt;
Учитывая этот небольшой недостаток, Mac mobility для L3 все же работает.&lt;br /&gt;
&lt;br /&gt;
=MP-BGP EVPN Route Summary=&lt;br /&gt;
*Type 1: '''Ethernet Auto-Discovery''': per ESI, used for fast convergence (MAC Mass Withdrawal) and Split Horizont filtering. For Aliasing. Used only when multi-homing used. ESI Label Extended Community, includes multi-homing mode.&lt;br /&gt;
*Type 2: '''MAC Advertisement''': MAC and MAC/IP. Used for MAC learning, MAC Mobility, Aliasing, Def GW Synch., Asymmetric IRB Forwarding. Learned MAC/IP bindings generate EVPN host routes, which added to  IP VPN VRF for optimizing inbound routing to host. Def GW Ext Community - for MAC/IP of RIB. MAC Mobility Ext Community - for MAC flapping.&lt;br /&gt;
*Type 3: '''Inclusive Multicast''': Includes IM label, used when forwarding BUM traffic between PEs.&lt;br /&gt;
*Type 4: '''Ethernet Segment''': For discovery of multi-homed neigh and DF election. Only used when multi-homing is configured. ES-Import Ext Community - from ESI, used by receiving PE to filter incoming advertisment.&lt;br /&gt;
 show route table bgp.evpn.0&lt;br /&gt;
&lt;br /&gt;
Route Formats:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Ресурс !! ссылка !! описание&lt;br /&gt;
|-&lt;br /&gt;
|1 - Ethernet Auto-Discovery per ESI||1:21.21.21.21:0::222222222222222222::FFFF:FFFF/304||&lt;br /&gt;
*Route Type “1”&lt;br /&gt;
*RD unique to advertising&lt;br /&gt;
*ESI&lt;br /&gt;
*Ethernet Tag Id – reserved“0xFFFFFFFF”&lt;br /&gt;
|-&lt;br /&gt;
|1 - Ethernet Auto-Discovery per EVI || 1:21.21.21.21:1::222222222222222222::0/304 ||&lt;br /&gt;
*Route Type “1”&lt;br /&gt;
*RD of advertising PE’s EVI&lt;br /&gt;
*ESI&lt;br /&gt;
*Ethernet Tag Id “0”&lt;br /&gt;
|-&lt;br /&gt;
|2 - MAC Advertisement||2:21.21.21.21:1::100::00:00:09:c1:b0:d7/304||&lt;br /&gt;
*Route Type “2”&lt;br /&gt;
*RD of advertising PE’s EVI&lt;br /&gt;
*VLAN ID&lt;br /&gt;
*MAC Address&lt;br /&gt;
|-&lt;br /&gt;
|2 - MAC/IP Advertisement||2:21.21.21.21:1::100::00:00:09:c1:b0:d7::100.1.1.29/304||&lt;br /&gt;
*Same as MAC Advertisement but includes host’s IP address&lt;br /&gt;
|-&lt;br /&gt;
|3 - Inclusive Multicast||3:21.21.21.21:1::100::21.21.21.21/304||&lt;br /&gt;
*Route Type “3”&lt;br /&gt;
*RD of advertising PE’s EVI&lt;br /&gt;
*VLAN ID&lt;br /&gt;
*Originator PE Loopback IP address&lt;br /&gt;
|-&lt;br /&gt;
|4 - Ethernet Segment||4:12.12.12.12:0::111111111111111111:12.12.12.12/304||&lt;br /&gt;
*Route Type “4”&lt;br /&gt;
*RD unique to advertising PE&lt;br /&gt;
*ESI&lt;br /&gt;
*Originator PE LoopbackIP address&lt;br /&gt;
|}&lt;br /&gt;
=High Availability=&lt;br /&gt;
==Падене линка ==&lt;br /&gt;
При падении линка (CE &amp;lt;&amp;gt; multi-homing PE), статус EVI тоже станет - down. И PE уберет все прежде переданные IP VPN и EVPN маршруты, Auto-Discovery per ESI, Auto-Discovery per EVI.&lt;br /&gt;
Также, если PE был DF, то эту роль подхватит backup router.&lt;br /&gt;
&lt;br /&gt;
==Восстановление линка==&lt;br /&gt;
Если сконфигурирован hold-up timer, то ничего не изменится, пока таймер не истечет.&lt;br /&gt;
&lt;br /&gt;
Когда таймер истек, LACP между PE &amp;lt;&amp;gt; CE собрался, EVIs на PE стали активными, PE передает ES, IM, Auto-Discovery routes =&amp;gt; new DF election. Параллельно с этим PE уже начинает получать трафик от remote PEs и CE.&lt;br /&gt;
&lt;br /&gt;
==Падение узла==&lt;br /&gt;
Отключили multi-homing PE: LSP, которые на него терминировались - упадут (Path ERr message). У remote PE упавший PE удалится из возможных вариантов маршрутов с next-hop PE - для L2 и L3. Трафик без перерыва просто будет передаваться второму multi-homing PE. Также до PE упадут все протоколы маршрутизации (OSPF, MP-BGP). Второй multi-homed PE станет DF.&lt;br /&gt;
&lt;br /&gt;
==Восстановление узла==&lt;br /&gt;
Опять же, если настроен hold-timer на интерфейсах, то при восстановлении PE, все процессы восстановятся не сразу. Таймер лучше настроить, т.к. без него при поднятии линков трафик начнет передаваться к PE,  но на PE еще не будут установлены OSPF, BGP, LSP... Трафик полетит в никуда.&lt;br /&gt;
&lt;br /&gt;
Наличие LACP между CE и PE значительно уменьшает потерю пакетов.&lt;br /&gt;
&lt;br /&gt;
=Дополнительная информация=&lt;br /&gt;
*[[L2VPN]]&lt;br /&gt;
*[[VPLS]]&lt;br /&gt;
*[[DC]]&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=MVPN&amp;diff=2054</id>
		<title>MVPN</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=MVPN&amp;diff=2054"/>
		<updated>2021-07-15T18:34:12Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#description2:Next-generation MVPN. Типы NLRI для Multicast-VPN. MVPN деревья. Режимы работы MVPN. Sender/Receiver site. Draft-Rosen VPNs. Конфигурация MVPN. Траблшутинг MVPN. Информация для подготовки к экзаменам Juniper.}}&lt;br /&gt;
&lt;br /&gt;
MVPN - L3VPN, в котором клиенту предоставляется возможность пускать свой мультикаст через сеть провайдера [сигнального unicast и датного multicast трафика], дополнительно к L3VPN. В подобных решениях могут быть совершенно разные топологии. Источники и получатели должны быть однозначно на сети клиента. RP можно использовать как на сети клиента, так и на сети провайдера. Для обнаружения RP могут использоваться также разные механизмы. И также можно использовать как SSM, так и ASM. И даже dense или sparse mode. И между PE&amp;lt;&amp;gt;CE могут использоваться разные протоколы static, ospf, bgp [любой вариант l3vpn]. То есть многообразие полнейшее.&lt;br /&gt;
&lt;br /&gt;
В качестве транспортного протокола на сети провайдера могут выступать и GRE и MPLS.&lt;br /&gt;
&lt;br /&gt;
=Next-generation MVPN=&lt;br /&gt;
NG-MVPN does not require PIM in the provider network. &lt;br /&gt;
&lt;br /&gt;
It requires that a label be on the final hop, therefore penultimate hop popping is disabled on multicast LSPs. &lt;br /&gt;
&lt;br /&gt;
Point-to-multipoint LSPs can help reduce the burden of data replication, and eliminate the need for PIM in the provider network.&lt;br /&gt;
&lt;br /&gt;
В старой модели для сигнализации использовался PIM, для форвардинга - GRE-tunnels. [Multicast for Draft-Rosen VPNs]&lt;br /&gt;
&lt;br /&gt;
В новой модели для сигнализации - BGP, для форвардинга - MPLS. [NG MVPN, MBGP Multicast VPN]&lt;br /&gt;
&lt;br /&gt;
При использовании BGP, как сигнального протокола: ввели 7 MP-BGP NLRI (Oo).&lt;br /&gt;
&lt;br /&gt;
Общие термины:&lt;br /&gt;
*'''Provider multicast service interface (PMSI)''' - туннель для передачи мультикаста. &lt;br /&gt;
*'''Inclusive-PMSI (I-PMSI)'''&lt;br /&gt;
:*multidirectional I-PMSI - позволяет всем PE передавать мультикаст  всем остальным PE.&lt;br /&gt;
:*unidirectional I-PMSI - позволяет одному PE передавать мультикаст всем остальным PE.&lt;br /&gt;
*'''Selective-PMSI (S-PMSI)''' - PE передает мультикаст только тому PE, который отправил запрос на присоединение к forwarding-tree.&lt;br /&gt;
&lt;br /&gt;
В качестве PMSI может быть использован P2MP RSVP. Плюс - для передачи можно использовать обычные методы защиты RSVP LSP.&lt;br /&gt;
&lt;br /&gt;
'''Выдержка для напоминания:'''&lt;br /&gt;
В случае использования P2MP: source PE отправляет одну копию трафика. Копирование трафика происходит на роутере, где разветвляются пути передачи трафика (''branch point'').&lt;br /&gt;
&lt;br /&gt;
==MP-BGP для Multicast-VPN==&lt;br /&gt;
&lt;br /&gt;
''Сейчас тут будет описание предназначений каждого из типов NLRI. Сначала покажется сложным, но надо прочитать, чтобы хоть примерно ориентироваться. Зато потом при чтении раздела Trees все встанет на свои места.''&lt;br /&gt;
&lt;br /&gt;
AFI 1/ SAFI 5&lt;br /&gt;
&lt;br /&gt;
Роуты с &amp;quot;правильными&amp;quot; target community помещаются в bgp.mvpn.0 (общая) и ''instance-name''.mvpn.0 (по аналогии с l3vpn используются bgp.l3vpn.0 и ''instance-name''.inet.0)&lt;br /&gt;
&lt;br /&gt;
В рамках этой family (MP-BGP MVPN family) существует еще 7 типов NLRI (далее называемых &amp;quot;Роутами&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
===Type 1. '''Intra'''-AS Iclusive MVPN Membership Discovery===&lt;br /&gt;
Отправляется всеми роутерами, участвующими в MVPN.&lt;br /&gt;
&lt;br /&gt;
Если используется I-PMSI, эти роуты определяют куда автоматически строить p2mp lsp.&lt;br /&gt;
&lt;br /&gt;
Эти роуты тэгируются атрибутом &amp;quot;PMSI Tunnel&amp;quot;.&lt;br /&gt;
   1  |   10.1.1.1:1    | 65412&lt;br /&gt;
 Type | Sending PE's RD | Sending PE's AS&lt;br /&gt;
&lt;br /&gt;
===Type 2. '''Inter'''-AS inclusive MVPN Membership Discovery===&lt;br /&gt;
Используются для поиска участников между PE-роутерами, находящимися в разных AS.&lt;br /&gt;
В книге на них забивается.&lt;br /&gt;
&lt;br /&gt;
   2  |   10.1.1.1:1    | 65412&lt;br /&gt;
 Type | Sending PE's RD | Sending PE's AS&lt;br /&gt;
&lt;br /&gt;
===Type 3. Selective MVPN Autodiscovery Route===&lt;br /&gt;
Отправляется PE-маршрутизатором, который, собственно, инициирует S-PMSI&lt;br /&gt;
&lt;br /&gt;
    3 | 10.255.170.100:1| 32       |   192.168.194.2  |    32    |    224.1.2.3     | 10.255.170.100&lt;br /&gt;
 Type | Sending PE's RD | C-S Mask | C-S using S-PMSI | C-G Mask | C-G using S-PMSI | Sending PE's lo0&lt;br /&gt;
&lt;br /&gt;
пример:&lt;br /&gt;
 3:172.30.5.1:32767:32:172.17.17.1:32:239.0.0.1:172.30.5.1/240&lt;br /&gt;
&lt;br /&gt;
===Type 4. Selective MVPN Autodiscovery Route for Leaf===&lt;br /&gt;
Отправляется заинтересованным в получении мультикаст-потока PE-роутером в ответ на получение Type 3.&lt;br /&gt;
&lt;br /&gt;
   4 (type)  | &amp;lt;здесь идет этот самый type 3, который мы только что получили. Да, целиком. Длинный.&amp;gt; | &amp;lt;Тут наш lo0 ipaddress&amp;gt;&lt;br /&gt;
'''Немного резюмируем'''&lt;br /&gt;
Эти два типа (3, 4, т.е. selective MVPN autodiscovery) помогают строить S-PMSI. Эти роуты анонсируются PE источника мультикаста в ответ на роуты типов 6 и 7 (позже будут), которые, по существу, запрашивают присоединение к мультикаст-дереву (BGP-аналог PIM-JOIN'а).&lt;br /&gt;
Даже если PE источника узнаёт (из пришедшего роута типа 7), что удаленный PE получателя хочет получать определенный мультикаст-поток, он все равно посылает роут типа 3 как запрос к получателю на присоединение к S-PMSI. Роут типа 3 при этом тэгируется атрибутом PMSI Tunnel, позволяя PE-роутеру получателя узнавать подробности провайдерского туннеля (чтобы смочь присоединиться к нему).&lt;br /&gt;
&lt;br /&gt;
Соответственно, в таблице &amp;lt;vrf-name&amp;gt;.mvpn.0 маршруты появятся только при использовании selective provider tunnel.&lt;br /&gt;
Пример:&lt;br /&gt;
 4:3:172.30.5.1:32767:32:172.17.17.1:32:239.0.0.1:172.30.5.1:172.30.5.7/240&lt;br /&gt;
&lt;br /&gt;
===Type 5. Source Active Autodiscovery===&lt;br /&gt;
Посылается PE-роутаром, который нашел у себя источник мультикаста, всем другим PE, участвующим в этом конкретном MVPN.&lt;br /&gt;
Отправляющий PE-роутер может узнать об источнике на своей стороне несколькими способами:&lt;br /&gt;
*Rsgister Messages&lt;br /&gt;
*MSDP&lt;br /&gt;
*Source Active Messages&lt;br /&gt;
*Directly Connected Source.&lt;br /&gt;
Нашел поток - объяви другим PE.&lt;br /&gt;
&lt;br /&gt;
===Type 6. Shared Tree Join Route===&lt;br /&gt;
&lt;br /&gt;
Когда PE получает от своего CE запрос на подключение к группе, то есть PIM join вида '''(*, G)''', он отправляет этот роут типа 6 другим PE, участвующим в данном MVPN. Ниже формат этого сообщения:&lt;br /&gt;
&lt;br /&gt;
   6  | 10.255.170.100:1  | 65000         | 32        | 10.12.53.12  |    32    | 224.1.2.3&lt;br /&gt;
 Type | RD of Upstream PE | Upstream's AS | C-RP Mask | C-RP Address | C-G Mask | C-G&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
И, наконец...&lt;br /&gt;
===Type 7. Source Tree Join Route===&lt;br /&gt;
   7  | 10.255.170.100:1  | 65000         | 32       | 10.12.53.12  |    32      | 224.1.2.3&lt;br /&gt;
 Type | RD of Upstream PE | Upstream's AS | C-S Mask | C-S          | C-G Mask   | C-G&lt;br /&gt;
&lt;br /&gt;
Отправляется PE-роутером (который сейчас станет получаетелем), получившим PIM-join (S, G) на vrf-интерфейсе (от клиента).&lt;br /&gt;
В чем разница с предыдущим типом 6? Там был (*, G) а здесь '''(S, G)'''.&lt;br /&gt;
&lt;br /&gt;
То есть, в итоге что получается?&lt;br /&gt;
*Как только мы все настроили и закоммитили, каждый PE посылает каждому другому PE Type 1, чем заявляет свое участие в mvpn.&lt;br /&gt;
&lt;br /&gt;
*Если PE находит у себя поток, то отправляет '''Type 5. Source Active Autodiscovery''' соседям - пусть знают, что есть такой источник, вещающий в такую-то группу.&lt;br /&gt;
&lt;br /&gt;
*Если PE получил pim-join от CE на подключение к группе, то отправляет другим PE либо '''Type 6. Shared Tree Join Route''' если( *,G), либо '''Type 7. Source Tree Join Route''' если получил (S, G). И тогда...&lt;br /&gt;
&lt;br /&gt;
*Если PE получил '''Type 6. Shared Tree Join Route''' или '''Type 7. Source Tree Join Route''', он понимает, что удаленный PE хочет от него получать трафик определенной группы. Тогда, в ответ генерируется '''Type 3. Selective MVPN Autodiscovery Route''', и идет к PE, приславшему Type [6,7]. И далее...&lt;br /&gt;
&lt;br /&gt;
*Если PE, ранее отправивший Type[6-7], получает '''Type 3. Selective MVPN Autodiscovery Route''', он берет этот Type 3, и отправляет его обратно, только уже в виде Type 4 (вроде, тупо меняя поле &amp;quot;Type&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
==Trees==&lt;br /&gt;
Дерево (provider-tunnel) нужно для передачи мультикаст трафика. Должно быть построено от PE, где регистрируется мультикаст от C-Source до удаленных PE, где расположены получатели мультикаста.&lt;br /&gt;
&lt;br /&gt;
Разделяют 2 типа: Inclusive Trees, Selective Trees.&lt;br /&gt;
&lt;br /&gt;
Можно использовать комбинацию, тогда для всего мультикаста будет использоваться Inclusive Trees, а для конкретных групп Selective Trees.&lt;br /&gt;
&lt;br /&gt;
===Inclusive Trees===&lt;br /&gt;
Inclusive Tree - PE, при наличии у него мультикаста от источника, будет доставлять трафик от этого источника ко '''всем''' PE-получателям. Удобно, если все PE в данном vpn должны получать трафик. &lt;br /&gt;
&lt;br /&gt;
Если мультикаст трафик должен доставляться лишь немногим удаленным PE, то этот способ слишком затратен по ресурсам/bandwith/etc...&lt;br /&gt;
&lt;br /&gt;
Inclusive tree строится для всего мультикаст-трафика (то есть для всех групп) из данного VPN-сайта (для противопоставления есть Selective Tree, которые строятся: 1 группа = 1 tree).&lt;br /&gt;
&lt;br /&gt;
====Signaling====&lt;br /&gt;
При включении VPN с использованием Inclusive Tree, каждый PE с каждым другим PE устанавливает Point-To-Multipoint LSP (где-то в начале книги было про то, как сделать это вручную. В данном же случае это делается автоматически, ибо работает MP-BGP с family mvpn). Причем не важно где будут источники, где получатели а где вообще ничего - все равно каждый участвующий в этом mvpn'е PE берет и устанавливает по одному p2mp lsp от себя ко всем соседям. &lt;br /&gt;
&lt;br /&gt;
Получается, что если какой-либо PE не собирается быть источником, а планирует только получать трафик, то lsp, идущее от него к другим никогда не будет использоваться, но будет висеть и жрать ресурсы. Да, это так. &lt;br /&gt;
&lt;br /&gt;
Есть способ на джуниперах отключить ненужное построение p2mp lsp от конкретных PE, если знаем, что PE никогда не будет вещать, а будет только получать. Но сути это не меняет.&lt;br /&gt;
&lt;br /&gt;
'''Взгляд со стороны источника'''&lt;br /&gt;
&lt;br /&gt;
Представим, что клиент-источник на сайте A (CE-1) использует PIM. Представим так же, что RP для данного PIM-домена настроена внутри VRF-Instance на PE, что является нормальной практикой. &lt;br /&gt;
&lt;br /&gt;
Тогда CE начнет фигачить Register Message (в виде юникаста, до RP, т.е. до VRF в PE). Тогда-то и случится ситуация, что PE узнал о наличии потока из Register Message =) &lt;br /&gt;
А дальше повторяется алгоритм (см. выше). Т.е этот PE шлет Type 5, объявляя всем другим PE о том, что у него есть источник. Ну и т.д.&lt;br /&gt;
&lt;br /&gt;
'''Взгляд со стороны получателя'''&lt;br /&gt;
&lt;br /&gt;
Некий CE, собравшийся получать мультикаст-трафик, шлет обычный igmp join куда положено (например, Фред запустил VLC и подписался на IPTV-канал udp://@242.0.5.5:1234). Допустим, это Source Specific Join, т.е. &amp;quot;(S, G)&amp;quot;. PE-роутер получателя конвертирует этот IGMP-join в Source Tree Join Route (Type 7) и посылает к PE-источнику. Когда PE, к которому подключен источник, получает этот Type 7 роут, он конвертирует его в обычный PIM (S, G) Join и посылает клиентскому DR (Designated Router), таким образом завершая построение мультикаст-дерева.&lt;br /&gt;
&lt;br /&gt;
Аналогично работает и с Type 6, то есть когда прилетает (*, G) от CE. &lt;br /&gt;
&lt;br /&gt;
На этом с сигналингом закончили, дальше начинается форвардинг.&lt;br /&gt;
&lt;br /&gt;
====Forwarding====&lt;br /&gt;
* CE-источник посылает обычный мультикаст-пакет в сторону PE.&lt;br /&gt;
* PE его принимает, определяет в какую lsp совать, навешивает один mpls label (один!) и посылает в LSP. LSP до получателя имеется ввиду.&lt;br /&gt;
* На каком-то из P-роутеров этот пакет копируется и отправляется в два или более интерфейсов к двум или более PE (такова суть p2mp lsp). Если есть 2 получателя.&lt;br /&gt;
* Каждый получающий PE видит метку MPLS, снимает ее, сует пакет в нужный VRF, там уже по PIM видит в какой интерфейс направить этот пакет. &lt;br /&gt;
&lt;br /&gt;
Таким образом пакет прошел по нашей сети и отправился клиенту, а клиент доставил его до Фреда. У Фреда появился первый заветный кадр видео в окне его VLC =)&lt;br /&gt;
&lt;br /&gt;
====Config====&lt;br /&gt;
Пример настройки inclusive tree:&lt;br /&gt;
 r1&amp;gt; show configuration routing-instances spoke-to-hub    &lt;br /&gt;
 provider-tunnel {&lt;br /&gt;
    rsvp-te {&lt;br /&gt;
        label-switched-path-template {&lt;br /&gt;
            p2mp-mcast;&lt;br /&gt;
 r1&amp;gt; show configuration protocols mpls label-switched-path p2mp-mcast &lt;br /&gt;
 '''template;'''&lt;br /&gt;
 '''p2mp;'''&lt;br /&gt;
 bandwidth 30m;&lt;br /&gt;
 hop-limit 5;&lt;br /&gt;
 priority 5 5;&lt;br /&gt;
 link-protection;&lt;br /&gt;
&lt;br /&gt;
TE фичи навешиваются по желанию/необходимости. Для работы обязательны только: '''template, p2mp'''.&lt;br /&gt;
&lt;br /&gt;
===Selective Tree===&lt;br /&gt;
&lt;br /&gt;
Отдельное дерево будет построено для каждой из пар Source, Group.&lt;br /&gt;
&lt;br /&gt;
'''Как работает'''&lt;br /&gt;
&lt;br /&gt;
* Как только мы все настроили и закоммитили, каждый PE посылает каждому другому PE Type 1, чем заявляет свое участие в mvpn.&lt;br /&gt;
** Type 1 не содержит атрибута PMSI Tunnel, так что никаких p2mp lsp построено не будет до тех пор, пока кто-то не начнет просить поток.&lt;br /&gt;
* Допустим кто-то начал вещать. Получивший поток PE отсылает Type 5 Auto Discovery Route удаленным PE. Ну как и в прошлый раз.&lt;br /&gt;
* Дальше все как в прошлый раз - дальний PE получает от Фреда igmp join, конвертирует его в Type 7, посылает источническому PE.&lt;br /&gt;
* И теперь разница. Получив такой type 7, PE источника не начинает никуда ничего верещать. Ведь LSP-то не установлен. Теперь вступают в игру Type[3-4].&lt;br /&gt;
* PE источника (напомню, он сейчас имеет приходящий мультикаст поток, а так же знает, что удаленный PE выразил желание этот поток получать) посылает '''Type 3. Selective MVPN Autodiscovery Route''' ко всем PE.&lt;br /&gt;
* Только запросивший поток PE отвечает на это своим '''Type 4. Selective MVPN Autodiscovery Route for Leaf'''.&lt;br /&gt;
* Теперь PE1 строит свою p2mp lsp к тому, от которого пришел Type 4, и шлет PIM JOIN к клиентскому DR.&lt;br /&gt;
** Я понимаю, что рассматривается пример с одним получателем, и можно было бы построить простое p2p-lsp. А ну как кто-то еще пришлет такой же JOIN? Пусть уж лучше сразу будет построено p2mp.&lt;br /&gt;
* Теперь можно срать в LSP пакетами с мультикастом так же, как в прошлый раз (в случае с Inclusive Tree).&lt;br /&gt;
====Config====&lt;br /&gt;
Пример настройки:&lt;br /&gt;
 r1&amp;gt; show configuration routing-instances spoke-to-hub    &lt;br /&gt;
    selective {&lt;br /&gt;
        tunnel-limit 5;&lt;br /&gt;
        group 239.0.0.1/32 {&lt;br /&gt;
            source 172.31.64.0/21 {&lt;br /&gt;
                rsvp-te {&lt;br /&gt;
                    label-switched-path-template {&lt;br /&gt;
                        selective-mcast;&lt;br /&gt;
                threshold-rate 100000;&lt;br /&gt;
 r1&amp;gt; show configuration protocols mpls label-switched-path selective-mcast &lt;br /&gt;
 '''template;''' &lt;br /&gt;
 '''p2mp;'''&lt;br /&gt;
 bandwidth 60m;&lt;br /&gt;
 hop-limit 5;&lt;br /&gt;
 priority 5 5;&lt;br /&gt;
 link-protection;&lt;br /&gt;
&lt;br /&gt;
Если нет требования строить какой-то кастомный lsp, то можно указать дефолтный template:&lt;br /&gt;
 set routing-instances 1 provider-tunnel selective group 239.0.0.1/32 source 172.31.64.0/21 rsvp-te label-switched-path-template '''default-template'''&lt;br /&gt;
При этом не в protocols mpls настраивать дополнительно ничего не нужно.&lt;br /&gt;
&lt;br /&gt;
Для * вместо конкретного ip источника можно указать (для запросов (* , G)):&lt;br /&gt;
 set routing-instances 1 provider-tunnel selective group 239.0.0.1/32 '''wildcard-source'''&lt;br /&gt;
&lt;br /&gt;
Группы можно указывать диапазоном: ''group 239.0.0.0/24''&lt;br /&gt;
&lt;br /&gt;
==MVPN Modes==&lt;br /&gt;
По дефолту MPVN работает в режиме '''SPT-only''' (shortest-path tree). В этом режиме активные источники буду изучены с помощью VPN source-active routes. source tree join '''(C-S, C-G)'''&lt;br /&gt;
При получении (C-S, C-G), PE сразу же такой join преобразует в Type7.&lt;br /&gt;
&lt;br /&gt;
Также существует '''(RPT)-SPT mode'''. Тут используются shared tree join (С-*,С-G) запросы к RP.&lt;br /&gt;
&lt;br /&gt;
Когда в режиме SPT-only от получателя прийдет (*, C-G) - PE-роутер ищет активный источник для группы. Если такой есть, то PE создает source tree customer multicast route [Type5], и отправляет его к PE с активным источником. На PE receiver приходит (*,G), которое транслируется в Type7 NLRI (S,G). К (S,G) добавляется community no-advertise и маршрут добавляется в таблицу.&lt;br /&gt;
&lt;br /&gt;
Источник определяется MVPN's single-forwarder election. Этот подход позволяет определить одного передатчика для (C-S) [customer-source].&lt;br /&gt;
* Если активный unicast route к источнику идет через интерфейс, то этот маршрут используется как upstream mcast hop.&lt;br /&gt;
* Если активный unicast route к источнику находится в VPN, MVPN выбирает upstream mcast hop, основываясь на бОльшем IP в составе import community и локального master lo адреса.&lt;br /&gt;
Для SPT-only этого подхода достаточно. Для RTP-SPT нужно также добавить некоторые административные ограничения [приоритезацию] для исключения дублирования трафика по SPT и shared tree.&lt;br /&gt;
&lt;br /&gt;
Алгоритм обработки C-join:&lt;br /&gt;
* на PE прилетел (C-*, C-G).&lt;br /&gt;
 user@PE3&amp;gt; show pim join extensive instance vpna 224.1.1.1&lt;br /&gt;
 Group: 224.1.1.1&lt;br /&gt;
    Source: *&lt;br /&gt;
    RP: 10.12.53.1&lt;br /&gt;
* PE генерирует Type6 и ставит его в &amp;lt;vrf&amp;gt;.mvpn.0. Type6 в качестве source ставит адрес RP.&lt;br /&gt;
 user@PE3&amp;gt; show route table vpna.mvpn.0 detail |  find 6:10.1.1.1&lt;br /&gt;
&lt;br /&gt;
*RT и RD Type6 парсятся при lookup ip RP в &amp;lt;vrf&amp;gt;.inet.0&lt;br /&gt;
*Как только источник начинает вещать, ближайший к нему PE кладет маршрут Type5 в &amp;lt;vrf&amp;gt;.mvpn.0 таблицу.&lt;br /&gt;
*Type5, которые кладутся в &amp;lt;vrf&amp;gt;.mvpn.0, по MP-BGP передаются другим PE. (через RR или прямую IBGP) &lt;br /&gt;
*Удаленный PE теперь имеет Type5 и Type6 для (C-*, C-G) и теперь готов состряпать из этого Type7. RD для Type7 и Type6 будут одинковыми, если они получены от одного PE.&lt;br /&gt;
*Type7 устанавливается в &amp;lt;vrf&amp;gt;.mvpn.0 и передается другим PE. [в случае, если PE получает source tree C-join, то Type7 генерируется и расслылается автоматически и этому join не нужно проходить через предыдущие этапы].&lt;br /&gt;
*Если Type7 имеет RT, совпадающий с rt-import на Sender PE (рядом с source), то Sender PE ставит его в &amp;lt;vrf&amp;gt;.mvpn.0&lt;br /&gt;
*На Sender PE (рядом с source) Type7 транслируется в обычный C-join в рамках VRF. C-join в свою очередь добавляется на receiver PE в C-PIM database. И как я поняла по PIM распространяется на все PE в виде join. То есть в таблице &amp;lt;vrf&amp;gt;.mvpn.0 будут видны одни и те же маршруты, изученные по BGP и по PIM:&lt;br /&gt;
 PE1&amp;gt; show route table vpna.mvpn.0 detail | find 7:10.1.1.1&lt;br /&gt;
 7:10.1.1.1:1:65000:32:192.168.1.2:32:224.1.1.1/240 (2 entries, 2 announced)&lt;br /&gt;
        '''*PIM    Preference: 105''' &lt;br /&gt;
               Next hop type: Multicast (IPv4)&lt;br /&gt;
                Next-hop reference count: 30&lt;br /&gt;
                State: &amp;lt;Active Int&amp;gt;&lt;br /&gt;
                Age: 1d 2:19:04&lt;br /&gt;
                Task: PIM.vpna&lt;br /&gt;
                Announcement bits (2): 0-PIM.vpna 1-mvpn global task&lt;br /&gt;
                AS path: I&lt;br /&gt;
                Communities: no-advertise target:10.1.1.1:64&lt;br /&gt;
         ''' BGP    Preference: 170/-101''' &lt;br /&gt;
                Next hop type: Indirect&lt;br /&gt;
                Next-hop reference count: 4&lt;br /&gt;
                Source: 10.1.1.3&lt;br /&gt;
                Protocol next hop: 10.1.1.3&lt;br /&gt;
                Indirect next hop: 2 no-forward&lt;br /&gt;
                State: &amp;lt;Secondary Int Ext&amp;gt;&lt;br /&gt;
                Inactive reason: Route Preference&lt;br /&gt;
                Local AS: 65000 Peer AS: 65000&lt;br /&gt;
                Age: 53:27      Metric2: 1&lt;br /&gt;
                Task: BGP_65000.10.1.1.3+179&lt;br /&gt;
                Announcement bits (2): 0-PIM.vpna 1-mvpn global task&lt;br /&gt;
                AS path: I&lt;br /&gt;
                Communities: target:10.1.1.1:64&lt;br /&gt;
                Import Accepted&lt;br /&gt;
                Localpref: 100&lt;br /&gt;
                Router ID: 10.1.1.3&lt;br /&gt;
                Primary Routing Table bgp.mvpn.0&lt;br /&gt;
*Обычный C-Join на Sender PE обрабатывается как обычный pim join.&lt;br /&gt;
*finish&lt;br /&gt;
&lt;br /&gt;
 SPT-only mode не дает возможности использовать C-RP (customer-RP).&lt;br /&gt;
&lt;br /&gt;
Небольшое пояснение: при (*,C-G) запросе, роутер должен узнать об активных источниках через Type5. Type5 может сгенерировать только MVPN PE роутер. Т.о. этот PE должен знать обо всех register messages. &lt;br /&gt;
Это произойдет только если:&lt;br /&gt;
*C-RP размещен на PE в MVPN.&lt;br /&gt;
*Между PE (в рамках MVPN) и C-RP настроен MSPD.&lt;br /&gt;
&lt;br /&gt;
Если оба этих условия не пригодны для нашей сети, то можно работать с RPT-SPT.&lt;br /&gt;
&lt;br /&gt;
'''Плюсы SPT-only:'''&lt;br /&gt;
 - Проще работать с source-tree customer.&lt;br /&gt;
 - Не нужно предпринимать никаких действия, чтобы не дублировался трафик при переключении с RPT на SPT.&lt;br /&gt;
 - Проще control plane &lt;br /&gt;
 - Проще обслуживание&lt;br /&gt;
&lt;br /&gt;
'''Config'''&lt;br /&gt;
 [edit routing-instances spoke-to-hub protocols mvpn]&lt;br /&gt;
 +      mvpn-mode {&lt;br /&gt;
 +          spt-only;&lt;br /&gt;
&lt;br /&gt;
==Sender/Receiver site==&lt;br /&gt;
Каждый site mvpn можно настраивать как Sender или Receiver only. По дефолту site работает в режиме и sender и receiver.&lt;br /&gt;
*'''Sender-site''': не присоединяется к туннелям, анонсируемым с других PE&lt;br /&gt;
*'''Receiver-site''': не отправляет PMSI атрибуты.&lt;br /&gt;
Одновременно нельзя на одном site в конфете указать и sender и receiver.&lt;br /&gt;
&lt;br /&gt;
==Config NG MVPN==&lt;br /&gt;
Топология в примере: L3VPN hub and spoke. + MVPN сверху, связность между site = full-mesh. Anycast RP на сети провайдера.&lt;br /&gt;
&lt;br /&gt;
Приведен полный конфиг L3VPN, понятно, что protocols bgp, vrf-import, vrf-export и прочие настройки имею косвенное отношение к MVPN.&lt;br /&gt;
&lt;br /&gt;
'''Config для R1:''' HUB, Anycast RP, Sender.&lt;br /&gt;
&lt;br /&gt;
PE-PE MP-BGP [или PE&amp;lt;&amp;gt;RR] - добавляем inet-mvpn signaling:&lt;br /&gt;
 [edit protocols bgp group rr]&lt;br /&gt;
     family inet-mvpn {&lt;br /&gt;
         signaling;&lt;br /&gt;
Добавляем p2mp LSP для I-PMSI и S-PMSI:&lt;br /&gt;
 [edit protocols mpls]&lt;br /&gt;
    label-switched-path mcast-p2mp-template {&lt;br /&gt;
        template;&lt;br /&gt;
        p2mp;&lt;br /&gt;
        bandwidth 3m;&lt;br /&gt;
        hop-limit 5;&lt;br /&gt;
        priority 5 5;&lt;br /&gt;
        link-protection;&lt;br /&gt;
    label-switched-path mcast-selective-template {&lt;br /&gt;
        template;&lt;br /&gt;
        p2mp;&lt;br /&gt;
        bandwidth 6m;&lt;br /&gt;
        hop-limit 5;&lt;br /&gt;
        priority 5 5;&lt;br /&gt;
        link-protection;&lt;br /&gt;
&lt;br /&gt;
mcast в отличие от inet трафика должен ходить не через hub, а должна быть full-mesh между всему site. Это правим route-target внутри protocol mvpn.&lt;br /&gt;
&lt;br /&gt;
I-PMSI работает для всего mcast трафика, поэтому нет ограничения по group - source.&lt;br /&gt;
&lt;br /&gt;
S-PMSI работает для конкретных групп, поэтому задается диапазон групп и source.&lt;br /&gt;
&lt;br /&gt;
Данный mvpn-site - только с источником, поэтому ему задаем sender-site.&lt;br /&gt;
 [edit routing-instances]&lt;br /&gt;
      spoke {&lt;br /&gt;
          instance-type vrf;&lt;br /&gt;
          interface ge-0/0/0.312;&lt;br /&gt;
          interface lo0.2;&lt;br /&gt;
          provider-tunnel {&lt;br /&gt;
              rsvp-te {&lt;br /&gt;
                  label-switched-path-template {&lt;br /&gt;
                      mcast-p2mp-template;&lt;br /&gt;
              selective {&lt;br /&gt;
                  tunnel-limit 5;&lt;br /&gt;
                  group 239.0.0.1/32 {&lt;br /&gt;
                      source 172.31.64.0/21 {&lt;br /&gt;
                          rsvp-te {&lt;br /&gt;
                              label-switched-path-template {&lt;br /&gt;
                                  mcast-selective-template;&lt;br /&gt;
                          threshold-rate 10000;&lt;br /&gt;
                  group 239.0.0.2/32 {&lt;br /&gt;
                      source 172.31.64.0/21 {&lt;br /&gt;
                          rsvp-te {&lt;br /&gt;
                              label-switched-path-template {&lt;br /&gt;
                                  mcast-selective-template;&lt;br /&gt;
                          threshold-rate 10000;&lt;br /&gt;
          vrf-import spoke-import;&lt;br /&gt;
          vrf-export spoke-export;&lt;br /&gt;
          vrf-table-label;&lt;br /&gt;
          protocols {&lt;br /&gt;
              bgp {&lt;br /&gt;
                  group ce {&lt;br /&gt;
                      export ce2-routes;&lt;br /&gt;
                      peer-as 64600;&lt;br /&gt;
                      as-override;&lt;br /&gt;
                      neighbor 192.168.0.46;&lt;br /&gt;
              pim {&lt;br /&gt;
                  rp {&lt;br /&gt;
                      local {&lt;br /&gt;
                          address 172.30.5.253;&lt;br /&gt;
                          group-ranges {&lt;br /&gt;
                              239.0.0.0/24;&lt;br /&gt;
&lt;br /&gt;
                  interface all;&lt;br /&gt;
              mvpn {                   &lt;br /&gt;
                  sender-site;&lt;br /&gt;
                  mvpn-mode {&lt;br /&gt;
                      spt-only;&lt;br /&gt;
                  route-target {&lt;br /&gt;
                      import-target {&lt;br /&gt;
                          target target:54591:202;&lt;br /&gt;
                      export-target {&lt;br /&gt;
                          target target:54591:202;&lt;br /&gt;
В топологии в примере используется Anycast RP на сети провайдера, поэтому Lo выглядит след образом:&lt;br /&gt;
 [edit interfaces lo0.2] &lt;br /&gt;
 family inet {&lt;br /&gt;
    address 172.30.5.10/32 {&lt;br /&gt;
        primary;&lt;br /&gt;
        preferred;&lt;br /&gt;
    address 172.30.5.253/32;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Config для R7:''' SPOKE, Receiver.&lt;br /&gt;
PE-PE MP-BGP [или PE&amp;lt;&amp;gt;RR] - добавляем inet-mvpn signaling:&lt;br /&gt;
 [edit protocols bgp group rr]&lt;br /&gt;
     family inet-mvpn {&lt;br /&gt;
         signaling;&lt;br /&gt;
&lt;br /&gt;
Данный mvpn-site - только в receiver, поэтому ему задаем receiver-site.&lt;br /&gt;
 [edit]&lt;br /&gt;
   routing-instances {&lt;br /&gt;
       spoke {&lt;br /&gt;
           instance-type vrf;&lt;br /&gt;
           interface ge-0/0/0.323;&lt;br /&gt;
           interface lo0.1;&lt;br /&gt;
           vrf-import spoke-import;&lt;br /&gt;
           vrf-export spoke-export;&lt;br /&gt;
           vrf-table-label;&lt;br /&gt;
           protocols {&lt;br /&gt;
               bgp {&lt;br /&gt;
                   group ce {&lt;br /&gt;
                       peer-as 64600;&lt;br /&gt;
                       as-override;&lt;br /&gt;
                       neighbor 192.168.0.90;&lt;br /&gt;
               pim {&lt;br /&gt;
                   interface all;&lt;br /&gt;
               mvpn {&lt;br /&gt;
                   receiver-site;       &lt;br /&gt;
                   mvpn-mode {&lt;br /&gt;
                       spt-only;&lt;br /&gt;
                   route-target {&lt;br /&gt;
                       import-target {&lt;br /&gt;
                           target target:54591:202;&lt;br /&gt;
                       export-target {&lt;br /&gt;
                           target target:54591:202;&lt;br /&gt;
&lt;br /&gt;
'''Виды provider-tunnels''':&lt;br /&gt;
 &amp;gt; ingress-replication  Ingress Replication Tunnel &lt;br /&gt;
 &amp;gt; ldp-p2mp             LDP point-to-multipoint LSP for flooding&lt;br /&gt;
 &amp;gt; mdt                  Data MDT tunnels for PIM MVPN&lt;br /&gt;
 &amp;gt; pim-asm              PIM-SM provider tunnel&lt;br /&gt;
 &amp;gt; pim-ssm              PIM-SSM provider tunnel&lt;br /&gt;
 &amp;gt; rsvp-te              RSVP-TE point-to-multipoint LSP for flooding&lt;br /&gt;
 &amp;gt; selective            Selective tunnels&lt;br /&gt;
&lt;br /&gt;
'''Пример использования selective-tunnels:'''&lt;br /&gt;
 [edit routing-instances MVPN provider-tunnel]&lt;br /&gt;
   selective {&lt;br /&gt;
       group 224.7.7.0/24 {&lt;br /&gt;
           wildcard-source {&lt;br /&gt;
               rsvp-te {&lt;br /&gt;
                   label-switched-path-template {&lt;br /&gt;
                       mvpn; }}}}}&lt;br /&gt;
'''mvpn параметры внутри vrf''':&lt;br /&gt;
 mvpn-join-load-balance  MVPN Join Load Balancing Algorithm&lt;br /&gt;
 traceoptions         Trace options for BGP-MVPN&lt;br /&gt;
 unicast-umh-election  Upstream Multicast Hop election based on unicast route preference&lt;br /&gt;
 receiver-site        MVPN instance has sites only with multicast receivers&lt;br /&gt;
 sender-site          MVPN instance has sites only with multicast sources&lt;br /&gt;
&lt;br /&gt;
Если топология для mvpn (например, full mesh) должна быть отличной от топологии для l3vpn (например, hub and spoke).&lt;br /&gt;
 route-target         Configure route-targets for MVPN routes&lt;br /&gt;
&lt;br /&gt;
 mvpn-mode            MVPN mode of operation&lt;br /&gt;
   &amp;gt; rpt-spt              MVPN works in multicast RPT and SPT mode&lt;br /&gt;
   &amp;gt; spt-only             MVPN works in multicast SPT only mode (default mode)&lt;br /&gt;
&lt;br /&gt;
==Monitoring==&lt;br /&gt;
 show pim join instance MVPN extensive&lt;br /&gt;
 show multicast route extensive instance MVPN&lt;br /&gt;
 show route table MVPN.mvpn.0&lt;br /&gt;
 &lt;br /&gt;
На egress PE:&lt;br /&gt;
 r7# run show mvpn neighbor inet    &lt;br /&gt;
 Instance : MVPN&lt;br /&gt;
  MVPN Mode : SPT-ONLY&lt;br /&gt;
  Neighbor                              I-P-tnl&lt;br /&gt;
  172.30.5.1                            RSVP-TE P2MP:172.30.5.1, 25759,172.30.5.1&lt;br /&gt;
&lt;br /&gt;
 r7# run show mvpn c-multicast inet           &lt;br /&gt;
 Instance : MVPN&lt;br /&gt;
  MVPN Mode : SPT-ONLY&lt;br /&gt;
  C-mcast IPv4 (S:G)               Ptnl                  St&lt;br /&gt;
  0.0.0.0/0:239.0.0.1/32      &lt;br /&gt;
  172.17.17.1/32:239.0.0.1/32   RSVP-TE P2MP:172.30.5.1, 25759,172.30.5.1         DS&lt;br /&gt;
  0.0.0.0/0:239.5.5.1/32      &lt;br /&gt;
&lt;br /&gt;
 - - - пояснение:&lt;br /&gt;
  0.0.0.0/0:239.0.0.1/32      - Type 6 join (*,G)&lt;br /&gt;
  0.0.0.0/0:239.5.5.1/32      - Typ6 6 join (*,G)&lt;br /&gt;
  172.17.17.1/32:239.0.0.1/32 - Type 7 (S,G)&lt;br /&gt;
&lt;br /&gt;
'''Проверка provider-tunnel'''&lt;br /&gt;
на ingress PE:&lt;br /&gt;
 r7# run show rsvp session ingress &lt;br /&gt;
 Ingress RSVP: 16 sessions&lt;br /&gt;
 To              From            State   Rt Style Labelin Labelout LSPname &lt;br /&gt;
 172.30.5.7      172.30.5.1      Up       0  1 SE       -   347858 '''172.30.5.7:172.30.5.1:32767:mvpn:MVPN'''&lt;br /&gt;
&lt;br /&gt;
 show route forwarding-table destination 224.7.7.7 extensive&lt;br /&gt;
&lt;br /&gt;
=Multicast for Draft-Rosen VPNs=&lt;br /&gt;
Draft-rosen 6 - для ASM модели.&lt;br /&gt;
&lt;br /&gt;
Draft-rosen 7 - для SSM модели.&lt;br /&gt;
&lt;br /&gt;
Старый подход, где для сигнализации использовался PIM, для форвардинга - GRE-tunnels [Multipoint GRE (MP-GRE)].&lt;br /&gt;
&lt;br /&gt;
MP-GRE - в отличие от обычного GRE, в качестве адреса назначения - ip multicast group [Пр.: 239.1.2.3]. А адрес источника - обычный unicast ip [зачастую просто адрес lo роутера].&lt;br /&gt;
&lt;br /&gt;
Соответственно для одного VRF на всех PE должен быть определен один и тот же '''group-address'''.&lt;br /&gt;
&lt;br /&gt;
Полностью построенное дерево для передачи трафика называется Multicast Distribution Tree ['''MDT'''].&lt;br /&gt;
&lt;br /&gt;
Строится два MDT-дерева: 1. для сигналинга [default MDT], 2. для форвардинга [data MDT].&lt;br /&gt;
&lt;br /&gt;
Через default MDT передается весь сигнальный трафик клиента. Более того, для установления Data MDT тоже используется Default MDT [до момента, пока не пришло оповещение, что построен более оптимальный туннель для передачи конкретного мультикаст потока].&lt;br /&gt;
&lt;br /&gt;
Может работать как для ASM, так и для SSM модели. &lt;br /&gt;
&lt;br /&gt;
При использовании '''ASM''' [draft-rosen 6] - в конфигурации ip dest для MP-GRE задаем адрес через ''vpn-group-address 232.0.0.1'' ------ Default MDT Address&lt;br /&gt;
&lt;br /&gt;
При использовании '''SSM''' [draft-rosen 7] - в конфигурации ip dest для MP-GRE задаем адрес через ''provider-tunnel pim-ssm group-address 232.0.0.1''.&lt;br /&gt;
&lt;br /&gt;
Комбинированный метод ASM + auto-discovery: ''provider-tunnel pim-asm instead''. &lt;br /&gt;
Описание для понимания: https://forums.juniper.net/t5/Junos/Please-help-confounded-by-Draft-Rosen-6-or-7/m-p/288183#M10101&lt;br /&gt;
&lt;br /&gt;
==Config для ASM==&lt;br /&gt;
Обязательно нужно включить в конфигурацию:&lt;br /&gt;
*'''interface lo0.x''' - создаем новый unit, который запихиваем в &lt;br /&gt;
:*'''vrf interfaces'''&lt;br /&gt;
:*'''vrf protocols pim'''&lt;br /&gt;
:*IGP, BGP политики, где нужно&lt;br /&gt;
Внутри routing-instance:&lt;br /&gt;
*'''protocols pim interface''' - включить все интерфейсы, участвующие в pim.&lt;br /&gt;
*'''protocols pim mode sparse-dense''' - либо глобально, либо для каждого интерфейса.&lt;br /&gt;
*'''protocols pim group-address''' - на всех PE должен быть определен один и тот же group-address. Должен быть уникальным в рамках всей сети. [Пример: 239.1.1.1]&lt;br /&gt;
*'''protocols pim version 2'''- либо глобально, либо для каждого интерфейса.&lt;br /&gt;
*'''protocols pim rp local''' - для PE, которые выполняют роль RP. Либо можно использовать '''любой другой механизм задания RP''' (bootstrap, auto-rp,...). RP также может использоваться на стороне клиента.&lt;br /&gt;
*'''protocols pim rp static''' - на остальных PE, CE роутерах. (если используем не static rp, то остальные роутеры настраиваем в соответствие с методом)&lt;br /&gt;
*'''routing-options rib-groups''' - создание rib-groups. - опять же при необходимости.&lt;br /&gt;
*'''routing-instances instance-name protocols pim rib-group''' - для указания группы для RPF. [наверное] - при необходимости.&lt;br /&gt;
&lt;br /&gt;
Не знаю насколько я правильно поняла, но: если используем только ''protocols pim group-address'', то этого должно быт достаточно для установления Default MDT.&lt;br /&gt;
&lt;br /&gt;
Если хотим использовать комбинированный вариант ASM + auto-discovery = ''provider-tunnel pim-asm group-address 239.1.1.1'', то в конфиг нужно добавить ''protocols pim mvpn''.&lt;br /&gt;
&lt;br /&gt;
Если используем SSM, то тоже конфигурируем связку: ''provider-tunnel pim-ssm group-address 239.1.1.1'', и в конфиг нужно добавить ''protocols pim mvpn''.&lt;br /&gt;
&lt;br /&gt;
''protocols pim mvpn'' - служит для автоматического обнаружения других PE в рамках VRF.&lt;br /&gt;
&lt;br /&gt;
Пример конфига [ASM, RP на стороне клиента, используем auto-rp]:&lt;br /&gt;
 [edit routing-instances vrf-ospf protocols pim]&lt;br /&gt;
        dense-groups {&lt;br /&gt;
            224.0.1.39/32;&lt;br /&gt;
            224.0.1.40/32;&lt;br /&gt;
        }&lt;br /&gt;
        vpn-group-address 239.1.1.1;&lt;br /&gt;
        rp {&lt;br /&gt;
            auto-rp discovery;&lt;br /&gt;
        }&lt;br /&gt;
        interface all {&lt;br /&gt;
            mode sparse-dense;&lt;br /&gt;
&lt;br /&gt;
==Config для MDT==&lt;br /&gt;
Data MDT строятся для более оптимальной передачи мультикаст трафика.&lt;br /&gt;
&lt;br /&gt;
Используются '''mt-''' интерфейсы. Как для default, так и для data MDT.&lt;br /&gt;
&lt;br /&gt;
Пример для ASM-модели&lt;br /&gt;
 [edit routing-instances vrf-ospf protocols pim]&lt;br /&gt;
 +      mdt {&lt;br /&gt;
 +          threshold {&lt;br /&gt;
 +              group 239.0.0.2/32 {      - группа&lt;br /&gt;
 +                  source 0.0.0.0/0 {    - любой источник [*]&lt;br /&gt;
 +                      rate 30000;       - ограничение скорости [опционально]&lt;br /&gt;
 +          tunnel-limit 5;               - ограничение на кол-во туннелей [опционально]&lt;br /&gt;
 +          group-range 239.0.0.0/24;     - ограничение по группам [опционально]&lt;br /&gt;
&lt;br /&gt;
=Дополнительная информация=&lt;br /&gt;
*[[Отказоустойчивость и оптимизация в MPLS]]&lt;br /&gt;
*[[Traffic engineering]]&lt;br /&gt;
*[[Реализация MPLS в ядре сети]]&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=VPLS&amp;diff=2053</id>
		<title>VPLS</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=VPLS&amp;diff=2053"/>
		<updated>2021-07-15T18:32:52Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#description2: VPLS Forwarding. VPLS Signaling. Выделение меток в VPLS. Vlan в VPLS. Multihoming VPLS. Конфигурация VPLS. Траблшутинг VPLS. Информация для подготовки к экзаменам Juniper.}}&lt;br /&gt;
В L2VPN используются только каналы точка-точка, и нет возможности обеспечить связность точка-многоточка. Эту проблему решает - VPLS.&lt;br /&gt;
&lt;br /&gt;
Для клиента сеть будет выглядеть как бродкастовый домен. ''Full-mesh'' между точками.&lt;br /&gt;
&lt;br /&gt;
Для провайдера: набор каналов точка-точка. &lt;br /&gt;
&lt;br /&gt;
В vpls соединениях точка-точка принято называть ''pseudo-wire''.&lt;br /&gt;
&lt;br /&gt;
=Forwarding=&lt;br /&gt;
В обычном мире, не касаясь MPLS, когда хост посылает фрейм в свитч: свитч ''бродкастит'' и ''лернит''.&lt;br /&gt;
&lt;br /&gt;
VPLS-instance работает как свитч, который тоже ''бродкастит'' и ''лернит''.&lt;br /&gt;
&lt;br /&gt;
* На PE1 в VPLS прилетел фрейм, VPLS: запомнил какой mac, соотнес с портом: A -&amp;gt; int 1. &lt;br /&gt;
* PE1 флудит его во все интерфейсы. А '''pseudo-wire''', воспринимаем как интерфейс. Т.о. фрейм долетел до PE2. &lt;br /&gt;
* PE2 заучивает mac: A -&amp;gt; pseudo-wire 1 (''lsi interface'').&lt;br /&gt;
*Фрейм, пришедший с локального интерфейса, должен быть разослан '''всем''' PE.&lt;br /&gt;
{{note|text=Фрейм, пришедший с локального интерфейса флудится во все локальные интерфейсы и pseudo-wire.&lt;br /&gt;
&lt;br /&gt;
Фрейм, который пришел от pseudo-wire (''lsi''), флудится только в локальные интерфейсы. Чтобы не было петли.}}&lt;br /&gt;
&lt;br /&gt;
Когда прилетает фрейм с dest-mac уже известным, то он идет по уже заученному для него пути.&lt;br /&gt;
&lt;br /&gt;
То есть с точки зрения форвардинга VPLS - один большой свитч!&lt;br /&gt;
&lt;br /&gt;
Внутри VPLS происходит lookup по маку =&amp;gt; должен быть включен tunnel-services.&lt;br /&gt;
&lt;br /&gt;
=Signaling=&lt;br /&gt;
Pseudo-wire - строятся по LDP или BGP. В отличие от L2VPN, в VPLS - сигнализация по BGP имеет огромное приемущество.&lt;br /&gt;
&lt;br /&gt;
==BGP==&lt;br /&gt;
BGP выполняет функцию signaling и auto-discovery. PE ищет какие PE законнектились в тот же VPLS и отправляет им NLRI.&lt;br /&gt;
&lt;br /&gt;
Передается NLRI, аналогичный BGP L2VPN:&lt;br /&gt;
* label base&lt;br /&gt;
* label range&lt;br /&gt;
* site-id&lt;br /&gt;
* offset&lt;br /&gt;
&lt;br /&gt;
То есть для работы VPLS в настройках BGP включаем тот же самый l2vpn signaling.&lt;br /&gt;
&lt;br /&gt;
L2-circuit - это по сути метки (на выход, вход). В отличие от L2VPN каждому локальному интерфейсу назначать метку нет смысла, ведь внутри VPLS уже есть соответствие ''mac - interface''. Поэтому в VPLS метка должна была бы назначиться целиком на '''RI (per instance, per site)'''.&lt;br /&gt;
&lt;br /&gt;
Но эта логика не правильная. =(&lt;br /&gt;
&lt;br /&gt;
Learning mac-адресов! делает эту схему многоточкой! &lt;br /&gt;
&lt;br /&gt;
Блок меток соответствует-выделяется '''удаленному site''', чтобы когда пакет придет на РЕ понимать с какого site он пришел. Это требуется, чтобы сделать правильный learning.&lt;br /&gt;
&lt;br /&gt;
В остальном весь остальной процесс signaling аналогичен L2VPN.&lt;br /&gt;
&lt;br /&gt;
Site-ID в данной схеме принципиального значения не имеет. Требуется только для PE для внутренних вычислений, поэтому можно просто выбрать и назначить site-id, или задать ''auto-site-id''.&lt;br /&gt;
&lt;br /&gt;
==LDP==&lt;br /&gt;
Между PE требуется full-mesh.&lt;br /&gt;
&lt;br /&gt;
В случае l2circuit указывали удаленный PE. &lt;br /&gt;
&lt;br /&gt;
В VPLS, помимо всего прочего, потребуется добавить для всех удаленных PE remote-site-id ручками.&lt;br /&gt;
&lt;br /&gt;
=Метки=&lt;br /&gt;
Как и у L2VPN в NLRI передается:&lt;br /&gt;
* label base (начальная)&lt;br /&gt;
* site-ID&lt;br /&gt;
* label range &lt;br /&gt;
&lt;br /&gt;
Исходя из полученных данных PE вычисляет свою метку для связи с тем PE, кот переслал блок:&lt;br /&gt;
 label = label base (remote) + site-ID (local) - 1 (offset) (remote)&lt;br /&gt;
&lt;br /&gt;
=Инкапсуляция=&lt;br /&gt;
Ниже описанное касается CE-facing интерфейс.&lt;br /&gt;
&lt;br /&gt;
Для обычного Ethernet с vlan должна стоять: '''vlan-vpls'''. Она подходит как для qinq, так и для 802.1q.&lt;br /&gt;
&lt;br /&gt;
Можно ставить ее как на логический интерфейс, так и на физический.&lt;br /&gt;
&lt;br /&gt;
Если это не единственный тип инкапсуляции на физическом интерфейсе, то лучше на нем сразу указать тип инкапсуляции: flexible-ethernet-services.&lt;br /&gt;
&lt;br /&gt;
=Vlan=&lt;br /&gt;
В рамках vrf VPLS можно определять vlan для VPLS путем конфигурирования vlan-id | vlan-tags&lt;br /&gt;
*''vlan-id &amp;lt;vlan-id&amp;gt;'' - в VPLS будет работать только один указанный vlan-id&lt;br /&gt;
*''vlan-id none'' - у приходящего пакета будет сниматься vlan-id tag. У исходящего навешиваться тот vlan-id tag, который указан на исходящем из VPLS интерфейсе.&lt;br /&gt;
*''vlan-id all'' - используется с logical interface, на которых настроено двойное теггирование. При этом на выходе из VPLS outer-tag будет навешиваться (push), на входе в VPLS outer-tag будет сниматься (pop). В VPLS будут бегать маки с inner vlan-id.&lt;br /&gt;
*''vlan-tags inner &amp;lt;&amp;gt; outer &amp;lt;&amp;gt;'' - позволяет работать VPLS с двумя тегами.&lt;br /&gt;
{{note|text= Если в VPLS указывает vlan каким-то из способов, то на interface нельзя использовать input-vlan-map и output-vlan-map }}&lt;br /&gt;
&lt;br /&gt;
Со стороны клиента: влан на разных site должен совпадать. Иначе связности не будет.&lt;br /&gt;
&lt;br /&gt;
=+/-=&lt;br /&gt;
VPLS +: &lt;br /&gt;
*удобнее в трабшутинге&lt;br /&gt;
*в отличие от L2VPN не требует указания remote-site&lt;br /&gt;
*обеспечивает схему коммутации точка-многоточка&lt;br /&gt;
&lt;br /&gt;
VPLS - :&lt;br /&gt;
*бродкаст домен =&amp;gt; защита от петель между PE&amp;lt;&amp;gt;CE&lt;br /&gt;
:*STP на PE&amp;lt;&amp;gt;CE&lt;br /&gt;
:*ERP на CE&lt;br /&gt;
:*LAG на PE &amp;lt;&amp;gt; CE&lt;br /&gt;
:*Active/backup links on PE&lt;br /&gt;
:*Multihomed CE with two PEs.&lt;br /&gt;
*может передавать только ''ethernet''&lt;br /&gt;
&lt;br /&gt;
=Configuration=&lt;br /&gt;
==BGP based VPLS==&lt;br /&gt;
Минимальный рабочий конфиг:&lt;br /&gt;
&lt;br /&gt;
На всех роутерах:&lt;br /&gt;
*BGP-family:&lt;br /&gt;
 [edit protocols bgp]&lt;br /&gt;
 set family '''l2vpn signaling'''&lt;br /&gt;
*encapsulation vlan-vpls (как для LDP signalling, так и для BGP signaling):&lt;br /&gt;
 [edit interfaces]&lt;br /&gt;
 ge-0/0/1 {&lt;br /&gt;
    encapsulation ''vlan-vpls|flexible-ethernet-services''&lt;br /&gt;
 [edit interfaces ge-0/0/1 unit 804]&lt;br /&gt;
    encapsulation '''vlan-vpls'''; &lt;br /&gt;
    vlan-id 804;&lt;br /&gt;
&lt;br /&gt;
'''Lagavulin:'''&lt;br /&gt;
 [edit routing-instances oak]&lt;br /&gt;
         instance-type vpls;&lt;br /&gt;
         vlan-id 804;&lt;br /&gt;
         interface ge-0/0/0.804;&lt;br /&gt;
         route-distinguisher 10.200.86.7:1313;&lt;br /&gt;
         vrf-target target:1111:1313;&lt;br /&gt;
         protocols {&lt;br /&gt;
              vpls {&lt;br /&gt;
                no-tunnel-services;&lt;br /&gt;
                site ce4 {&lt;br /&gt;
                     site-identifier 1;&lt;br /&gt;
&lt;br /&gt;
Дополнительные часто используемые параметры:&lt;br /&gt;
*'''connectivity-type permanent''' - вне зависимости от состояния интерфейсов - поднимет VPLS.&lt;br /&gt;
*'''mac-table-size 6000 packet-action drop''' - ограничение по макам в VPLS.&lt;br /&gt;
*'''site-range 8''' - ограничение по количеству site в рамках одного VPLS.&lt;br /&gt;
===Multihoming (BGP signaling)===&lt;br /&gt;
Используется для подключения одного site клиента к нескольким PE.&lt;br /&gt;
&lt;br /&gt;
Только один PE будет активным и выбран в качестве designated forwarder, т.е. передавать трафик. Такой PE будет устанавливать с удаленным PE pseudo-wire. &lt;br /&gt;
&lt;br /&gt;
Если что-то произойдет с активным PE, второй multihomed PE установит pseudo-wire до удаленного PE.&lt;br /&gt;
&lt;br /&gt;
Удаленные PE, чтобы определить куда им все-таки нужно передавать трафик, используют процесс ''VPLS path-selection'': &lt;br /&gt;
#Если advertisement bit = 0, то эта NLRI отбрасывается.&lt;br /&gt;
#Далее выбор идет по наибольшему site-preference приоритету. &lt;br /&gt;
#Далее по меньшему RID.&lt;br /&gt;
#Далее по меньшему ip адресу BGP Peer.&lt;br /&gt;
Удаленный PE выбрал активный multihomed PE, назначив его designated VE (VPLS edge). И стал использовать только 1 NLRI. До такого designated VE удаленный PE и построит pseudo-wire.&lt;br /&gt;
{{note|text=Если требуется использовать multihoming для VPLS, то нужно учесть, что это будет работать только с BGP сигнализацией. '''Не LDP'''.}}&lt;br /&gt;
&lt;br /&gt;
Настраиваем:&lt;br /&gt;
#Одинаковый site-id для multi homed PE.&lt;br /&gt;
#Разный RD для multi homed PE.&lt;br /&gt;
#Указать интерфейсы в VPLS.&lt;br /&gt;
#Включить multihoming.&lt;br /&gt;
#Если на сети используется схема, где один и тот же site растянут на 2 PE, оба PE имеют линки в сторону одного CE, то можно определять активный PE с помощью ''site-preference backup|primary''. Либо руками задавать site-preference. Backup-PE поднимет connections с удаленными PE только в случае отвала primary PE того же site. &lt;br /&gt;
#[В случае, если на одной PE несколько линков к CE]. Задаем active-interface. Если указываем ''any'', то будет выбран один из перечисленных ниже интерфейсов. Если указываем ''primary'', то активным сразу будет выбран явно заданный интерфейс. А остальные интерфейсы в порядке очереди будут использоваться при падении primary. &lt;br /&gt;
&lt;br /&gt;
 [edit routing-instances]&lt;br /&gt;
 +   oak {&lt;br /&gt;
 +       instance-type vpls;&lt;br /&gt;
 +       vlan-id 200;&lt;br /&gt;
 +       interface ge-0/0/0.200;&lt;br /&gt;
 +       interface ge-0/0/1.200;&lt;br /&gt;
 +       route-distinguisher 10.200.86.1:100;&lt;br /&gt;
 +       vrf-target target:1111:100;&lt;br /&gt;
 +       protocols {&lt;br /&gt;
 +           vpls {&lt;br /&gt;
 +               no-tunnel-services;&lt;br /&gt;
 +               site blair &lt;br /&gt;
 +                   site-identifier 1;&lt;br /&gt;
 +                   '''multi-homing''';&lt;br /&gt;
 +                   '''site-preference primary'''';&lt;br /&gt;
 +                   '''active-interface primary''' ge-0/0/0.200;&lt;br /&gt;
 +                   interface ge-0/0/1.200;}}}}&lt;br /&gt;
&lt;br /&gt;
==LDP based VPLS==&lt;br /&gt;
Также обязательным:&lt;br /&gt;
* instance-type vpls&lt;br /&gt;
* lo должен быть добавлен в ldp&lt;br /&gt;
* !!'''rt, rd - не обязательны'''!!&lt;br /&gt;
&lt;br /&gt;
Есть несколько отличий:&lt;br /&gt;
* Вводится ''vpls-id''. Это просто идентификатор vpls. Аналогично virtual-circuit-id для l2vpn LDP signaling. То есть просто любое уникальное число.&lt;br /&gt;
* Вручную указываются соседи - удаленные PE.&lt;br /&gt;
&lt;br /&gt;
 oban&amp;gt; show configuration routing-instances fox &lt;br /&gt;
 instance-type vpls;&lt;br /&gt;
 interface ge-0/0/2.10; &lt;br /&gt;
 vlan-id {all | vlan-id | none}&lt;br /&gt;
 protocols {&lt;br /&gt;
    vpls {&lt;br /&gt;
        encapsulation-type ethernet;&lt;br /&gt;
        no-tunnel-services;&lt;br /&gt;
        vpls-id 9876;&lt;br /&gt;
        neighbor 10.200.86.8; }}&lt;br /&gt;
&lt;br /&gt;
Дополнительные часто используемые параметры:&lt;br /&gt;
&lt;br /&gt;
*'''connectivity-type permanent''' - вне зависимости от состояния интерфейсов - поднимет VPLS.&lt;br /&gt;
*'''mac-table-size 6000 packet-action drop'''- ограничение по макам в VPLS.&lt;br /&gt;
*'''site-range 8''' - ограничение по количеству site в рамках одного VPLS.&lt;br /&gt;
&lt;br /&gt;
===Multihoming (LDP signaling)===&lt;br /&gt;
Когда два PE, смотрят в сторону одного и того же CE, без настройки дополнительных протоколов можно настроить VPLS таким образом =&amp;gt; один из PE настраиваем как primary, второй backup.&lt;br /&gt;
&lt;br /&gt;
Настройки делаются на '''удаленных PE'''. К neighbor добавляется backup PE:&lt;br /&gt;
 ...&lt;br /&gt;
 protocols {&lt;br /&gt;
    vpls {&lt;br /&gt;
        neighbor 10.200.86.8; &lt;br /&gt;
            backup-neighbor 10.200.86.13&lt;br /&gt;
            ''revert-timer 100'' }}&lt;br /&gt;
&lt;br /&gt;
На удаленном PE backup роутер будет находиться в статусе: ''BK -- Backup connection''.&lt;br /&gt;
&lt;br /&gt;
А если в конфиг к backup-neighbor добавить еще и ''standby'', то на удаленных PE он будет болтаться в статусе: ''ST -- Standby connection''.&lt;br /&gt;
А сам backup роутер будет устанавливать сессию с удаленным PE (State = Up)&lt;br /&gt;
&lt;br /&gt;
=Troubleshooting=&lt;br /&gt;
 lagavulin&amp;gt; show vpls connections    &lt;br /&gt;
 Instance: oak&lt;br /&gt;
  Local site: '''ce4 (1)'''                   &lt;br /&gt;
    connection-site           Type  St     Time last up          # Up trans&lt;br /&gt;
    '''2'''                         rmt   '''Up'''     Nov 10 03:21:50 2016           1&lt;br /&gt;
      Remote PE: 10.200.86.3, Negotiated control-word: No&lt;br /&gt;
      ''Incoming label: '''262146''', Outgoing label: '''262145''' ''&lt;br /&gt;
      Local interface: '''lsi.1049088''', Status: Up, Encapsulation: VPLS&lt;br /&gt;
        Description: Intf - vpls oak local site 1 remote site 2&lt;br /&gt;
    '''3'''                         rmt   '''Up'''     Nov 10 03:27:12 2016           1&lt;br /&gt;
      Remote PE: 10.200.86.9, Negotiated control-word: No&lt;br /&gt;
      ''Incoming label: '''262147''', Outgoing label: '''262145''' ''&lt;br /&gt;
      Local interface: '''lsi.1049089''', Status: Up, Encapsulation: VPLS&lt;br /&gt;
        Description: Intf - vpls oak local site 1 remote site 3&lt;br /&gt;
&lt;br /&gt;
 lagavulin&amp;gt; show route table oak.l2vpn.0 detail &lt;br /&gt;
 oak.l2vpn.0: 3 destinations, 3 routes (3 active, 0 holddown, 0 hidden)&lt;br /&gt;
 10.200.86.3:1313:2:1/96 (1 entry, 1 announced)&lt;br /&gt;
        *BGP    Preference: 170/-101&lt;br /&gt;
                Route Distinguisher: 10.200.86.3:1313&lt;br /&gt;
                Source: 10.200.86.3&lt;br /&gt;
                Protocol next hop: 10.200.86.3&lt;br /&gt;
                Age: 15:30 	Metric2: 1 &lt;br /&gt;
                Task: BGP_1111.10.200.86.3+50784&lt;br /&gt;
                Communities: target:1111:1313 Layer2-info: encaps:VPLS, control flags:, mtu: 0, site preference: 100&lt;br /&gt;
                Label-base: 262145, range: 8&lt;br /&gt;
                Localpref: 100&lt;br /&gt;
                Router ID: 10.200.86.3&lt;br /&gt;
                Primary Routing Table bgp.l2vpn.0&lt;br /&gt;
 10.200.86.7:1313:1:1/96 (1 entry, 1 announced)&lt;br /&gt;
        *L2VPN  Preference: 170/-101&lt;br /&gt;
                Next hop type: Indirect &lt;br /&gt;
                Next-hop reference count: 2&lt;br /&gt;
                Protocol next hop: 10.200.86.7&lt;br /&gt;
                Indirect next hop: 0 -&lt;br /&gt;
                Age: 27:51 	Metric2: 1 &lt;br /&gt;
                Task: oak-l2vpn&lt;br /&gt;
                Communities: Layer2-info: encaps:VPLS, control flags:, mtu: 0, site preference: 100&lt;br /&gt;
                Label-base: 262145, range: 8, status-vector: 0x18 &lt;br /&gt;
 10.200.86.9:1313:3:1/96 (1 entry, 1 announced)&lt;br /&gt;
        *BGP    Preference: 170/-101&lt;br /&gt;
                Route Distinguisher: 10.200.86.9:1313&lt;br /&gt;
                Source: 10.200.86.9&lt;br /&gt;
                Protocol next hop: 10.200.86.9&lt;br /&gt;
                Local AS:  1111 Peer AS:  1111&lt;br /&gt;
                Age: 10:08 	Metric2: 1 &lt;br /&gt;
                Task: BGP_1111.10.200.86.9+59111&lt;br /&gt;
                Communities: target:1111:1313 Layer2-info: encaps:VPLS, control flags:, mtu: 0, site preference: 100&lt;br /&gt;
                Label-base: 262145, range: 8&lt;br /&gt;
                Localpref: 100&lt;br /&gt;
                Router ID: 10.200.86.9&lt;br /&gt;
                Primary Routing Table bgp.l2vpn.0&lt;br /&gt;
&lt;br /&gt;
Как посмотреть маки: &lt;br /&gt;
 lagavulin&amp;gt; show route forwarding-table vpn oak&lt;br /&gt;
 lagavulin&amp;gt; show vpls mac-table instance oak&lt;br /&gt;
&lt;br /&gt;
=Дополнительная информация=&lt;br /&gt;
*[[L2VPN]]&lt;br /&gt;
*[[EVPN]]&lt;br /&gt;
*[[Реализация MPLS в ядре сети]]&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=L2VPN&amp;diff=2052</id>
		<title>L2VPN</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=L2VPN&amp;diff=2052"/>
		<updated>2021-07-15T18:32:08Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: /* Stitching */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#description2: L2VPN Martini (LDP). L2VPN Kompella (BGP). L2VPN Stitching. Конфигурация L2VPN. Траблшутинг L2VPN. Информация для подготовки к экзаменам Juniper.}}&lt;br /&gt;
&lt;br /&gt;
ISP предоставляет только транспорт. Маршрутизация ложится на клиента.&lt;br /&gt;
&lt;br /&gt;
Обе схемы работают одинаково с точки зрения forwarding (используют одинаковую инкаспуляцию). Разница только в signaling (control plane)- BGP vs LDP.&lt;br /&gt;
&lt;br /&gt;
Martini - даже нет понятия VPN, это просто объединение 2х точек.&lt;br /&gt;
&lt;br /&gt;
L2VPN нуждаются в BGP route refresh, без разрыва BGP сессии. Эта функция автоматически включается для L2VPN, дополнительных настроек не требует. &lt;br /&gt;
==Martini (LDP)==&lt;br /&gt;
L2 circuit (RFC 4447)&lt;br /&gt;
&lt;br /&gt;
===Signaling===&lt;br /&gt;
На PE2 int 1 приходит l2-пакет. Пакет нужно туннелировать. Но если просто отправить пакет, то на PE1: не понятно что делать с пакетом. Поэтому при передаче через туннель нужно добавить 2 метки. Верхняя, чтобы передать по туннелю, нижняя связана с интерфейсом. &lt;br /&gt;
* Каждый PE каждому интерфейсу выделяет метку (VC label).&lt;br /&gt;
* Приходящие пакеты будут сразу обрабатываться по mpls.0: 40 pop -&amp;gt; int 1, 50 pop -&amp;gt; int 2, 60 pop -&amp;gt; int 3. &lt;br /&gt;
* Как только сконфигурирован ''l2circuit'', интерфейсу выделена метка и записана в mpls.0. &lt;br /&gt;
* Cо стороны PE1 (ingress) - mpls.0: int 1 push 40 push 20 -&amp;gt; P (резолв LDP соседа из inet.3), int 3 push 60 push 20 -&amp;gt; P. &lt;br /&gt;
&lt;br /&gt;
PE1 должен получить информацию о метках, которые нужно назначать. Как??&lt;br /&gt;
&lt;br /&gt;
* Для передачи используется LDP сессия PE1 &amp;lt;&amp;gt; PE2, в конфигурации задано куда строить LDP туннель. Помним, что по умолчанию LDP поднимает сессии только с непосредственно подключенными соседями. &lt;br /&gt;
* Метки (40, 50, 60) передали от PE2 к PE1.&lt;br /&gt;
* PE1 должен определить какая метка какому интерфейсу соответствует. Этот параметр задаем руками. '''Virtual curcuit-ID (VCI)''' - должен быть уникальным для пары устройств, размер 4 байта. VCI передается вместе с метками.&lt;br /&gt;
&lt;br /&gt;
Дополнительно передается:&lt;br /&gt;
* инкапсуляция, которая должна быть одинаковой с обоих концов l2curcuit&lt;br /&gt;
* vlan-id - одинаковый (в Cisco может быть одинаковым)&lt;br /&gt;
* MTU - одинаковый, задается только для сигналинга, не имеет практического значения.&lt;br /&gt;
Для корректной работы:&lt;br /&gt;
*Между PE должна быть LSP (LDP или RSVP)&lt;br /&gt;
*Lo интерфейсы PE должны быть добавлены в [protocols ldp]&lt;br /&gt;
&lt;br /&gt;
'''BGP Autodiscovery'''&lt;br /&gt;
*FEC 129 BGP autodiscovery for VPWS requires the ''l2vpn-id, source-attachment-identifier'', and ''target-attachment-identifier'' statements. &lt;br /&gt;
*Kompella Layer 2 VPNs require the ''site-identifier'' and ''remote-site-id statements''.&lt;br /&gt;
&lt;br /&gt;
===Forwarding===&lt;br /&gt;
Фрейм: ip(1500) + l2 header(18) + CW-control word (4) + mpls int (4) + mpls tunnel (4) - это минимальный вариант, но он уже получается большой =&amp;gt; стоит ставить MTU с запасом ~1570 или больше.&lt;br /&gt;
&lt;br /&gt;
Форвардинг строится только на метках mpls.0. Внутри сети провайдера пакет передается в 2ми метками (туннельная и интерфейсная).&lt;br /&gt;
&lt;br /&gt;
Мак-адреса не изучаются. Вообще фрейм просто передается тупо и все.&lt;br /&gt;
&lt;br /&gt;
Circuit - это по сути 2 метки: на вход (incoming), на выход (outgoing). &lt;br /&gt;
&lt;br /&gt;
Пример (часть ненужных полей в выводе удалена):&lt;br /&gt;
 lagavulin&amp;gt; show route table l2circuit.0 detail &lt;br /&gt;
 l2circuit.0: 2 destinations, 2 routes (2 active, 0 holddown, 0 hidden)&lt;br /&gt;
 '''10.200.86.3:CtrlWord:4:550:Local/96''' (1 entry, 1 announced)&lt;br /&gt;
        *L2CKT  Preference: 7&lt;br /&gt;
                Next hop type: Indirect&lt;br /&gt;
                Next hop: 192.168.86.1 via ge-0/0/0.30 weight 0x1, selected&lt;br /&gt;
                '''Label-switched-path lagavulin-to-oban'''&lt;br /&gt;
                '''Label operation: Push 300592'''&lt;br /&gt;
                Protocol next hop: 10.200.86.3&lt;br /&gt;
                Age: 41:24 	Metric2: 4 &lt;br /&gt;
                Announcement bits (1): 0-LDP &lt;br /&gt;
                AS path: I&lt;br /&gt;
                VC Label '''299968''', MTU 9000, VLAN ID 550&lt;br /&gt;
 10.200.86.3:CtrlWord:4:550:Remote/96 (1 entry, 1 announced)&lt;br /&gt;
        *LDP    Preference: 9&lt;br /&gt;
                Next hop type: Discard&lt;br /&gt;
                Age: 37:49 &lt;br /&gt;
                Announcement bits (1): 1-l2 circuit &lt;br /&gt;
                AS path: I&lt;br /&gt;
                VC Label '''300064''', MTU 9000, VLAN ID 550&lt;br /&gt;
&lt;br /&gt;
*300064 - push VC label for that destination (метка для интерфейса)&lt;br /&gt;
*300592 - push MPLS label (для LSP туннеля)&lt;br /&gt;
*299968 - роутер будет ожидать для данного circuit пакет с этой меткой&lt;br /&gt;
&lt;br /&gt;
===Configuration===&lt;br /&gt;
 [edit interfaces ge-0/0/0]&lt;br /&gt;
   encapsulation flexible-ethernet-services;&lt;br /&gt;
 [edit interfaces ge-0/0/0]&lt;br /&gt;
    unit 560 {&lt;br /&gt;
        description l2-to-lagavulin;&lt;br /&gt;
        encapsulation vlan-ccc;&lt;br /&gt;
        vlan-id 560;}&lt;br /&gt;
 [edit protocols l2circuit neighbor 10.200.86.7]&lt;br /&gt;
      interface ge-0/0/0.560 {&lt;br /&gt;
         virtual-circuit-id 560;&lt;br /&gt;
         description l2-to-lagavulin;&lt;br /&gt;
         mtu 9000;}&lt;br /&gt;
 [edit protocols ldp]&lt;br /&gt;
    interface Lo0.0&lt;br /&gt;
{{note|text=Для ссс-инкапсуляции зарезервирован диапазон 512-4094}}&lt;br /&gt;
Кстати, можно объединять интерфейсы между собой на одном роутере.&lt;br /&gt;
 [edit protocols l2circuit local-switching]&lt;br /&gt;
 interface ge-0/0/1.200&lt;br /&gt;
    end-interface&lt;br /&gt;
       interface ge-0/0/3.200&lt;br /&gt;
&lt;br /&gt;
===Verification===&lt;br /&gt;
Можно смотреть только состояние l2circuit connection. =(&lt;br /&gt;
Если исключить всякие тупые ошибки, типа mtu mismatch, ненастроенный сигналинг с двух сторон и т.п., то в основном проблемы сводятся к проблемам с обменом метками между PE. В таком случае проверяем: &lt;br /&gt;
* LDP соседство&lt;br /&gt;
* LDP database&lt;br /&gt;
* Наличие Lo в inet.3 и т.д.&lt;br /&gt;
Если control plane поднялся: &lt;br /&gt;
* Можем смотреть только обмен пакетами на интерфейсе.&lt;br /&gt;
* Поднимать l3 интерфейсы и смотреть свзяность через l2circuit. &lt;br /&gt;
* Если физически нет возможности поднять l3, то можно задействовать logical-tunnel.&lt;br /&gt;
&lt;br /&gt;
===psn-tunnel-endpoint===&lt;br /&gt;
Строит туннель до адреса, отличного от LDP соседа.&lt;br /&gt;
&lt;br /&gt;
*PE1 lo = 1.1.1.1&lt;br /&gt;
*PE2 lo = 2.2.2.2 primary, 10.2.2.2 secondary&lt;br /&gt;
2.2.2.2 - LDP LSP, 10.2.2.2 - RSVP LSP.&lt;br /&gt;
&lt;br /&gt;
Если хотим построить l2circuit, который пойдёт по RSVP LSP, достаточно просто в конфиге на PE указать ''psn-tunnel-endpoint'':&lt;br /&gt;
 set protocols l2circuit neighbor 2.2.2.2 interface ge-0/0/0.10 psn-tunnel-endpoint 10.2.2.2&lt;br /&gt;
 set protocols l2circuit neighbor 2.2.2.2 interface ge-0/0/0.10 virtual-circuit-id 10&lt;br /&gt;
 set protocols l2circuit neighbor 2.2.2.2 interface ge-0/0/0.20 virtual-circuit-id 20&lt;br /&gt;
&lt;br /&gt;
ge-0/0/0.20 - будет использовать для построения LDP LSP&lt;br /&gt;
&lt;br /&gt;
ge-0/0/0.10 - будет использовать для построения RSVP LSP. лукап в inet.3 будет делаться для 10.2.2.2.&lt;br /&gt;
&lt;br /&gt;
psn-tunnel-endpoint - не обязательно адрес именно на loopback.&lt;br /&gt;
&lt;br /&gt;
==Kompella (BGP)==&lt;br /&gt;
&lt;br /&gt;
[[Файл:Kireeti Kompella.jpg|thumb|справа|альт=Kireeti Kompella|Компелла. Собственной персоной!]]&lt;br /&gt;
&lt;br /&gt;
Цель - создать полноценный VPN. В l2circuit используется LDP-full-mesh.&lt;br /&gt;
&lt;br /&gt;
Для Kompella используется сигнализация на основе BGP, можно соорудить full-mesh iBGP, можно использовать RR.&lt;br /&gt;
&lt;br /&gt;
* Для клиента создается '''отдельный RI'''. &lt;br /&gt;
* В него добавляются локальные интерфейсы клиента и указывается с каким удаленным роутером RI будет соединяться. Router-ID - не очень надежно, т.к. его можно заменить, и в таком случае придется переделывать все RI для клиента по всей сети. Поэтому привязку сделали по '''site-id''' - задаются вручную, определяют схему коммутации между роутерами (в рамках RI). &lt;br /&gt;
* Метка назначается каждому '''локальному интерфейсу''', который ассоциирован с site ('''per interface''').&lt;br /&gt;
* Роутеры между собой обмениваются выделенными метками, чтобы удаленные site знали push какой метки делать, чтобы достичь нужного site. Набор меток - новый NLRI - '''family l2vpn signaling'''.&lt;br /&gt;
* У каждого клиента также присутствует свой идентификатор - route-target.&lt;br /&gt;
&lt;br /&gt;
LSP между PE должна быть предустановлена, можно использовать как LDP так и RSVP.&lt;br /&gt;
&lt;br /&gt;
===L2vpn signaling и выделение меток===&lt;br /&gt;
Алгоритм выделения меток был оптимизирован, но для лучшего понимая как и зачем, рассмотрим этапы его становления. =)&lt;br /&gt;
&lt;br /&gt;
Изначально, исходя из схемы, рассмотрим что требуется передавать между PE, на примере того, что передаст PE1:&lt;br /&gt;
*метки:&lt;br /&gt;
:* 102 -&amp;gt; site 2&lt;br /&gt;
:* 103 -&amp;gt; site 3&lt;br /&gt;
:* 104 -&amp;gt; site 4&lt;br /&gt;
*local site-id:&lt;br /&gt;
:* site-id = 1&lt;br /&gt;
&lt;br /&gt;
*PE2 видит: &lt;br /&gt;
Я - site 2. Site 1 ассоциирован с int 1. Site 1 прислал, что для отправки пакета ему, я должен сделать push 102 =&amp;gt; int 1: push 102 push 50 (LSP до PE1) резолвим next-hop для PE1 в inet.3))&lt;br /&gt;
&lt;br /&gt;
*PE3 видит:&lt;br /&gt;
Я - site 3. Site 1 ассоциирован с int 1. Site 1 прислал, что для отправки пакета ему, я должен сделать push 103 =&amp;gt; int 1: push 103 push 60.&lt;br /&gt;
&lt;br /&gt;
То есть все PE получают от site 1 '''все''' метки, хотя им нужна всего одна, которая соответствует его site.&lt;br /&gt;
&lt;br /&gt;
Kompella решил, что это излишняя инфа и что достаточно пересылать только метки, не указывая каким site они соответствуют. Просто метки будут располагаться ровно в том порядке, в котором они предназначены удаленным site.&lt;br /&gt;
 101 - 1&lt;br /&gt;
 102 - 2&lt;br /&gt;
 103 - 3&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
В таком случае важно следить, чтобы site имели номера один за одним, блок меток тогда будет - непрерывный.&lt;br /&gt;
&lt;br /&gt;
Если на сети будет так: PE1 - site 1, PE2 - site 50, то PE1 будет вынужден выделить метки [1, ..., 50], хотя требуется только 1 и 50. Те site, которые пропускаются, для них будут созданы фейковые метки 2, 3, ..., 49, но метки использоваться не будут. &lt;br /&gt;
&lt;br /&gt;
PE2 получит:&lt;br /&gt;
 102&lt;br /&gt;
 103&lt;br /&gt;
 104&lt;br /&gt;
и выберет для себя 103, что будет не правильным поведением.&lt;br /&gt;
&lt;br /&gt;
Отсюда вытекает еще один важный момент, что PE1, который генерирует NLRI с метками - должен запихнуть себя туда, чтобы не нарушить порядок меток.&lt;br /&gt;
&lt;br /&gt;
В итоге от PE2 будет такое распределение меток:&lt;br /&gt;
 int 1 (site 1) - 201 label&lt;br /&gt;
 int 2 (site 3) - 203 label&lt;br /&gt;
 int 3 (site 4) - 204 label&lt;br /&gt;
 202 label - выделена, но не связана ни с каким интерфейсом.&lt;br /&gt;
&lt;br /&gt;
И будет передан такой NLRI:&lt;br /&gt;
 201&lt;br /&gt;
 202&lt;br /&gt;
 203&lt;br /&gt;
 204&lt;br /&gt;
 site-id 2&lt;br /&gt;
&lt;br /&gt;
В Juniper выделен отдельный блок (для Kompella), начиная с 800000, в рамках 1 PE метки не повторяются, должны быть уникальными.&lt;br /&gt;
&lt;br /&gt;
Затем Kompella решил оптимизировать алгоритм, и вместо того, чтобы передавать блок меток, будут передаваться параметры, а метку для себя каждый PE вычислит сам.&lt;br /&gt;
&lt;br /&gt;
В итоге в NLRI передается:&lt;br /&gt;
* label base (начальная)&lt;br /&gt;
* site-ID&lt;br /&gt;
* label range &lt;br /&gt;
&lt;br /&gt;
Исходя из полученных данных PE вычисляет свою метку для связи с тем PE, кот переслал блок:&lt;br /&gt;
 label = label base (remote) + site-ID (local) - 1 (offset) (remote)&lt;br /&gt;
&lt;br /&gt;
Данная метка заносится в mpls.0&lt;br /&gt;
&lt;br /&gt;
Т.о. получается, что каждый PE хранит у себя одну метку, а не кучу лишних.&lt;br /&gt;
&lt;br /&gt;
Когда добавляется еще один site:&lt;br /&gt;
site-5: создал RI, сгенерировал NLRI, NLRI проанонсировался остальным PE, через RR. PE1 получил NLRI, понял, что появился site 5, требуется построить до него туннель, посмотрел какую метку push в сторону site 5 - все нормально.&lt;br /&gt;
&lt;br /&gt;
PE5 получил NLRI всех PE от RR, начинает строить до них туннели. Для site 1 - возьмет  105 метку, которой в блоке нет, это понятно по label range. Что делать? &lt;br /&gt;
&lt;br /&gt;
PE1, когда был получен NLRI от PE5, должен изменить NLRI, но метка 105 возможно будет уже занята для других целей. И + уже построенные туннели должны буду заново создаться, т.к. прилетит новый NLRI. &lt;br /&gt;
&lt;br /&gt;
Поэтому, PE1 не меняет текущий блок, а добавляет к нему новый блок, тогда NLRI ('''конечный вариант'''):&lt;br /&gt;
* label base = 110&lt;br /&gt;
* site-id = 1&lt;br /&gt;
* label-range = 3&lt;br /&gt;
* '''label offset = 5''' - равен начальному site-ID, которому выделена первая метка блока.&lt;br /&gt;
&lt;br /&gt;
Выглядит так: 10.200.86.1:1212:1:3/96:&lt;br /&gt;
* 10.200.86.1:1212 - RD&lt;br /&gt;
* 1 - site-id&lt;br /&gt;
* 3 - offset&lt;br /&gt;
* /96 - mask&lt;br /&gt;
&lt;br /&gt;
L2 extended community содержит информацию об MTU: MTU, сконфигурированное PE-CE линке на отправляющем PE. Т.к. на L2 участке нет места фрагментации, то PE, получивший NLRI с не совпадающим MTU, проигнорирует такой NLRI.&lt;br /&gt;
&lt;br /&gt;
*vlan-id = [0 - 511] - обычные vlan-tagged interfaces&lt;br /&gt;
*vlan-id = [512 - 4094] - специальные, для ccc-encapsulation.&lt;br /&gt;
По факту в настройки vlan-ccc с vlan-id &amp;lt; 512 у меня проблем не возникало.&lt;br /&gt;
&lt;br /&gt;
В случаях, когда на одном роутере подключены 2 site клиента, которые также требуется соединить между собой, можно просто внутри VRF разным интерфейсам назначаем разные site-ID. В этом случае просто для каждого site будет создан свой NLRI. Так тоже можно.&lt;br /&gt;
&lt;br /&gt;
[[Файл:l2vpn_labels.png]]&lt;br /&gt;
&lt;br /&gt;
===Configuration===&lt;br /&gt;
 blair# top show | compare  &lt;br /&gt;
 [edit interfaces ge-0/0/0]&lt;br /&gt;
 encapsulation flexible-ethernet-services;&lt;br /&gt;
    unit 601 {&lt;br /&gt;
        encapsulation vlan-ccc;&lt;br /&gt;
        vlan-id 601;&lt;br /&gt;
    }&lt;br /&gt;
 [edit protocols bgp group internal]&lt;br /&gt;
   family l2vpn {&lt;br /&gt;
       signaling;&lt;br /&gt;
&lt;br /&gt;
 [edit routing-instances]&lt;br /&gt;
 fox-services {&lt;br /&gt;
    instance-type l2vpn;&lt;br /&gt;
    interface ge-0/0/0.600;&lt;br /&gt;
    interface ge-0/0/0.601;&lt;br /&gt;
    route-distinguisher 10.200.86.1:1212;&lt;br /&gt;
    vrf-target target:1111:1212;&lt;br /&gt;
    protocols {&lt;br /&gt;
        l2vpn {&lt;br /&gt;
            encapsulation-type ethernet-vlan;&lt;br /&gt;
            site blair {&lt;br /&gt;
                site-identifier 1;&lt;br /&gt;
                interface ge-0/0/0.600 {&lt;br /&gt;
                    remote-site-id 9;&lt;br /&gt;
                }&lt;br /&gt;
                interface ge-0/0/0.601 {&lt;br /&gt;
                    remote-site-id 4;&lt;br /&gt;
&lt;br /&gt;
 tormore:&lt;br /&gt;
 fox-services {&lt;br /&gt;
    instance-type l2vpn;&lt;br /&gt;
    interface ge-0/0/0.850;&lt;br /&gt;
    route-distinguisher 10.200.86.9:1212;&lt;br /&gt;
    vrf-target target:1111:1212;&lt;br /&gt;
    protocols {&lt;br /&gt;
        l2vpn {&lt;br /&gt;
            encapsulation-type ethernet-vlan;&lt;br /&gt;
            site tormore {&lt;br /&gt;
                site-identifier 9;&lt;br /&gt;
                interface ge-0/0/0.850 {&lt;br /&gt;
                    remote-site-id 1;&lt;br /&gt;
&lt;br /&gt;
===Verification===&lt;br /&gt;
 blair&amp;gt; show l2vpn connections    &lt;br /&gt;
 Instance: fox-services&lt;br /&gt;
  Local site: blair (1)&lt;br /&gt;
    connection-site           Type  St     Time last up          # Up trans&lt;br /&gt;
    4                         rmt   '''Up'''     Nov  7 14:49:02 2016           1&lt;br /&gt;
      Remote PE: 10.200.86.4, Negotiated control-word: Yes (Null)&lt;br /&gt;
      Incoming label: '''800001''', Outgoing label: '''800000'''&lt;br /&gt;
      Local interface: '''ge-0/0/0.601''', Status: Up, Encapsulation: VLAN&lt;br /&gt;
    9                         rmt   '''Up'''     Nov  7 17:47:21 2016           1&lt;br /&gt;
      Remote PE: 10.200.86.9, Negotiated control-word: Yes (Null)&lt;br /&gt;
      Incoming label: '''800002''', Outgoing label: '''800004'''&lt;br /&gt;
      Local interface: '''ge-0/0/0.600''', Status: Up, Encapsulation: VLAN&lt;br /&gt;
&lt;br /&gt;
 blair&amp;gt; show route advertising-protocol bgp 10.200.86.9 detail &lt;br /&gt;
 fox-services.l2vpn.0: 4 destinations, 4 routes (4 active, 0 holddown, 0 hidden)&lt;br /&gt;
 *  10.200.86.1:1212:1:3/96 (1 entry, 1 announced)&lt;br /&gt;
 BGP group internal type Internal&lt;br /&gt;
     Route Distinguisher: 10.200.86.1:1212&lt;br /&gt;
     Label-base: 800000, range: 2, status-vector: 0x0 &lt;br /&gt;
     Nexthop: Self&lt;br /&gt;
     Flags: Nexthop Change&lt;br /&gt;
     Localpref: 100&lt;br /&gt;
     AS path: [1111] I&lt;br /&gt;
     Communities: target:1111:1212 Layer2-info: encaps:VLAN, control flags:Control-Word, mtu: 0, site preference: 100&lt;br /&gt;
 *  10.200.86.1:1212:1:9/96 (1 entry, 1 announced)&lt;br /&gt;
 BGP group internal type Internal&lt;br /&gt;
     Route Distinguisher: 10.200.86.1:1212&lt;br /&gt;
     Label-base: 800002, range: 2, status-vector: 0x0 &lt;br /&gt;
     Nexthop: Self&lt;br /&gt;
     Flags: Nexthop Change&lt;br /&gt;
     Localpref: 100&lt;br /&gt;
     AS path: [1111] I&lt;br /&gt;
     Communities: target:1111:1212 Layer2-info: encaps:VLAN, control flags:Control-Word, mtu: 0, site preference: 100&lt;br /&gt;
&lt;br /&gt;
 blair&amp;gt; show route receive-protocol bgp 10.200.86.9 detail table fox-services.l2vpn.0 &lt;br /&gt;
 fox-services.l2vpn.0: 4 destinations, 4 routes (4 active, 0 holddown, 0 hidden)&lt;br /&gt;
 *  10.200.86.9:1212:9:1/96 (1 entry, 1 announced)&lt;br /&gt;
     Import Accepted&lt;br /&gt;
     Route Distinguisher: 10.200.86.9:1212&lt;br /&gt;
     Label-base: 800004, range: 2, status-vector: 0x0 &lt;br /&gt;
     Nexthop: 10.200.86.9&lt;br /&gt;
     Localpref: 100&lt;br /&gt;
     AS path: I&lt;br /&gt;
     Communities: target:1111:1212 Layer2-info: encaps:VLAN, control flags:Control-Word, mtu: 0, site preference: 100&lt;br /&gt;
&lt;br /&gt;
 blair&amp;gt; show route table bgp.l2vpn.0 detail &lt;br /&gt;
 bgp.l2vpn.0: 2 destinations, 2 routes (2 active, 0 holddown, 0 hidden)&lt;br /&gt;
 10.200.86.4:1212:4:1/96 (1 entry, 0 announced)&lt;br /&gt;
        *BGP    Route Distinguisher: 10.200.86.4:1212&lt;br /&gt;
                Source: 10.200.86.4&lt;br /&gt;
                Protocol next hop: 10.200.86.4&lt;br /&gt;
                Age: 3:01:31 	Metric2: 1 &lt;br /&gt;
                Communities: '''target:1111:1212''' Layer2-info: encaps:VLAN, control flags:Control-Word, mtu: 0, site preference: 100&lt;br /&gt;
                Import Accepted&lt;br /&gt;
                Label-base: '''800000''', range: 2, status-vector: 0x0 &lt;br /&gt;
                Localpref: 100&lt;br /&gt;
                Router ID: 10.200.86.4&lt;br /&gt;
                Secondary Tables: ''fox-services.l2vpn.0''&lt;br /&gt;
 10.200.86.9:1212:9:1/96 (1 entry, 0 announced)&lt;br /&gt;
        *BGP    Route Distinguisher: 10.200.86.9:1212&lt;br /&gt;
                Source: 10.200.86.9&lt;br /&gt;
                Protocol next hop: 10.200.86.9&lt;br /&gt;
                Age: 3:12       Metric2: 1 &lt;br /&gt;
                Communities: '''target:1111:1212''' Layer2-info: encaps:VLAN, control flags:Control-Word, mtu: 0, site preference: 100&lt;br /&gt;
                Import Accepted&lt;br /&gt;
                Label-base: '''800004''', range: 2, status-vector: 0x0 &lt;br /&gt;
                Localpref: 100&lt;br /&gt;
                Router ID: '''10.200.86.9'''&lt;br /&gt;
                Secondary Tables: ''fox-services.l2vpn.0''&lt;br /&gt;
&lt;br /&gt;
 tormore&amp;gt; show route receive-protocol bgp 10.200.86.1 table fox-services.l2vpn.0 detail &lt;br /&gt;
 fox-services.l2vpn.0: 4 destinations, 4 routes (4 active, 0 holddown, 0 hidden)&lt;br /&gt;
 *  10.200.86.1:1212:1:3/96 (1 entry, 1 announced)&lt;br /&gt;
     Import Accepted&lt;br /&gt;
     Route Distinguisher: 10.200.86.1:1212&lt;br /&gt;
     Label-base: 800000, range: 2, status-vector: 0x0 &lt;br /&gt;
     Nexthop: 10.200.86.1&lt;br /&gt;
     Localpref: 100&lt;br /&gt;
     AS path: I&lt;br /&gt;
     Communities: target:1111:1212 Layer2-info: encaps:VLAN, control flags:Control-Word, mtu: 0, site preference: 100&lt;br /&gt;
 *  10.200.86.1:1212:1:9/96 (1 entry, 1 announced)&lt;br /&gt;
     Import Accepted&lt;br /&gt;
     Route Distinguisher: 10.200.86.1:1212&lt;br /&gt;
     Label-base: 800002, range: 2, status-vector: 0x0 &lt;br /&gt;
     Nexthop: 10.200.86.1&lt;br /&gt;
     Localpref: 100&lt;br /&gt;
     AS path: I&lt;br /&gt;
     Communities: target:1111:1212 Layer2-info: encaps:VLAN, control flags:Control-Word, mtu: 0, site preference: 100&lt;br /&gt;
&lt;br /&gt;
'''Forwarding'''&lt;br /&gt;
Только метки и ничего больше! 1 метка для L2VPN, одна для передачи через LSP.&lt;br /&gt;
&lt;br /&gt;
Ingress:&lt;br /&gt;
 blair&amp;gt; show route table fox-services.l2vpn.0 detail&lt;br /&gt;
 fox-services.l2vpn.0: 4 destinations, 4 routes (4 active, 0 holddown, 0 hidden)&lt;br /&gt;
 + = Active Route, - = Last Active, * = Both&lt;br /&gt;
  10.200.86.9:1212:9:1/96 (1 entry, 1 announced)&lt;br /&gt;
        *BGP Route Distinguisher: 10.200.86.9:1212&lt;br /&gt;
                Source: 10.200.86.9&lt;br /&gt;
                Protocol next hop: 10.200.86.9&lt;br /&gt;
                Age: 35:59 	Metric2: 1 &lt;br /&gt;
                Announcement bits (1): 0-fox-services-l2vpn &lt;br /&gt;
                Communities: target:1111:1212 Layer2-info: encaps:VLAN, control flags:Control-Word, mtu: 0, site preference: 100&lt;br /&gt;
                Import Accepted&lt;br /&gt;
                Label-base: '''800004''', range: 2, status-vector: 0x0 &lt;br /&gt;
                Localpref: 100&lt;br /&gt;
                Router ID: 10.200.86.9&lt;br /&gt;
                Primary Routing Table bgp.l2vpn.0&lt;br /&gt;
&lt;br /&gt;
 blair&amp;gt; show route table fox-services.l2vpn.0           &lt;br /&gt;
 fox-services.l2vpn.0: 4 destinations, 4 routes (4 active, 0 holddown, 0 hidden)&lt;br /&gt;
 + = Active Route, - = Last Active, * = Both&lt;br /&gt;
 ...&lt;br /&gt;
 '''10.200.86.9:1212:9:1/96'''                &lt;br /&gt;
                   *[BGP/170] 00:37:40, localpref 100, from 10.200.86.9&lt;br /&gt;
                      AS path: I&lt;br /&gt;
                    &amp;gt; to 192.168.86.25 via ge-0/0/0.110, '''label-switched-path blair-to-tormore'''&lt;br /&gt;
&lt;br /&gt;
 blair&amp;gt; show rsvp session name blair-to-tormore detail &lt;br /&gt;
 Ingress RSVP: 2 sessions &lt;br /&gt;
 10.200.86.9&lt;br /&gt;
  From: 10.200.86.1, LSPstate: Up, ActiveRoute: 0&lt;br /&gt;
  LSPname: blair-to-tormore, LSPpath: Primary&lt;br /&gt;
  LSPtype: Static Configured&lt;br /&gt;
  Resv style: 1 FF, Label in: -, Label out: '''301168'''&lt;br /&gt;
&lt;br /&gt;
На транзитных будет swap и pop с метками для LSP.&lt;br /&gt;
&lt;br /&gt;
Egress:&lt;br /&gt;
 tormore&amp;gt; show route label 800004  &lt;br /&gt;
 mpls.0: 15 destinations, 15 routes (15 active, 0 holddown, 0 hidden)&lt;br /&gt;
 + = Active Route, - = Last Active, * = Both&lt;br /&gt;
 '''800004'''             *[L2VPN/7] 00:05:53&lt;br /&gt;
                    &amp;gt; via ge-0/0/0.850, Pop       Offset: 4&lt;br /&gt;
&lt;br /&gt;
=Stitching=&lt;br /&gt;
Для ститчинга VPN можно использовать ''iw-interface'' или ''lt-interface''.&lt;br /&gt;
&lt;br /&gt;
В конфиге iw-interface можно задать только инкапсуляции:&lt;br /&gt;
  ethernet-ccc         Ethernet for a cross-connect&lt;br /&gt;
  frame-relay-ccc      Frame Relay DLCI for CCC&lt;br /&gt;
  ppp-ccc              Serial PPP device for a cross-connect&lt;br /&gt;
  vlan-ccc             802.1q tagging for a cross-connect&lt;br /&gt;
Соответственно он работает только для ститчинга L2VPN (разных типов) между собой.&lt;br /&gt;
&lt;br /&gt;
Если хочется объединить L2VPN+VPLS, или L2VPN+L3VPN, то это делается при помощи ''lt-interface''.&lt;br /&gt;
&lt;br /&gt;
==L2VPN BGP (Kompella)==&lt;br /&gt;
[[Файл:L2VPN_stitching.png|1024px]]&lt;br /&gt;
&lt;br /&gt;
Можно объединить два L2VPN, используя '''stitching''' в виде '''interworking interface''' (или иногда используют ''logical-tunnel'', кот требует физического включения на оборудовании и специальную плату):&lt;br /&gt;
*задаем interface iw.0 внутри [edit interfaces], encapsulation и vlan-id должны быть как и для удаленных концов VPN&lt;br /&gt;
 [interfaces]&lt;br /&gt;
    iw0 {&lt;br /&gt;
        unit 0 {&lt;br /&gt;
            encapsulation vlan-ccc;&lt;br /&gt;
            vlan-id 10;&lt;br /&gt;
            peer-unit 1;}&lt;br /&gt;
        unit 1 {&lt;br /&gt;
            encapsulation vlan-ccc;&lt;br /&gt;
            vlan-id 10;&lt;br /&gt;
            peer-unit 0; }}&lt;br /&gt;
*создаем RI, которые нужно будет скрепить между собой, добавляя в них interface iw0:&lt;br /&gt;
 [routing-instances]&lt;br /&gt;
    bear {&lt;br /&gt;
        instance-type l2vpn;&lt;br /&gt;
        interface iw0.1;&lt;br /&gt;
        route-distinguisher 10.200.86.5:999;&lt;br /&gt;
        vrf-target target:1111:999;&lt;br /&gt;
        protocols {&lt;br /&gt;
            l2vpn {&lt;br /&gt;
                encapsulation-type ethernet-vlan;&lt;br /&gt;
                site dalw {&lt;br /&gt;
                    site-identifier 5;&lt;br /&gt;
                    interface iw0.1 {&lt;br /&gt;
                        remote-site-id 8; }}}}}&lt;br /&gt;
    fox {&lt;br /&gt;
        instance-type l2vpn;&lt;br /&gt;
        interface iw0.0;&lt;br /&gt;
        route-distinguisher 10.200.86.5:8765;&lt;br /&gt;
        vrf-target target:1111:8765;&lt;br /&gt;
        protocols {&lt;br /&gt;
            l2vpn {&lt;br /&gt;
                encapsulation-type ethernet-vlan;&lt;br /&gt;
                site dalw {&lt;br /&gt;
                    site-identifier 5;&lt;br /&gt;
                    interface iw0.0 {&lt;br /&gt;
                        remote-site-id 3; }}}}}}&lt;br /&gt;
*включаем l2iw protocol:&lt;br /&gt;
 [protocols]&lt;br /&gt;
    l2iw;&lt;br /&gt;
{{note|text=При выключении protocols l2iw наш ститчинг проложит работать. После выключения и перезагрузки роутера - перестанет работать. Работоспособность восстановится только после повторного включения l2iw.}}&lt;br /&gt;
Проверяем:&lt;br /&gt;
 dalwhinnie&amp;gt; show l2vpn connections &lt;br /&gt;
 Instance: bear&lt;br /&gt;
  Local site: dalw (5)&lt;br /&gt;
    connection-site           Type  St     Time last up          # Up trans&lt;br /&gt;
    8                         rmt   Up     Feb  9 12:52:35 2017           1&lt;br /&gt;
      Remote PE: 10.200.86.8, Negotiated control-word: Yes (Null)&lt;br /&gt;
      Incoming label: 800005, Outgoing label: 800006&lt;br /&gt;
      Local interface: iw0.1, Status: Up, Encapsulation: VLAN&lt;br /&gt;
 Instance: fox&lt;br /&gt;
  Local site: dalw (5)&lt;br /&gt;
    connection-site           Type  St     Time last up          # Up trans&lt;br /&gt;
    3                         rmt   Up     Feb  9 12:52:35 2017           1&lt;br /&gt;
      Remote PE: 10.200.86.3, Negotiated control-word: Yes (Null)&lt;br /&gt;
      Incoming label: 800006, Outgoing label: 800006&lt;br /&gt;
      Local interface: iw0.0, Status: Up, Encapsulation: VLAN&lt;br /&gt;
&lt;br /&gt;
==L2VPN LDP (Martini)==&lt;br /&gt;
iw interface и протокол l2iw - задаются аналогично, конфигурация l2circuit:&lt;br /&gt;
 [protocols l2circuit]&lt;br /&gt;
    neighbor 10.200.86.3 {&lt;br /&gt;
        interface iw0.0 {&lt;br /&gt;
            virtual-circuit-id 10;&lt;br /&gt;
            encapsulation-type ethernet-vlan; }}&lt;br /&gt;
    neighbor 10.200.86.8 {&lt;br /&gt;
        interface iw0.1 {&lt;br /&gt;
            virtual-circuit-id 10;&lt;br /&gt;
            encapsulation-type ethernet-vlan;}}}&lt;br /&gt;
&lt;br /&gt;
 dalwhinnie&amp;gt; show l2circuit connections &lt;br /&gt;
 Neighbor: 10.200.86.3 &lt;br /&gt;
    Interface                 Type  St     Time last up          # Up trans&lt;br /&gt;
    iw0.0(vc 10)              rmt   Up     Feb 11 15:51:15 2017           1&lt;br /&gt;
      Remote PE: 10.200.86.3, Negotiated control-word: Yes (Null)&lt;br /&gt;
      Incoming label: 299872, Outgoing label: 300832&lt;br /&gt;
      Negotiated PW status TLV: No&lt;br /&gt;
      Local interface: iw0.0, Status: Up, Encapsulation: VLAN&lt;br /&gt;
 Neighbor: 10.200.86.8 &lt;br /&gt;
    Interface                 Type  St     Time last up          # Up trans&lt;br /&gt;
    iw0.1(vc 10)              rmt   Up     Feb 11 15:51:16 2017           1&lt;br /&gt;
      Remote PE: 10.200.86.8, Negotiated control-word: Yes (Null)&lt;br /&gt;
      Incoming label: 299888, Outgoing label: 300128&lt;br /&gt;
      Negotiated PW status TLV: No&lt;br /&gt;
      Local interface: iw0.1, Status: Up, Encapsulation: VLAN&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Kompella + Martini==&lt;br /&gt;
Опять же interface iw0 и protocols l2iw - такие же.&lt;br /&gt;
 [protocols l2circuit]&lt;br /&gt;
    neighbor 10.200.86.3 {&lt;br /&gt;
        interface iw0.0 {&lt;br /&gt;
            virtual-circuit-id 10;&lt;br /&gt;
            encapsulation-type ethernet-vlan; }}&lt;br /&gt;
 [routing-instances bear]&lt;br /&gt;
    instance-type l2vpn;&lt;br /&gt;
    interface iw0.1;&lt;br /&gt;
    route-distinguisher 10.200.86.5:999;&lt;br /&gt;
    vrf-target target:1111:999;&lt;br /&gt;
    protocols {&lt;br /&gt;
        l2vpn {&lt;br /&gt;
            encapsulation-type ethernet-vlan;&lt;br /&gt;
            site dalw {&lt;br /&gt;
                site-identifier 5;&lt;br /&gt;
                interface iw0.1 {&lt;br /&gt;
                    remote-site-id 8;}}}}}&lt;br /&gt;
&lt;br /&gt;
=Дополнительная информация=&lt;br /&gt;
*[[VPLS]]&lt;br /&gt;
*[[EVPN]]&lt;br /&gt;
*[[Реализация MPLS в ядре сети]]&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=L2VPN&amp;diff=2051</id>
		<title>L2VPN</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=L2VPN&amp;diff=2051"/>
		<updated>2021-07-15T18:31:51Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#description2: L2VPN Martini (LDP). L2VPN Kompella (BGP). L2VPN Stitching. Конфигурация L2VPN. Траблшутинг L2VPN. Информация для подготовки к экзаменам Juniper.}}&lt;br /&gt;
&lt;br /&gt;
ISP предоставляет только транспорт. Маршрутизация ложится на клиента.&lt;br /&gt;
&lt;br /&gt;
Обе схемы работают одинаково с точки зрения forwarding (используют одинаковую инкаспуляцию). Разница только в signaling (control plane)- BGP vs LDP.&lt;br /&gt;
&lt;br /&gt;
Martini - даже нет понятия VPN, это просто объединение 2х точек.&lt;br /&gt;
&lt;br /&gt;
L2VPN нуждаются в BGP route refresh, без разрыва BGP сессии. Эта функция автоматически включается для L2VPN, дополнительных настроек не требует. &lt;br /&gt;
==Martini (LDP)==&lt;br /&gt;
L2 circuit (RFC 4447)&lt;br /&gt;
&lt;br /&gt;
===Signaling===&lt;br /&gt;
На PE2 int 1 приходит l2-пакет. Пакет нужно туннелировать. Но если просто отправить пакет, то на PE1: не понятно что делать с пакетом. Поэтому при передаче через туннель нужно добавить 2 метки. Верхняя, чтобы передать по туннелю, нижняя связана с интерфейсом. &lt;br /&gt;
* Каждый PE каждому интерфейсу выделяет метку (VC label).&lt;br /&gt;
* Приходящие пакеты будут сразу обрабатываться по mpls.0: 40 pop -&amp;gt; int 1, 50 pop -&amp;gt; int 2, 60 pop -&amp;gt; int 3. &lt;br /&gt;
* Как только сконфигурирован ''l2circuit'', интерфейсу выделена метка и записана в mpls.0. &lt;br /&gt;
* Cо стороны PE1 (ingress) - mpls.0: int 1 push 40 push 20 -&amp;gt; P (резолв LDP соседа из inet.3), int 3 push 60 push 20 -&amp;gt; P. &lt;br /&gt;
&lt;br /&gt;
PE1 должен получить информацию о метках, которые нужно назначать. Как??&lt;br /&gt;
&lt;br /&gt;
* Для передачи используется LDP сессия PE1 &amp;lt;&amp;gt; PE2, в конфигурации задано куда строить LDP туннель. Помним, что по умолчанию LDP поднимает сессии только с непосредственно подключенными соседями. &lt;br /&gt;
* Метки (40, 50, 60) передали от PE2 к PE1.&lt;br /&gt;
* PE1 должен определить какая метка какому интерфейсу соответствует. Этот параметр задаем руками. '''Virtual curcuit-ID (VCI)''' - должен быть уникальным для пары устройств, размер 4 байта. VCI передается вместе с метками.&lt;br /&gt;
&lt;br /&gt;
Дополнительно передается:&lt;br /&gt;
* инкапсуляция, которая должна быть одинаковой с обоих концов l2curcuit&lt;br /&gt;
* vlan-id - одинаковый (в Cisco может быть одинаковым)&lt;br /&gt;
* MTU - одинаковый, задается только для сигналинга, не имеет практического значения.&lt;br /&gt;
Для корректной работы:&lt;br /&gt;
*Между PE должна быть LSP (LDP или RSVP)&lt;br /&gt;
*Lo интерфейсы PE должны быть добавлены в [protocols ldp]&lt;br /&gt;
&lt;br /&gt;
'''BGP Autodiscovery'''&lt;br /&gt;
*FEC 129 BGP autodiscovery for VPWS requires the ''l2vpn-id, source-attachment-identifier'', and ''target-attachment-identifier'' statements. &lt;br /&gt;
*Kompella Layer 2 VPNs require the ''site-identifier'' and ''remote-site-id statements''.&lt;br /&gt;
&lt;br /&gt;
===Forwarding===&lt;br /&gt;
Фрейм: ip(1500) + l2 header(18) + CW-control word (4) + mpls int (4) + mpls tunnel (4) - это минимальный вариант, но он уже получается большой =&amp;gt; стоит ставить MTU с запасом ~1570 или больше.&lt;br /&gt;
&lt;br /&gt;
Форвардинг строится только на метках mpls.0. Внутри сети провайдера пакет передается в 2ми метками (туннельная и интерфейсная).&lt;br /&gt;
&lt;br /&gt;
Мак-адреса не изучаются. Вообще фрейм просто передается тупо и все.&lt;br /&gt;
&lt;br /&gt;
Circuit - это по сути 2 метки: на вход (incoming), на выход (outgoing). &lt;br /&gt;
&lt;br /&gt;
Пример (часть ненужных полей в выводе удалена):&lt;br /&gt;
 lagavulin&amp;gt; show route table l2circuit.0 detail &lt;br /&gt;
 l2circuit.0: 2 destinations, 2 routes (2 active, 0 holddown, 0 hidden)&lt;br /&gt;
 '''10.200.86.3:CtrlWord:4:550:Local/96''' (1 entry, 1 announced)&lt;br /&gt;
        *L2CKT  Preference: 7&lt;br /&gt;
                Next hop type: Indirect&lt;br /&gt;
                Next hop: 192.168.86.1 via ge-0/0/0.30 weight 0x1, selected&lt;br /&gt;
                '''Label-switched-path lagavulin-to-oban'''&lt;br /&gt;
                '''Label operation: Push 300592'''&lt;br /&gt;
                Protocol next hop: 10.200.86.3&lt;br /&gt;
                Age: 41:24 	Metric2: 4 &lt;br /&gt;
                Announcement bits (1): 0-LDP &lt;br /&gt;
                AS path: I&lt;br /&gt;
                VC Label '''299968''', MTU 9000, VLAN ID 550&lt;br /&gt;
 10.200.86.3:CtrlWord:4:550:Remote/96 (1 entry, 1 announced)&lt;br /&gt;
        *LDP    Preference: 9&lt;br /&gt;
                Next hop type: Discard&lt;br /&gt;
                Age: 37:49 &lt;br /&gt;
                Announcement bits (1): 1-l2 circuit &lt;br /&gt;
                AS path: I&lt;br /&gt;
                VC Label '''300064''', MTU 9000, VLAN ID 550&lt;br /&gt;
&lt;br /&gt;
*300064 - push VC label for that destination (метка для интерфейса)&lt;br /&gt;
*300592 - push MPLS label (для LSP туннеля)&lt;br /&gt;
*299968 - роутер будет ожидать для данного circuit пакет с этой меткой&lt;br /&gt;
&lt;br /&gt;
===Configuration===&lt;br /&gt;
 [edit interfaces ge-0/0/0]&lt;br /&gt;
   encapsulation flexible-ethernet-services;&lt;br /&gt;
 [edit interfaces ge-0/0/0]&lt;br /&gt;
    unit 560 {&lt;br /&gt;
        description l2-to-lagavulin;&lt;br /&gt;
        encapsulation vlan-ccc;&lt;br /&gt;
        vlan-id 560;}&lt;br /&gt;
 [edit protocols l2circuit neighbor 10.200.86.7]&lt;br /&gt;
      interface ge-0/0/0.560 {&lt;br /&gt;
         virtual-circuit-id 560;&lt;br /&gt;
         description l2-to-lagavulin;&lt;br /&gt;
         mtu 9000;}&lt;br /&gt;
 [edit protocols ldp]&lt;br /&gt;
    interface Lo0.0&lt;br /&gt;
{{note|text=Для ссс-инкапсуляции зарезервирован диапазон 512-4094}}&lt;br /&gt;
Кстати, можно объединять интерфейсы между собой на одном роутере.&lt;br /&gt;
 [edit protocols l2circuit local-switching]&lt;br /&gt;
 interface ge-0/0/1.200&lt;br /&gt;
    end-interface&lt;br /&gt;
       interface ge-0/0/3.200&lt;br /&gt;
&lt;br /&gt;
===Verification===&lt;br /&gt;
Можно смотреть только состояние l2circuit connection. =(&lt;br /&gt;
Если исключить всякие тупые ошибки, типа mtu mismatch, ненастроенный сигналинг с двух сторон и т.п., то в основном проблемы сводятся к проблемам с обменом метками между PE. В таком случае проверяем: &lt;br /&gt;
* LDP соседство&lt;br /&gt;
* LDP database&lt;br /&gt;
* Наличие Lo в inet.3 и т.д.&lt;br /&gt;
Если control plane поднялся: &lt;br /&gt;
* Можем смотреть только обмен пакетами на интерфейсе.&lt;br /&gt;
* Поднимать l3 интерфейсы и смотреть свзяность через l2circuit. &lt;br /&gt;
* Если физически нет возможности поднять l3, то можно задействовать logical-tunnel.&lt;br /&gt;
&lt;br /&gt;
===psn-tunnel-endpoint===&lt;br /&gt;
Строит туннель до адреса, отличного от LDP соседа.&lt;br /&gt;
&lt;br /&gt;
*PE1 lo = 1.1.1.1&lt;br /&gt;
*PE2 lo = 2.2.2.2 primary, 10.2.2.2 secondary&lt;br /&gt;
2.2.2.2 - LDP LSP, 10.2.2.2 - RSVP LSP.&lt;br /&gt;
&lt;br /&gt;
Если хотим построить l2circuit, который пойдёт по RSVP LSP, достаточно просто в конфиге на PE указать ''psn-tunnel-endpoint'':&lt;br /&gt;
 set protocols l2circuit neighbor 2.2.2.2 interface ge-0/0/0.10 psn-tunnel-endpoint 10.2.2.2&lt;br /&gt;
 set protocols l2circuit neighbor 2.2.2.2 interface ge-0/0/0.10 virtual-circuit-id 10&lt;br /&gt;
 set protocols l2circuit neighbor 2.2.2.2 interface ge-0/0/0.20 virtual-circuit-id 20&lt;br /&gt;
&lt;br /&gt;
ge-0/0/0.20 - будет использовать для построения LDP LSP&lt;br /&gt;
&lt;br /&gt;
ge-0/0/0.10 - будет использовать для построения RSVP LSP. лукап в inet.3 будет делаться для 10.2.2.2.&lt;br /&gt;
&lt;br /&gt;
psn-tunnel-endpoint - не обязательно адрес именно на loopback.&lt;br /&gt;
&lt;br /&gt;
==Kompella (BGP)==&lt;br /&gt;
&lt;br /&gt;
[[Файл:Kireeti Kompella.jpg|thumb|справа|альт=Kireeti Kompella|Компелла. Собственной персоной!]]&lt;br /&gt;
&lt;br /&gt;
Цель - создать полноценный VPN. В l2circuit используется LDP-full-mesh.&lt;br /&gt;
&lt;br /&gt;
Для Kompella используется сигнализация на основе BGP, можно соорудить full-mesh iBGP, можно использовать RR.&lt;br /&gt;
&lt;br /&gt;
* Для клиента создается '''отдельный RI'''. &lt;br /&gt;
* В него добавляются локальные интерфейсы клиента и указывается с каким удаленным роутером RI будет соединяться. Router-ID - не очень надежно, т.к. его можно заменить, и в таком случае придется переделывать все RI для клиента по всей сети. Поэтому привязку сделали по '''site-id''' - задаются вручную, определяют схему коммутации между роутерами (в рамках RI). &lt;br /&gt;
* Метка назначается каждому '''локальному интерфейсу''', который ассоциирован с site ('''per interface''').&lt;br /&gt;
* Роутеры между собой обмениваются выделенными метками, чтобы удаленные site знали push какой метки делать, чтобы достичь нужного site. Набор меток - новый NLRI - '''family l2vpn signaling'''.&lt;br /&gt;
* У каждого клиента также присутствует свой идентификатор - route-target.&lt;br /&gt;
&lt;br /&gt;
LSP между PE должна быть предустановлена, можно использовать как LDP так и RSVP.&lt;br /&gt;
&lt;br /&gt;
===L2vpn signaling и выделение меток===&lt;br /&gt;
Алгоритм выделения меток был оптимизирован, но для лучшего понимая как и зачем, рассмотрим этапы его становления. =)&lt;br /&gt;
&lt;br /&gt;
Изначально, исходя из схемы, рассмотрим что требуется передавать между PE, на примере того, что передаст PE1:&lt;br /&gt;
*метки:&lt;br /&gt;
:* 102 -&amp;gt; site 2&lt;br /&gt;
:* 103 -&amp;gt; site 3&lt;br /&gt;
:* 104 -&amp;gt; site 4&lt;br /&gt;
*local site-id:&lt;br /&gt;
:* site-id = 1&lt;br /&gt;
&lt;br /&gt;
*PE2 видит: &lt;br /&gt;
Я - site 2. Site 1 ассоциирован с int 1. Site 1 прислал, что для отправки пакета ему, я должен сделать push 102 =&amp;gt; int 1: push 102 push 50 (LSP до PE1) резолвим next-hop для PE1 в inet.3))&lt;br /&gt;
&lt;br /&gt;
*PE3 видит:&lt;br /&gt;
Я - site 3. Site 1 ассоциирован с int 1. Site 1 прислал, что для отправки пакета ему, я должен сделать push 103 =&amp;gt; int 1: push 103 push 60.&lt;br /&gt;
&lt;br /&gt;
То есть все PE получают от site 1 '''все''' метки, хотя им нужна всего одна, которая соответствует его site.&lt;br /&gt;
&lt;br /&gt;
Kompella решил, что это излишняя инфа и что достаточно пересылать только метки, не указывая каким site они соответствуют. Просто метки будут располагаться ровно в том порядке, в котором они предназначены удаленным site.&lt;br /&gt;
 101 - 1&lt;br /&gt;
 102 - 2&lt;br /&gt;
 103 - 3&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
В таком случае важно следить, чтобы site имели номера один за одним, блок меток тогда будет - непрерывный.&lt;br /&gt;
&lt;br /&gt;
Если на сети будет так: PE1 - site 1, PE2 - site 50, то PE1 будет вынужден выделить метки [1, ..., 50], хотя требуется только 1 и 50. Те site, которые пропускаются, для них будут созданы фейковые метки 2, 3, ..., 49, но метки использоваться не будут. &lt;br /&gt;
&lt;br /&gt;
PE2 получит:&lt;br /&gt;
 102&lt;br /&gt;
 103&lt;br /&gt;
 104&lt;br /&gt;
и выберет для себя 103, что будет не правильным поведением.&lt;br /&gt;
&lt;br /&gt;
Отсюда вытекает еще один важный момент, что PE1, который генерирует NLRI с метками - должен запихнуть себя туда, чтобы не нарушить порядок меток.&lt;br /&gt;
&lt;br /&gt;
В итоге от PE2 будет такое распределение меток:&lt;br /&gt;
 int 1 (site 1) - 201 label&lt;br /&gt;
 int 2 (site 3) - 203 label&lt;br /&gt;
 int 3 (site 4) - 204 label&lt;br /&gt;
 202 label - выделена, но не связана ни с каким интерфейсом.&lt;br /&gt;
&lt;br /&gt;
И будет передан такой NLRI:&lt;br /&gt;
 201&lt;br /&gt;
 202&lt;br /&gt;
 203&lt;br /&gt;
 204&lt;br /&gt;
 site-id 2&lt;br /&gt;
&lt;br /&gt;
В Juniper выделен отдельный блок (для Kompella), начиная с 800000, в рамках 1 PE метки не повторяются, должны быть уникальными.&lt;br /&gt;
&lt;br /&gt;
Затем Kompella решил оптимизировать алгоритм, и вместо того, чтобы передавать блок меток, будут передаваться параметры, а метку для себя каждый PE вычислит сам.&lt;br /&gt;
&lt;br /&gt;
В итоге в NLRI передается:&lt;br /&gt;
* label base (начальная)&lt;br /&gt;
* site-ID&lt;br /&gt;
* label range &lt;br /&gt;
&lt;br /&gt;
Исходя из полученных данных PE вычисляет свою метку для связи с тем PE, кот переслал блок:&lt;br /&gt;
 label = label base (remote) + site-ID (local) - 1 (offset) (remote)&lt;br /&gt;
&lt;br /&gt;
Данная метка заносится в mpls.0&lt;br /&gt;
&lt;br /&gt;
Т.о. получается, что каждый PE хранит у себя одну метку, а не кучу лишних.&lt;br /&gt;
&lt;br /&gt;
Когда добавляется еще один site:&lt;br /&gt;
site-5: создал RI, сгенерировал NLRI, NLRI проанонсировался остальным PE, через RR. PE1 получил NLRI, понял, что появился site 5, требуется построить до него туннель, посмотрел какую метку push в сторону site 5 - все нормально.&lt;br /&gt;
&lt;br /&gt;
PE5 получил NLRI всех PE от RR, начинает строить до них туннели. Для site 1 - возьмет  105 метку, которой в блоке нет, это понятно по label range. Что делать? &lt;br /&gt;
&lt;br /&gt;
PE1, когда был получен NLRI от PE5, должен изменить NLRI, но метка 105 возможно будет уже занята для других целей. И + уже построенные туннели должны буду заново создаться, т.к. прилетит новый NLRI. &lt;br /&gt;
&lt;br /&gt;
Поэтому, PE1 не меняет текущий блок, а добавляет к нему новый блок, тогда NLRI ('''конечный вариант'''):&lt;br /&gt;
* label base = 110&lt;br /&gt;
* site-id = 1&lt;br /&gt;
* label-range = 3&lt;br /&gt;
* '''label offset = 5''' - равен начальному site-ID, которому выделена первая метка блока.&lt;br /&gt;
&lt;br /&gt;
Выглядит так: 10.200.86.1:1212:1:3/96:&lt;br /&gt;
* 10.200.86.1:1212 - RD&lt;br /&gt;
* 1 - site-id&lt;br /&gt;
* 3 - offset&lt;br /&gt;
* /96 - mask&lt;br /&gt;
&lt;br /&gt;
L2 extended community содержит информацию об MTU: MTU, сконфигурированное PE-CE линке на отправляющем PE. Т.к. на L2 участке нет места фрагментации, то PE, получивший NLRI с не совпадающим MTU, проигнорирует такой NLRI.&lt;br /&gt;
&lt;br /&gt;
*vlan-id = [0 - 511] - обычные vlan-tagged interfaces&lt;br /&gt;
*vlan-id = [512 - 4094] - специальные, для ccc-encapsulation.&lt;br /&gt;
По факту в настройки vlan-ccc с vlan-id &amp;lt; 512 у меня проблем не возникало.&lt;br /&gt;
&lt;br /&gt;
В случаях, когда на одном роутере подключены 2 site клиента, которые также требуется соединить между собой, можно просто внутри VRF разным интерфейсам назначаем разные site-ID. В этом случае просто для каждого site будет создан свой NLRI. Так тоже можно.&lt;br /&gt;
&lt;br /&gt;
[[Файл:l2vpn_labels.png]]&lt;br /&gt;
&lt;br /&gt;
===Configuration===&lt;br /&gt;
 blair# top show | compare  &lt;br /&gt;
 [edit interfaces ge-0/0/0]&lt;br /&gt;
 encapsulation flexible-ethernet-services;&lt;br /&gt;
    unit 601 {&lt;br /&gt;
        encapsulation vlan-ccc;&lt;br /&gt;
        vlan-id 601;&lt;br /&gt;
    }&lt;br /&gt;
 [edit protocols bgp group internal]&lt;br /&gt;
   family l2vpn {&lt;br /&gt;
       signaling;&lt;br /&gt;
&lt;br /&gt;
 [edit routing-instances]&lt;br /&gt;
 fox-services {&lt;br /&gt;
    instance-type l2vpn;&lt;br /&gt;
    interface ge-0/0/0.600;&lt;br /&gt;
    interface ge-0/0/0.601;&lt;br /&gt;
    route-distinguisher 10.200.86.1:1212;&lt;br /&gt;
    vrf-target target:1111:1212;&lt;br /&gt;
    protocols {&lt;br /&gt;
        l2vpn {&lt;br /&gt;
            encapsulation-type ethernet-vlan;&lt;br /&gt;
            site blair {&lt;br /&gt;
                site-identifier 1;&lt;br /&gt;
                interface ge-0/0/0.600 {&lt;br /&gt;
                    remote-site-id 9;&lt;br /&gt;
                }&lt;br /&gt;
                interface ge-0/0/0.601 {&lt;br /&gt;
                    remote-site-id 4;&lt;br /&gt;
&lt;br /&gt;
 tormore:&lt;br /&gt;
 fox-services {&lt;br /&gt;
    instance-type l2vpn;&lt;br /&gt;
    interface ge-0/0/0.850;&lt;br /&gt;
    route-distinguisher 10.200.86.9:1212;&lt;br /&gt;
    vrf-target target:1111:1212;&lt;br /&gt;
    protocols {&lt;br /&gt;
        l2vpn {&lt;br /&gt;
            encapsulation-type ethernet-vlan;&lt;br /&gt;
            site tormore {&lt;br /&gt;
                site-identifier 9;&lt;br /&gt;
                interface ge-0/0/0.850 {&lt;br /&gt;
                    remote-site-id 1;&lt;br /&gt;
&lt;br /&gt;
===Verification===&lt;br /&gt;
 blair&amp;gt; show l2vpn connections    &lt;br /&gt;
 Instance: fox-services&lt;br /&gt;
  Local site: blair (1)&lt;br /&gt;
    connection-site           Type  St     Time last up          # Up trans&lt;br /&gt;
    4                         rmt   '''Up'''     Nov  7 14:49:02 2016           1&lt;br /&gt;
      Remote PE: 10.200.86.4, Negotiated control-word: Yes (Null)&lt;br /&gt;
      Incoming label: '''800001''', Outgoing label: '''800000'''&lt;br /&gt;
      Local interface: '''ge-0/0/0.601''', Status: Up, Encapsulation: VLAN&lt;br /&gt;
    9                         rmt   '''Up'''     Nov  7 17:47:21 2016           1&lt;br /&gt;
      Remote PE: 10.200.86.9, Negotiated control-word: Yes (Null)&lt;br /&gt;
      Incoming label: '''800002''', Outgoing label: '''800004'''&lt;br /&gt;
      Local interface: '''ge-0/0/0.600''', Status: Up, Encapsulation: VLAN&lt;br /&gt;
&lt;br /&gt;
 blair&amp;gt; show route advertising-protocol bgp 10.200.86.9 detail &lt;br /&gt;
 fox-services.l2vpn.0: 4 destinations, 4 routes (4 active, 0 holddown, 0 hidden)&lt;br /&gt;
 *  10.200.86.1:1212:1:3/96 (1 entry, 1 announced)&lt;br /&gt;
 BGP group internal type Internal&lt;br /&gt;
     Route Distinguisher: 10.200.86.1:1212&lt;br /&gt;
     Label-base: 800000, range: 2, status-vector: 0x0 &lt;br /&gt;
     Nexthop: Self&lt;br /&gt;
     Flags: Nexthop Change&lt;br /&gt;
     Localpref: 100&lt;br /&gt;
     AS path: [1111] I&lt;br /&gt;
     Communities: target:1111:1212 Layer2-info: encaps:VLAN, control flags:Control-Word, mtu: 0, site preference: 100&lt;br /&gt;
 *  10.200.86.1:1212:1:9/96 (1 entry, 1 announced)&lt;br /&gt;
 BGP group internal type Internal&lt;br /&gt;
     Route Distinguisher: 10.200.86.1:1212&lt;br /&gt;
     Label-base: 800002, range: 2, status-vector: 0x0 &lt;br /&gt;
     Nexthop: Self&lt;br /&gt;
     Flags: Nexthop Change&lt;br /&gt;
     Localpref: 100&lt;br /&gt;
     AS path: [1111] I&lt;br /&gt;
     Communities: target:1111:1212 Layer2-info: encaps:VLAN, control flags:Control-Word, mtu: 0, site preference: 100&lt;br /&gt;
&lt;br /&gt;
 blair&amp;gt; show route receive-protocol bgp 10.200.86.9 detail table fox-services.l2vpn.0 &lt;br /&gt;
 fox-services.l2vpn.0: 4 destinations, 4 routes (4 active, 0 holddown, 0 hidden)&lt;br /&gt;
 *  10.200.86.9:1212:9:1/96 (1 entry, 1 announced)&lt;br /&gt;
     Import Accepted&lt;br /&gt;
     Route Distinguisher: 10.200.86.9:1212&lt;br /&gt;
     Label-base: 800004, range: 2, status-vector: 0x0 &lt;br /&gt;
     Nexthop: 10.200.86.9&lt;br /&gt;
     Localpref: 100&lt;br /&gt;
     AS path: I&lt;br /&gt;
     Communities: target:1111:1212 Layer2-info: encaps:VLAN, control flags:Control-Word, mtu: 0, site preference: 100&lt;br /&gt;
&lt;br /&gt;
 blair&amp;gt; show route table bgp.l2vpn.0 detail &lt;br /&gt;
 bgp.l2vpn.0: 2 destinations, 2 routes (2 active, 0 holddown, 0 hidden)&lt;br /&gt;
 10.200.86.4:1212:4:1/96 (1 entry, 0 announced)&lt;br /&gt;
        *BGP    Route Distinguisher: 10.200.86.4:1212&lt;br /&gt;
                Source: 10.200.86.4&lt;br /&gt;
                Protocol next hop: 10.200.86.4&lt;br /&gt;
                Age: 3:01:31 	Metric2: 1 &lt;br /&gt;
                Communities: '''target:1111:1212''' Layer2-info: encaps:VLAN, control flags:Control-Word, mtu: 0, site preference: 100&lt;br /&gt;
                Import Accepted&lt;br /&gt;
                Label-base: '''800000''', range: 2, status-vector: 0x0 &lt;br /&gt;
                Localpref: 100&lt;br /&gt;
                Router ID: 10.200.86.4&lt;br /&gt;
                Secondary Tables: ''fox-services.l2vpn.0''&lt;br /&gt;
 10.200.86.9:1212:9:1/96 (1 entry, 0 announced)&lt;br /&gt;
        *BGP    Route Distinguisher: 10.200.86.9:1212&lt;br /&gt;
                Source: 10.200.86.9&lt;br /&gt;
                Protocol next hop: 10.200.86.9&lt;br /&gt;
                Age: 3:12       Metric2: 1 &lt;br /&gt;
                Communities: '''target:1111:1212''' Layer2-info: encaps:VLAN, control flags:Control-Word, mtu: 0, site preference: 100&lt;br /&gt;
                Import Accepted&lt;br /&gt;
                Label-base: '''800004''', range: 2, status-vector: 0x0 &lt;br /&gt;
                Localpref: 100&lt;br /&gt;
                Router ID: '''10.200.86.9'''&lt;br /&gt;
                Secondary Tables: ''fox-services.l2vpn.0''&lt;br /&gt;
&lt;br /&gt;
 tormore&amp;gt; show route receive-protocol bgp 10.200.86.1 table fox-services.l2vpn.0 detail &lt;br /&gt;
 fox-services.l2vpn.0: 4 destinations, 4 routes (4 active, 0 holddown, 0 hidden)&lt;br /&gt;
 *  10.200.86.1:1212:1:3/96 (1 entry, 1 announced)&lt;br /&gt;
     Import Accepted&lt;br /&gt;
     Route Distinguisher: 10.200.86.1:1212&lt;br /&gt;
     Label-base: 800000, range: 2, status-vector: 0x0 &lt;br /&gt;
     Nexthop: 10.200.86.1&lt;br /&gt;
     Localpref: 100&lt;br /&gt;
     AS path: I&lt;br /&gt;
     Communities: target:1111:1212 Layer2-info: encaps:VLAN, control flags:Control-Word, mtu: 0, site preference: 100&lt;br /&gt;
 *  10.200.86.1:1212:1:9/96 (1 entry, 1 announced)&lt;br /&gt;
     Import Accepted&lt;br /&gt;
     Route Distinguisher: 10.200.86.1:1212&lt;br /&gt;
     Label-base: 800002, range: 2, status-vector: 0x0 &lt;br /&gt;
     Nexthop: 10.200.86.1&lt;br /&gt;
     Localpref: 100&lt;br /&gt;
     AS path: I&lt;br /&gt;
     Communities: target:1111:1212 Layer2-info: encaps:VLAN, control flags:Control-Word, mtu: 0, site preference: 100&lt;br /&gt;
&lt;br /&gt;
'''Forwarding'''&lt;br /&gt;
Только метки и ничего больше! 1 метка для L2VPN, одна для передачи через LSP.&lt;br /&gt;
&lt;br /&gt;
Ingress:&lt;br /&gt;
 blair&amp;gt; show route table fox-services.l2vpn.0 detail&lt;br /&gt;
 fox-services.l2vpn.0: 4 destinations, 4 routes (4 active, 0 holddown, 0 hidden)&lt;br /&gt;
 + = Active Route, - = Last Active, * = Both&lt;br /&gt;
  10.200.86.9:1212:9:1/96 (1 entry, 1 announced)&lt;br /&gt;
        *BGP Route Distinguisher: 10.200.86.9:1212&lt;br /&gt;
                Source: 10.200.86.9&lt;br /&gt;
                Protocol next hop: 10.200.86.9&lt;br /&gt;
                Age: 35:59 	Metric2: 1 &lt;br /&gt;
                Announcement bits (1): 0-fox-services-l2vpn &lt;br /&gt;
                Communities: target:1111:1212 Layer2-info: encaps:VLAN, control flags:Control-Word, mtu: 0, site preference: 100&lt;br /&gt;
                Import Accepted&lt;br /&gt;
                Label-base: '''800004''', range: 2, status-vector: 0x0 &lt;br /&gt;
                Localpref: 100&lt;br /&gt;
                Router ID: 10.200.86.9&lt;br /&gt;
                Primary Routing Table bgp.l2vpn.0&lt;br /&gt;
&lt;br /&gt;
 blair&amp;gt; show route table fox-services.l2vpn.0           &lt;br /&gt;
 fox-services.l2vpn.0: 4 destinations, 4 routes (4 active, 0 holddown, 0 hidden)&lt;br /&gt;
 + = Active Route, - = Last Active, * = Both&lt;br /&gt;
 ...&lt;br /&gt;
 '''10.200.86.9:1212:9:1/96'''                &lt;br /&gt;
                   *[BGP/170] 00:37:40, localpref 100, from 10.200.86.9&lt;br /&gt;
                      AS path: I&lt;br /&gt;
                    &amp;gt; to 192.168.86.25 via ge-0/0/0.110, '''label-switched-path blair-to-tormore'''&lt;br /&gt;
&lt;br /&gt;
 blair&amp;gt; show rsvp session name blair-to-tormore detail &lt;br /&gt;
 Ingress RSVP: 2 sessions &lt;br /&gt;
 10.200.86.9&lt;br /&gt;
  From: 10.200.86.1, LSPstate: Up, ActiveRoute: 0&lt;br /&gt;
  LSPname: blair-to-tormore, LSPpath: Primary&lt;br /&gt;
  LSPtype: Static Configured&lt;br /&gt;
  Resv style: 1 FF, Label in: -, Label out: '''301168'''&lt;br /&gt;
&lt;br /&gt;
На транзитных будет swap и pop с метками для LSP.&lt;br /&gt;
&lt;br /&gt;
Egress:&lt;br /&gt;
 tormore&amp;gt; show route label 800004  &lt;br /&gt;
 mpls.0: 15 destinations, 15 routes (15 active, 0 holddown, 0 hidden)&lt;br /&gt;
 + = Active Route, - = Last Active, * = Both&lt;br /&gt;
 '''800004'''             *[L2VPN/7] 00:05:53&lt;br /&gt;
                    &amp;gt; via ge-0/0/0.850, Pop       Offset: 4&lt;br /&gt;
&lt;br /&gt;
=Stitching=&lt;br /&gt;
Для ститчинга VPN можно использовать ''iw-interface'' или ''lt-interface''.&lt;br /&gt;
&lt;br /&gt;
В конфиге iw-interface можно задать только инкапсуляции:&lt;br /&gt;
  ethernet-ccc         Ethernet for a cross-connect&lt;br /&gt;
  frame-relay-ccc      Frame Relay DLCI for CCC&lt;br /&gt;
  ppp-ccc              Serial PPP device for a cross-connect&lt;br /&gt;
  vlan-ccc             802.1q tagging for a cross-connect&lt;br /&gt;
Соответственно он работает только для ститчинга L2VPN (разных типов) между собой.&lt;br /&gt;
&lt;br /&gt;
Если хочется объединить L2VPN+VPLS, или L2VPN+L3VPN, то это делается при помощи ''lt-interface''.&lt;br /&gt;
&lt;br /&gt;
==L2VPN BGP (Kompella)==&lt;br /&gt;
[[Файл:L2VPN_stitching.png|1024px]]&lt;br /&gt;
&lt;br /&gt;
Можно объединить два L2VPN, используя '''stitching''' в виде '''interworking interface''' (или иногда используют ''logical-tunnel'', кот требует физического включения на оборудовании и специальную плату):&lt;br /&gt;
*задаем interface iw.0 внутри [edit interfaces], encapsulation и vlan-id должны быть как и для удаленных концов VPN&lt;br /&gt;
 [interfaces]&lt;br /&gt;
    iw0 {&lt;br /&gt;
        unit 0 {&lt;br /&gt;
            encapsulation vlan-ccc;&lt;br /&gt;
            vlan-id 10;&lt;br /&gt;
            peer-unit 1;}&lt;br /&gt;
        unit 1 {&lt;br /&gt;
            encapsulation vlan-ccc;&lt;br /&gt;
            vlan-id 10;&lt;br /&gt;
            peer-unit 0; }}&lt;br /&gt;
*создаем RI, которые нужно будет скрепить между собой, добавляя в них interface iw0:&lt;br /&gt;
 [routing-instances]&lt;br /&gt;
    bear {&lt;br /&gt;
        instance-type l2vpn;&lt;br /&gt;
        interface iw0.1;&lt;br /&gt;
        route-distinguisher 10.200.86.5:999;&lt;br /&gt;
        vrf-target target:1111:999;&lt;br /&gt;
        protocols {&lt;br /&gt;
            l2vpn {&lt;br /&gt;
                encapsulation-type ethernet-vlan;&lt;br /&gt;
                site dalw {&lt;br /&gt;
                    site-identifier 5;&lt;br /&gt;
                    interface iw0.1 {&lt;br /&gt;
                        remote-site-id 8; }}}}}&lt;br /&gt;
    fox {&lt;br /&gt;
        instance-type l2vpn;&lt;br /&gt;
        interface iw0.0;&lt;br /&gt;
        route-distinguisher 10.200.86.5:8765;&lt;br /&gt;
        vrf-target target:1111:8765;&lt;br /&gt;
        protocols {&lt;br /&gt;
            l2vpn {&lt;br /&gt;
                encapsulation-type ethernet-vlan;&lt;br /&gt;
                site dalw {&lt;br /&gt;
                    site-identifier 5;&lt;br /&gt;
                    interface iw0.0 {&lt;br /&gt;
                        remote-site-id 3; }}}}}}&lt;br /&gt;
*включаем l2iw protocol:&lt;br /&gt;
 [protocols]&lt;br /&gt;
    l2iw;&lt;br /&gt;
{{note|text=При выключении protocols l2iw наш ститчинг проложит работать. После выключения и перезагрузки роутера - перестанет работать. Работоспособность восстановится только после повторного включения l2iw.}}&lt;br /&gt;
Проверяем:&lt;br /&gt;
 dalwhinnie&amp;gt; show l2vpn connections &lt;br /&gt;
 Instance: bear&lt;br /&gt;
  Local site: dalw (5)&lt;br /&gt;
    connection-site           Type  St     Time last up          # Up trans&lt;br /&gt;
    8                         rmt   Up     Feb  9 12:52:35 2017           1&lt;br /&gt;
      Remote PE: 10.200.86.8, Negotiated control-word: Yes (Null)&lt;br /&gt;
      Incoming label: 800005, Outgoing label: 800006&lt;br /&gt;
      Local interface: iw0.1, Status: Up, Encapsulation: VLAN&lt;br /&gt;
 Instance: fox&lt;br /&gt;
  Local site: dalw (5)&lt;br /&gt;
    connection-site           Type  St     Time last up          # Up trans&lt;br /&gt;
    3                         rmt   Up     Feb  9 12:52:35 2017           1&lt;br /&gt;
      Remote PE: 10.200.86.3, Negotiated control-word: Yes (Null)&lt;br /&gt;
      Incoming label: 800006, Outgoing label: 800006&lt;br /&gt;
      Local interface: iw0.0, Status: Up, Encapsulation: VLAN&lt;br /&gt;
&lt;br /&gt;
==L2VPN LDP (Martini)==&lt;br /&gt;
iw interface и протокол l2iw - задаются аналогично, конфигурация l2circuit:&lt;br /&gt;
 [protocols l2circuit]&lt;br /&gt;
    neighbor 10.200.86.3 {&lt;br /&gt;
        interface iw0.0 {&lt;br /&gt;
            virtual-circuit-id 10;&lt;br /&gt;
            encapsulation-type ethernet-vlan; }}&lt;br /&gt;
    neighbor 10.200.86.8 {&lt;br /&gt;
        interface iw0.1 {&lt;br /&gt;
            virtual-circuit-id 10;&lt;br /&gt;
            encapsulation-type ethernet-vlan;}}}&lt;br /&gt;
&lt;br /&gt;
 dalwhinnie&amp;gt; show l2circuit connections &lt;br /&gt;
 Neighbor: 10.200.86.3 &lt;br /&gt;
    Interface                 Type  St     Time last up          # Up trans&lt;br /&gt;
    iw0.0(vc 10)              rmt   Up     Feb 11 15:51:15 2017           1&lt;br /&gt;
      Remote PE: 10.200.86.3, Negotiated control-word: Yes (Null)&lt;br /&gt;
      Incoming label: 299872, Outgoing label: 300832&lt;br /&gt;
      Negotiated PW status TLV: No&lt;br /&gt;
      Local interface: iw0.0, Status: Up, Encapsulation: VLAN&lt;br /&gt;
 Neighbor: 10.200.86.8 &lt;br /&gt;
    Interface                 Type  St     Time last up          # Up trans&lt;br /&gt;
    iw0.1(vc 10)              rmt   Up     Feb 11 15:51:16 2017           1&lt;br /&gt;
      Remote PE: 10.200.86.8, Negotiated control-word: Yes (Null)&lt;br /&gt;
      Incoming label: 299888, Outgoing label: 300128&lt;br /&gt;
      Negotiated PW status TLV: No&lt;br /&gt;
      Local interface: iw0.1, Status: Up, Encapsulation: VLAN&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Kompella + Martini==&lt;br /&gt;
Опять же interface iw0 и protocols l2iw - такие же.&lt;br /&gt;
 [protocols l2circuit]&lt;br /&gt;
    neighbor 10.200.86.3 {&lt;br /&gt;
        interface iw0.0 {&lt;br /&gt;
            virtual-circuit-id 10;&lt;br /&gt;
            encapsulation-type ethernet-vlan; }}&lt;br /&gt;
 [routing-instances bear]&lt;br /&gt;
    instance-type l2vpn;&lt;br /&gt;
    interface iw0.1;&lt;br /&gt;
    route-distinguisher 10.200.86.5:999;&lt;br /&gt;
    vrf-target target:1111:999;&lt;br /&gt;
    protocols {&lt;br /&gt;
        l2vpn {&lt;br /&gt;
            encapsulation-type ethernet-vlan;&lt;br /&gt;
            site dalw {&lt;br /&gt;
                site-identifier 5;&lt;br /&gt;
                interface iw0.1 {&lt;br /&gt;
                    remote-site-id 8;}}}}}&lt;br /&gt;
&lt;br /&gt;
==Дополнительная информация==&lt;br /&gt;
*[[VPLS]]&lt;br /&gt;
*[[EVPN]]&lt;br /&gt;
*[[Реализация MPLS в ядре сети]]&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=L3VPN&amp;diff=2050</id>
		<title>L3VPN</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=L3VPN&amp;diff=2050"/>
		<updated>2021-07-15T18:30:42Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#description2:L3VPN Control plane. Конфигурация L3VPN. Route distinguisher. Route target. VRF-import/export. Sham-link. L3VPN IPv6. Протечка маршрутов между L3VPN. Hub-and-spoke топология. QoS в L3VPN. Доступ в интернет в L3VPN. Информация для подготовки к экзаменам Juniper.}}&lt;br /&gt;
&lt;br /&gt;
=Routing (Control plane)=&lt;br /&gt;
VPN-IPv4 NLRI format - только control plane:&lt;br /&gt;
MPLS label | Type | Administrator | Assigned Number | IPv4 Prefix | Mask&lt;br /&gt;
&lt;br /&gt;
*'''Mask''' : /32 = /120&lt;br /&gt;
*'''Route Distinguisher''': Type | Administrator | Assigned Number&lt;br /&gt;
*: Administrator - может быть двух типов: 2-байт (AS number), 4-byte (router ID = Lo0 address).&lt;br /&gt;
&lt;br /&gt;
'''RD''' решает проблему с пересечением маршрутов между разными клиентами.&lt;br /&gt;
&lt;br /&gt;
Уникальность RD:&lt;br /&gt;
*для L2VPN и VPLS c l2vpn-use-bgp-rules - обязательно уникальный RD. &lt;br /&gt;
*для L2VPN и VPLS с mesh-group - обязательно уникальный RD.&lt;br /&gt;
*для других типов VPN - не обязательно! НО горячо рекомендуется делать RD уникальным (для разных PE в рамках одного RI) - так будет однозначно понятно от какого PE прилетел NLRI.&lt;br /&gt;
&lt;br /&gt;
automatic RD:&lt;br /&gt;
 set routing-options route-distinguisher-id 172.30.5.3&lt;br /&gt;
&lt;br /&gt;
Если внутри RI будет все же указан RD, то для построения VPN будет использован более специфический RD (тот что внутри routing-instance).&lt;br /&gt;
&lt;br /&gt;
'''RT''' решает проблему распространения маршрутов, задает топологию отдельного VPN.&lt;br /&gt;
Имеет такую же структуру как и RD. &lt;br /&gt;
&lt;br /&gt;
Определяет какому клиенту принадлежит префикс (routing-instance = routing-table конкретного клиента).&lt;br /&gt;
&lt;br /&gt;
Прикрепляется к маршруту либо явно внутри VPN, либо через export policy - более гибкий метод, при котором можно создавать разные топологии.&lt;br /&gt;
&lt;br /&gt;
С помощью import policy либо явно заданного RT, можно принимать либо нет маршруты с определенным RT.&lt;br /&gt;
&lt;br /&gt;
'''Routing tables''':&lt;br /&gt;
*'''inet.0''': IGP, IBGP learned routes.&lt;br /&gt;
*'''inet.3''': RSVP/LDP learned Lo0 ip addresses.&lt;br /&gt;
*'''mpls.0''': MPLS forwarding info&lt;br /&gt;
*''' ''vpn-name''.inet.0''': все unicast IPv4 локального CE, статические маршруты внутри VRF, маршруты от remote PE.&lt;br /&gt;
*'''bgp.l3vpn.0''': все VPN-IPv4 NLRI маршруты от удаленных PE.&lt;br /&gt;
&lt;br /&gt;
 Не важно LDP или RSVP будет у вас на сети. Можно использовать оба, можно использовать какой-то один. Главное, чтобы были Lo PE-роутеров в net.3&lt;br /&gt;
&lt;br /&gt;
Рассмотрим такую схему: &lt;br /&gt;
 CE1 &amp;lt;static&amp;gt; PE1 &amp;lt;mpls&amp;gt; P &amp;lt;mpls&amp;gt; PE2 &amp;lt;static&amp;gt; CE2&lt;br /&gt;
&lt;br /&gt;
Между CE и PE - маршрутизация (static, bgp, ospf). CE присылает свои префиксы, но ISP должен отделить эти префиксы от других и поместить с отдельную таблицу. Для этого клиент заводится в ''routing-instance'' ('''vrf''').&lt;br /&gt;
&lt;br /&gt;
PE должен передать принятые префиксы от клиента другому PE на удаленный конец, и затем отдать их удаленному CE2. Используем iBGP между PE. В момент отправки префиксов с PE, нужно пометить их. Добавляем некое число - '''route-destinguisher (RD)''' - не идентифицирует клиента, просто делает префикс уникальным внутри процесса BGP. RD должен быть уникальным в пределах всей сети, поэтому зачастую используют ''IDrouter:число''. RD - часть NLRI.&lt;br /&gt;
&lt;br /&gt;
Типы RD: &lt;br /&gt;
#AS[2 byte]:идентификатор клиента[4 byte]&lt;br /&gt;
#AS[4 byte]:идентификатор клиента[2 byte] &lt;br /&gt;
#router-ID[4 byte]:идентификатор клиента[2 byte] - можно руками не задавать, а поручить это маршрутизатору.&lt;br /&gt;
&lt;br /&gt;
В inet.0 хранятся IPv4, не получится туда залить наши префиксы, т.к. они имеют совсем другую структуру.&lt;br /&gt;
&lt;br /&gt;
NLRI - абстрактная структура данных. Роутеры до установления сессии должны совпадать хотя бы по 2-м ''address family''.&lt;br /&gt;
&lt;br /&gt;
Включаем ''protocols bgp family inet-vpn any'' - только после этого BGP будет способен передавать новые NLRI.&lt;br /&gt;
По умолчанию, если в конфиге указывается какая-то конкретная family, то требуется указать '''все''' family, которые будут передаваться через MP-BGP. То есть добавляем сюда и ''family inet'' обязательно. &lt;br /&gt;
&lt;br /&gt;
Под новые NLRI создается своя таблица: ''bgp.l3vpn.0''. Префиксы хранятся вместе с RD. Таблица используется только на control plane, не для форвардинга.&lt;br /&gt;
&lt;br /&gt;
Для форвардинга будет использоваться отдельная таблица для VRF. В ней префиксы будут храниться в обычном IPv4 формате. Для этого нужно убрать RD и разложить префиксы по нужным VRF. То есть в сети должен существовать некий идентификатор клиента.&lt;br /&gt;
&lt;br /&gt;
'''Route target (RT)''' -  не часть NLRI, это атрибут, который передается внутри объекта вместе с NLRI. RT - ''extended community типа 2''. По сути будет определять какому VRF относится префикс.&lt;br /&gt;
&lt;br /&gt;
С помощью RT можно для клиента обеспечить связность не только full mesh, но и более сложные топологии: 1 ко всем, 2 между собой, 3-й только с конкретным сайтом.&lt;br /&gt;
&lt;br /&gt;
NLRI с RT прилетает на удаленный PE, префикс запихивается в нужный VRF, убирается RD, сохраняем префикс в виде IPv4. По настроенному протоколу PE&amp;lt;&amp;gt;CE передает префикс CE.&lt;br /&gt;
&lt;br /&gt;
'''BGP''': по дефолту передает только маршруты, полученные по BGP. Но с VRF другое поведение: если конфигурируем VRF и в VRF пишет target, а не policy, то роутер берет все маршруты из этого VRF, присоединяет к ним target, и отправляет по MP-BGP.&lt;br /&gt;
&lt;br /&gt;
Когда проанонсированный префикс прилетает соседу (используя vpn family), тот: смотрит на target, ищет у себя target. Если VRF с таким target нет, то BGP-update отбрасывается (даже не попадают в hidden), он не знает в какую таблицу его запихнуть. Как проверить, что все-таки update прилетает: включить ''traceoptions''. Т.е. на P роутере prefix клиента отбросится. Но до PE2 по iBGP все-равно анонс долетит, но будет скрытым (не отрезолвился next-hop, он не попал в inet.3). Если prefix все-таки не прилетает даже в hidden, то скорей всего '''проблема с RT'''.&lt;br /&gt;
&lt;br /&gt;
=Forwarding=&lt;br /&gt;
Допустим, к CE1 подключено устройство с default route, пакет идет на CE1. CE1 по BGP передает трафик к PE1. На PE1 пакет попадает в ''vrf1.table.inet.0'', т.к. на PE1 интерфейс в сторону CE1 добавлен в VRF клиента. Forwarding next-hop: P-router (по IGP). P-router принимает пакет и не знает что с ним дальше делать. '''Схема не рабочая'''&lt;br /&gt;
&lt;br /&gt;
Будем туннелировать пакеты от PE1 (не обязательно в mpls). Но рассматриваем mpls. &lt;br /&gt;
* LSP на PE1 в inet.3: PE2: push 20 -&amp;gt; P. BGP резолвит next-hop для PE2, подставляет в inet.0. &lt;br /&gt;
* P смотрит в mpls.0: 20 pop. &lt;br /&gt;
* На PE2 прилетает голый ip пакет. PE2 делает lookup в ''inet.0'', т.к. интерфейс, с которого пришел пакет - принадлежит master RI и сам пакет - просто ip. В inet.0 не будет нужного маршрута =&amp;gt; тоже ''схема не рабочая''.&lt;br /&gt;
&lt;br /&gt;
Делаем так, чтобы PE2 понял, что lookup нужно производить внутри VRF. RT и RD не проканают, т.к. они существуют только на уровне control plane, и не причастны к передаче трафика.&lt;br /&gt;
&lt;br /&gt;
Какой-нибудь header можем использовать как идентификатор, что нужно смотреть в определенной таблице. Берем MPLS заголовок. &lt;br /&gt;
* Исходный VRF каждому пакету выделяет уникальную для себя метку. Пакет будет иметь следующий вид: '''label:RD:prefix/mask'''. &lt;br /&gt;
* Добавлять метку будет egress, удаленный PE2 роутер. Поэтому выделенную метку нужно проанонсировать с PE1 на PE2 по MP-BGP. Family vpn: label:prefix/mask. &lt;br /&gt;
* Т.к. на PE2 префикс прилетает с меткой (смотрим в таблицу bgp.l3vpn ''vpn label''), то для PE2 это означает, что с другой стороны пакеты ждут с этой меткой. Т.е. PE2 добавляет выделенную метку, затем resolve next-hop. В нашем случае произойдет следующее: push 20 (для LSP) push 50 (для VRF) -&amp;gt; P. &lt;br /&gt;
* На P делается 20 pop. &lt;br /&gt;
* На PE1 приходит пакет: 50:RD:prefix/mask. Пакет попадает в mpls.0, где должна быть запись: 50: pop -&amp;gt; vrf1. Такая запись будет создана, как только будет создан сам VRF (ему назначается определенная метка и запись инсталлируется в mpls.0). &lt;br /&gt;
* На PE1 далее метка снимается, RD снимается, пакет идет на второй lookup внутри таблицы vrf1. И далее пакет направляется к нужному next-hop, согласно таблицы vrf1.&lt;br /&gt;
&lt;br /&gt;
На PE2 делается 2 lookup.&lt;br /&gt;
&lt;br /&gt;
Такая схема будет работать только если включить '''vrf-table-label'''.&lt;br /&gt;
&lt;br /&gt;
В каких случаях нам может потребоваться делать второй lookup внутри VRF: если хотим осуществлять какие-то дополнительные функции для клиентов на основании ip внутри VRF - посчитать трафик, пофильтровать, пополисить... по ip заголовку. '''vrf-table-label''' заставляет роутер назначать метку на VRF и делать второй lookup. В основном этой схемой и пользуются. При включенном '''vrf-table-label''' PE начинает передавать Direct маршруты RR (или ibgp PE) &lt;br /&gt;
&lt;br /&gt;
Но на самом деле Juniper по дефолту работает так: метка назначается не на VRF, а на next-hop, с которого исходно пришли клиентские маршруты. Каждому next-hop своя метка. Т.о. на PE2 в mpls.0: 51 pop -&amp;gt; CE1 next-hop, 52 pop -&amp;gt; CE2 next-hop. Это позволяет не делать второй lookup.&lt;br /&gt;
&lt;br /&gt;
Cisco по дефолту назначает метки для prefix. Но это не очень удобно, когда от клиента приходит много префиксов и тем самым занимается ASIC для хранения всех этих меток.&lt;br /&gt;
&lt;br /&gt;
When using network commands like ping, traceroute, and ssh, the routing-instance switch is used to specify the routing table that should be used to forward packets for the session. By default, the router will use the inet.O table not the VRF table.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
By default, an egress PE that has an Ethernet VRF interface cannot perform both a pop of the MPLS label and an ARP for packets that come from the core. Therefore, an ARP must be performed by the egress router prior to receiving packet from the core. This can be achieved simply by receiving at least one route from the connected CE (which causes an ARP to occur to determine next hop). Also, a static route can be configured within the VRF instance that points to the connected CEo This is generally sufficient. However, if it is necessary to ping the VRF interface without adding routes to the VRF table, vrf-table-label or a VT interface can be used to allow for both a pop and ARP operation by the egress router.&lt;br /&gt;
&lt;br /&gt;
[[Файл:l3vpn_labels.png]]&lt;br /&gt;
&lt;br /&gt;
==GRE==&lt;br /&gt;
Если вдруг вместо MPLS для форвардинга используется GRE, то:&lt;br /&gt;
*gre-туннули должны быть добавлены в inet.3 (т.к. VPN ревозвится в net.3)&lt;br /&gt;
*на туннельных интерфейсах должен быть включен MPLS (для лукапа меток под клиентский VPN (RI))&lt;br /&gt;
&lt;br /&gt;
=Config (минимальный для VRF, PE&amp;lt;&amp;gt;CE - static)=&lt;br /&gt;
 routing-instances {&lt;br /&gt;
    rabbit {&lt;br /&gt;
        instance-type vrf;&lt;br /&gt;
        interface ge-0/0/0.10;&lt;br /&gt;
        route-distinguisher 10.200.86.5:0001;&lt;br /&gt;
        vrf-target target:1111:0001;&lt;br /&gt;
        routing-options {&lt;br /&gt;
            static {&lt;br /&gt;
                route 11.11.11.11/32 next-hop 192.168.55.2;}}}}&lt;br /&gt;
&lt;br /&gt;
 bgp {&lt;br /&gt;
        group in {&lt;br /&gt;
            type internal;&lt;br /&gt;
            local-address 10.200.86.5;&lt;br /&gt;
            family inet {&lt;br /&gt;
                any;}                           &lt;br /&gt;
            family inet-vpn {&lt;br /&gt;
                any;}&lt;br /&gt;
            neighbor 10.200.86.3;&lt;br /&gt;
            neighbor 10.200.86.1;}}&lt;br /&gt;
 mpls {&lt;br /&gt;
        label-switched-path dalw-oban {&lt;br /&gt;
            to 10.200.86.3;&lt;br /&gt;
&lt;br /&gt;
=VRF-import / VRF-export=&lt;br /&gt;
Если требуется передача не всех маршрутов, а специфических маршрутов, то вместо vrf-target будем использовать vrf-import/vrf-export.&lt;br /&gt;
&lt;br /&gt;
- import политика может применяться несколько. '''Должен быть''' последний term: the reject. Исключение - если вся политика - это then reject. &lt;br /&gt;
&lt;br /&gt;
- export политика тоже должна иметь последний term: the reject. Лучше делать then community [target] '''add'''. &lt;br /&gt;
&lt;br /&gt;
Export политики на ibgp сессии между PE (или PE-RR) не влияют на передачу маршрутов в рамках vrf. Если хочется, чтобы export policy на BGP сессии также играло роль - включаем:&lt;br /&gt;
 set protocols bgp (group|neighbor) vpn-apply-export &lt;br /&gt;
Сначала отработает VRF, потом BGP.&lt;br /&gt;
&lt;br /&gt;
Для l2vpn в vrf-export нужно делать then community add [не set], потому что при настроенном set затрутся служебные L2-info extended community.&lt;br /&gt;
&lt;br /&gt;
Пример настройки:&lt;br /&gt;
 blair&amp;gt; show configuration routing-instances oak    &lt;br /&gt;
 instance-type vrf;&lt;br /&gt;
 interface ge-0/0/0.600;  &lt;br /&gt;
 route-distinguisher 10.200.86.1:100;&lt;br /&gt;
 '''vrf-import import-to-oak''';&lt;br /&gt;
 '''vrf-export export-from-oak''';&lt;br /&gt;
&lt;br /&gt;
 blair&amp;gt; show configuration policy-options&lt;br /&gt;
 policy-statement '''export-from-oak''' {&lt;br /&gt;
   term 1 {&lt;br /&gt;
        from {&lt;br /&gt;
            route-filter 172.17.0.0/24 orlonger;&lt;br /&gt;
        then {&lt;br /&gt;
            community add ''vpn-oak'';&lt;br /&gt;
            accept;&lt;br /&gt;
    term defaul {                       &lt;br /&gt;
        then reject;&lt;br /&gt;
 policy-statement '''import-to-oak''' {&lt;br /&gt;
    term 1 {&lt;br /&gt;
        from {&lt;br /&gt;
            community ''vpn-oak'';&lt;br /&gt;
            route-filter 172.17.0.0/24 orlonger;&lt;br /&gt;
        then accept;&lt;br /&gt;
    term defaul {&lt;br /&gt;
        then reject;&lt;br /&gt;
 community ''vpn-oak'' members target:1111:100;&lt;br /&gt;
&lt;br /&gt;
Либо можно использовать такой вариант, если нужны просто разные target на import и export: &lt;br /&gt;
 blair# set routing-instances test vrf-target import target:1111:100    &lt;br /&gt;
 blair# set routing-instances test vrf-target export target:1111:101&lt;br /&gt;
==Route-origin==&lt;br /&gt;
По сути имеет только вид extended-community, но функционально не отличается от обычного. Обращаться с ним как с обычным! &lt;br /&gt;
 policy-options {&lt;br /&gt;
 community my-soo { &lt;br /&gt;
 members origin:100:1;&lt;br /&gt;
==Route-target filtering==&lt;br /&gt;
Уменьшает кол-во служебного трафика. По сути удаленный PE-&amp;gt;PE [или RR-&amp;gt;PE] посылает только маршруты тех vrf, которые запрашивает локальный PE.&lt;br /&gt;
&lt;br /&gt;
По дефолту на локальный PE приходят маршруты '''всех''' vrf на сети и устанавливаются в таблицы vrf только те, target которых есть на локальном роутере.&lt;br /&gt;
&lt;br /&gt;
Используется таблица: bgp.rtarget.0. Предаются новые target NLRI вида: 200:200:102/96 = as:rt/mask&lt;br /&gt;
&lt;br /&gt;
На локальном PE, где был создан vrf, сразу генерируется NLRI на основании vrf-import target. Остальные PE [или RR] узнают префиксы каких vrf слать этому PE.&lt;br /&gt;
&lt;br /&gt;
Фильтрация включается на ibgp сессии между PE [или на ibgp c RR]. Ну понятно, что при включении новой family сессия флапает, так что осторожней!&lt;br /&gt;
&lt;br /&gt;
Можно задавать дополнительные параметры:&lt;br /&gt;
 family route-target {  &lt;br /&gt;
     advertise-default; &lt;br /&gt;
     external-paths number; &lt;br /&gt;
     prefix-limit number;&lt;br /&gt;
&lt;br /&gt;
=CE&amp;lt;&amp;gt;PE eBGP=&lt;br /&gt;
В настройке особенностей нет, но возникают проблемы с AS.&lt;br /&gt;
&lt;br /&gt;
У клиента одна и та же AS с двух сторон (AS 65000) =&amp;gt; PE1 (AS 10) получает префикс с AS-path 65000 * =&amp;gt; на PE2 сработает split horizing, и он не будет анонсировать CE2 =&amp;gt; решаем проблему.&lt;br /&gt;
&lt;br /&gt;
# На PE1 в VRF под протоколом BGP: ''advertise peer-as'' - отключает split horizont. AS path поменяется: 10 65000 *. СЕ2 принимает маршрут, но должен его отбросить, т.к. в AS-path видит свою AS =&amp;gt; на CE2 отключаем проверку на loop: ''routing-options autonomous-system loops 2''.&lt;br /&gt;
# На РЕ1 в VRF под протоколом BGP '''group &amp;lt;*&amp;gt;''': ''as-override'' - отключает split horizing  + ищет в AS-path соседскую AS и заменяет ее на свою. Новый AS-path: 10 10. На CE2 проблемы не возникнет.  '''переустанавливает сессию'''. &lt;br /&gt;
# Если у клиента private AS =&amp;gt; ''remove private''. Можно включить во всех уровнях иерархии. Удаление private AS происходит при передаче маршрута (не приеме). Удаляет левую крайнюю private AS. Если после нее идет public AS, то на этом механизм останавливается и не ищет private AS далее. В случае, если хотим передать ebgp пиру с private AS префикс, где уже указана его AS, то роутер не будет удалять private AS, а следовательно и передавать префикс пиру. То есть по факту для решения проблем с лупами AS в рамках l3vpn лучше использовать - as-override. no-peer-loop-check - позволяет удалить private AS даже в таком случае (c 15.1 ветки)&lt;br /&gt;
# На PE1 внутри VRF настраиваем AS CE1: ''routing-options autonomous-system &amp;lt;AS-CE1&amp;gt;'' + ''routing-instance &amp;lt;instance&amp;gt; routing-options autonomous-system independent-domain'' - исходные атрибуты BGP от CE1 сохраняются в новый атрибут: ''outer-set'', который добавится при анонсе в iBGP провайдера. На PE2 тоже настраиваем ''independent-domain'', который раскроет ''outer-set''. Т.о. при передаче префикса CE2 AS-path не будет заполнен (при iBGP AS-path пустой). Внутри VRF настраиваем ''internal BGP''. Также этот способ дает возможность сохранить ''local-preference'' от CE1.&lt;br /&gt;
&lt;br /&gt;
=CE&amp;lt;&amp;gt;PE OSPF=&lt;br /&gt;
==Общие сведения об OSPF==&lt;br /&gt;
*Внутри area - LSA1 (router), LSA2(network) - описание топологии.&lt;br /&gt;
*Между area - LSA3 (summary) - внутренние сети.&lt;br /&gt;
*LSA 5 (external) - внешние маршруты.&lt;br /&gt;
&lt;br /&gt;
Внутренний порядок выбора маршрутов, до попадания в routing-table:&lt;br /&gt;
*intra-area (LSA1, LSA2)&lt;br /&gt;
*inter-area (LSA3)&lt;br /&gt;
*external (LSA5)&lt;br /&gt;
&lt;br /&gt;
Split horizont: area 0 - центральная. Все остальные area могут подключаться только через area 0. Все, что пришло из некой внешней area - не передается в area 0, т.к. оно впринцепе может прийти только из area 0.&lt;br /&gt;
&lt;br /&gt;
==Sham-link==&lt;br /&gt;
Если все это применить к L3VPN. &lt;br /&gt;
&lt;br /&gt;
Внутри VRF настраиваем OSPF, включаем в него интерфейс в сторону клиента. В core - iBGP, LSP.&lt;br /&gt;
#A: отправляет свой Lo 10.0.0.1 в area как LSA1.&lt;br /&gt;
#PE1: в RI попадает 10.0.0.1 как LSA3. &lt;br /&gt;
#PE1: inet.0: 10.0.0.1/32 - [OSPF] -&amp;gt; A.&lt;br /&gt;
#Все маршруты из RI передаются по iBGP.&lt;br /&gt;
#PE2 получит анонос сети 10.0.0.1/32 ререз BGP. vrf.inet.0: 10.0.0.1/32 - [BGP] -&amp;gt; LSP.&lt;br /&gt;
#Требуется сеть из BGP передать по OSPF. Пишем policy.&lt;br /&gt;
#PE2 из RI сеть будет передаваться к клиенту как LSA3.&lt;br /&gt;
*'''!!Проблема 1:''' при поднятии OSPF клиенту требуется одна area.&lt;br /&gt;
*'''!!Проблема 2:''' по факту клиенту требуется объединить 2 своих роутера в одну сеть =&amp;gt; маршруты от СЕ1 должны приходить как LSA1.&lt;br /&gt;
Делаем так, чтобы из PE2 VRF к клиенту вылетела LSA1.&lt;br /&gt;
LSA1 содержит в себе линки, а мы при передаче от клиента к RI превратили эту информацию в маршруты, которые дальше стали анонсироваться по BGP. Из маршрутов линки обратно сделать не получится. Как исправить?&lt;br /&gt;
#Придумать новый NLRI, повторяющий структуру LSA1. Но ведь итак для L3VPN уже есть свой NLRI, засовывать в него еще NLRI - уже страшно. Поэтому...&lt;br /&gt;
#PE1 и PE2 требуется соединить с помощью sham-link. Роутеры при этом будут как бы в одной area и будут флудить между собой LSA1.&lt;br /&gt;
&lt;br /&gt;
'''Задаем sham-link:'''&lt;br /&gt;
#Создаем отдельный unit на Lo, заносим его в RI. PE1: 1.1.1.1, PE2: 1.1.1.2&lt;br /&gt;
#Указываем local-end, remote-end.&lt;br /&gt;
#Чтобы роутеры установили соседство - нужно отправить hello в LSP (между PE) =&amp;gt; Lo уделанного PE мы должны получить по iBGP.&lt;br /&gt;
 PE1: inet.0: 1.1.1.2 - [BGP] -&amp;gt; LSP.&lt;br /&gt;
{{note|text=Обязательно нужно в policy (vrf-import, vrf-export) добавить адреса Lo!!, иначе ничего не заработает.}}&lt;br /&gt;
Все заработало, к CE2 улетел LSA1.&lt;br /&gt;
&lt;br /&gt;
'''НО!''' произошло небольшое изменение: маршрут 10.0.0.1/32 прилетел на PE2 в RI, как известный по OSPF и был выбран активным.&lt;br /&gt;
 PE2: vrf.inet.0: &lt;br /&gt;
 *10.0.0.1/32 - [OSPF/10] -&amp;gt; shamlink.0&lt;br /&gt;
  10.0.0.1/32 - [BGP/170]  -&amp;gt; LSP&lt;br /&gt;
&lt;br /&gt;
При отправке пакета с dest = 10.0.0.1/32 будет также выбран маршрут, изученный по OSPF. Но shamlink - некая абстракция и в передаче трафика не участвует.&lt;br /&gt;
&lt;br /&gt;
На самом деле умный роутер делает все маршруты, доступные через shamlink - скрытыми, чтобы их нельзя было использовать. А изученные по BGP - станут активными.&lt;br /&gt;
&lt;br /&gt;
'''НО!''' на удаленный PE2 обязательно должен прийти маршрут CE1, полученные по BGP (для форвардинга) и OSFP (для распространения LSA1). В итоге на удаленном PE в ''vrf.inet.0'' должны быть hidden маршруты, изученные по ospf.&lt;br /&gt;
&lt;br /&gt;
-  Если используем vrf-target - то все само придет, т.к. при таком варианте передаются все маршруты, находящиеся в VRF.&lt;br /&gt;
&lt;br /&gt;
-  Если используем policy, то нужно не забыть, что OSPF маршрут нужно отправить по BGP на удаленный PE.&lt;br /&gt;
&lt;br /&gt;
''Sham-link'' годится только в случае, когда объединяются роутеры клиента в одной area и когда критично принимать именно LSA1, как было бы без вмешательства ISP.&lt;br /&gt;
===Configuration===&lt;br /&gt;
[[Файл:CE-PE OSPF laba.png]]&lt;br /&gt;
 blair&amp;gt; show configuration routing-instances&lt;br /&gt;
 beer {&lt;br /&gt;
    instance-type vrf;&lt;br /&gt;
    interface ge-0/0/0.510;&lt;br /&gt;
    '''interface lo0.1''';&lt;br /&gt;
    route-distinguisher 10.200.86.1:500;&lt;br /&gt;
    vrf-target target:1111:500;&lt;br /&gt;
    protocols {&lt;br /&gt;
        ospf {&lt;br /&gt;
            '''export beer-l3vpn;'''&lt;br /&gt;
            '''sham-link local 1.1.1.1;'''&lt;br /&gt;
            area 0.0.0.0 {&lt;br /&gt;
                '''sham-link-remote 2.2.2.2;'''&lt;br /&gt;
                interface ge-0/0/0.510 {&lt;br /&gt;
                    interface-type p2p;&lt;br /&gt;
                }&lt;br /&gt;
                interface lo0.1;&lt;br /&gt;
 blair&amp;gt; show configuration interfaces lo0.1&lt;br /&gt;
 family inet {&lt;br /&gt;
    address '''1.1.1.1/32;'''&lt;br /&gt;
Со стороны удаленного РЕ конфиг аналочигный.&lt;br /&gt;
&lt;br /&gt;
'''при использовании policy для vrf''':&lt;br /&gt;
 policy-statement export-rabbit { - '''полиси применяется для vrf-export внутри VRF'''&lt;br /&gt;
 	term 1 {&lt;br /&gt;
 		from {&lt;br /&gt;
 			route-filter 192.168.55.0/24 orlonger;&lt;br /&gt;
 			prefix-list CE-lo;}&lt;br /&gt;
 		then {&lt;br /&gt;
 			community set rabbit;&lt;br /&gt;
 			accept;}}&lt;br /&gt;
 	term 2 {&lt;br /&gt;
 		then reject;}}&lt;br /&gt;
 prefix-list CE-lo {&lt;br /&gt;
 	10.10.86.5/32; - '''sham-link'''&lt;br /&gt;
 	11.11.11.11/32; - '''Lo CE1'''&lt;br /&gt;
 	22.22.22.22/32; - '''Lo CE2'''&lt;br /&gt;
 	33.33.33.33/32; - '''Lo CE3'''}&lt;br /&gt;
 community rabbit members target:1111:0001;&lt;br /&gt;
&lt;br /&gt;
Также, если рассматривать топологию ospf домена клиента в целом, то наверняка между различными site, клиентские роутеры будут подключены не только через нашу сеть, но буду иметь дополнительные резервные/основные линки. Таким образом, клиент может попросить сделать линк через нашу сеть резервным/основным. Сделать это можно с помощью регулирования ospf-метрики на shamlink.&lt;br /&gt;
&lt;br /&gt;
 blair# set routing-instances beer protocols ospf area 0.0.0.0 '''sham-link-remote 2.2.2.2 metric 700'''&lt;br /&gt;
&lt;br /&gt;
===Проверка===&lt;br /&gt;
'''До включения ''sham-link'' '''&lt;br /&gt;
 blair&amp;gt; show ospf database instance beer&lt;br /&gt;
    OSPF database, Area 0.0.0.0&lt;br /&gt;
 Type       ID               Adv Rtr           Seq      Age  Opt  Cksum  Len&lt;br /&gt;
 Router   1.1.1.1          1.1.1.1          0x80000017    59  0x22 0x310f  60&lt;br /&gt;
 Router  *172.17.0.2       172.17.0.2       0x80000017    55  0x22 0xcffa  60&lt;br /&gt;
 '''Summary  172.17.0.1'''       1.1.1.1          0x80000004    39  0xa2 0x4ca9  28&lt;br /&gt;
    OSPF AS SCOPE link state database&lt;br /&gt;
 Type       ID               Adv Rtr           Seq      Age  Opt  Cksum  Len&lt;br /&gt;
 '''Extern   2.2.2.2'''          1.1.1.1          0x80000002    66  0xa2 0xa157  36&lt;br /&gt;
 Extern   192.168.86.52    1.1.1.1          0x80000004    39  0xa2 0x7697  36&lt;br /&gt;
&lt;br /&gt;
 blair&amp;gt; show route table beer.inet.0&lt;br /&gt;
 beer.inet.0: 8 destinations, 8 routes (8 active, 0 holddown, 0 hidden)&lt;br /&gt;
 + = Active Route, - = Last Active, * = Both&lt;br /&gt;
 1.1.1.1/32         *[Direct/0] 00:15:29&lt;br /&gt;
                    &amp;gt; via lo0.1&lt;br /&gt;
 2.2.2.2/32         *[BGP/170] 00:03:09, localpref 100, from 10.200.86.7&lt;br /&gt;
                      AS path: I&lt;br /&gt;
                    &amp;gt; to 192.168.86.10 via ge-0/0/0.60, label-switched-path blair-to-lagavulin&lt;br /&gt;
 172.17.0.1/32      *[BGP/170] 00:00:11, MED 1, localpref 100, from 10.200.86.7&lt;br /&gt;
                      AS path: I&lt;br /&gt;
                    &amp;gt; to 192.168.86.10 via ge-0/0/0.60, label-switched-path blair-to-lagavulin&lt;br /&gt;
 172.17.0.2/32      *[OSPF/10] 00:00:21, metric 1&lt;br /&gt;
                    &amp;gt; to 192.168.86.58 via ge-0/0/0.510&lt;br /&gt;
 192.168.86.52/30   *[BGP/170] 00:00:11, localpref 100, from 10.200.86.7&lt;br /&gt;
                      AS path: I&lt;br /&gt;
                    &amp;gt; to 192.168.86.10 via ge-0/0/0.60, label-switched-path blair-to-lagavulin&lt;br /&gt;
 192.168.86.56/30   *[Direct/0] 01:30:08&lt;br /&gt;
                    &amp;gt; via ge-0/0/0.510&lt;br /&gt;
 192.168.86.57/32   *[Local/0] 01:30:08&lt;br /&gt;
                      Local via ge-0/0/0.510&lt;br /&gt;
 224.0.0.5/32       *[OSPF/10] 01:30:11, metric 1&lt;br /&gt;
                      MultiRecv&lt;br /&gt;
'''После включения ''sham-link'' '''&lt;br /&gt;
 blair&amp;gt; show ospf neighbor instance beer&lt;br /&gt;
 Address          Interface              State     ID               Pri  Dead&lt;br /&gt;
 192.168.86.58    ge-0/0/0.510           Full      172.17.0.2       128    33&lt;br /&gt;
 2.2.2.2          shamlink.0             Full      2.2.2.2            0    3&lt;br /&gt;
&lt;br /&gt;
 blair&amp;gt; show ospf database instance beer&lt;br /&gt;
    OSPF database, Area 0.0.0.0&lt;br /&gt;
 Type       ID               Adv Rtr           Seq      Age  Opt  Cksum  Len&lt;br /&gt;
 Router  *1.1.1.1          1.1.1.1          0x8000001c     6  0x22 0x3b7b  60&lt;br /&gt;
 '''Router   2.2.2.2'''          2.2.2.2          0x80000017     7  0x22 0xdbe4  60&lt;br /&gt;
 '''Router   172.17.0.1'''       172.17.0.1       0x8000001f     8  0x22 0x3f8a  60&lt;br /&gt;
 Router   172.17.0.2       172.17.0.2       0x80000019     7  0x22 0xcbfc  60&lt;br /&gt;
    OSPF AS SCOPE link state database&lt;br /&gt;
 Type       ID               Adv Rtr           Seq      Age  Opt  Cksum  Len&lt;br /&gt;
 Extern   1.1.1.1          2.2.2.2          0x80000006     7  0xa2 0xa94b  36&lt;br /&gt;
 Extern  *2.2.2.2          1.1.1.1          0x80000005     6  0xa2 0x9b5a  36&lt;br /&gt;
&lt;br /&gt;
 blair&amp;gt; show route table beer.inet.0&lt;br /&gt;
 beer.inet.0: 8 destinations, 10 routes (8 active, 0 holddown, '''2 hidden''')&lt;br /&gt;
 1.1.1.1/32         *[Direct/0] 00:20:59&lt;br /&gt;
                    &amp;gt; via lo0.1&lt;br /&gt;
 2.2.2.2/32         *[BGP/170] 00:08:39, localpref 100, from 10.200.86.7&lt;br /&gt;
                      AS path: I&lt;br /&gt;
                    &amp;gt; to 192.168.86.10 via ge-0/0/0.60, label-switched-path blair-to-lagavulin&lt;br /&gt;
 '''172.17.0.1/32'''      *['''BGP'''/170] 00:03:14, MED 1, localpref 100, from 10.200.86.7&lt;br /&gt;
                      AS path: I&lt;br /&gt;
                    &amp;gt; to 192.168.86.10 via ge-0/0/0.60, label-switched-path blair-to-lagavulin&lt;br /&gt;
 172.17.0.2/32      *[OSPF/10] 00:03:28, metric 1&lt;br /&gt;
                    &amp;gt; to 192.168.86.58 via ge-0/0/0.510&lt;br /&gt;
 '''192.168.86.52/30'''   *['''BGP'''/170] 00:03:14, localpref 100, from 10.200.86.7&lt;br /&gt;
                      AS path: I&lt;br /&gt;
                    &amp;gt; to 192.168.86.10 via ge-0/0/0.60, label-switched-path blair-to-lagavulin&lt;br /&gt;
 192.168.86.56/30   *[Direct/0] 01:35:38&lt;br /&gt;
                    &amp;gt; via ge-0/0/0.510&lt;br /&gt;
 192.168.86.57/32   *[Local/0] 01:35:38&lt;br /&gt;
                      Local via ge-0/0/0.510&lt;br /&gt;
 224.0.0.5/32       *[OSPF/10] 01:35:41, metric 1&lt;br /&gt;
                      MultiRecv&lt;br /&gt;
&lt;br /&gt;
 blair&amp;gt; show route table beer.inet.0 hidden&lt;br /&gt;
 beer.inet.0: 8 destinations, 10 routes (8 active, 0 holddown, 2 hidden)&lt;br /&gt;
 '''172.17.0.1/32'''       ['''OSPF'''] 00:00:44, metric 2&lt;br /&gt;
                    &amp;gt; via '''shamlink.0'''&lt;br /&gt;
 '''192.168.86.52/30'''    ['''OSPF'''] 00:00:44, metric 2&lt;br /&gt;
                    &amp;gt; via '''shamlink.0'''&lt;br /&gt;
&lt;br /&gt;
*''' ''Если у клиента с двух сторон разные area:'' '''&lt;br /&gt;
т.к. соседство по OSPF должно быть внутри одной area, то shamlink не поднимется.&lt;br /&gt;
&lt;br /&gt;
По факту LSA3 и LSA5 - одинаковые по структуре - маршрут, но имеют разный приоритет при выборе активного пути.&lt;br /&gt;
&lt;br /&gt;
То есть в случае, когда у клиента разные area - предпринимать ничего не нужно, итак все заработает.&lt;br /&gt;
&lt;br /&gt;
==Domain ID==&lt;br /&gt;
OSPF Domain ID используется, когда передаются маршруты между одинаковыми или разными доменами через MPLS сеть. Domain ID передается как extended community внутри MP-BGP вместе с OSPF route-type и OSPF router ID community.&lt;br /&gt;
&lt;br /&gt;
Фича позволяет передавать на удаленный конец LSA1, LSA2, LSA3 как LSA3.&lt;br /&gt;
&lt;br /&gt;
Также передаются LSA5, LSA7 как LSA5.&lt;br /&gt;
&lt;br /&gt;
Stub и totally-stubby не поддерживают такую фичу.&lt;br /&gt;
&lt;br /&gt;
*''' ''Если у клиента:'' '''&lt;br /&gt;
#Одинаковые Domain ID.&lt;br /&gt;
#Есть другой протокол, из которого сеть пришла в OSPF как external.&lt;br /&gt;
#Внутри сети клиента по OSPF этот маршрут будет распространятся как LSA5.&lt;br /&gt;
#Между PE маршрут передается по iBGP, к удаленному PE приходит как LSA3.&lt;br /&gt;
&lt;br /&gt;
Как исправить:&lt;br /&gt;
&lt;br /&gt;
Вводится правило трансляции типов LSA: &lt;br /&gt;
*Если исходно маршрут пришел как LSA1, LSA2, LSA3 - его превращаем в LSA3. &lt;br /&gt;
*Если маршрут пришел как LSA5 - превращаем его в LSA5.&lt;br /&gt;
&lt;br /&gt;
Как удаленный PE узнает что было с другой стороны?&lt;br /&gt;
&lt;br /&gt;
BGP использует следующие extended community:&lt;br /&gt;
*OSPF route type - тип изначального LSA.&lt;br /&gt;
*OSPF Domain ID - обычно закодирован как 4 byte IP address&lt;br /&gt;
*OSPF router-id - требуется только при использовании ''sham-link''&lt;br /&gt;
&lt;br /&gt;
Генерируется автоматически. Когда iBGP передает OSPF маршрут, роутер смотрит как исходно пришел маршрут, создает для него соответствующее community, куда записывает тип LSA.&lt;br /&gt;
&lt;br /&gt;
Удаленный PE смотрит тип, применяет правило трансляции.&lt;br /&gt;
&lt;br /&gt;
РЕ генерирует LSA3, когда route type - internal и передает Domain ID community в соответствии в тем, какой сконфигурирован в RI.&lt;br /&gt;
&lt;br /&gt;
Если Domain ID не задан с обоих концов в VRF, то это тоже является совпадением по Domain ID.&lt;br /&gt;
&lt;br /&gt;
PE при передаче CE LSA также помечает из '''route tag'''. Пример: '''tag 3489662039'''. Рассчитывается автоматически, но можно и задать вручную.&lt;br /&gt;
 CE1&amp;gt; show route protocol ospf  &lt;br /&gt;
 inet.0: 14 destinations, 14 routes (14 active, 0 holddown, 0 hidden)&lt;br /&gt;
 1.1.1.1/32         *[OSPF/150] 18:38:53, metric 0, '''tag 3489662039'''&lt;br /&gt;
                    &amp;gt; to 192.168.86.53 via ge-0/0/0.500&lt;br /&gt;
 2.2.2.2/32         *[OSPF/150] 18:36:15, metric 0, '''tag 3489662039'''&lt;br /&gt;
                    &amp;gt; to 192.168.86.53 via ge-0/0/0.500&lt;br /&gt;
===Configuration===&lt;br /&gt;
 [edit policy-options policy-statement export-vpn-beer term 1 then]&lt;br /&gt;
        community add vpn-beer { ... }&lt;br /&gt;
 +      community add domain-beer;&lt;br /&gt;
 [edit policy-options policy-statement import-vpn-beer]&lt;br /&gt;
 +    from community domain-beer;&lt;br /&gt;
 [edit policy-options]&lt;br /&gt;
 +   community domain-beer members domain-id:1.1.1.1:0;&lt;br /&gt;
 [edit routing-instances beer]&lt;br /&gt;
 +    routing-options {&lt;br /&gt;
 +        router-id 10.200.86.7;&lt;br /&gt;
 +    }&lt;br /&gt;
 [edit routing-instances beer protocols ospf]&lt;br /&gt;
 +      domain-id 1.1.1.1;&lt;br /&gt;
&lt;br /&gt;
*''' ''Если у клиента разные домены:'' '''&lt;br /&gt;
Правило трансляции действует, когда домен одинаковый. При передаче пакета генерируется еще одно специальное community, которое говорит, на удаленном PE: все пришедшие маршруты - LSA5.&lt;br /&gt;
&lt;br /&gt;
Domain-ID одинаковые:&lt;br /&gt;
 blair&amp;gt; show ospf database instance beer             &lt;br /&gt;
    OSPF database, Area 0.0.0.0&lt;br /&gt;
 Type       ID               Adv Rtr           Seq      Age  Opt  Cksum  Len &lt;br /&gt;
 Router   172.17.0.2       172.17.0.2       0x80000035   103  0x22 0x4176  60 &lt;br /&gt;
 Router  *192.168.86.57    192.168.86.57    0x80000004   102  0x22 0x2a53  48&lt;br /&gt;
 '''Summary *172.17.0.1'''       192.168.86.57    0x80000003   102  0xa2 0xac55  28&lt;br /&gt;
&lt;br /&gt;
При изменении Domain-ID с одной стороны - несовпадение doamin-id =&amp;gt; маршруты прилетают как external (LSA5)&lt;br /&gt;
 blair&amp;gt; show ospf database instance beer    &lt;br /&gt;
    OSPF database, Area 0.0.0.0&lt;br /&gt;
 Type       ID               Adv Rtr           Seq      Age  Opt  Cksum  Len &lt;br /&gt;
 Router   172.17.0.2       172.17.0.2       0x80000038    23  0x22 0x3b79  60&lt;br /&gt;
 Router  *192.168.86.57    192.168.86.57    0x80000007    22  0x22 0x2456  48&lt;br /&gt;
    OSPF AS SCOPE link state database&lt;br /&gt;
 Type       ID               Adv Rtr           Seq      Age  Opt  Cksum  Len  &lt;br /&gt;
 '''Extern  *172.17.0.1'''       192.168.86.57    0x80000001    10  0xa2 0x4984  36&lt;br /&gt;
&lt;br /&gt;
*''' ''Если у клиента по краям нашего L3VPN - area1, которая в свою очередь подключается к area0 на сети клиента:'' '''&lt;br /&gt;
LSA3 дойдет до CE2 (area1), но ABR не отправит LSA3 в area0, т.к. это backbone area (splithorizing).&lt;br /&gt;
Поднимаем virtual-link.&lt;br /&gt;
&lt;br /&gt;
При использовании '''IS-IS''' все проще: редистрибьюция из BGP в ISIS. В любом случае в ISIS получим внешний маршрут.&lt;br /&gt;
=CE&amp;lt;&amp;gt;PE IPv6=&lt;br /&gt;
p2p CE&amp;lt;&amp;gt;PE - ipv6 адрес.&lt;br /&gt;
&lt;br /&gt;
на ядре MPLS на IPv4.&lt;br /&gt;
&lt;br /&gt;
Нужно передавать ipv6 трафик. &lt;br /&gt;
*Для этого на PE&amp;lt;&amp;gt;CE настраиваем обычную eBGP на p2p-адресах [в рамках vrf, конечно же].&lt;br /&gt;
*На сессии PE&amp;lt;&amp;gt;RR (или PE&amp;lt;&amp;gt;PE) включаем ''family inet6-vpn unicast''.&lt;br /&gt;
*В VRF также нужно задать router-id. Делается либо через routing-options. Либо создаем новый lo.&amp;lt;x&amp;gt;, добавляем его в VRF. Он и будет router-id.&lt;br /&gt;
*На RR маршруты CE будут передаваться с next-hop self [должно быть настроено]. Чтобы RR смог отрезолвить next-hop, нужно каким-то способом добавить lo PE в таблицу inet6.3 адреса lo PE. (если на rr настроены протоколы динамической маршрутизации, то через них (OSPF, ISIS). Если нет таких, то можно прописать статикой с опцией receive).&lt;br /&gt;
*не забываем  as-override на ebgp.&lt;br /&gt;
*Опционально: чтобы передавались direct маршруты, добавляем vrf-table-lable.&lt;br /&gt;
&lt;br /&gt;
Будут использоваться таблицы:&lt;br /&gt;
  ''bgp.l3vpn-inet6.0'' - PE&amp;lt;&amp;gt;RR&lt;br /&gt;
  ''inet6.3'' - RR, PE&lt;br /&gt;
  ''&amp;lt;vrf-name&amp;gt;.inet6.0'' - PE&amp;lt;&amp;gt;CE, PE&amp;lt;&amp;gt;PE&lt;br /&gt;
&lt;br /&gt;
Пример конфига:&lt;br /&gt;
*'''PE:'''&lt;br /&gt;
 Interface               Admin Link Proto    Local                 Remote&lt;br /&gt;
 lo0.2                   up    up   inet     172.30.5.38         --&amp;gt; 0/0&lt;br /&gt;
                                   inet6    fd17:f0f4:f691:5::26&lt;br /&gt;
 ge-0/0/0.325            up    up   inet6    fc09:c0:ffee::d/126&lt;br /&gt;
                                            fe80::aa08:aa01:4500:0/64&lt;br /&gt;
&lt;br /&gt;
 r8&amp;gt; show configuration routing-instances c3 &lt;br /&gt;
 instance-type vrf;&lt;br /&gt;
 interface ge-0/0/0.325;&lt;br /&gt;
 interface lo0.2;&lt;br /&gt;
 route-distinguisher 172.30.5.8:300;&lt;br /&gt;
 vrf-target target:54591:300;&lt;br /&gt;
 vrf-table-label;&lt;br /&gt;
 protocols {&lt;br /&gt;
        group c3 {&lt;br /&gt;
            type external;&lt;br /&gt;
            peer-as 64601;&lt;br /&gt;
            as-override;&lt;br /&gt;
            neighbor fc09:c0:ffee::e;&lt;br /&gt;
&lt;br /&gt;
 r8&amp;gt; show configuration protocols bgp group ibgp-rr &lt;br /&gt;
 family inet6-vpn {&lt;br /&gt;
    unicast;&lt;br /&gt;
&lt;br /&gt;
*'''RR:'''&lt;br /&gt;
 rr&amp;gt; show configuration routing-instances &lt;br /&gt;
 rib inet6.3 {&lt;br /&gt;
    static {&lt;br /&gt;
        route ::ffff:172.30.5.0/124 receive;&lt;br /&gt;
&lt;br /&gt;
 rr&amp;gt; show configuration protocols bgp &lt;br /&gt;
 group ibgp-clients-1 {&lt;br /&gt;
    family inet6-vpn {&lt;br /&gt;
        unicast;&lt;br /&gt;
&lt;br /&gt;
=Exchanging routes between VRF tables=&lt;br /&gt;
Если нам требуется передать маршруты из одного VRF в другой, в рамках одного маршрутизатора, можно осуществить такое двумя способами: &lt;br /&gt;
* включение '''auto-export''': задаем в [routing-options] в нужных VRF. При этом если внутри разных VRF указаны одинаковые vrf-target или vrf-import/export, то маршруты будут скопированы между VRF.&lt;br /&gt;
&lt;br /&gt;
Либо если vrf-export одного instance будет совпадать c vrf-import другого instance.&lt;br /&gt;
&lt;br /&gt;
Короче, в этом методе обмен маршрутов происходит только при совпадении targets, т.е. делается на per-table основе. Передаются ВСЕ маршруты.&lt;br /&gt;
&lt;br /&gt;
Работает только на локальном роутере (не передается по MP-BGP). Правда если для route leaking править vrf-export политику (добавляя туда еще community таблицы, в которую будут передаваться маршруты) то маршрут улетит и на другие PE для этого vrf. В общем, если нужен обмен только на локальном PE через auto-export, то правь именно vrf-import политику в нужных vrf. &lt;br /&gt;
&lt;br /&gt;
 blair# run show route table oak.inet.0 &lt;br /&gt;
 oak.inet.0: 3 destinations, 3 routes (3 active, 0 holddown, 0 hidden)&lt;br /&gt;
 13.13.13.13/32     *[Static/5] 00:00:09&lt;br /&gt;
                      Discard &lt;br /&gt;
 192.168.86.64/30   *[Direct/0] 00:00:07&lt;br /&gt;
                    &amp;gt; via ge-0/0/0.600&lt;br /&gt;
 192.168.86.65/32   *[Local/0] 00:00:07&lt;br /&gt;
                      Local via ge-0/0/0.600&lt;br /&gt;
После включения:&lt;br /&gt;
 blair# run show route table oak.inet.0                             &lt;br /&gt;
 oak.inet.0: 6 destinations, 6 routes (6 active, 0 holddown, 0 hidden)&lt;br /&gt;
 13.13.13.13/32     *[Static/5] 00:01:57&lt;br /&gt;
                      Discard&lt;br /&gt;
 15.15.15.15/32     *[Static/5] 00:00:08&lt;br /&gt;
                      Discard&lt;br /&gt;
 192.168.86.64/30   *[Direct/0] 00:01:55&lt;br /&gt;
                    &amp;gt; via ge-0/0/0.600&lt;br /&gt;
 192.168.86.65/32   *[Local/0] 00:01:55&lt;br /&gt;
                      Local via ge-0/0/0.600&lt;br /&gt;
 192.168.86.68/30   *[Direct/0] 00:00:08&lt;br /&gt;
                    &amp;gt; via ge-0/0/0.610&lt;br /&gt;
 192.168.86.69/32   *[Local/0] 00:00:08&lt;br /&gt;
                      Local via ge-0/0/0.610&lt;br /&gt;
&lt;br /&gt;
* использование '''rib-groups''': per-protocol основа. &lt;br /&gt;
Если юзаем vrf-target - то автоматом маршруты скопируются между таблицами в рамках роутера и далее улетит по сети.&lt;br /&gt;
&lt;br /&gt;
Если юзаем vrf-import | vrf-export - с выделением в политике конкретных префиксов - то только желаемые префиксы полетят далее, а все остальное скопируется только в рамках роутера.&lt;br /&gt;
(то есть политикой мы не навесим target для всего ненужного, а для всего нужного навесим).&lt;br /&gt;
&lt;br /&gt;
Последним термом в таких политиках должен быть then reject.&lt;br /&gt;
&lt;br /&gt;
При использовании в rib-group только import-rib первой определяется таблица - источник префиксов. Далее указываются таблицы, куда будут скопированы префиксы.&lt;br /&gt;
Следовательно, копирование маршрутов производится в одну сторону. Если нужен взаимный обмен префиксами - пишем разные rib-groups, навешиваем каждую в свой vrf.&lt;br /&gt;
&lt;br /&gt;
 blair# top show | compare  &lt;br /&gt;
 [edit routing-options]&lt;br /&gt;
 +  rib-groups {&lt;br /&gt;
 +      oak-to-spruce {&lt;br /&gt;
 +          import-rib [ oak.inet.0 spruce.inet.0 ];&lt;br /&gt;
 +      }&lt;br /&gt;
 +      spruce-to-oak {&lt;br /&gt;
 +          import-rib [ spruce.inet.0 oak.inet.0 ];&lt;br /&gt;
 +      }&lt;br /&gt;
 +  }&lt;br /&gt;
 [edit routing-instances oak routing-options]&lt;br /&gt;
 +     '''interface-routes''' {&lt;br /&gt;
 +         rib-group inet oak-to-spruce;&lt;br /&gt;
 +     }&lt;br /&gt;
 [edit routing-instances spruce routing-options]&lt;br /&gt;
 +     '''interface-routes''' {&lt;br /&gt;
 +         rib-group inet spruce-to-oak;&lt;br /&gt;
 +     }&lt;br /&gt;
При подобной настройке: будут передаваться только интерфейсные маршруты.&lt;br /&gt;
&lt;br /&gt;
Если требуется копировать статические маршруты, то rib-group добавляем в:&lt;br /&gt;
 sset routing-instances ''spoke'' routing-options static rib-group oak-to-spruce&lt;br /&gt;
&lt;br /&gt;
Если требуется копировать протоколы маршрутизации, то rib-group добавляем в: &lt;br /&gt;
 set routing-instances ''spoke'' protocols bgp family inet unicast rib-group ''c2-to-c1'' &lt;br /&gt;
 или&lt;br /&gt;
 set routing-instances ''vrf-ospf'' protocols ospf rib-group ''c1-to-c2''&lt;br /&gt;
[тут речь идет только от клиентов, включенных по тому или иному протоколу, НО не про маршруты, полученные по MP-BGP от RR]&lt;br /&gt;
&lt;br /&gt;
Если требуется копировать маршруты, известные по протоколам маршрутизации, то потребуется также скопировать и direct маршруты, для резолвинга.&lt;br /&gt;
 '''NOTE:''' rib-groups applied under the [routing-options interfaces-routes] stanza copies routes in both directions.&lt;br /&gt;
 The order of the ribs in rib-groups definition does not matter.&lt;br /&gt;
&lt;br /&gt;
С помощью policy можно контролировать какими маршрутами обмениваться.&lt;br /&gt;
 set routing-options rib-groups oak-to-spruce import-policy oak-policy&lt;br /&gt;
&lt;br /&gt;
 set policy-options policy-statement oak-policy term 1 from route-filter 1.1.1.1/32 exact&lt;br /&gt;
 set policy-options policy-statement oak-policy term 1 to spruce.inet.0&lt;br /&gt;
 set policy-options policy-statement oak-policy term 1 then accept&lt;br /&gt;
 set policy-options policy-statement oak-policy term 2 to spruce.inet.0&lt;br /&gt;
 set policy-options policy-statement oak-policy term 2 then reject&lt;br /&gt;
&lt;br /&gt;
=Hub-and-spoke=&lt;br /&gt;
Hub - центральный узел, с которым соединяются остальные spoke.&lt;br /&gt;
&lt;br /&gt;
'''Смысл:''' spoke-spoke связь идет не напрямую, а обязательно проходит через hub.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Hub-and-spoke topology.png]]&lt;br /&gt;
&lt;br /&gt;
Как и для обычного L3VPN нужно решать проблему с AS path loop detection (as-override, remove-private). &lt;br /&gt;
&lt;br /&gt;
Или при использовании OSPF между CE &amp;lt;&amp;gt; PE следить за правильностью Domain ID. &lt;br /&gt;
&lt;br /&gt;
Могут возникнуть сложности, если в топологии будут spoke, подключенные напрямую к hub. Или к PE будет подключаться несколько spoke.&lt;br /&gt;
&lt;br /&gt;
Требуется создание двух RI: hub, spoke. Hub PE будет иметь 2 линка в сторону CE (можно 2 unit на физическом линке).&lt;br /&gt;
&lt;br /&gt;
2 RT, 2 RD (если в схеме используем RR).&lt;br /&gt;
&lt;br /&gt;
'''Control plane''': маршруты от spoke PE передаются в spoke vrf на hub PE. Hub PE передает маршруты hub CE. Hub CE в свою очередь передает эти маршруты в hub instance hub PE. Hub PE передает маршруты к Spoke site.&lt;br /&gt;
&lt;br /&gt;
=QoS=&lt;br /&gt;
На '''ingress''' доступны: firewall filtering, classification, rate limiting, precedence mapping.&lt;br /&gt;
&lt;br /&gt;
На '''egress''' можно использовать: filtering, но дополнительно добавив ''vrf-table-label'', ''vt-interface''.&lt;br /&gt;
&lt;br /&gt;
EXP bits в VRF метке выставляются на основании: firewall classification, IP precedence, ingress interface.&lt;br /&gt;
&lt;br /&gt;
outer label (RSVP), может быть назначена CoS конфигурацией.&lt;br /&gt;
&lt;br /&gt;
=Internet Access=&lt;br /&gt;
==Option 1==&lt;br /&gt;
PE роутеры не участвуют в роутинге интернета, т.е. PE роутеры не обмениваются маршрутами между master и vrf таблицами маршрутизации. Предоставление интернета в рамках опции 1 называется &amp;quot;non-VRF Internet Access&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Настраиваются политики на PE + static route [в routing-instance &amp;lt;name&amp;gt; routing-options] с next-hop table inet.0. Оттуда уже резолвиться в инет.&lt;br /&gt;
&lt;br /&gt;
===Option 1.1===&lt;br /&gt;
[[Файл:Opt 1.1.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Пусть строят как хотят&amp;quot;. VPN-клиенты не получают интернет от провайдера VPN-услуг, а подключают в каждой локации IPS1 или ISP2 в отдельный маршрутизатор, и далее разруливают трафик как хотят. В каждой локации свой интернет.&lt;br /&gt;
&lt;br /&gt;
По-умолчанию Juniper поддерживает именно эту опцию.&lt;br /&gt;
&lt;br /&gt;
===Option 1.2===&lt;br /&gt;
[[Файл:Opt 1.2.png|700px]]&lt;br /&gt;
&lt;br /&gt;
В отдельном влане (CE-PE) идет L2 по провайдерской сети до провайдерского роутера, который раздает интернет. Можно вообще отдельным кабелем воткнуться между CE и PE.&lt;br /&gt;
Сам PE ничего не знает про интернет и не обязан хранить маршруты в интернет, либо маршруты клиента, чтобы маршрутизировать что-либо в ту или иную сторону.&lt;br /&gt;
В  Juniper для этого предусмотрено либо L2VPN либо CCC.&lt;br /&gt;
&lt;br /&gt;
Все VPN-ы, подключенные к данному PE пойдут в интернет одинаковым путем.&lt;br /&gt;
&lt;br /&gt;
==Option 2==&lt;br /&gt;
PE имеет частичный или полный доступ в инет. РЕ будет перемещать маршруты между VRF и main instance.&lt;br /&gt;
===Option 2.1===&lt;br /&gt;
[[Файл:Opt 2.1.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Отдельный интерфейс для интернета и для VPN-трафика&amp;quot;. В отличие от Option 1.2, здесь сам PE маршрутизирует клиента в интернет. Хотя подключается так же - через отдельный влан или даже физический интерфейс. Маршруты в интернет хранятся в VRF PE маршрутизатора. Стало быть, маршруты клиента с его белыми адресами тоже (для обратного трафика).&lt;br /&gt;
&lt;br /&gt;
===Option 2.2===&lt;br /&gt;
[[Файл:Opt 2.2.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Отдельный интерфейс для обратного (который идет от Интернета к клиенту) трафика&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Суть в том, что в VRF содержатся маршруты в интернет (0/0, или чуть больше, или вообще FullView в худшем случае), и отдаются клиенту. Дальнейший путь клиентского трафика, который не подошел к VPN-маршрутам, лукапится из главной таблицы через операцию &amp;quot;next-table&amp;quot; (т.е. 0/0 в VRF с next-table master в качестве некст-хопа. Тогда все, что не проанонсировано удаленными сайтами пойдет по дефолту).&lt;br /&gt;
Но все-равно нужен отдельный линк или влан между PE-CE, чтобы обратный трафик как-то попадал к клиенту. &lt;br /&gt;
Т.е. еще раз - трафик от клиента в интернет идет через VRF, некстхоп лукапится из master (если некстхоп - не клиентский узел на удаленном сайте), а обратно трафик идет уже минуя VRF через отделный влан/линк. Как PE различает какой трафик vpn а какой - internet: в VRF создается default route в next-table master в качестве некст-хопа. И дальше уже понятно. Да?&lt;br /&gt;
&lt;br /&gt;
===Option 2.3===&lt;br /&gt;
[[Файл:Opt 2.3.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Все через одну дырку (Single VRF for VPN and Internet Access)&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Отдельного интерфейса не требуется. Опять же, не-ВПН трафик клиента будет лукапиться в master-е и маршрутизироваться по тамошним маршрутам в интернет. А чтобы схема работала и в обратную сторону, все клиентские анонсы будут редистрибьюированы в master.&lt;br /&gt;
&lt;br /&gt;
Если клиент не использует приватные адреса, то VPN и inet связность может быть достигнута с помощью одного VRF и с помощью копирования всех маршрутов из VRF в main instance (RIB-groups).&lt;br /&gt;
&lt;br /&gt;
Также для корректной работы такой схемы требуется, чтобы внутри VRF было перенаправление в main instance с помощью static route -&amp;gt; next-table.&lt;br /&gt;
&lt;br /&gt;
Если клиент использует приватную и публичную адресацию, то паблик и приватные будут разделяться разными community.&lt;br /&gt;
&lt;br /&gt;
==Option 3==&lt;br /&gt;
[[Файл:Opt 3.png|700px]]&lt;br /&gt;
&lt;br /&gt;
У клиент один из CE имеет интернет, и шлет default route удаленным CE. Удаленные CE доступаются и до ВПН-а и до интернета через один интерфейс.&lt;br /&gt;
Главный CE, когда получает пакеты, назначенные в Интернет, просто шлет их туда через свой НЕ-VRF интерфейс [интерфейс в inet.0]. Ну и - да, тот CE, у которого есть интернет должен к провайдеру подключиться и через VRF и через НЕ-VRF интерфейс. То, есть, через отдельный влан. Как-то так.&lt;br /&gt;
&lt;br /&gt;
у Hub-PE в рамках vrf настраивается default, смотрящий в сторону ce-vpn. Дефолт анонсится остальным PE.&lt;br /&gt;
 &lt;br /&gt;
Если клиенту требуется NAT, то при такой схеме NAT делается на CE.&lt;br /&gt;
&lt;br /&gt;
=Дополнительная информация=&lt;br /&gt;
*[[Глава 2. Label Distribution Protocols (RSVP, LDP)]]&lt;br /&gt;
*[[L2VPN]]&lt;br /&gt;
*[[Реализация MPLS в ядре сети]]&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=Traffic_engineering&amp;diff=2049</id>
		<title>Traffic engineering</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=Traffic_engineering&amp;diff=2049"/>
		<updated>2021-07-15T18:28:35Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#description2:CSPF алгоритм. LSP Metrics. Link coloring. Losse, Strict LSP hops. LSP Bandwidth. LSP Install, active. IGP shortcuts. Traffic-engineering bgp. Policy-based LSP. LSP TTL. Информация для подготовки к экзаменам Juniper.}}&lt;br /&gt;
&lt;br /&gt;
=CSPF=&lt;br /&gt;
'''CSPF''' - способ автоматически рассчитать explicit path.&lt;br /&gt;
*Модифицированный shortest-path-first алгоритм.&lt;br /&gt;
*Интегрирует TED данные: IGP топология, доступная полоса, административные группы. Определяет оптимальный путь и порядок настройки в зависимости от ограничений юзера.&lt;br /&gt;
*Убирает из пути неподходящие линки, а на основании подходящих линков производит поиск кратчайшего пути.&lt;br /&gt;
&lt;br /&gt;
==Без CSPF== &lt;br /&gt;
(просто задаем все параметры руками):&lt;br /&gt;
*Запрашивает резервирование ресурсов у нижестоящих роутеров и оповещение этих роутеров как и где будет установлена сессия.&lt;br /&gt;
*Некоторые объекты используются для определения что требуется зарезервировать:&lt;br /&gt;
:*Label object: резервирует MPLS label&lt;br /&gt;
:*Sender Tspec Object: запрашивает зарезервированную полосу&lt;br /&gt;
*ERO:&lt;br /&gt;
:*Когда ERO не задан руками, path message оправляется с пустым ERO по кратчайшему пути IGP.&lt;br /&gt;
:*Чтобы ERO не передавался пустым, его требуется задать руками.&lt;br /&gt;
*Bandwidt reservation (Сигнализируется Sender Tspec объектом):&lt;br /&gt;
:* Каждый роутер по пути определяет сможет ли он выделить нужную полосу. Если нет возможности, то LSP не устанавливается.&lt;br /&gt;
:* По умолчанию, LSR не полисит трафик, а просто выделяет требуемую полосу. Можно включить: &lt;br /&gt;
 [protocols mpls]&lt;br /&gt;
 '''auto-policing class all drop'''&lt;br /&gt;
либо&lt;br /&gt;
 [protocols mpls label-switched-path lagavulin-to-oban]&lt;br /&gt;
 to 10.200.86.3&lt;br /&gt;
 bandwidth 35m&lt;br /&gt;
 no-cspf&lt;br /&gt;
 '''policing filter 35m'''&lt;br /&gt;
&lt;br /&gt;
TE работает в рамках одной area. Чтобы не нарушать само понятие area. Но есть функции, которые дают возможность строить туннели между area (но при этом все-равно не будут работать функции защиты трафика).&lt;br /&gt;
&lt;br /&gt;
==При включенном CSPF==&lt;br /&gt;
На ''ingress router'' с включенным CSPF будет воспроизведен следующий алгоритм:&lt;br /&gt;
#За актуальной топологией сети следит IGP и передает информацию в TED через расширение IGP (для ISIS - TLV tuples, для OSPF LSA Type 10)&lt;br /&gt;
#Топология сети хранится в TED&lt;br /&gt;
#Инженер задает условия для построения туннеля&lt;br /&gt;
#CSPF рассчитывает кратчайший путь, учитывая заданные ограничения инженера&lt;br /&gt;
#Роутер создает ERO&lt;br /&gt;
#Роутер передает ERO в RSVP, чтобы построить туннель&lt;br /&gt;
&lt;br /&gt;
'''TED''' содержит в себе:&lt;br /&gt;
* топологию&lt;br /&gt;
* bandwidth&lt;br /&gt;
* colors&lt;br /&gt;
* link priority info&lt;br /&gt;
 show ted database extensive&lt;br /&gt;
&lt;br /&gt;
'''Какие ограничения может задать инженер''':&lt;br /&gt;
*bandiwdth&lt;br /&gt;
*hop count&lt;br /&gt;
*administrative groups (colors)&lt;br /&gt;
*priority&lt;br /&gt;
*explicit route&lt;br /&gt;
&lt;br /&gt;
==CSPF алгоритм==&lt;br /&gt;
#Отбрасываем линки с недостаточной полосой&lt;br /&gt;
#Отбрасываем линки, не содержащие ''include color''&lt;br /&gt;
#Отбрасываем линки, содержащие ''exclude color''&lt;br /&gt;
#Рассчитываем кратчайший путь по IGP, но с учетом ERO, если задан&lt;br /&gt;
#Если в результате получилось несколько ''path'', то выбираем с наименьшим кол-вом хопов&lt;br /&gt;
#Если все-равно осталось несколько вариантов, то по дефолту ''path'' выбирается случайным образом. Не дефолт: ''most-fill/least-fill''.&lt;br /&gt;
#Роутер передает рассчитанный ERO к RSVP&lt;br /&gt;
&lt;br /&gt;
=LSP Metrics=&lt;br /&gt;
По дефолту CSPF использует метрики кратчайшего IGP пути (или te-metric в случае с IS-IS).&lt;br /&gt;
&lt;br /&gt;
Но эти значения можно переписать с помощью статических метрик. &lt;br /&gt;
&lt;br /&gt;
Есть возможность задавать статические метки для LSP, аналогично как и для IGP. Можно использовать для разделения основная/резервная LSP.&lt;br /&gt;
&lt;br /&gt;
Также есть возможность задать метрику и для LSP в рамках IGP протокола. Но лучше использовать метрику только в одном месте, во избежание неверного форвардинга.&lt;br /&gt;
 [edit protocols mpls]&lt;br /&gt;
    label-switched-path dalwhinnie-to-oban&lt;br /&gt;
    to 10.200.86.3;&lt;br /&gt;
    metric 20;&lt;br /&gt;
    link-protection;&lt;br /&gt;
&lt;br /&gt;
=Link coloring=&lt;br /&gt;
Поддерживается 32 административных группы. Admin groups хранятся в TED.&lt;br /&gt;
&lt;br /&gt;
Можно ''раскрашивать'' линки в разные цвета и задавать path таким образом, чтобы он шел либо через конкретные цвета или исключая конкретные цвета.&lt;br /&gt;
&lt;br /&gt;
Цвета задаются и назначаются на интерфейсы через ''admin-groups'' внутри ''protocols mpls''. &lt;br /&gt;
&lt;br /&gt;
Интерфейс без настроенной admin-group - не принадлежит ни к одной из групп. '''[не используется для LSP как с include, так и с exclude параметрами]'''&lt;br /&gt;
&lt;br /&gt;
Если не будет возможности построить LSP с заданными ограничениями по цветам, то LSP не построится =).&lt;br /&gt;
{{note|text=При построении link protection bypass, выбор пути не будет учитывать предпочтение по цветам, т.к. bypass LSP могут служить резервом для нескольких LPS. Однако, при использовании FRR, цвета будут учитываться.}}&lt;br /&gt;
&lt;br /&gt;
Если нет требований по цветам, то LSP будет построен без учета этого параметра, вне зависимости от того какими цветами будут раскрашены интерфейсы.&lt;br /&gt;
&lt;br /&gt;
Для корректной работы требуется, чтобы ''admin-groups'' были заданы на всех роутерах в MPLS домене одинаково.&lt;br /&gt;
&lt;br /&gt;
При изменении admin group на интерфейсе, идущие через него LSP не будут из-за этого сразу же перестроены. Но новые LSP будут естественно строится в соответствие с этими настройками.&lt;br /&gt;
&lt;br /&gt;
При изменении admin group для LSP, она сразу же перестроится.&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
Можно настроить как на LSP, так и на path (primary или secondary)&lt;br /&gt;
 dalwhinnie&amp;gt; show configuration protocols mpls&lt;br /&gt;
    '''admin-groups {&lt;br /&gt;
       gold 1;'''&lt;br /&gt;
    }&lt;br /&gt;
    label-switched-path dalwhinnie-to-oban {&lt;br /&gt;
       to 10.200.86.3;&lt;br /&gt;
       '''admin-group ''&amp;lt;include-all|include-any|exclude&amp;gt;'' gold;'''&lt;br /&gt;
    }&lt;br /&gt;
    interface ge-0/0/2.0 {&lt;br /&gt;
       '''admin-group gold;'''&lt;br /&gt;
&lt;br /&gt;
Логика при использовании нескольких цветов:&lt;br /&gt;
 '''между строками - Logical AND'''&lt;br /&gt;
 [edit protocols mpls label-switched-path test to 10.200.86.3]&lt;br /&gt;
 set admin-group include-all [gold bronze] - '''Logical AND'''&lt;br /&gt;
 set admin-group include-any [customer premium] - '''Logical OR'''&lt;br /&gt;
 set admin-group exclude [red green] - '''Logical OR'''&lt;br /&gt;
&lt;br /&gt;
=Losse, Strict LSP hops=&lt;br /&gt;
Параметры поля ERO (explicit route object). '''Ручной TE'''.&lt;br /&gt;
&lt;br /&gt;
Для primary и secondary LSP можно задавать ''loose'' и ''strict'' хопы. Порядок имеет значение.&lt;br /&gt;
&lt;br /&gt;
Также эти параметры можно задавать и для bypass LSP (внутри protocols rsvp).&lt;br /&gt;
&lt;br /&gt;
'''Strict''' - роутер, чей ip мы указываем, должен быть подключен напрямую. Ищем среди direct адресов нашего роутера. Указываем ip из p2p сети с соседом (на некоторых версиях софта можно и Lo, но лучше не рисковать).&lt;br /&gt;
&lt;br /&gt;
'''Loose''' - существует где-то в сети, без разницы как маршрут дойдёт до него, как пойдёт после него, важно, чтобы путь построился через него. Lo этого роутера будет доступен через IGP. В ERO до loose туннель будет построен по метрикам, после loose - тоже по метрикам. Указываем Lo желаемого роутера.&lt;br /&gt;
&lt;br /&gt;
Если задаём ''path'' с помощью strict, то лучше указать полностью все хопы пути.&lt;br /&gt;
&lt;br /&gt;
Если в path для хопов явно не указываем loos/strict и т.п., то по дефолту хоп будет использоваться как strict.&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
 dalwhinnie&amp;gt; show configuration protocols mpls&lt;br /&gt;
 label-switched-path dalwhinnie-to-oban {&lt;br /&gt;
    to 10.200.86.3;&lt;br /&gt;
    link-protection;&lt;br /&gt;
    primary via-blair;&lt;br /&gt;
 }&lt;br /&gt;
 path via-blair {&lt;br /&gt;
    192.168.86.5 strict;&lt;br /&gt;
    192.168.86.9 strict;&lt;br /&gt;
    192.168.86.25 strict; &lt;br /&gt;
&lt;br /&gt;
 dalwhinnie&amp;gt; show configuration protocols rsvp&lt;br /&gt;
 interface ge-0/0/2.0 {&lt;br /&gt;
    link-protection {&lt;br /&gt;
       path {&lt;br /&gt;
       192.168.86.29 strict;&lt;br /&gt;
       192.168.86.1 strict;&lt;br /&gt;
       192.168.86.41 strict;&lt;br /&gt;
       192.168.86.46 strict;&lt;br /&gt;
&lt;br /&gt;
=LSP Bandwidth management=&lt;br /&gt;
По умолчанию передается физическая скорость интерфейса, но можно менять.&lt;br /&gt;
==Static LSP bandwidth==&lt;br /&gt;
Задаем для static LSP полосу в ручном режиме. При построении LSP заданная полоса будет резервироваться =&amp;gt; если где-то на пути не будет хватать пропускной способности, то LSP не построится. Не самый удобный способ, но все же..&lt;br /&gt;
 [edit protocols mpls]&lt;br /&gt;
 lagavulin# show&lt;br /&gt;
 label-switched-path lagavulin-to-oban {&lt;br /&gt;
    to 10.200.86.3; &lt;br /&gt;
    '''bandwidth 150m;''' &lt;br /&gt;
    primary via-blair;&lt;br /&gt;
&lt;br /&gt;
==Automatic Bandwidth Allocation==&lt;br /&gt;
Позволяет маршрутизатору мониторить актуальный трафик, проходящий по LSP и изменять конфигурацию этого LSP для поддержания нужного кол-ва трафика. Роутер мониторит пики загрузки за определенный период времени. По истечению данного времени LSP резервирует нужную полосу. Используется make-before-brake и SE-style.&lt;br /&gt;
&lt;br /&gt;
Обычно, даже при использовании дефолтных значений для autobandwidth, конфигурация делается полностью, чтобы иметь понимание по каким правилам работает.&lt;br /&gt;
&lt;br /&gt;
 [edit protocols mpls]&lt;br /&gt;
 lagavulin# show &lt;br /&gt;
 statistics {&lt;br /&gt;
     file auto-bw;&lt;br /&gt;
     interval 600;&lt;br /&gt;
     auto-bandwidth;&lt;br /&gt;
 }&lt;br /&gt;
 label-switched-path lagavulin-to-oban {&lt;br /&gt;
    to 10.200.86.3; &lt;br /&gt;
    auto-bandwidth {&lt;br /&gt;
       adjust-interval 7200;&lt;br /&gt;
       adjust-threshold 20;&lt;br /&gt;
       minimum-bandwidth 64k;    - min полоса для LSP&lt;br /&gt;
       maximum-bandwidth 150m; - max полоса для LSP&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
*adjust-interval - по окончанию интервала - процесс вычисления полосы и перестроение LSP&lt;br /&gt;
*adjust-threshold 20 - процентное значение отклонения от настроенной static bandwidth на LSP. Если после перерасчета полосы разница между статик bandwidth и рассчитанной &amp;gt;= adjust-threshold, то LSP переустанавливается.&lt;br /&gt;
&lt;br /&gt;
MPLS statistics обязательно должна быть включена, чтобы работала auto-bandwidth.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы вручную обновить и подогнать bandwidth:&lt;br /&gt;
 request mpls lsp adjust-autobandwidth name lagavulin-to-oban-prime&lt;br /&gt;
&lt;br /&gt;
'''Monitor-only'''&lt;br /&gt;
&lt;br /&gt;
Если требуется только мониторинг используемой полосы LSP, без изменения настроек.&lt;br /&gt;
 [edit protocols mpls]&lt;br /&gt;
 lagavulin# &lt;br /&gt;
 show label-switched-path lagavulin-to-oban-prime to 10.200.86.3;&lt;br /&gt;
    bandwidth 150m;&lt;br /&gt;
    auto-bandwidth {&lt;br /&gt;
       adjust-interval 86400;&lt;br /&gt;
       '''monitor-bandwidth;'''&lt;br /&gt;
'''Полезные команды'''&lt;br /&gt;
 &amp;gt; show ted database 10.200.86.3&lt;br /&gt;
 &amp;gt; show mpls lsp name lagavulin-to-oban extensive&lt;br /&gt;
       10.200.86.3&lt;br /&gt;
       From: 10.200.86.7, State: Up, ActiveRoute: 0, LSP name: lagavulin-to-oban ActivePath: via-blair (primary)&lt;br /&gt;
       '''Max AvgBW util: 111.402Mbps''', Bandwidth Adjustment in 6302 second(s).&lt;br /&gt;
       *Primary via-blair State:Up Priorities: 7 0&lt;br /&gt;
       '''Bandwidth: 90.4322Mbps'''&lt;br /&gt;
 &amp;gt; request mpls lsp adjust-autobandwidth name &amp;quot;lagavulin-to-oban&amp;quot;&lt;br /&gt;
 &amp;gt; show log messages | match &amp;quot;bandwidth changed&amp;quot;&lt;br /&gt;
 &amp;gt; show rsvp interface &lt;br /&gt;
Обычно ''adjust-interval'' выставляется достаточно большим, из-за этого в случае аварии на сети и увеличении трафика в LSP не сразу происходит подстройка ''bandwidth''. Можно исправить с помощью ''adjust-threshold-overflow-limit''. Позволяет задать лимит на число последовательных переполнений. Когда лимит исчерпан, LSP настраивает bandwidth и таймер adjust-interval обнуляется.&lt;br /&gt;
&lt;br /&gt;
Когда исчерпан лимит:&lt;br /&gt;
# Max AvgBW util &amp;gt; LSP bandwidth ?&lt;br /&gt;
# Max AvgBW util увеличилось больше чем adjust-threshold?&lt;br /&gt;
&lt;br /&gt;
'''В итоге:''' ''adjust-interval'' - позволяет более точно вручную управлять bandwidth, а ''adjust- threshold-overflow-limit'' - в автоматическом режиме.&lt;br /&gt;
{{note|text=''adjust-threshold-overflow-limit'' может только увеличивать полосу, но не уменьшать ее. =)}}&lt;br /&gt;
&lt;br /&gt;
==Most-fill/least-fill/random==&lt;br /&gt;
Определяем относительную разгруженность линка.&lt;br /&gt;
{{note|text=available bandwidth ratio = (available bandwidth)/(reservable bandwidth)}}&lt;br /&gt;
&lt;br /&gt;
Пример рассчета available bandwidth ratio для 1G линка, при зарезервированной полосе 430 Мбит:&lt;br /&gt;
&lt;br /&gt;
'''(1000-430)/1000 = 57'''&lt;br /&gt;
&lt;br /&gt;
57 - процент свободной полосы линка.&lt;br /&gt;
&lt;br /&gt;
'''Most fill''' - предпочтительны LSP с наибольшей загрузкой (мало свободной полосы). С низким ''available bandwidth ratio''&lt;br /&gt;
&lt;br /&gt;
'''Least-fill''' - предпочтительны LSP с наименьшей загрузкой (более свобдны). С высоким ''available bandwidth ratio''&lt;br /&gt;
&lt;br /&gt;
'''Random''' - поведение по умолчанию. &lt;br /&gt;
&lt;br /&gt;
Хорошим тоном является использование одинакового поведения для всех LSP в одном домене.&lt;br /&gt;
&lt;br /&gt;
 [edit protocols mpls]&lt;br /&gt;
 lagavulin# show&lt;br /&gt;
 label-switched-path lagavulin-to-oban {&lt;br /&gt;
    to 10.200.86.3;&lt;br /&gt;
    '''most-fill;'''&lt;br /&gt;
    primary via-blair;}&lt;br /&gt;
&lt;br /&gt;
=Route Table and LSP Integration=&lt;br /&gt;
Если PE использует next-hop self и т.о. рассылает анонсы внешних сетей, где в качестве next-hop указан его Lo, то проблемы с передачей трафика до внешних сетей через LSP не будет. Т.к. в inet.3 присутствуют туннели до всех Lo внутри нашего домена.&lt;br /&gt;
&lt;br /&gt;
Но если на PE не производится процедур типа next-hop self, то другие роутеры будут посылать трафик до внешних сетей, опираясь на IGP.&lt;br /&gt;
&lt;br /&gt;
==Install, active==&lt;br /&gt;
Насильно указываем сеть, которой принадлежит next-hop, как доступную через LSP.&lt;br /&gt;
&lt;br /&gt;
Пример: CE анонсирует 5.5/16, PE принимает префикс, в качестве next-hop указан ip из p2p сети между PE&amp;lt;&amp;gt;CE - 192.168.90.12/30. Анонс разлетается по всей сети, но про 192.168.90.12/30 другие роутеры знают через IGP.&lt;br /&gt;
&lt;br /&gt;
Чтобы направить трафик до 5.5/16 через LSP, включаем:&lt;br /&gt;
 [edit protocols mpls] &lt;br /&gt;
  label-switched-path dalwhinnie-to-oban {&lt;br /&gt;
 to 10.200.86.3;&lt;br /&gt;
 '''install 192.168.90.12/30;'''&lt;br /&gt;
Теперь трафик до 5.5/16 будет идти по LSP, но трафик до 192.168.90.12/30 все-равно пойдет по IGP, из-за того, что BGP производит только resolve next-hop внутри inet.3. То есть по сути ''Active'' дает возможность использовать LSP для форвардинга, используя inet.3.&lt;br /&gt;
&lt;br /&gt;
Добавляем ''active'' чтобы запись о 192.168.90.12/30, доступная через LSP, переместилась из inet.3 в inet.0, тогда и трафик до 192.168.90.12/30 пойдет через LSP.&lt;br /&gt;
 [edit protocols mpls] &lt;br /&gt;
  label-switched-path dalwhinnie-to-oban {&lt;br /&gt;
 to 10.200.86.3;&lt;br /&gt;
 '''install 192.168.90.12/30 active;'''&lt;br /&gt;
&lt;br /&gt;
==IGP shortcuts==&lt;br /&gt;
Благодаря настройкам выше трафик до Lo идет через LSP, но трафик где next-hop = ip p2p линка, все еще используется IGP. &lt;br /&gt;
 [edit protocols ospf]&lt;br /&gt;
 set traffic-engineering shotcuts&lt;br /&gt;
&lt;br /&gt;
 [edit protocols isis]&lt;br /&gt;
 set traffic-engineering family inet shortcuts&lt;br /&gt;
&lt;br /&gt;
Минусы: &lt;br /&gt;
# Нет контроля, в отличие от ''install'', ''active''.&lt;br /&gt;
# Требуется настройка на всех роутерах в домене.&lt;br /&gt;
&lt;br /&gt;
==Traffic-engineering bgp==&lt;br /&gt;
Дефолтное поведение.&lt;br /&gt;
&lt;br /&gt;
==Traffic-engineering bgp-igp==&lt;br /&gt;
'''Перенесет''' все маршруты из inet.3 в inet.0. Прилетевшие новые маршруты из inet.3 перекроют старые аналогичные маршруты из inet.0, т.к. протоколы LDP и RSVP имеют лучший preference.&lt;br /&gt;
&lt;br /&gt;
Этот метод используется в целях обеспечения всей маршрутизации в сети по mpls-lsp (LDP и RSVP signalled). &lt;br /&gt;
&lt;br /&gt;
Но в этом варианте не работают VPN, основанные на MPLS [Inet.3 теперь пуста]. Применяется не к отдельным LSP, а глобально.&lt;br /&gt;
&lt;br /&gt;
 [edit protocols mpls]&lt;br /&gt;
 traffic-engineering ?&lt;br /&gt;
    bgp&lt;br /&gt;
    '''bgp-igp'''&lt;br /&gt;
    bgp-igp-both-ribs&lt;br /&gt;
    mspl-forwarding&lt;br /&gt;
&lt;br /&gt;
==Traffic-engineering bgp-igp-both-ribs==&lt;br /&gt;
'''Скопирует''' маршруты из inet.3 в inet.0.  Прилетевшие новые маршруты из inet.3, опять же, '''перекроют''' старые аналогичные маршруты из inet.0. &lt;br /&gt;
&lt;br /&gt;
Но в inet.3 старые маршруты останутся, поэтому этот способ годится, если в сети нужны VPN-сервисы.&lt;br /&gt;
 &lt;br /&gt;
 [edit protocols mpls]&lt;br /&gt;
 traffic-engineering ?&lt;br /&gt;
    bgp&lt;br /&gt;
    bgp-igp&lt;br /&gt;
    '''bgp-igp-both-ribs'''&lt;br /&gt;
    mspl-forwarding&lt;br /&gt;
&lt;br /&gt;
==Traffic-engineering mpls-forwarding==&lt;br /&gt;
'''Скопирует''' все маршруты из inet.3 в inet.0, но и старые маршруты в inet.0 оставит для совместимости с некоторыми политиками маршрутизации (то есть эта функция убирает &amp;quot;затмение IGP маршрутов&amp;quot;). Однако, фактически, форвардинг будет происходить по новым маршрутам.&lt;br /&gt;
Для индикации того, какие маршруты в inet.0 для форвардинга трафика, а какие чисто информативные, есть дополнительные обозначения (#|@) в выводе show route:&lt;br /&gt;
 &amp;gt; show route 10.200.86.3           &lt;br /&gt;
 inet.0: 29 destinations, 38 routes (29 active, 1 holddown, 0 hidden)&lt;br /&gt;
 @ = Routing Use Only, # = Forwarding Use Only&lt;br /&gt;
 + = Active Route, - = Last Active, * = Both&lt;br /&gt;
 10.200.86.3/32     @[OSPF/10] 00:25:58, metric 3&lt;br /&gt;
                     &amp;gt; to 192.168.86.5 via ge-0/0/0.20&lt;br /&gt;
                    #[RSVP/7/1] 00:20:06, metric 3&lt;br /&gt;
                     &amp;gt; to 192.168.86.5 via ge-0/0/0.20, label-switched-path dalwhinnie-to-oban&lt;br /&gt;
                     [LDP/9] 00:02:30, metric 1&lt;br /&gt;
                     &amp;gt; to 192.168.86.5 via ge-0/0/0.20, Push 300288&lt;br /&gt;
&lt;br /&gt;
=Advertising LSPs directly into the IGP=&lt;br /&gt;
Позволяет передавать информацию об LSP, как о p2p интерфейсе. Это позволяет upstream роутеру использовать LSP для рассчета кратчайшего пути.&lt;br /&gt;
&lt;br /&gt;
Внутри протокола IGP задаем LSP, аналогично интерфейсам, с определенной метрикой. Не забываем, что LSP однонаправленные  =&amp;gt; требуется аналогичные LSP построить в обратном направлении.&lt;br /&gt;
&lt;br /&gt;
IGP будет распространять маршрут как: LSA 1 Type / ISIS TLVs.&lt;br /&gt;
 [edit protocols ospf]  &lt;br /&gt;
 lagavulin# show traffic-engineering; area 0.0.0.0 {&lt;br /&gt;
 interface lo0.0;&lt;br /&gt;
 label-switched-path lagavulin-to-oban { &lt;br /&gt;
    metric 2; }&lt;br /&gt;
 label-switched-path lagavulin-to-tormore { &lt;br /&gt;
    metric 2;&lt;br /&gt;
 } }&lt;br /&gt;
{{note|text=Обычно одновременно не используют IGP shotcuts и LSP advertisment into IGP.}}&lt;br /&gt;
&lt;br /&gt;
=Policy-based LSP=&lt;br /&gt;
Назначаем конкретным префиксам next-hop конкретную LSP. Хорошо подходит для случаев, когда на сети между двумя хостами есть несколько LSP и нужно распределить трафик между ними.&lt;br /&gt;
&lt;br /&gt;
Может метод не очень масштабируемый, но для определенных задач подходит идеально.&lt;br /&gt;
&lt;br /&gt;
 [edit policy-options]&lt;br /&gt;
 lagavulin# show&lt;br /&gt;
 policy-statement to-oban-lsps {&lt;br /&gt;
    term 1 { &lt;br /&gt;
       from {&lt;br /&gt;
          protocol bgp;&lt;br /&gt;
          route-filter 172.16.0.0/24 orlonger; &lt;br /&gt;
          route-filter 172.16.1.0/24 orlonger;&lt;br /&gt;
       } &lt;br /&gt;
       then {&lt;br /&gt;
          '''install-nexthop lsp lagavulin-to-oban-1;'''&lt;br /&gt;
          accept; &lt;br /&gt;
      }&lt;br /&gt;
 }&lt;br /&gt;
    term 2 {&lt;br /&gt;
       from {&lt;br /&gt;
          protocol bgp;&lt;br /&gt;
          route-filter 172.16.2.0/24 orlonger; &lt;br /&gt;
          route-filter 172.16.3.0/24 orlonger;&lt;br /&gt;
       } &lt;br /&gt;
       then {&lt;br /&gt;
          '''install-nexthop lsp lagavulin-to-oban-2;'''&lt;br /&gt;
          accept; &lt;br /&gt;
       }&lt;br /&gt;
 [edit routing-options] &lt;br /&gt;
 lagavulin# show&lt;br /&gt;
 forwarding-table {&lt;br /&gt;
    export to-oban-lsps;&lt;br /&gt;
&lt;br /&gt;
=TTL=&lt;br /&gt;
&lt;br /&gt;
==default==&lt;br /&gt;
*По дефолту на каждом хопе (и внутри lsp тоже) значение ttl = 1.&lt;br /&gt;
*При этом не ingerss роутере IP TTL копируется в MPLS TTL, при прохождении через LSP -1, IP TTL остается неизменным. На egress роутере значение TTL копируется обратно из MPLS в IP.&lt;br /&gt;
&lt;br /&gt;
==no-decrement-ttl==&lt;br /&gt;
*Только для Juniper.&lt;br /&gt;
*Только на ingress роутере.&lt;br /&gt;
*Можно применять в разные иерархии (глобально mpls, lsp, path)&lt;br /&gt;
*IP TTL уменьшается только на egress роутере.&lt;br /&gt;
*MPLS TTL устанавливается в 255, значение MPLS TTL не перезаписывается в IP TTL.&lt;br /&gt;
*Работает только для RSVP.&lt;br /&gt;
&lt;br /&gt;
'''До'''&lt;br /&gt;
 P1-2&amp;gt; traceroute 172.21.2.1 source 10.12.0.1    &lt;br /&gt;
 traceroute to 172.21.2.1 (172.21.2.1) from 10.12.0.1, 30 hops max, 40 byte packets&lt;br /&gt;
 1  192.168.0.37 (192.168.0.37)  20.150 ms  19.244 ms  14.906 ms&lt;br /&gt;
 2  172.30.0.45 (172.30.0.45)  20.139 ms  19.538 ms  14.947 ms&lt;br /&gt;
     MPLS Label=300368 CoS=0 TTL=1 S=1&lt;br /&gt;
 3  172.30.0.17 (172.30.0.17)  29.722 ms  29.692 ms  29.925 ms&lt;br /&gt;
     MPLS Label=300624 CoS=0 TTL=1 S=1&lt;br /&gt;
 4  172.30.0.14 (172.30.0.14)  34.978 ms  34.501 ms  30.472 ms&lt;br /&gt;
 5  172.21.2.1 (172.21.2.1)  40.131 ms  45.097 ms  39.280 ms&lt;br /&gt;
&lt;br /&gt;
'''После'''&lt;br /&gt;
 P1-2&amp;gt; traceroute 172.21.2.1 source 10.12.0.1    &lt;br /&gt;
 traceroute to 172.21.2.1 (172.21.2.1) from 10.12.0.1, 30 hops max, 40 byte packets&lt;br /&gt;
 1  192.168.0.37 (192.168.0.37)  14.851 ms  15.075 ms  9.682 ms&lt;br /&gt;
 2  172.30.0.14 (172.30.0.14)  35.521 ms  33.829 ms  29.991 ms&lt;br /&gt;
 3  172.21.2.1 (172.21.2.1)  40.235 ms  29.352 ms  39.868 ms&lt;br /&gt;
&lt;br /&gt;
==no-propogate-ttl==&lt;br /&gt;
*Мультивендорная фича.&lt;br /&gt;
*Должна быть сконфигурирована на egress роутере, а т.к. им может стать любой роутер =&amp;gt; конфигурируем на всех роутерах.&lt;br /&gt;
*Применяется только глобально в protocol mpls иерархии.&lt;br /&gt;
*Если LSP уже установлен, то после применения команды, то к нему не применится команда.&lt;br /&gt;
*Работает и для RSVP и для LDP.&lt;br /&gt;
==no-vrf-propogate-ttl==&lt;br /&gt;
*Включаем внутри VRF.&lt;br /&gt;
*В документации точно не нашла где включать, но у меня заработало при включении на ingress внутри VRF. На egress при этом не была включена эта функция.&lt;br /&gt;
 set routing-instances ce1 no-vrf-propagate-ttl&lt;br /&gt;
&lt;br /&gt;
=Дополнительная информация=&lt;br /&gt;
*[[Глава 2. Label Distribution Protocols (RSVP, LDP)]]&lt;br /&gt;
*[[Отказоустойчивость и оптимизация в MPLS]]&lt;br /&gt;
*[[Реализация MPLS в ядре сети]]&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=%D0%9E%D1%82%D0%BA%D0%B0%D0%B7%D0%BE%D1%83%D1%81%D1%82%D0%BE%D0%B9%D1%87%D0%B8%D0%B2%D0%BE%D1%81%D1%82%D1%8C_%D0%B8_%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%B2_MPLS&amp;diff=2048</id>
		<title>Отказоустойчивость и оптимизация в MPLS</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=%D0%9E%D1%82%D0%BA%D0%B0%D0%B7%D0%BE%D1%83%D1%81%D1%82%D0%BE%D0%B9%D1%87%D0%B8%D0%B2%D0%BE%D1%81%D1%82%D1%8C_%D0%B8_%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%B2_MPLS&amp;diff=2048"/>
		<updated>2021-07-15T18:27:43Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#description2: Link Protection. Configuration. Node-link Protection. Configuration. Fast Reroute. Configuration. Secondary path. Configuration. Loop-Free Alternates in IGPs. Priorities and Preemption. Optimization. Adaptive mode. Материалы для подготовки к экзаменам Juniper Networks}}&lt;br /&gt;
Без включения каких-либо функций защиты: трафик будет дропаться каждый раз, когда будет падать LSP. &lt;br /&gt;
&lt;br /&gt;
Время: &lt;br /&gt;
*PE должен обнаружить падение линка, оправить ResvTear к ingress роутеру. &lt;br /&gt;
*Ingress перестает отправлять Path и Resv, чтобы удалить LSP.&lt;br /&gt;
*LSP удаляется из inet.3 =&amp;gt; L2VPN, L3VPN становятся нерабочими.&lt;br /&gt;
*ingress пытается установить новый LSP.&lt;br /&gt;
*Если новый LSP удается установить, то LSP добавляется в inet.3, L2VPN, L3VPN - начинают работать.&lt;br /&gt;
*Трафик пошел по новому LSP.&lt;br /&gt;
 &lt;br /&gt;
Для того, чтобы в случае возникновения аварии не было большого простоя, были внедрены некоторые механизмы защиты.&lt;br /&gt;
&lt;br /&gt;
=Link Protection=&lt;br /&gt;
Защищает от падения линка между роутерами, участвующими в RSVP LSP. Когда сконфигурирован link protection, каждый роутер пытается найти обходной путь до следующего в LSP роутера. &lt;br /&gt;
&lt;br /&gt;
Такой обходной путь называется ''next-hop bypass LSP''. Каждый обходной путь устанавливается только после того, как будет построена LSP. Когда линк падает, то переход на альтернативный путь инициирует роутер, который зафиксировал падение линка и который является ближайшим к ingress роутеру. &lt;br /&gt;
&lt;br /&gt;
Такой роутер-инициатор называют '''PLR''' - ''point of local repair''. После того, как трафик пройдет по обходному пути, он вернется на путь изначального LSP. Когда PLR переключает трафик на bypass LSP, он сигнализирует об этом ingress роутеру. Ingress пытается найти и установить другой primary path для LSP.&lt;br /&gt;
&lt;br /&gt;
Есть возможность сконфигурировать bypass руками.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Что происходит с метками:&amp;lt;/u&amp;gt; в случае падения линка, на PLR производится swap метки (согласно LSP), но сверху добавляется еще одна метка (push 30880 (top)) и пакет отправляется на egress интерфейс для bypass пути. Также bypass LSP использует PHP, поэтому на предпоследнем хопе верхняя метка  будет снята и дальше пакет будет следовать меткам первоначального LSP.&lt;br /&gt;
&lt;br /&gt;
Плюсы: &lt;br /&gt;
* Быстро отрабатывает&lt;br /&gt;
* Масштабируемость: для резервировании большого кол-ва LSP можно обойтись несколькими обходными ''next-hop bypass LSP''.&lt;br /&gt;
&lt;br /&gt;
Минусы:&lt;br /&gt;
* Для работы link protection требуется включение этой функции на всех роутерах, внутри протокола rsvp, которые будут участвовать в построении LSP.&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
 [edit protocols mpls]&lt;br /&gt;
 label-switched-path dalwhinnie-to-oban {&lt;br /&gt;
        to 10.200.86.3;&lt;br /&gt;
        link-protection;&lt;br /&gt;
    }&lt;br /&gt;
 [edit protocols rsvp]&lt;br /&gt;
 interface all {&lt;br /&gt;
    link-protection;&lt;br /&gt;
 }&lt;br /&gt;
Хорошей практикой является включение link protection внутри protocols RSVP на всех интерфейсах, внутри RSVP домена.&lt;br /&gt;
&lt;br /&gt;
Смотрим что происходит с метками для обходного пути на PLR роутере.&lt;br /&gt;
 glenlivet&amp;gt; show mpls lsp transit &lt;br /&gt;
 Transit LSP: 1 session&lt;br /&gt;
 To              From            State   Rt Style Labelin Labelout LSPname &lt;br /&gt;
 10.200.86.3     10.200.86.5     Up       0  1 SE  '''300544'''   300624 dalwhinnie-to-oban&lt;br /&gt;
&lt;br /&gt;
 glenlivet&amp;gt; show route label '''300544''' detail     &lt;br /&gt;
 mpls.0: 17 destinations, 17 routes (17 active, 0 holddown, 0 hidden)&lt;br /&gt;
 300544 (1 entry, 1 announced)&lt;br /&gt;
        *RSVP   Preference: 7/1&lt;br /&gt;
                Next hop type: Router, Next hop index: 262147&lt;br /&gt;
                Address: 0x9440488&lt;br /&gt;
                Next-hop reference count: 2&lt;br /&gt;
                Next hop: 192.168.86.9 via ge-0/0/0.60 weight 0x1, selected&lt;br /&gt;
                Label-switched-path dalwhinnie-to-oban&lt;br /&gt;
                Label operation: '''Swap 300624'''&lt;br /&gt;
                Next hop: 192.168.86.45 via ge-0/0/0.40 weight 0x8001&lt;br /&gt;
                '''Label-switched-path Bypass-&amp;gt;192.168.86.9'''&lt;br /&gt;
                '''Label operation: Swap 300624, ''Push 300320(top)'' '''&lt;br /&gt;
                Label TTL action: prop-ttl, prop-ttl(top)&lt;br /&gt;
                State: &amp;lt;Active Int&amp;gt;&lt;br /&gt;
                Local AS:  1111 &lt;br /&gt;
                Age: 6:06 	Metric: 1 &lt;br /&gt;
                Task: RSVP&lt;br /&gt;
                Announcement bits (1): 0-KRT &lt;br /&gt;
                AS path: I&lt;br /&gt;
&lt;br /&gt;
На следующем роутере (в нашем случае предпоследнем на обходном пути): смотрим ту запись в таблице mpls.0, которая подписана как  300320'''(S=0)'''. Эту запись смотрим, когда количество меток в пришедшем пакете &amp;gt;= 2. Если количество меток = 1, то смотрим запись без обозначения '''S=0'''.&lt;br /&gt;
&lt;br /&gt;
 mortlach&amp;gt; show route label 300320 detail &lt;br /&gt;
 mpls.0: 21 destinations, 21 routes (21 active, 0 holddown, 0 hidden)&lt;br /&gt;
 300320 (1 entry, 1 announced)&lt;br /&gt;
        *RSVP   Preference: 7/1&lt;br /&gt;
                Next hop type: Router, Next hop index: 585&lt;br /&gt;
                Address: 0x934cfd0&lt;br /&gt;
                Next-hop reference count: 3&lt;br /&gt;
                Next hop: 192.168.86.50 via ge-0/0/0.80 weight 0x1, selected&lt;br /&gt;
                Label-switched-path Bypass-&amp;gt;192.168.86.9&lt;br /&gt;
                Label operation: Pop&lt;br /&gt;
                State: &amp;lt;Active Int AckRequest&amp;gt;&lt;br /&gt;
                Age: 13:38 	Metric: 1 &lt;br /&gt;
                Task: RSVP&lt;br /&gt;
                Announcement bits (1): 0-KRT &lt;br /&gt;
                AS path: I&lt;br /&gt;
 300320(S=0) (1 entry, 1 announced)&lt;br /&gt;
        *RSVP   Preference: 7/1&lt;br /&gt;
                Next hop type: Router, Next hop index: 587&lt;br /&gt;
                Address: 0x934cf40&lt;br /&gt;
                Next-hop reference count: 2&lt;br /&gt;
                Next hop: 192.168.86.50 via ge-0/0/0.80 weight 0x1, selected&lt;br /&gt;
                '''Label-switched-path Bypass-&amp;gt;192.168.86.9'''&lt;br /&gt;
                '''Label operation: ''Pop'' '''      &lt;br /&gt;
                State: &amp;lt;Active Int AckRequest&amp;gt;&lt;br /&gt;
                Age: 13:38 	Metric: 1 &lt;br /&gt;
                Task: RSVP&lt;br /&gt;
                Announcement bits (1): 0-KRT &lt;br /&gt;
                AS path: I&lt;br /&gt;
&lt;br /&gt;
=Node-link Protection=&lt;br /&gt;
Node-link protection для обхода упавшего роутера, участвующего в построении LSP, использует LSP ''next-next-hop bypass LSP'', которая обеспечивает альтернативный путь к next-hop'у next-hop роутера.&lt;br /&gt;
&lt;br /&gt;
Если топология сети не позволяет построить ''next-next-hop bypass LSP'', или роутер является предпоследним в LSP, тогда  роутер устанавливает просто ''next-hop bypass LSP''. Если же топология сети не поддерживает и такой bypass LSP, то ничего не создается и роутер просто продолжает использовать изначальный LSP. &lt;br /&gt;
&lt;br /&gt;
Одновременно роутер не будет строить ''next-next-hop bypass LSP'' и ''next-hop bypass LSP''. Только что-то одно, в зависимости от топологии и возможностей оборудования.&lt;br /&gt;
&lt;br /&gt;
При обнаружении падения узла, PLR просигнализирует об этому ingress роутеру и тот в свою очередь будет пытаться найти и установить новый primary LSP.&lt;br /&gt;
&lt;br /&gt;
''Next-next-hop bypass LSP'' также может обеспечить резерв для нескольких LSP.&lt;br /&gt;
&lt;br /&gt;
Т.к. в случае с ''next-next-hop bypass'' строится отдельно LSP, то никаких махинаций с навешиванием дополнительных меток не происходит (как в link protection). Используются обычные операции: push, swap, pop.&lt;br /&gt;
 &lt;br /&gt;
==Configuration==&lt;br /&gt;
 [edit protocols mpls]&lt;br /&gt;
 label-switched-path dalwhinnie-to-oban {&lt;br /&gt;
        to 10.200.86.3;&lt;br /&gt;
        node-link-protection;&lt;br /&gt;
    }&lt;br /&gt;
 [edit protocols rsvp]&lt;br /&gt;
 interface all {&lt;br /&gt;
    link-protection;        - это требуется включать на всех роутерах в RSVP домене&lt;br /&gt;
 }&lt;br /&gt;
{{note|text = Ниже в выводах команд ''show'' удалены лишние строки}}&lt;br /&gt;
&lt;br /&gt;
'''Ingress router:''' После построения LSP, будет установлен обходной маршрут на случай падения соседнего роутера (glenlivet):&lt;br /&gt;
 dalwhinnie&amp;gt; show mpls lsp ingress name dalwhinnie-to-oban detail &lt;br /&gt;
 10.200.86.3&lt;br /&gt;
  From: 10.200.86.5, State: Up, ActiveRoute: 0, LSPname: dalwhinnie-to-oban&lt;br /&gt;
  ActivePath:  (primary)&lt;br /&gt;
  '''Node/Link protection desired'''&lt;br /&gt;
  LSPtype: Static Configured&lt;br /&gt;
 *Primary                    State: Up&lt;br /&gt;
    Computed ERO (S [L] denotes strict [loose] hops): (CSPF metric: 3)&lt;br /&gt;
 192.168.86.5 S 192.168.86.9 S 192.168.86.25 S &lt;br /&gt;
    Received RRO (ProtectionFlag 1=Available 2=InUse 4=B/W 8=Node 10=SoftPreempt 20=Node-ID):&lt;br /&gt;
          10.200.86.6(flag=0x29) 192.168.86.5(flag=9 Label=299952) 10.200.86.1(flag=0x21) 192.168.86.9(flag=1 Label=300000) 10.200.86.3(flag=0x20) 192.168.86.25(Label=3)&lt;br /&gt;
&lt;br /&gt;
 dalwhinnie&amp;gt; show mpls lsp bypass &lt;br /&gt;
 Ingress LSP: 2 sessions&lt;br /&gt;
 To              From            State   Rt Style Labelin Labelout LSPname &lt;br /&gt;
 10.200.86.1     10.200.86.5     Up       0  1 SE       -   300720 Bypass-&amp;gt;192.168.86.5-&amp;gt;192.168.86.9&lt;br /&gt;
&lt;br /&gt;
 dalwhinnie&amp;gt; show mpls lsp bypass name Bypass-&amp;gt;192.168.86.5-&amp;gt;192.168.86.9 detail &lt;br /&gt;
 10.200.86.1&lt;br /&gt;
  From: 10.200.86.5, LSPstate: Up, ActiveRoute: 0&lt;br /&gt;
  LSPname: '''Bypass-&amp;gt;192.168.86.5-&amp;gt;192.168.86.9'''&lt;br /&gt;
  LSPtype: Static Configured&lt;br /&gt;
  Time left:    -, Since: Mon Oct 31 01:33:31 2016&lt;br /&gt;
  Type: Bypass LSP&lt;br /&gt;
    Number of data route tunnel through: 1&lt;br /&gt;
    Number of RSVP session tunnel through: 0&lt;br /&gt;
  Explct route: 192.168.86.29 192.168.86.1 192.168.86.41 192.168.86.50 &lt;br /&gt;
  '''Record route: &amp;lt;self&amp;gt; 192.168.86.29 192.168.86.1 192.168.86.41 192.168.86.50''' &lt;br /&gt;
&lt;br /&gt;
'''На транзитном:''' аналогично построится обходной путь на случай падения соседнего роутера (blair)&lt;br /&gt;
 glenlivet&amp;gt; show mpls lsp bypass name Bypass-&amp;gt;192.168.86.9-&amp;gt;192.168.86.25 detail &lt;br /&gt;
 10.200.86.3&lt;br /&gt;
  From: 10.200.86.6, LSPstate: Up, ActiveRoute: 0&lt;br /&gt;
  LSPname: '''Bypass-&amp;gt;192.168.86.9-&amp;gt;192.168.86.25'''&lt;br /&gt;
  LSPtype: Static Configured&lt;br /&gt;
  Time left:    -, Since: Mon Oct 31 01:33:22 2016&lt;br /&gt;
  Type: Bypass LSP&lt;br /&gt;
    Number of data route tunnel through: 1&lt;br /&gt;
    Number of RSVP session tunnel through: 0&lt;br /&gt;
  Explct route: 192.168.86.45 192.168.86.21 192.168.86.33 192.168.86.38 &lt;br /&gt;
  '''Record route: &amp;lt;self&amp;gt; 192.168.86.45 192.168.86.21 192.168.86.33 192.168.86.38'''&lt;br /&gt;
&lt;br /&gt;
'''На предпоследнем роутере:''' в связи с особенностями топологии (предпоследний роутер), будет создан не ''next-next-hop bypass'', а ''next-hop bypass'' &lt;br /&gt;
 blair&amp;gt; show mpls lsp bypass &lt;br /&gt;
 Ingress LSP: 1 sessions&lt;br /&gt;
 To              From            State   Rt Style Labelin Labelout LSPname &lt;br /&gt;
 10.200.86.3     10.200.86.1     Up       0  1 SE       -   299936 Bypass-&amp;gt;192.168.86.25&lt;br /&gt;
&lt;br /&gt;
 blair&amp;gt; show mpls lsp bypass name Bypass-&amp;gt;192.168.86.25 detail &lt;br /&gt;
 10.200.86.3&lt;br /&gt;
  From: 10.200.86.1, LSPstate: Up, ActiveRoute: 0&lt;br /&gt;
  LSPname: '''Bypass-&amp;gt;192.168.86.25'''&lt;br /&gt;
  Time left:    -, Since: Mon Oct 31 00:22:03 2016&lt;br /&gt;
  Type: Bypass LSP&lt;br /&gt;
    Number of data route tunnel through: 1&lt;br /&gt;
    Number of RSVP session tunnel through: 0&lt;br /&gt;
  Explct route: 192.168.86.17 192.168.86.33 192.168.86.38 &lt;br /&gt;
  '''Record route: &amp;lt;self&amp;gt; 192.168.86.17 192.168.86.33 192.168.86.38'''&lt;br /&gt;
&lt;br /&gt;
'''Разница между link protection и node-link protection:'''&lt;br /&gt;
* Node-link protection обеспечивает как link protection, так и node protection - в зависимости от топологии.&lt;br /&gt;
* Время реагирования на аварию в сети: link protection - PLR на основании hardware узнает, что упал линк и сразу переключит трафик на альтернативный путь. Node-link protection - распознает падение роутера, когда перестают приходить hello сообщения. То есть время реакции будет значительно отличаться.&lt;br /&gt;
&lt;br /&gt;
=Fast Reroute=&lt;br /&gt;
На каждом промежуточном LSR создается LSP (detour) для обхода линка до следующей ноды и самой следующей ноды. Это проприетарный механизм Juniper. Кол-во потерянного трафика при аварии зависит от времени обнаружения падения ноды (или линка) и  времени переключения на альтернативный путь.&lt;br /&gt;
&lt;br /&gt;
При падении линка между узлами, роутер, ближайший к ingress сразу перестраивается на detour, построенный от себя. Потом сообщает ingress о падении линка и ingress в свою очередь переходит на какой-нибудь secondary path (не detour).&lt;br /&gt;
&lt;br /&gt;
По умолчанию fast-reroute имеет ограничение в 6 хопов для построения path в сторону egress, но это значение можно менять ('''hop-count''').&lt;br /&gt;
&lt;br /&gt;
Также для detour  можно задать резервирование полосы для detour LSP. Не обязательно величина bandwidth должна равняться той, что в настройках LSP. &lt;br /&gt;
&lt;br /&gt;
 set protocols mpls label-switched-path to-r6 fast-reroute '''(bandwidth 60m|bandwidth-percent 19)'''&lt;br /&gt;
{{note|text=По умолчанию detour LSP не наследует bandwidth. Чтобы наследовало - не знаю что нужно сделать, скорей всего задать такой же как в LSP. }}&lt;br /&gt;
&lt;br /&gt;
При переходе на detour, в forwarding table нужно добавить next-hop, а это дополнительная задержка для оперативного перехода на detour.&lt;br /&gt;
&lt;br /&gt;
Чтобы исключить это время, можно использовать балансировку ('''load balancing policy''').&lt;br /&gt;
&lt;br /&gt;
Отличия от node-link-protection:&lt;br /&gt;
* При работе механизма frr лейбл не добавляется в стек к пакету. Вместо этого PLR производит swap на другой лейбл.&lt;br /&gt;
* Каждый detour защищает только свою конкретную LSP, что делает эту технологию менее масштабируемой. Но для сглаживания этой ситуации: когда разные роутеры строят detour, то эти detour могут использовать (разделять) одни и те же линки с целью слиться обратно в изначальный LSP...&lt;br /&gt;
{{note|text=Если у LSP, который защищен detour LSP, есть link-coloring ограничения, то detour их тоже унаследует.&lt;br /&gt;
Чтобы отключить это поведение: set protocols mpls label-switched-path to-r6 fast-reroute '''no-include-all'''}}&lt;br /&gt;
==Configuration==&lt;br /&gt;
Все настраивается только на ingress роутере.&lt;br /&gt;
 [edit protocols mpls]&lt;br /&gt;
 label-switched-path dalwhinnie-to-oban {&lt;br /&gt;
       to 10.200.86.3;&lt;br /&gt;
       fast-reroute;&lt;br /&gt;
&lt;br /&gt;
 [policy-options policy-statement lbalancing]&lt;br /&gt;
 then {&lt;br /&gt;
    load-balance per-packet;&lt;br /&gt;
    accept&lt;br /&gt;
 [routing-options forwarding-table] &lt;br /&gt;
 export lbalancing;&lt;br /&gt;
&lt;br /&gt;
Для поверки работоспособности detour:&lt;br /&gt;
 show rsvp session detail&lt;br /&gt;
 ...&lt;br /&gt;
 Detour is Up&lt;br /&gt;
 Detour Record route: &amp;lt;self&amp;gt; 192.168.86.29 192.168.86.1 192.168.86.13 192.168.86.33 192.168.86.38&lt;br /&gt;
&lt;br /&gt;
На транзитном: &lt;br /&gt;
 glenlivet&amp;gt; show rsvp session transit detail lsp name dalwhinnie-to-oban&lt;br /&gt;
 ...&lt;br /&gt;
 Detour Record route: 192.168.86.6 &amp;lt;self&amp;gt; 192.168.86.45 192.168.86.42 192.168.86.13 192.168.86.33 192.168.86.38&lt;br /&gt;
&lt;br /&gt;
=Secondary path=&lt;br /&gt;
Строим параллельно дополнительные path для LSP.&lt;br /&gt;
&lt;br /&gt;
Primary path считается основным path. Если один из линков или роутеров на primary path упадет, трафик пойдет по secondary. Но как только primary path станет доступным, трафик вернется обратно на primary. Чтобы избежать возвращения трафика на primary path, можно настроить два или более secondary путей, не настраивая ни одного primary, в таком случае трафик будут переходить с одного secondary на другой secondary, только при падении secondary (исключаем переход трафика при восстановлении primary). &lt;br /&gt;
&lt;br /&gt;
Все secondary - одинаковы, порядок их использования зависит от расположения в конфигурации.&lt;br /&gt;
&lt;br /&gt;
Восстановление упавших линков производится по очереди как они упали, не одновременно.&lt;br /&gt;
&lt;br /&gt;
''Standby'' в конфигурации позволяет строить secondary LSP параллельно (по времени) с основным LSP.&lt;br /&gt;
&lt;br /&gt;
В конфиге можно задать standby как на уровне label-switched-path, так и относительно конкретного secondary.&lt;br /&gt;
&lt;br /&gt;
По дефолту все атрибуты primary path будут наследоваться secondary или standby path (priority/hold/bandwidth), если явно не указано другого поведения.&lt;br /&gt;
&lt;br /&gt;
Можно изменить дефолтное поведение выбора активного пути:&lt;br /&gt;
*'''select uniconditional''' - более приоритетный - если хотя бы у одного path а рамках одной LSP будет задан этот параметр, то все path будут наследовать именно это поведение. Этот параметр позволяет оставаться активным даже тому path, который деградирует или вообще в состоянии down.&lt;br /&gt;
*'''select manual''' - это стандартный механизм, если path -&amp;gt; down, то активным выбирается другой path.&lt;br /&gt;
&lt;br /&gt;
Если в конфигурации ''mpls path'' не указано дополнительных атрибутов (loose, strict, просто next-hop, ...), то просто будет построен лучший путь.&lt;br /&gt;
&lt;br /&gt;
Всегда лучше задавать некие атрибуты, чтобы secondary не повторяли primary или друг друга.&lt;br /&gt;
&lt;br /&gt;
Есть параметры, которые позволяют не сразу переходить на восстановленный primary LSP:&lt;br /&gt;
*'''retry-timer''': время между попытками поднять упавший primary path. По умолчанию - 30 сек&lt;br /&gt;
*'''retry-limit''': кол-во неудачных попыток поднять упавший primary path. По умолчанию - 0. Если лимит достигли, то требуется ручками рестарануть сигналинг.&lt;br /&gt;
*'''revert-timer''': min время, кот primary path должен быть в состоянии up, до того как трафик перейдет на него. По дефолту - 60 сек. Если устанавливаем в 0, то не перестраивается впринцепе.&lt;br /&gt;
&lt;br /&gt;
'''Минусы:'''&lt;br /&gt;
* Долгое реагирование, из-за того, что ingress принимает решение о переходе на secondary LSP.&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
 [edit protocols mpls]  R1# show  label-switched-path R1-to-R4 { &lt;br /&gt;
 	to 10.0.0.3; &lt;br /&gt;
 	primary via-blair; &lt;br /&gt;
 	secondary via-tormore { &lt;br /&gt;
 		standby; &lt;br /&gt;
 	}	 &lt;br /&gt;
 } &lt;br /&gt;
 path via-tormore { &lt;br /&gt;
 	10.200.86.9 loose; &lt;br /&gt;
 }  path via-blair { &lt;br /&gt;
 	192.168.10.15 strict; &lt;br /&gt;
 	192.168.10.4 strict; &lt;br /&gt;
 	192.168.10.55 strict; &lt;br /&gt;
 } &lt;br /&gt;
Проверка:&lt;br /&gt;
 dalwhinnie&amp;gt; show mpls lsp name dalwhinnie-to-oban detail Ingress LSP: 2 sessions&lt;br /&gt;
 ...&lt;br /&gt;
 '''*Primary via-blair State:Up'''&lt;br /&gt;
 Received RRO (ProtectionFlag 1=Available 2=InUse 4=B/W 8=Node 10=SoftPreempt 20=Node-ID): 192.168.86.5 192.168.86.9 192.168.86.25 &lt;br /&gt;
 '''Standby via-tormore State: Up'''&lt;br /&gt;
 Received RRO (ProtectionFlag 1=Available 2=InUse 4=B/W 8=Node 10=SoftPreempt 20=Node-ID): 192.168.86.29 192.168.86.1 192.168.86.13 192.168.86.33 192.168.86.38&lt;br /&gt;
&lt;br /&gt;
=Loop-Free Alternates in IGPs=&lt;br /&gt;
Подробно не рассматривается в книге. Этот метод может сделать привлекательным использование LDP для сети, которой нужны MPLS-службы (L2VPN, L3VPN, VPLS), но нет необходимости в Traffic Engineering.&lt;br /&gt;
Конфигурируется добавлением опций «link-protection» или «node-link protection» в настройку интерфейса в протоколе ospf или IS-IS. При этом IGP на каждом роутере как-будто убирает из топологии линк (в случае с link protection) или ноду (node-link protection), пересчитывает маршруты с новой топологией и вставляет их в PFE. &lt;br /&gt;
&lt;br /&gt;
Добавлением же опции «no-eligible-backup» можно предотвратить интерфейс от обслуживания бэкапного трафика.&lt;br /&gt;
&lt;br /&gt;
Дополнительно требуется включить per-packet load-balancing чтобы все next-hop попали с таблицу форвардинга.&lt;br /&gt;
&lt;br /&gt;
 [edit protocols] &lt;br /&gt;
 ps@dalwhinnie# show ospf &lt;br /&gt;
 area 0.0.0.0 {&lt;br /&gt;
 interface ge-0/0/0.0 {&lt;br /&gt;
                link-protection;&lt;br /&gt;
 interface ge-0/0/1.0 { &lt;br /&gt;
                node-link-protection;&lt;br /&gt;
&lt;br /&gt;
 [policy-options policy-statement lbalancing]&lt;br /&gt;
 then {&lt;br /&gt;
    load-balance per-packet;&lt;br /&gt;
    accept&lt;br /&gt;
 [routing-options forwarding-table] &lt;br /&gt;
 export lbalancing;&lt;br /&gt;
&lt;br /&gt;
=Priorities and Preemption=&lt;br /&gt;
Процесс построения LSP может регулироваться приоритетами.&lt;br /&gt;
&lt;br /&gt;
Разделяют 2 приоритета: '''setup priority''', '''hold priority'''.&lt;br /&gt;
&lt;br /&gt;
Setup priority должен быть сильнее (ближе к 0), чтобы LSP имела право вперед других построиться.&lt;br /&gt;
  &lt;br /&gt;
0 - более приоритетный, 7 - менее приоритетный&lt;br /&gt;
&lt;br /&gt;
Дефолтные настройки: setup = 7, hold = 0. По сути это отсутствие вытеснения.&lt;br /&gt;
&lt;br /&gt;
setup не может быть сильнее hold.&lt;br /&gt;
&lt;br /&gt;
Нормальная практика указывать одинаковый setup и hold priority.&lt;br /&gt;
&lt;br /&gt;
Чтобы не происходило жесткого вытеснения с потерей трафика на более слабых LSP, можно использовать '''soft preemption'''.&lt;br /&gt;
&lt;br /&gt;
'''Soft-preemption:''' при (перед) вытеснением LSP, пытается переустановить эту LSP по новому пути. Если это удается сделать, то трафик переходит на новую LSP, только после этого кладется старая.&lt;br /&gt;
&lt;br /&gt;
Ingress router выставляет soft-preemption flag в RRO. Если функция не поддерживается всеми роутерами на пути построения LSP, то все-равно LSP установится.&lt;br /&gt;
&lt;br /&gt;
 [edit protocols mpls label-switched-path to-oban]&lt;br /&gt;
 +           priority 5 2;  ''(setup hold)''&lt;br /&gt;
&lt;br /&gt;
=Optimization=&lt;br /&gt;
Без включенной оптимизации LSP перестраиваются только во время изменения топологии.&lt;br /&gt;
&lt;br /&gt;
По умолчанию, оптимизации отключена. Может быть произведена в ручном режиме или можно задать таймер, по которому она будет производиться автоматически.&lt;br /&gt;
&lt;br /&gt;
Правила нормальной оптимизции:&lt;br /&gt;
#CSPF метрика не должна быть выше&lt;br /&gt;
#Если метрика одинакова, то кол-во хопов должно быть меньше.&lt;br /&gt;
#Новый path не вызывает вытеснения.&lt;br /&gt;
#Не должно происходить усугубление заторов, для этого сравнивается available bandwidth на старых и новых линках, начиная с более загруженных.&lt;br /&gt;
#Уменьшает затор на 10%&lt;br /&gt;
&lt;br /&gt;
'''Aggressive''': оптимизация только на основании метрик IGP.&lt;br /&gt;
&lt;br /&gt;
 mortlach# set protocols mpls ?           &lt;br /&gt;
  optimize-aggressive  Run aggressive optimization algorithm based on IGP metric only&lt;br /&gt;
  optimize-timer       Periodical path reoptimizations (0..65535 seconds)&lt;br /&gt;
&lt;br /&gt;
==Adaptive mode==&lt;br /&gt;
Меняет стиль резервирования полосы для LSP. Если указываем в настройках на уровне label-switched-path, то для резервирования bandwidth разных LSP можно использовать один физ линк. (общий линк для разных LSP.) Помогает избежать двойного подсчета одного и того же трафика на общем линке.&lt;br /&gt;
&lt;br /&gt;
Но если задать adaptive на уровне primary или secondary path, то SE reservation будет работать только для primary или secondary path. То есть все-равно резервирование будет производиться дважды.&lt;br /&gt;
&lt;br /&gt;
Работает по принципу ''make-before-break''. То есть включает в себя и функции soft-preemption.&lt;br /&gt;
&lt;br /&gt;
#Устанавливает новый path с SE reservation (с тем же session ID).&lt;br /&gt;
#Передает трафик в новый path&lt;br /&gt;
#Кладет старый path&lt;br /&gt;
&lt;br /&gt;
 [edit protocols mpls label-switched-path ''test1'']&lt;br /&gt;
 set adaptive&lt;br /&gt;
&lt;br /&gt;
Типа резервирования: &lt;br /&gt;
*'''Fixed filter (FF)''': каждый session/sender/LSP имеет свой идентификатор. Каждая LSP резервирует свою bandwidth на линке.&lt;br /&gt;
*'''Shared Explicit (SE)''': Каждый session/sender/LSP имеет свой идентификатор. Но каждая LSP делит резервирование bandwidth с другими LSP на одном линке.&lt;br /&gt;
=Дополнительная информация=&lt;br /&gt;
*[[Глава 2. Label Distribution Protocols (RSVP, LDP)]]&lt;br /&gt;
*[[Traffic engineering]]&lt;br /&gt;
*[[Реализация MPLS в ядре сети]]&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=%D0%93%D0%BB%D0%B0%D0%B2%D0%B0_2._Label_Distribution_Protocols_(RSVP,_LDP)&amp;diff=2047</id>
		<title>Глава 2. Label Distribution Protocols (RSVP, LDP)</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=%D0%93%D0%BB%D0%B0%D0%B2%D0%B0_2._Label_Distribution_Protocols_(RSVP,_LDP)&amp;diff=2047"/>
		<updated>2021-07-15T18:26:37Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#description2: Принцип работы протокола. Настройка. RSVP auto-mesh. P2MP. LDP. Соседство. Cisco. LDP tunneling. Процесс построения. Проверка. Информация для подготовки к экзаменам Juniper.}}&lt;br /&gt;
=RSVP=&lt;br /&gt;
'''RSVP''' - ''resource reservation protocol'' - требует больше конфигурации для работы, чем LPD, но зато имеет больше полезных фич, таких как: TE, fast-failover, QoS, bandwidth reservation, LSP customization. &lt;br /&gt;
&lt;br /&gt;
LSP установлена и имеет свой ''record route'': список IP адресов интерфейсов, через которые проходит RSVP LSP, включая ingress и egress.&lt;br /&gt;
&lt;br /&gt;
Второй preference у RSVP: Когда внутри протокола требуется сравнение маршрутов. RSVP auto mesh - ''preference 2'' = 3. Если на сети будет построен RSVP туннель статический и auto-mesh, то предпочтительней будет статический. (preference 2: 1 &amp;lt; 3).&lt;br /&gt;
{{note| text=В LDP нет требования добавлять интерфейсы в protocols mpls, но family mpls включать нужно.}}&lt;br /&gt;
&lt;br /&gt;
== Принцип работы протокола ==&lt;br /&gt;
LDP - автоматом строит full mesh туннели до соседей.&lt;br /&gt;
RSVP - не просто строит туннели, а использует для построения TE + используются механизмы защиты трафика: FastRerote, LinkProtection...&lt;br /&gt;
&lt;br /&gt;
RSVP - протокол signaling.&lt;br /&gt;
&lt;br /&gt;
RSVP инкапсулируется сразу в ip.&lt;br /&gt;
&lt;br /&gt;
RSVP пакет стоит из объектов. Объект имеет тип, и поле данных.&lt;br /&gt;
&lt;br /&gt;
Типы сообщений:&lt;br /&gt;
*Path: запрос, чтобы LSP была построена: от ingress&lt;br /&gt;
*Resv: Резервирует ресурсы для LSP: от egress&lt;br /&gt;
*PathTear: удаляет path state и сообщает об этом: от LSR, где упала LSP к downstream&lt;br /&gt;
*ResvTear: удаляет reservation state: от LSR, где упала LSP к upstream&lt;br /&gt;
*PathErr: сообщение с ошибкой: к upstream&lt;br /&gt;
*ResvErr: сообщение с ошибкой: к downstream&lt;br /&gt;
&lt;br /&gt;
Объекты path message:&lt;br /&gt;
*SESSION_ID&lt;br /&gt;
*LABEL_REQUEST&lt;br /&gt;
*EXPLICIT_ROUTE: strict/loose list of routers&lt;br /&gt;
*RECORD_ROUTE: list of addresses of all routers in path&lt;br /&gt;
*SESSION_ATTRIBUTE&lt;br /&gt;
*RSVP_HOP: interface ip of router which send path message&lt;br /&gt;
&lt;br /&gt;
Для работы RSVP нужно:&lt;br /&gt;
#Включить протокол RSVP&lt;br /&gt;
#Конфигурируем туннель только на ingress. &lt;br /&gt;
&lt;br /&gt;
'''Ingress -&amp;gt; Egress:'''&lt;br /&gt;
При построении туннеля на Ingress (A) создается ip-пакет pathMessage, который состоит из:&lt;br /&gt;
# '''dst''': ip dst (192.168.0.4), по метриками внутреннего протокола узнает где конечный роутер.&lt;br /&gt;
# '''session ID''' - идентификатор rsvp сессии на control plane.  Все rsvp роутеры, через которые строится туннель - ассоциируют все сообщения для туннеля по session ID. Генерируется ingress роутером, состоит из router ID + какое-то число.&lt;br /&gt;
# '''label request''': определяет поведение транзитных маршрутизаторов, заставляет резервировать метки для туннеля.&lt;br /&gt;
&lt;br /&gt;
'''Transit router 1 (B):'''&lt;br /&gt;
1.Видит ''label request'', выделяет (запоминает, но никуда не записывает) для туннеля метку из свободных, ассоциирует ее с ''session ID''. &lt;br /&gt;
&lt;br /&gt;
'''Transit router 2 (C):'''&lt;br /&gt;
# Видит ''label request'', выделяет (запоминает, но никуда не записывает) для туннеля метку из свободных, ассоциирует ее с ''session ID''.&lt;br /&gt;
&lt;br /&gt;
'''Egress router (D):'''&lt;br /&gt;
# ''dst addres'' = его loopback =&amp;gt; он последний. Резервирует метку 3 (по дефлоту).&lt;br /&gt;
&lt;br /&gt;
Формирует '''ResvPath''' - основная его суть - проанонсировать зарезервированную метку предыдущему роутеру.&lt;br /&gt;
&lt;br /&gt;
'''Egress -&amp;gt; Ingress:'''&lt;br /&gt;
resvPath: session ID из PathMessage, label:  (то, что он зарезервировал) 3.&lt;br /&gt;
&lt;br /&gt;
'''Transit 2 (C):'''&lt;br /&gt;
# По session ID определяет какую метку он зарезервировал (30).&lt;br /&gt;
# Смотрит в label, видит 3. Понимает, что он должен передавать к egress пакет с меткой 3.&lt;br /&gt;
# mpls.0: 30 swap 3 = 30 pop&lt;br /&gt;
&lt;br /&gt;
'''Transit 1 (B):'''&lt;br /&gt;
# По session ID определяет какую метку он зарезервировал (20).&lt;br /&gt;
# Смотрит в label, видит 30. Понимает, что он должен передавать к egress пакет с меткой 30.&lt;br /&gt;
# mpls.0: 20 swap 30&lt;br /&gt;
&lt;br /&gt;
'''Ingress (A):'''&lt;br /&gt;
# inet.0: 192.168.0.4: -&amp;gt; BGP, push 30&lt;br /&gt;
&lt;br /&gt;
Туннель - это просто метки.&lt;br /&gt;
&lt;br /&gt;
'''При падении линка между роутерами:'''&lt;br /&gt;
Генерируются pathTear (в сторону ingress) и resvTear (в сторону egress), чтобы все транзитные роутеры освободили метки, а ingress понял, что этого туннеля больше нет.&lt;br /&gt;
&lt;br /&gt;
В это время IGP пересчитал топологию, ingress router увидел next-hop для egress роутера и rsvp заново начал строить туннель.&lt;br /&gt;
&lt;br /&gt;
Keepalive: Ingress роутер раз в 30 сек (по дефолту) обновляет состояние с помощью посылки pathMessage.&lt;br /&gt;
&lt;br /&gt;
resvMessage должен пройти по тому же пути, что и pathMessage.&lt;br /&gt;
Но маршрутизация может быть не симметричной.&lt;br /&gt;
отличие resv и path: dst add  - не loopback конечных роутеров, а адрес предыдущего роутера из ERO (также предотвращает зацикливание).&lt;br /&gt;
&lt;br /&gt;
Туннель может устанавливаться с требованиями к полосе.&lt;br /&gt;
Задается в bandwith - передается в объекте TSpec. &lt;br /&gt;
&lt;br /&gt;
Если RSVP не может установить туннель, то на проблемном участке генерируется pathErr - сообщение с кодом ошибки.&lt;br /&gt;
Bandwith - только для сигнализации, реально полосу не ограничивает.&lt;br /&gt;
&lt;br /&gt;
Если нужно провести траблшутинг, лучше делать тут: &lt;br /&gt;
 set protocol rsvp traceoptions file RSVP-trouble flag all detail&lt;br /&gt;
&lt;br /&gt;
RSVP поддерживает mtu discovery и fragmentstion на ingress роутере.&lt;br /&gt;
&lt;br /&gt;
RSVP поддерживает аутентификацию (MD5)&lt;br /&gt;
&lt;br /&gt;
RSPV может использовать Gracefull restart.&lt;br /&gt;
&lt;br /&gt;
RSVP может работать как point-to-multipoint =&amp;gt; можно исключить из ядра всякие multicast протоколы.&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
1. Включаем family mpls на интерфейсах, смотрящих в ядро. Эта настройка позволяет отправлять и получать пакеты с метками.&lt;br /&gt;
 [edit interfaces]&lt;br /&gt;
    set ge-0/0/2.0 family mpls&lt;br /&gt;
    set ge-0/0/3.0 family mpls&lt;br /&gt;
&lt;br /&gt;
2. Настраиваем LSP. И добавляем нужные интерфейсы в protocols mpls. Это позволяет запустить на указанных интерфейсах mpls и появиться в TED, как возможный ресурс для использования.&lt;br /&gt;
 &lt;br /&gt;
 [edit protocols mpls]&lt;br /&gt;
 	set label-switched-path R1-to-R5 {&lt;br /&gt;
 		to 10.200.86.3;&lt;br /&gt;
 	}&lt;br /&gt;
 	interface ge-0/0/2.0;&lt;br /&gt;
 	interface ge-0/0/3.0;&lt;br /&gt;
&lt;br /&gt;
3. Добавляем в протокол RSVP нужные интерфейсы.&lt;br /&gt;
 [edit protocols rsvp]&lt;br /&gt;
 	set interface ge-0/0/2.0&lt;br /&gt;
 	set interface ge-0/0/3.0&lt;br /&gt;
&lt;br /&gt;
4. На остальных роутерах требуется включить family mpls и добавить интерфейсы в protocols rsvp.&lt;br /&gt;
==RSVP auto-mesh==&lt;br /&gt;
Когда на сети используется RSVP, но для конкретных функций (L3VPN, VPLS, ...) требуется full-mesh, то чтобы не прописывать все LSP руками, можно использовать '''RSVP-full-mesh'''.&lt;br /&gt;
&lt;br /&gt;
Строится, когда: &lt;br /&gt;
* От PE пришел iBGP маршрут (inet.0, VPLS, L3VPN)&lt;br /&gt;
* IP PE из определенного диапазона.&lt;br /&gt;
 [edit routing-options]&lt;br /&gt;
 dynamic-tunnels {&lt;br /&gt;
    tunnel-1 {&lt;br /&gt;
        rsvp-te tunnel-1 {&lt;br /&gt;
            label-switched-path-template {&lt;br /&gt;
                default-template;&lt;br /&gt;
            }&lt;br /&gt;
            destination-networks {&lt;br /&gt;
                10.200.86.0/26;&lt;br /&gt;
&lt;br /&gt;
В книге описано, что просто туннель не поднимется (лаба на mx80), т.к. требуется маршрут до Lo PE с меткой в inet.0. '''Решение:''' Нужно временно включить LDP и set protocols mpls traffic-engineering bgp-igp-both-ribs'', ждем пока построятся RSVP LSP, потом отключаем LDP.&lt;br /&gt;
&lt;br /&gt;
Но по факту в лабе завелось и без дополнительных манипуляций с LDP (лаба на vSRX). =)&lt;br /&gt;
&lt;br /&gt;
В итоге, когда приходят пакеты по iBGP, то до ''protocol next-hop'' (Lo PE, который должен попадать в dest-networks) автоматически поднимается туннель.&lt;br /&gt;
 '''bgp.l3vpn.0''': 1 destinations, 1 routes (1 active, 0 holddown, 0 hidden)&lt;br /&gt;
 + = Active Route, - = Last Active, * = Both&lt;br /&gt;
 ''10.200.86.3:1212:12.12.12.12/32''&lt;br /&gt;
                   *[BGP/170] 12:34:36, localpref 100, from 10.200.86.3&lt;br /&gt;
                      AS path: I&lt;br /&gt;
                    &amp;gt; to 192.168.86.1 via ge-0/0/0.30, label-switched-path '''10.200.86.3:dt-rsvp-tunnel-1'''&lt;br /&gt;
&lt;br /&gt;
 '''bgp.l2vpn.0''': 1 destinations, 1 routes (1 active, 0 holddown, 0 hidden)&lt;br /&gt;
 + = Active Route, - = Last Active, * = Both&lt;br /&gt;
 ''10.200.86.9:1515:1:1/96''&lt;br /&gt;
                   *[BGP/170] 12:16:54, localpref 100, from 10.200.86.9&lt;br /&gt;
                      AS path: I&lt;br /&gt;
                    &amp;gt; to 192.168.86.1 via ge-0/0/0.30, label-switched-path '''10.200.86.9:dt-rsvp-tunnel-1'''&lt;br /&gt;
&lt;br /&gt;
 '''inet.3''': 3 destinations, 3 routes (3 active, 0 holddown, 0 hidden)&lt;br /&gt;
 + = Active Route, - = Last Active, * = Both&lt;br /&gt;
 10.200.86.0/26     *[Tunnel/300] 12:10:07&lt;br /&gt;
                      Tunnel&lt;br /&gt;
 ''10.200.86.3/32''     *[RSVP/7/3] 00:03:04, metric 4&lt;br /&gt;
                    &amp;gt; to 192.168.86.1 via ge-0/0/0.30, label-switched-path '''10.200.86.3:dt-rsvp-tunnel-1'''&lt;br /&gt;
 ''10.200.86.9/32''     *[RSVP/7/3] 00:03:04, metric 5&lt;br /&gt;
                    &amp;gt; to 192.168.86.1 via ge-0/0/0.30, label-switched-path '''10.200.86.9:dt-rsvp-tunnel-1'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 lagavulin&amp;gt; show mpls lsp name '''10.200.86.3:dt-rsvp-tunnel-1''' detail&lt;br /&gt;
 Ingress LSP: 2 sessions&lt;br /&gt;
 10.200.86.3&lt;br /&gt;
  From: 10.200.86.7, State: Up, ActiveRoute: 0, LSPname: 10.200.86.3:dt-rsvp-tunnel-1&lt;br /&gt;
  ActivePath:  (primary)&lt;br /&gt;
  PathDomain: Inter-domain&lt;br /&gt;
  LSPtype: '''Dynamic Configured'''&lt;br /&gt;
  LoadBalance: Random&lt;br /&gt;
  Encoding type: Packet, Switching type: Packet, GPID: IPv4&lt;br /&gt;
 *Primary                    State: Up&lt;br /&gt;
    Priorities: 7 0&lt;br /&gt;
    SmartOptimizeTimer: 180&lt;br /&gt;
    Computed ERO (S [L] denotes strict [loose] hops): (CSPF metric: 4)&lt;br /&gt;
 192.168.86.1 S 192.168.86.41 S 192.168.86.50 S 192.168.86.25 S&lt;br /&gt;
    Received RRO (ProtectionFlag 1=Available 2=InUse 4=B/W 8=Node 10=SoftPreempt 20=Node-ID):&lt;br /&gt;
          192.168.86.1 192.168.86.41 192.168.86.50 192.168.86.25&lt;br /&gt;
&lt;br /&gt;
*Можно добавлять разные фичи TE:&lt;br /&gt;
 [edit protocols mpls]&lt;br /&gt;
 label-switched-path default-template {&lt;br /&gt;
    template;&lt;br /&gt;
    link-protection;&lt;br /&gt;
&lt;br /&gt;
*Если до одного и того же Lo PE есть динамический и статический LSP, то будет выбран статический, т.к. у него ''preference 2'' меньше:&lt;br /&gt;
 inet.3: 3 destinations, 4 routes (3 active, 0 holddown, 0 hidden)&lt;br /&gt;
 10.200.86.3/32     *[RSVP/7/'''[[1]]'''] 00:00:26, metric 4&lt;br /&gt;
                    &amp;gt; to 192.168.86.1 via ge-0/0/0.30, label-switched-path lagavulin-to-oban&lt;br /&gt;
                    [RSVP/7/'''[[3]]'''] 00:02:32, metric 4&lt;br /&gt;
                    &amp;gt; to 192.168.86.1 via ge-0/0/0.30, label-switched-path 10.200.86.3:dt-rsvp-tunnel-1&lt;br /&gt;
*Если по iBGP перестают прилетать маршруты, то туннель через 15 минут умрет: &lt;br /&gt;
 lagavulin&amp;gt; show dynamic-tunnels database&lt;br /&gt;
 Table: inet.3&lt;br /&gt;
 Destination-network: 10.200.86.0/26&lt;br /&gt;
 Tunnel to: 10.200.86.9/32 ('''expires in 00:14:46 seconds''')&lt;br /&gt;
  Reference count: 0&lt;br /&gt;
  Next-hop type: rsvp-te&lt;br /&gt;
    10.200.86.9:dt-rsvp-tunnel-1&lt;br /&gt;
==P2MP==&lt;br /&gt;
В случае использования '''P2P LSP''', source PE должен расплодить несколько копий трафика и послать по разным LSP.&lt;br /&gt;
&lt;br /&gt;
В случае использования '''P2MP''': source PE отправляет трафик, копирование трафика происходит на определенном transit роутере, где происходит дальнейшее разветвление путей передачи трафика (branch point).&lt;br /&gt;
&lt;br /&gt;
Таким образом уменьшится число копий трафика в сети. Копирование будет происходить только на branch points. &lt;br /&gt;
&lt;br /&gt;
Сам туннель будет состоять также из 3 RSVP сессий.&lt;br /&gt;
&lt;br /&gt;
Ingress посылает path message с session ID - одинаковый для всех leaf, label request, передаем router-ID удаленного роутера.&lt;br /&gt;
&lt;br /&gt;
При построении отдельного Leaf - на всех транзитных роутерах будет выделена '''одна и та же метка'''.&lt;br /&gt;
&lt;br /&gt;
Мы руками задаём от какого PE к какому строить туннель, потому что только мы знаем где расположен source.&lt;br /&gt;
===Config===&lt;br /&gt;
Задаем на ingress PE:&lt;br /&gt;
 dalwhinnie&amp;gt; show configuration protocols mpls&lt;br /&gt;
 no-cspf;&lt;br /&gt;
 label-switched-path dalwhinnie-to-oban {&lt;br /&gt;
    to 10.200.86.3;&lt;br /&gt;
    p2mp p2mp1;&lt;br /&gt;
    primary via_glenlivet;&lt;br /&gt;
 label-switched-path dalwhinnie-to-macduff {&lt;br /&gt;
    to 10.200.86.8;&lt;br /&gt;
    p2mp p2mp1;&lt;br /&gt;
    primary via_glenlivet;&lt;br /&gt;
 label-switched-path dalwhinnie-to-talisker {&lt;br /&gt;
    to 10.200.86.4;&lt;br /&gt;
    p2mp p2mp1;&lt;br /&gt;
    primary via_glenlivet;&lt;br /&gt;
 path via_glenlivet {&lt;br /&gt;
    10.200.86.6 loose;&lt;br /&gt;
&lt;br /&gt;
 dalwhinnie&amp;gt; show mpls lsp p2mp ingress&lt;br /&gt;
 Ingress LSP: 1 sessions&lt;br /&gt;
 P2MP name: p2mp1, P2MP branch count: 3&lt;br /&gt;
 To              From            State Rt P     ActivePath       LSPname&lt;br /&gt;
 10.200.86.3     10.200.86.5     Up     0 *     via_glenlivet    dalwhinnie-to-oban&lt;br /&gt;
 10.200.86.8     10.200.86.5     Up     0 *     via_glenlivet    dalwhinnie-to-macduff&lt;br /&gt;
 10.200.86.4     10.200.86.5     Up     0 *     via_glenlivet    dalwhinnie-to-talisker&lt;br /&gt;
&lt;br /&gt;
 glenlivet&amp;gt; show mpls lsp p2mp transit&lt;br /&gt;
 Transit LSP: 5 sessions&lt;br /&gt;
 P2MP name: p2mp1, P2MP branch count: 3&lt;br /&gt;
 To              From            State   Rt Style Labelin Labelout LSPname&lt;br /&gt;
 10.200.86.3     10.200.86.5     Up       0  1 SE  '''300144'''   300032 dalwhinnie-to-oban&lt;br /&gt;
 10.200.86.8     10.200.86.5     Up       0  1 SE  '''300144'''   300256 dalwhinnie-to-macduff&lt;br /&gt;
 10.200.86.4     10.200.86.5     Up       0  1 SE  '''300144'''   300256 dalwhinnie-to-talisker&lt;br /&gt;
&lt;br /&gt;
 mortlach&amp;gt; show mpls lsp p2mp transit&lt;br /&gt;
 Transit LSP: 2 sessions&lt;br /&gt;
 P2MP name: p2mp1, P2MP branch count: 2&lt;br /&gt;
 To              From            State   Rt Style Labelin Labelout LSPname&lt;br /&gt;
 10.200.86.8     10.200.86.5     Up       0  1 SE  '''300256'''        3 dalwhinnie-to-macduff&lt;br /&gt;
 10.200.86.4     10.200.86.5     Up       0  1 SE  '''300256'''        3 dalwhinnie-to-talisker&lt;br /&gt;
&lt;br /&gt;
 blair&amp;gt; show mpls lsp p2mp transit&lt;br /&gt;
 Transit LSP: 1 sessions&lt;br /&gt;
 P2MP name: p2mp1, P2MP branch count: 1&lt;br /&gt;
 To              From            State   Rt Style Labelin Labelout LSPname&lt;br /&gt;
 10.200.86.3     10.200.86.5     Up       0  1 SE  '''300032'''        3 dalwhinnie-to-oban&lt;br /&gt;
&lt;br /&gt;
=LDP=&lt;br /&gt;
'''LDP''' - ''label distribution protocol'' - намного более простой в настройке, но малофункциональный сигнальный протокол, по сравнению с RSVP.&lt;br /&gt;
&lt;br /&gt;
Типы сообщений:&lt;br /&gt;
*Discovery: = hello multicast 224.0.0.2 на 646 порт.&lt;br /&gt;
*Session: после обмена hello, роутер с бОльшим ip устанавливает TCP сессию со вторым роутером с помощью session Messages.&lt;br /&gt;
*Advertisement: создание, изменение и удаление меток по запросу от соседей.&lt;br /&gt;
*Notification: error и другая информаци о соседях.&lt;br /&gt;
&lt;br /&gt;
Поддерживает MD5 аутентификацию, gracefull restart.&lt;br /&gt;
==Соседство==&lt;br /&gt;
[[Файл:ldp.png]]&lt;br /&gt;
&lt;br /&gt;
При включении LDP на роутере, он пытается установить соседство со всеми роутерами, на которых настроен LDP. Mulicast на '''UDP 646''' шлют hello пакеты (раз в 5 сек, dead interval = 15 сек). Другой роутер слушает hello на этом же порту, отвечает hello, т.о. устанавливается соседство. Также происходит и поддержание соседства. Если сосед не отвечает 15 сек, то соседство рвется.&lt;br /&gt;
&lt;br /&gt;
Инициатором построения туннелей выступает egress роутер. ingress роутером будет каждый роутер на сети с настроенным LDP.&lt;br /&gt;
&lt;br /&gt;
Роутер (A) анонсирует свой Lo соседнему роутеру (В). Этот анонс попадает в inet.3. Т.к. B - прямой сосед А, и между ними однохоповый туннель, то анонс от А придет с меткой 3. &lt;br /&gt;
&lt;br /&gt;
Роутер B начинает анонсировать Lo роутера А остальным своим соседям (C,D), чтобы те начали строить туннели до роутера А. На роутерах C,D анонс от B поместится в inet.3, с ''push'' метка. А на роутере B в таблице mpls.0 - появляется запись для туннеля с ''swap''.&lt;br /&gt;
&lt;br /&gt;
В итоге - full mesh на сети. На всех роутерах в inet.3 будет Lo роутера А.&lt;br /&gt;
{{note|text=Установление LDP LSP нельзя контролировать, они следуют кратчайшему пути по IGP.}}&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; show ldp neighbor&lt;br /&gt;
'''Для исключения петель: '''&lt;br /&gt;
&lt;br /&gt;
* На каждом роутере для каждого соседа создается 2 LDP database: на вход и на выход. LDP database, поступившая на вход, сравнивается с топологией IGP. В inet.3 попадает тот анонс, который пришел с того же next-hop, что указан для пришедшего Lo.&lt;br /&gt;
* То, что пришло и не совпало с IGP - сохраняется, но не используется. ''Liberal protection''.&lt;br /&gt;
&lt;br /&gt;
'''Без настроенного link-state IGP (OSPF или ISIS) LDP работать не будет!''' Скорость перестроения - зависит от перестроения по IGP.&lt;br /&gt;
&lt;br /&gt;
После того, как установилось соседство - между роутерами устанавливается TCP сессия для обмена метками и пакетами по unicast.&lt;br /&gt;
 &amp;gt; show ldp session &lt;br /&gt;
Заполняется mpls.0&lt;br /&gt;
Заполняется inet.3.&lt;br /&gt;
&lt;br /&gt;
Если роутера имеют 2 линка между собой, то установится 2 соседства. Но сессия будет установлена одна.&lt;br /&gt;
&lt;br /&gt;
На сессии можно включить authentification md5.&lt;br /&gt;
&lt;br /&gt;
==Cisco==&lt;br /&gt;
В Cisco дефолтное поведение немного другое. Анонсируются не только Lo, а полностью таблица маршрутизации и сразу вставляется в GRT (global routing table).&lt;br /&gt;
&lt;br /&gt;
Чтобы на Juniper получить такое же поведение: &lt;br /&gt;
# Пишем egress-policy: где указано что требуется анонсировать из таблицы маршрутизации по протоколу LDP. Policy применяется как egress policy к протоколу LDP.&lt;br /&gt;
# На всех остальных роутерах требуется перенести inet.3 в inet.0.&lt;br /&gt;
&lt;br /&gt;
Это может понадобиться только в случае, если мы делаем редистрибьюцию внешних префиксов во внутренний протокол. '''- чего провайдер делать не должен.'''&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
&lt;br /&gt;
1. Включаем family mpls:&lt;br /&gt;
 [edit interfaces]&lt;br /&gt;
 set ge-0/0/2.0 family mpls&lt;br /&gt;
 set ge-0/0/3.0 family mpls&lt;br /&gt;
 set Lo0.0 family mpls&lt;br /&gt;
&lt;br /&gt;
2. Добавляем интерфейсы в protocols ldp&lt;br /&gt;
 [edit protocols ldp]&lt;br /&gt;
 	set interface ge-0/0/2.0&lt;br /&gt;
 	set interface ge-0/0/3.0&lt;br /&gt;
 	set interface Lo0.0&lt;br /&gt;
&lt;br /&gt;
3. Если нужен не full-mesh в LDP домене, то настраиваются статические сессии. Можно с аутентификацией, можно без: &lt;br /&gt;
 [edit protocols ldp]&lt;br /&gt;
  set session 10.200.86.7 authentication-key ''pass''&lt;br /&gt;
&lt;br /&gt;
4. На остальных роутерах в mpls домене делаем все тоже самое.&lt;br /&gt;
&lt;br /&gt;
Можно проверить что будет происходить с меткой на каждом хопе LDP LSP:&lt;br /&gt;
 show route protocol ldp 10.200.86.7&lt;br /&gt;
 show ldp router&lt;br /&gt;
 show route table inet.3  - если нет Lo нужного нам роутера, то проверяем есть ли Lo в inet.0 (IGP)&lt;br /&gt;
&lt;br /&gt;
Среди полезных настроек, которые используются практически во всех провайдерских сетях:&lt;br /&gt;
*''set protocols ldp track-igp-metric''- использование вместо дефолтной метрики LDP метрики IGP протокола.&lt;br /&gt;
*''set protocols ldp explicit-null'' - снятие метки на последнем роутер. То есть последний роутер будет слать от себя label 0. Полезно, когда на сети используется QOS.&lt;br /&gt;
*''set protocols isis/ospf ldp-synchronization''. Настраиваете в IGP протоколах. Работает только на p2p линках. Дает возможность IGP протоколу адвертайзить линк с максимальной метрикой, пока LDP туннель не простроится через этот линк. Таким образом линк не пропадет из топологии IGP, но и будет самым не выгодным для передачи трафика по нему.&lt;br /&gt;
 [edit configuration protocols isis] &lt;br /&gt;
 interface ge-0/0/0.114 {&lt;br /&gt;
    ldp-synchronization;&lt;br /&gt;
    point-to-point;&lt;br /&gt;
&lt;br /&gt;
*''set protocols ldp deaggregate'' - по одному и тому же пути будет строиться несколько LSP.&lt;br /&gt;
По умолчанию в Jun при передачи нескольких префиксов в LDP, эти префиксы привязываются к одной метке и агрегируются в один FEC (equivalence forwarding class). Одна метка = одна LSP.&lt;br /&gt;
&lt;br /&gt;
Deaggregate убивает это поведение и для каждого префикса будет биндиться своя метка (а значит и LSP).&lt;br /&gt;
&lt;br /&gt;
дефолтное:&lt;br /&gt;
 vlad@r5&amp;gt; show route protocol ldp &lt;br /&gt;
 172.30.5.1/32      *[LDP/9] 00:01:18, metric 20&lt;br /&gt;
                    &amp;gt; to 172.30.0.29 via ge-0/0/0.145, Push 300032&lt;br /&gt;
 192.168.1.0/24     *[LDP/9] 00:01:18, metric 30&lt;br /&gt;
                    &amp;gt; to 172.30.0.29 via ge-0/0/0.145, Push 300032&lt;br /&gt;
&lt;br /&gt;
set deaggregate:&lt;br /&gt;
 vlad@r5&amp;gt; show route protocol ldp    &lt;br /&gt;
 172.30.5.1/32      *[LDP/9] 00:00:14, metric 20&lt;br /&gt;
                    &amp;gt; to 172.30.0.29 via ge-0/0/0.145, Push 300272&lt;br /&gt;
 192.168.1.0/24     *[LDP/9] 00:00:14, metric 30&lt;br /&gt;
                    &amp;gt; to 172.30.0.29 via ge-0/0/0.145, Push 300240&lt;br /&gt;
&lt;br /&gt;
*по дефолту в ldp передается только адрес lo роутера. Если нужно объявить еще какие-то префиксы, то можно сделать это с помощью policy. '''Но нужно не забыть добавить в него lo ip!!'''.&lt;br /&gt;
 [edit protocols ldp]&lt;br /&gt;
   egress-policy export-ldp;&lt;br /&gt;
 [edit policy-options policy-statement export-ldp] &lt;br /&gt;
 term 1 {&lt;br /&gt;
    from {&lt;br /&gt;
        protocol direct;&lt;br /&gt;
        route-filter 192.168.1.0/24 exact;&lt;br /&gt;
        route-filter 172.30.5.1/32 exact;&lt;br /&gt;
    then accept;&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; show route protocol ldp    &lt;br /&gt;
 inet.3: 4 destinations, 4 routes (4 active, 0 holddown, 0 hidden) &lt;br /&gt;
 192.168.1.0/24     *[LDP/9] 00:00:09, metric 20&lt;br /&gt;
                    &amp;gt; to 172.30.0.13 via ge-0/0/0.123, Push 0&lt;br /&gt;
&lt;br /&gt;
'''Обычно не стоит вопрос о том какой протокол использовать. Оба протокола друг друга просто дополняют.''' У двух протоколов разные preference, поэтому BGP будет выбирать RSVP, как более приоритетный.&lt;br /&gt;
&lt;br /&gt;
=LDP tunneling=&lt;br /&gt;
Комбинация LDP и RSVP. Core - RSVP + TE, доступ - LDP.&lt;br /&gt;
&lt;br /&gt;
==Процесс построения==&lt;br /&gt;
&lt;br /&gt;
[[Файл:ldp_tunneling.png]]&lt;br /&gt;
* Роутер A (PE) - LDP. Egress: начинает анонсировать себя с меткой 3 в сторону B.&lt;br /&gt;
* Роутер B (PE) - LDP + RSVP. Анонс LoA с меткой 20 в сторону C. B: '''mpls.0''': 20 pop -&amp;gt; A&lt;br /&gt;
* Роутер C (P)  - RSVP (с LDP-tunneling). Анонс LoA с меткой 30 в сторону E. С: '''mpls.0''': 30 swap 20 -&amp;gt; B.&lt;br /&gt;
* Роутер D (P)  - между E&amp;lt;&amp;gt;C - RSVP LSP, где D - предпоследний роутер.&lt;br /&gt;
* Роутер E (P)  - LDP + RSVP. Анонс LoA с меткой 40 в сторону F. E: '''mpls.0''': 40 swap 30 -&amp;gt; C. Но C не direct connected, а доступен через туннель =&amp;gt; идем смотреть в inet.3. E: '''inet.3''': LoC push 100 -&amp;gt; D. =&amp;gt; E: '''mpls.0''': 40 swap 30 push 100&lt;br /&gt;
* Роутер F (PE) - LDP. Ingress: '''inet.3''': LoA: push 40 -&amp;gt; E.&lt;br /&gt;
&lt;br /&gt;
В обратную сторону строится точно также.&lt;br /&gt;
&lt;br /&gt;
Когда туннель построен, между ingress (C) и egress (E) роутерами RSVP LSP установится LDP соседство! Устанавливается по UDP 646 на Lo P (''берется из конфигурации туннеля''), ''не hello механизм, но тоже работает’’.&lt;br /&gt;
&lt;br /&gt;
Обязательно на P роутерах включить в LDP Lo, чтобы поднялся туннель C - E.&lt;br /&gt;
&lt;br /&gt;
Схема работает только в пределах области.&lt;br /&gt;
&lt;br /&gt;
При включенном LDP tunneling будут видны скрытые маршруты в inet.3&lt;br /&gt;
&lt;br /&gt;
Можно использовать, когда не все устройства в сети поддерживают RSVP, но на ядре требуется TE. Также TE как таковой не требуется вообще на PE, нужно только на ядре, на P роутерах. Поэтому RSVP можно запустить только на ядре, а PE будут подцепляться по LDP.&lt;br /&gt;
&lt;br /&gt;
При конфигурации может возникнуть проблема с переносом маршрутов из inet.3 в inet.0 (на PE роутерах). Решается как обычно: ''set protocols mpls traffic-engineering bgp-ibgp-both-ribs''. Или любым другим способом.&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
[[Файл:ldp_tunneling_laba.png]]&lt;br /&gt;
&lt;br /&gt;
'''PE (LDP + RSVP)''':&lt;br /&gt;
 [protocols mpls]&lt;br /&gt;
    traffic-engineering bgp-igp-both-ribs;&lt;br /&gt;
    label-switched-path talisker-to-oban {&lt;br /&gt;
       to 10.200.86.3;&lt;br /&gt;
       ldp-tunneling;&lt;br /&gt;
 [protocols ldp]&lt;br /&gt;
    interface ge-0/0/0.70;&lt;br /&gt;
    interface ge-0/0/0.120;&lt;br /&gt;
    interface all;&lt;br /&gt;
'''С другой стороны на PE''':&lt;br /&gt;
 [protocols mpls]&lt;br /&gt;
    traffic-engineering bgp-igp-both-ribs;&lt;br /&gt;
    label-switched-path oban-to-talisker {&lt;br /&gt;
       to 10.200.86.4;&lt;br /&gt;
       ldp-tunneling;&lt;br /&gt;
&lt;br /&gt;
==Проверка==&lt;br /&gt;
Между крайних PE,  на которых настроено туннелирование, установили соседство между собой по LDP:&lt;br /&gt;
 talisker&amp;gt; show ldp neighbor&lt;br /&gt;
 Address            Interface          Label space ID         Hold time&lt;br /&gt;
 10.200.86.3        lo0.0              10.200.86.3:0            42&lt;br /&gt;
&lt;br /&gt;
На PE, к которому подключается CE:&lt;br /&gt;
 macduff&amp;gt; show route 10.200.86.1&lt;br /&gt;
 inet.0: 30 destinations, 40 routes (30 active, 0 holddown, 0 hidden)&lt;br /&gt;
 10.200.86.1/32     *[LDP/9] 00:19:03, metric 1&lt;br /&gt;
                    &amp;gt; to 192.168.86.13 via ge-0/0/0.70, Push 300016&lt;br /&gt;
                    [OSPF/10] 00:19:03, metric 4&lt;br /&gt;
                    &amp;gt; to 192.168.86.13 via ge-0/0/0.70&lt;br /&gt;
&lt;br /&gt;
 talisker&amp;gt; show route label 300016 detail&lt;br /&gt;
 mpls.0: 14 destinations, 14 routes (14 active, 0 holddown, 0 hidden)&lt;br /&gt;
 300016 (1 entry, 1 announced)&lt;br /&gt;
        *LDP    Preference: 9&lt;br /&gt;
                Next hop type: Router, Next hop index: 548&lt;br /&gt;
                Address: 0x934c3b8&lt;br /&gt;
                Next-hop reference count: 2&lt;br /&gt;
                Next hop: 192.168.86.33 via ge-0/0/0.120 weight 0x1, selected&lt;br /&gt;
                Label-switched-path talisker-to-oban&lt;br /&gt;
                Label operation: Swap 299776, Push 299968(top)&lt;br /&gt;
                Label TTL action: prop-ttl, prop-ttl(top)&lt;br /&gt;
                State: &amp;lt;Active Int NhAckRequest&amp;gt;&lt;br /&gt;
                Local AS:  1111&lt;br /&gt;
                Age: 19:37      Metric: 1&lt;br /&gt;
                Task: LDP&lt;br /&gt;
                Announcement bits (1): 0-KRT&lt;br /&gt;
                AS path: I&lt;br /&gt;
                Prefixes bound to route: 10.200.86.1/32&lt;br /&gt;
&lt;br /&gt;
 tormore&amp;gt; show route label 299968 detail&lt;br /&gt;
 mpls.0: 18 destinations, 18 routes (18 active, 0 holddown, 0 hidden)&lt;br /&gt;
 299968(S=0) (1 entry, 1 announced)&lt;br /&gt;
        *RSVP   Preference: 7/1&lt;br /&gt;
                Next hop type: Router, Next hop index: 581&lt;br /&gt;
                Address: 0x934d258&lt;br /&gt;
                Next-hop reference count: 2&lt;br /&gt;
                Next hop: 192.168.86.38 via ge-0/0/0.130 weight 0x1, selected&lt;br /&gt;
                Label-switched-path talisker-to-oban&lt;br /&gt;
                Label operation: Pop&lt;br /&gt;
                State: &amp;lt;Active Int AckRequest&amp;gt;&lt;br /&gt;
                Local AS:  1111&lt;br /&gt;
                Age: 1:09:29    Metric: 1&lt;br /&gt;
                Task: RSVP&lt;br /&gt;
                Announcement bits (1): 0-KRT&lt;br /&gt;
                AS path: I&lt;br /&gt;
&lt;br /&gt;
 oban&amp;gt; show route label 299776 detail&lt;br /&gt;
 mpls.0: 14 destinations, 14 routes (14 active, 0 holddown, 0 hidden)&lt;br /&gt;
 299776 (1 entry, 1 announced)&lt;br /&gt;
        *LDP    Preference: 9&lt;br /&gt;
                Next hop type: Router, Next hop index: 544&lt;br /&gt;
                Address: 0x934c568&lt;br /&gt;
                Next-hop reference count: 2&lt;br /&gt;
                Next hop: 192.168.86.26 via ge-0/0/0.110, selected&lt;br /&gt;
                Label operation: Pop&lt;br /&gt;
                State: &amp;lt;Active Int&amp;gt;&lt;br /&gt;
                Local AS:  1111&lt;br /&gt;
                Age: 26:53      Metric: 1&lt;br /&gt;
                Task: LDP&lt;br /&gt;
                Announcement bits (1): 0-KRT&lt;br /&gt;
                AS path: I&lt;br /&gt;
                Prefixes bound to route: 10.200.86.1/32&lt;br /&gt;
&lt;br /&gt;
=Дополнительная информация=&lt;br /&gt;
*[[Глава 2. RSVP]]&lt;br /&gt;
*[[Глава 1. Основы MPLS и VPN]]&lt;br /&gt;
*[[Traffic engineering]]&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=%D0%93%D0%BB%D0%B0%D0%B2%D0%B0_1._%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_MPLS_%D0%B8_VPN&amp;diff=2046</id>
		<title>Глава 1. Основы MPLS и VPN</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=%D0%93%D0%BB%D0%B0%D0%B2%D0%B0_1._%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_MPLS_%D0%B8_VPN&amp;diff=2046"/>
		<updated>2021-07-15T18:25:20Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#description2:Зачем нужен MPLS. Метки, LSP. Терминология. PHP, UHP. inet.3, MPLS routing table. Информация для подготовки к экзаменам Juniper.}}&lt;br /&gt;
===Причины появления и плюсы использования MPLS===&lt;br /&gt;
* Уменьшилось время route lookup, за счет использования меток для передачи трафика.&lt;br /&gt;
* Улучшилась масштабируемость сети.&lt;br /&gt;
* Использование traffic engineering (TE) дает дополнительную возможность управлять трафиком.&lt;br /&gt;
* На одном и том же оборудовании можно обеспечить работу разных технологий: Ethernet, ATM, Frame Relay, IPSec.&lt;br /&gt;
&lt;br /&gt;
===Метки, LSP===&lt;br /&gt;
LSP - однонаправленные.&lt;br /&gt;
&lt;br /&gt;
Для LSP требуется, чтобы  MPLS был включен на каждом роутере, через который проходит LSP.&lt;br /&gt;
MPLS позволяет роутеру завести локальную DB, в которой будут метки с назначением и другими метками, обмен метками с соседними роутерами и отправка и получение пакетов, отмеченных метками.&lt;br /&gt;
&lt;br /&gt;
LSP обеспечивает маршрут через сеть для пакета с меткой. В отличие от маршрутизации по dest IP, пакет с меткой маршрутизируется по сети основываясь на значении метки. &lt;br /&gt;
&lt;br /&gt;
'''Заголовок MPLS''' - 32 bit (8bytes). Добавляется сразу после L2 заголовка.&lt;br /&gt;
&lt;br /&gt;
Заголовок содержит: label 20 bit, CoS+Stack bit (если больше 1 метки) = 4 bit, TTL 8 bit (обычно копируется из TTL ip заголовка).&lt;br /&gt;
&lt;br /&gt;
Метки MPLS уникальны в рамках роутера. На каждом роутере в MPLS домене, через который проходит LSP, метка обязательно будет меняться.&lt;br /&gt;
&lt;br /&gt;
* 0 - Explicit null (IPv4) - снятие метки на последнем роутере&lt;br /&gt;
* 1 - Router alter label (IP router alert)&lt;br /&gt;
* 2 - Explicit null (IPv6)&lt;br /&gt;
* 3 - Implicit null - снятие метки на предпоследнем роутере - default behavior.&lt;br /&gt;
* 4-15 - for future use&lt;br /&gt;
&lt;br /&gt;
Использование implicit null может немного подкосить ваш QoS дизайн, поэтому для QoS лучше использовать explicit-null:&lt;br /&gt;
 [edit protocols mpls]&lt;br /&gt;
 explicit-null&lt;br /&gt;
&lt;br /&gt;
 [edit protocols ldp]&lt;br /&gt;
 explicit-null&lt;br /&gt;
&lt;br /&gt;
Таблица '''mps.0''' - для хранения информации о метках. Является forwarding table на транзитных роутеров, где принимается решение - куда передавать трафик. При включении MPLS, в mpls.0 сразу появляется информаци о 0,1,2 метках.&lt;br /&gt;
&lt;br /&gt;
'''Static LSP''' -  labels value 1,000,000 through 1,048,575&lt;br /&gt;
&lt;br /&gt;
 [edit protocols mpls] &lt;br /&gt;
 static-label-switched-path R1-to-R2 {&lt;br /&gt;
 	(ingress|egress|transit) {&lt;br /&gt;
 		next-hop 192.168.86.5&lt;br /&gt;
 		to 10.200.86.1 ''-только для ingress''&lt;br /&gt;
 		(push|pop|swap) 1000001&lt;br /&gt;
&lt;br /&gt;
===Терминология===&lt;br /&gt;
'''LSP''' label switched path -  однонаправленный поток трафика.&lt;br /&gt;
&lt;br /&gt;
'''LSR''' label switching router = роутер, использующий MPLS, который участвует в построении LSP.&lt;br /&gt;
&lt;br /&gt;
Бывает нескольких типов: &lt;br /&gt;
* '''Ingress'''&lt;br /&gt;
:- Пакеты входят в LSP на ingress роутере&lt;br /&gt;
:- Делает push метки&lt;br /&gt;
:- Для отдельной LSP может быть только 1 ingress роутер&lt;br /&gt;
:- Upstream для остальных роутеров в рамках LSP&lt;br /&gt;
* '''Transit'''&lt;br /&gt;
:- Для LSP может быть 0 или более transit роутеров&lt;br /&gt;
:- Делает swap метки&lt;br /&gt;
:- Передает трафик следующему хопу LSP&lt;br /&gt;
* '''Penultimate'''&lt;br /&gt;
:- Предпоследний для LSP роутер&lt;br /&gt;
:- По дефолту делает pop метки и пакет без метки отправляет последнему egress роутеру.&lt;br /&gt;
* '''Egress'''&lt;br /&gt;
:- Пакеты выходят из LSP на egress роутере&lt;br /&gt;
:- Передает пакет дальше, основываясь на IP&lt;br /&gt;
:- Downstream для других роутеров в рамках LSP&lt;br /&gt;
&lt;br /&gt;
===PHP, UHP===&lt;br /&gt;
&lt;br /&gt;
'''PHP''' - ''penultimate hop popping'' - снятие метки на предпоследнем роутере. В таком случае egress роутер будет освобожден от этой функции и будет делает стандартный lookup по адресу назначения в таблице inet.0. Для реализации этой процедуры egress при установлении LSP отправляет предпоследнему роутеру метку 3. &lt;br /&gt;
&lt;br /&gt;
'''UHP''' - ''ultimate hop popping'' - Метка снимается на последнем роутере. Такое поведение требуется, например, для корректной работы CoS. Для реализации такого поведения нужно включить: &lt;br /&gt;
 set protocols mpls explicit-null&lt;br /&gt;
&lt;br /&gt;
При этом egress роутер при создании LPS будет отправлять предпоследнему роутеру метку 0.&lt;br /&gt;
&lt;br /&gt;
===inet.3 - MPLS routing table===&lt;br /&gt;
Маршруты вставляются в таблицу inet.3, в которую залезает BGP, перед тем как отрезолвить next-hop для префикса. Если удалось найти next-hop в inet.3, то BGP вставляет LSP в inet.0 в качестве физического next-hop. Если не удалось, то BGP идет в inet.0 и пытается отрезолвить там.&lt;br /&gt;
&lt;br /&gt;
Если мы резолвим next-hop для Lo интерфейса удаленного маршрутизатора, что в inet.0 он будет виден как доступный через IGP протокол и трафик будет передаваться в соответствие с IGP, то есть в p2p интерфейс с соседним маршрутизатором.&lt;br /&gt;
&lt;br /&gt;
Если же мы будем резолвить next-hop для префикса, находящегося за пределами IGP домена (клиентский), который будет известен по BGP (а такое будет обязательно, т.к. обычно для распространения подобных маршрутов используется next-hop self, подставляется Lo удалённого маршрутизатора), то BGP залезет в inet.3, увидит в качестве next-hop LSP до Lo удалённого маршрутизатора и подставит эту запись в inet.0!! Вот и вся магия.&lt;br /&gt;
&lt;br /&gt;
То есть вся разница в том, что транзитный трафик, через роутер, участвующий в LSP, будет идти через LSP. А трафик направленный к самому роутеру (Lo интерфейсу), будут опираться на IGP.&lt;br /&gt;
&lt;br /&gt;
Для конкретной LSP inet.3 используется только на ingress роутерах. На транзитных будем использовать только mpls.0.&lt;br /&gt;
&lt;br /&gt;
Для LSP в inet.3 будет маршрут до Lo egress роутера, который скорей всего также будет известен по какому-нибудь IGP протоколу. Но по сравнению со всеми IGP (OSPF/ISIS), у MPLS (RSVP/LDP) преферанс меньше (10/15 vs 7/9), поэтому всегда будет выбираться он - копироваться в inet.0, как forwarding next-hop.&lt;br /&gt;
&lt;br /&gt;
==Дополнительная информация==&lt;br /&gt;
*[[Глава 2. Label Distribution Protocols (RSVP, LDP)]]&lt;br /&gt;
*[[Отказоустойчивость и оптимизация в MPLS]]&lt;br /&gt;
*[[Traffic engineering]]&lt;br /&gt;
*[[Реализация MPLS в ядре сети]]&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=%D0%93%D0%BB%D0%B0%D0%B2%D0%B0_8._Packet_flow&amp;diff=2045</id>
		<title>Глава 8. Packet flow</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=%D0%93%D0%BB%D0%B0%D0%B2%D0%B0_8._Packet_flow&amp;diff=2045"/>
		<updated>2021-07-15T18:24:03Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#description2:Прохождение пакета по всем этапам обработки QOS. Информация для подготовки к экзаменам Juniper.}}&lt;br /&gt;
=Прохождение пакета по всем этапам CoS=&lt;br /&gt;
Пакет в CoS определяется и работает с 2мя значениями:&lt;br /&gt;
*Forwarding class&lt;br /&gt;
*Packet loss priority&lt;br /&gt;
&lt;br /&gt;
Все процессы CoS производят некие манипуляции только с этими двумя параметрами.&lt;br /&gt;
&lt;br /&gt;
*BA / interface class ---&amp;gt; FW, PLP&lt;br /&gt;
*Ingress Policing ---&amp;gt; FW, PLP&lt;br /&gt;
*MF ---&amp;gt; FW, PLP&lt;br /&gt;
*Forwarding policy &amp;lt;---&amp;gt; FW, PLP&lt;br /&gt;
*---FABRIC---&lt;br /&gt;
*Egress Policing ---&amp;gt; FW, PLP&lt;br /&gt;
*MF ---&amp;gt; FW, PLP&lt;br /&gt;
*Scheduler, Shaper, RED &amp;lt;--- FW, PLP&lt;br /&gt;
*Rewrite Marker &amp;lt;--- FW, PLP &lt;br /&gt;
&lt;br /&gt;
Ingress Policing и MF используют один и тот же firewall filter =&amp;gt; то есть сначала происходит откидывание не нужного трафика, а потом назначение FW class.&lt;br /&gt;
&lt;br /&gt;
Forwarding policy - новый firewall, который на основании fw class и loss priority может отправить пакет в switch fabric, на основании информации из forwarding table для определенных fw class и PLP.&lt;br /&gt;
&lt;br /&gt;
На выходе: опять можно повлиять на fw class и PLP с помощью комбинации Egress policy и MF.&lt;br /&gt;
&lt;br /&gt;
После этого начинается обработка трафика: RED profile, Shaper, Scheduler.&lt;br /&gt;
&lt;br /&gt;
И уже перед отправкой в &amp;quot;провод&amp;quot; можно перемаркировать заголовок пакета (IPv4, IPv6, MPLS, Ethernet) с помощью Rewrite rules. Что поможет нижестоящему оборудованию легче производить классификацию пакета.&lt;br /&gt;
&lt;br /&gt;
=Прохождение пакета на уровне hardware=&lt;br /&gt;
*Services (PIC, DPC) &lt;br /&gt;
*RE (Control Plane) &lt;br /&gt;
*Forwadring Engine&lt;br /&gt;
Взаимодействуют между собой все!&lt;br /&gt;
&lt;br /&gt;
Клиентский трафик должен передаваться независимо от загруженности RE.&lt;br /&gt;
&lt;br /&gt;
=Дополнительная информация=&lt;br /&gt;
*[[Глава 1. QoS]]&lt;br /&gt;
*[[Глава 2. Packet classification]]&lt;br /&gt;
*[[Глава 6. Rewrite rules]]&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=%D0%93%D0%BB%D0%B0%D0%B2%D0%B0_7._CoS-based_forwarding&amp;diff=2044</id>
		<title>Глава 7. CoS-based forwarding</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=%D0%93%D0%BB%D0%B0%D0%B2%D0%B0_7._CoS-based_forwarding&amp;diff=2044"/>
		<updated>2021-07-15T18:23:22Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#description2: Для чего CoS-based forwarding. Конфигурация CoS-based forwarding. Информация для подготовки к экзаменам Juniper.}}&lt;br /&gt;
==Для чего CoS-based forwarding==&lt;br /&gt;
&lt;br /&gt;
CoS  может быть интегрирован в policy, с помощью чего можно трафик определенного forw class направлять по определенному routing path.&lt;br /&gt;
&lt;br /&gt;
Поддерживает IPv4, IPv6, MPLS.&lt;br /&gt;
&lt;br /&gt;
==Конфигурация==&lt;br /&gt;
Этап 1. Конфигурируем '''routing-policy'''. Определяем маpшруты для использования CBF.&lt;br /&gt;
 [edit policy-options]&lt;br /&gt;
   policy-statement ''&amp;lt;cbf-policy&amp;gt;'' {&lt;br /&gt;
       from {&lt;br /&gt;
           route-filter 5.5.5.5/32 exact; }&lt;br /&gt;
       then cos-next-hop-map ''&amp;lt;cbf-map&amp;gt;''; }&lt;br /&gt;
&lt;br /&gt;
Этап 2. Конфигурируем '''CoS forw policy'''. Оперделяем next-hop для для fowr class. Можно комбинировать IP nex-hop и MPLS, тем самым обеспечивая load balancing.&lt;br /&gt;
 [edit class-of-service]&lt;br /&gt;
      forwarding-policy {&lt;br /&gt;
          next-hop-map ''&amp;lt;cbf-map&amp;gt;'' {&lt;br /&gt;
              forwarding-class assured-forwarding {&lt;br /&gt;
                  next-hop  192.168.86.49; }}&lt;br /&gt;
              forwarding-class best-effort {&lt;br /&gt;
                  next-hop ge-0/0/0.110;&lt;br /&gt;
                  lsp-next-hop 192.168.86.10; }}}}&lt;br /&gt;
&lt;br /&gt;
Этап 3. Применяем '''routing-policy''' к '''forw table'''.&lt;br /&gt;
 [edit routing-options]&lt;br /&gt;
   forwarding-table {&lt;br /&gt;
       export ''&amp;lt;cbf-policy&amp;gt;''; }&lt;br /&gt;
&lt;br /&gt;
==Заметочки==&lt;br /&gt;
*'''CBF with OSPF:''' конфигурируем в качестве nex-hop - интерфейс. Так как OSPF добавляет маршруты с next-hop = interface для p2p интерфейсов и не содержит никаких IP.&lt;br /&gt;
*'''IP and LSP next-hops'''. Для forw class можно конфигурировать оба, но приоритетным будет LSP.&lt;br /&gt;
*Если next-hop map перекрывает '''не все возможные forw class''', то трафик на попавший ни в какой forwarding-class считается unspesified и ему назначается unspesified forw class. Default forw class - class of queue 0. Если default forw class не определен в nex-hop-map, то JunOS также randomly designated the default class.&lt;br /&gt;
*При использовании '''L3VPN''' в качестве условий для матчинга нужно задавать атрибуты (а не route-filter), с которыми прилетел маршрут. Policy будет использовать для проверки bgp.l3vpn.0 таблицу, а не ''vrf''.inet.0.&lt;br /&gt;
&lt;br /&gt;
==Дополнительная информация==&lt;br /&gt;
*[[Глава 1. QoS]]&lt;br /&gt;
*[[Глава 2. Packet classification]]&lt;br /&gt;
*[[Глава 8. Packet flow]]&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=%D0%93%D0%BB%D0%B0%D0%B2%D0%B0_6._Rewrite_rules&amp;diff=2043</id>
		<title>Глава 6. Rewrite rules</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=%D0%93%D0%BB%D0%B0%D0%B2%D0%B0_6._Rewrite_rules&amp;diff=2043"/>
		<updated>2021-07-15T18:22:09Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#description2: Основы Rewrite rules. Default rewrite tables. Custom rewrite tables. Где использовать rewrite rules. Rewrite для комбинации разных протоколов. Информация для подготовки к экзаменам Juniper.}}&lt;br /&gt;
=Основы Rewrite rules=&lt;br /&gt;
&lt;br /&gt;
Процесс происходит в конце всего цикла QoS. Когда понятно куда и как отправится пакет, маршрутизатор может записать в заголовок пакета - code point bits.&lt;br /&gt;
&lt;br /&gt;
Способствует целостности и непрерывности QoS на всей сети.&lt;br /&gt;
&lt;br /&gt;
Набор rewrite rules образует rewrite table. &lt;br /&gt;
&lt;br /&gt;
Процесс rewrite:&lt;br /&gt;
#Считывается исходный Forw class и PLP. &lt;br /&gt;
#Исходя из этого находит в table соответствующий code-point.&lt;br /&gt;
#Записывает в заголовок пакета новый code-point.&lt;br /&gt;
&lt;br /&gt;
Поддерживается для: DSCP (IPv4, IPv6), IP precedence bit, MPLS EXP bits, 802.1p CoS bits, 802.1ad DEI bits.&lt;br /&gt;
&lt;br /&gt;
Rewrite rule применяется на интерфейс внутри class-of-service настроек.&lt;br /&gt;
&lt;br /&gt;
*На физический интерфейс можно применить только DSCP IPv4 '''ИЛИ''' DCSP IPv6.&lt;br /&gt;
*На логический интерфейс можно применять и DSCP IPv4 и DSCP IPv6.&lt;br /&gt;
&lt;br /&gt;
Rewrite-rule работает до egress filter. Поэтому в egress filter нужно делать политики, полагаясь на новый code-point пакета.&lt;br /&gt;
&lt;br /&gt;
Дефолтное поведение QoS на Junos:&lt;br /&gt;
*Bits associated with DSCP traffic class are not rewritten to match the new traffic classification values.&lt;br /&gt;
*Bits associated with MPLS traffic class are rewritten to match the new traffic classification values.&lt;br /&gt;
&lt;br /&gt;
=Default rewrite tables= &lt;br /&gt;
&lt;br /&gt;
Несколько таблиц существует, но большинство не используется по умолчанию, т.к. должны быть явно заданы на unit'e.&lt;br /&gt;
'''НО!''' на интерфейсах, где включен MPLS, используется дефолтное MPLS exp rewrite rule.&lt;br /&gt;
&lt;br /&gt;
Есть табличка со стандартными значениями (в книге).&lt;br /&gt;
&lt;br /&gt;
'''Конфигурация'''&lt;br /&gt;
 set class-of-service interfaces ge-0/0/0 unit 200 rewrite-rules dscp default&lt;br /&gt;
 set class-of-service interfaces ge-0/0/0 unit 200 rewrite-rules exp default&lt;br /&gt;
 set class-of-service interfaces ge-0/0/0 unit 200 rewrite-rules ieee 802.1 default&lt;br /&gt;
&lt;br /&gt;
Когда пакет придет на интерфейс для дальнейшей передачи, система применит rewrite rule исходя из нужного протокола.&lt;br /&gt;
&lt;br /&gt;
=Custom rewrite tables=&lt;br /&gt;
&lt;br /&gt;
Если не подходят дефолтные правила, создаем свое!! Нужно задать forw class, PLP и CoS.&lt;br /&gt;
&lt;br /&gt;
'''Конфигурация'''&lt;br /&gt;
Задаем свои code-point (если нужно)&lt;br /&gt;
 set class-of-service code-point-aliases dscp vpn-low 001010&lt;br /&gt;
 set class-of-service code-point-aliases dscp vpn-high 001100&lt;br /&gt;
 set class-of-service code-point-aliases dscp vpn-priority 101110&lt;br /&gt;
 set class-of-service code-point-aliases dscp be 000000&lt;br /&gt;
 set class-of-service code-point-aliases dscp nc 110000&lt;br /&gt;
 set class-of-service code-point-aliases exp be 000&lt;br /&gt;
 set class-of-service code-point-aliases exp vpn-low 010&lt;br /&gt;
 set class-of-service code-point-aliases exp vpn-high 011&lt;br /&gt;
 set class-of-service code-point-aliases exp vpn-priority 101&lt;br /&gt;
&lt;br /&gt;
rewrite-rules для DSCP:&lt;br /&gt;
 set class-of-service rewrite-rules dscp dscp-rewrite forwarding-class best-effort loss-priority low code-point be&lt;br /&gt;
 set class-of-service rewrite-rules dscp dscp-rewrite forwarding-class vpn loss-priority low code-point vpn-low&lt;br /&gt;
 set class-of-service rewrite-rules dscp dscp-rewrite forwarding-class vpn loss-priority high code-point vpn-high&lt;br /&gt;
 set class-of-service rewrite-rules dscp dscp-rewrite forwarding-class vpn-priority loss-priority low code-point vpn-priority&lt;br /&gt;
 set class-of-service rewrite-rules dscp dscp-rewrite forwarding-class nc loss-priority low code-point nc&lt;br /&gt;
rewrite-riles для EXP:&lt;br /&gt;
 set class-of-service rewrite-rules exp exp-rewrite forwarding-class best-effort loss-priority low code-point be&lt;br /&gt;
 set class-of-service rewrite-rules exp exp-rewrite forwarding-class vpn loss-priority low code-point vpn-low&lt;br /&gt;
 set class-of-service rewrite-rules exp exp-rewrite forwarding-class vpn loss-priority high code-point vpn-high&lt;br /&gt;
 set class-of-service rewrite-rules exp exp-rewrite forwarding-class vpn-priority loss-priority low code-point vpn-priority&lt;br /&gt;
&lt;br /&gt;
Применяем rewrite-rules:&lt;br /&gt;
 set class-of-service interfaces ge-0/0/0 unit * rewrite-rules dscp dscp-rewrite&lt;br /&gt;
 set class-of-service interfaces ge-0/0/0 unit * rewrite-rules exp exp-rewrite&lt;br /&gt;
&lt;br /&gt;
=Где использовать rewrite rules=&lt;br /&gt;
&lt;br /&gt;
Лучше всего использовать rewrite rules внутри сети, на интерфейсах, которые входят в QoS домен. Такая позиция сделает более эффективной и менее трудозатратной работу CoS, засчет четкой обработки BA classification на ingress  для других устройств в сети.&lt;br /&gt;
&lt;br /&gt;
=Rewrite для комбинации разных протоколов=&lt;br /&gt;
Присвоенная метка в заголовке пакета выбирается на основании протокола. Бывают такие случаи, когда пакет может иметь несколько протоколов, например:&lt;br /&gt;
&lt;br /&gt;
IPv4 packet over Ethernet, using vlan. DSCP + ieee 802.1p&lt;br /&gt;
IPv4 packet over MPLS: DSCP + EXP.&lt;br /&gt;
&lt;br /&gt;
JunOS может записывать 1 или 2 значения CoS.&lt;br /&gt;
&lt;br /&gt;
Такие правила вроде уж созданы как дефолтные, например: mpls-inet-both, outer-and-inner..&lt;br /&gt;
{{note|text='''Опасно''': кол-во правил, присвоенных для одного логического интерфейса - зависит от платформы.}}&lt;br /&gt;
&lt;br /&gt;
=Дополнительная информация=&lt;br /&gt;
*[[Глава 1. QoS]]&lt;br /&gt;
*[[Глава 2. Packet classification]]&lt;br /&gt;
*[[Глава 8. Packet flow]]&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=%D0%93%D0%BB%D0%B0%D0%B2%D0%B0_5._Hierarchical_scheduling&amp;diff=2042</id>
		<title>Глава 5. Hierarchical scheduling</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=%D0%93%D0%BB%D0%B0%D0%B2%D0%B0_5._Hierarchical_scheduling&amp;diff=2042"/>
		<updated>2021-07-15T18:21:23Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#description2:Основы иерархичного scheduling. Режимы scheduler. Уровни иерархичного scheduling. Конфигурация иерархичного scheduling. Информация для подготовки к экзаменам Juniper.}}&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
С hierarchical sched устройство обеспечивает обработку нескольких абонентов, групп абонентов (units), разных классов у подписчика.&lt;br /&gt;
&lt;br /&gt;
Выполняет те же функции, что и port-based scheduling: в каком порядке пакеты передать, сколько пакетов забуфферизировать, определить скорость, как обрабатывать разные пакеты в условиях запора.&lt;br /&gt;
&lt;br /&gt;
Но есть особенности:&lt;br /&gt;
# H-CoS - предоставляет более тонкую обработку по нескольким уровням.&lt;br /&gt;
# H-CoS предоставляет возможность централизовать CoS для downstream устройств, которые не имеют функционала CoS (либо не сконфигурирован CoS на downstream device, которые CoS как таковой поддерживают).&lt;br /&gt;
# H-CoS поддерживают не все устройства. Поддерживают устр-ва, использующие ASICs.&lt;br /&gt;
&lt;br /&gt;
'''C-VLAN''': customer-vlan, inner tag. Scheduling и shaping обычно используются для C-VLAN для установления  min и max пропускной способности для клиента.&lt;br /&gt;
&lt;br /&gt;
'''S-VLAN''': service-vlan, outer-tag. Scheduling и shaping обычно работают в S-vlan, для предоставления CoS нижележащим устр-вам с небольшим буффреризированием и простым scheduler.&lt;br /&gt;
&lt;br /&gt;
'''Traffic control profile''': конфигурационный компонент, состоящия из scheduling и queueing свойств. Применяется к физическому интерфейсу, логическому и набору интерфейсов.&lt;br /&gt;
&lt;br /&gt;
'''Interface set''': группа логических интерфейсов, определенных нами. &lt;br /&gt;
&lt;br /&gt;
'''CIR''': committed interface rate: гарантированная скорость, назначенная на interface set или логический интерфейс.&lt;br /&gt;
&lt;br /&gt;
'''PIR''': peak interface rate: макс скорость, сконфигурированная для порта, логического интерфейса или interface set.&lt;br /&gt;
&lt;br /&gt;
'''4 уровня обработки''':&lt;br /&gt;
&lt;br /&gt;
1. Port (physical interface). Каждый порт может иметь несколько interface sets. Поддерживает shaping.&lt;br /&gt;
&lt;br /&gt;
2. Interface set (VLAN or logical interface group). Каждый может иметь 1 или более логических интерфейсов. Поддерживает CIR, PIR.&lt;br /&gt;
&lt;br /&gt;
3. Logical interface (VLAN). Может быть до 8 очередей. Поддерживает CIR, PIR.&lt;br /&gt;
&lt;br /&gt;
4. Queue. Здесь обычная обработка трафика по заданным параметрам.&lt;br /&gt;
&lt;br /&gt;
Может быть до 8 очередей для 1 VLAN. Каждая очередь имеет свои свойства.&lt;br /&gt;
&lt;br /&gt;
=== Scheduler modes ===&lt;br /&gt;
&lt;br /&gt;
1. Per-unit (Port based) scheduler (то, что мы изучали в предыдущей главе 5):&lt;br /&gt;
&lt;br /&gt;
 a) port-level shaping&lt;br /&gt;
 b) VLAN scheduling and queueing&lt;br /&gt;
 c) full queue scheduling&lt;br /&gt;
 '''NO interface sets!'''&lt;br /&gt;
&lt;br /&gt;
2. Hierarchical scheduler:&lt;br /&gt;
&lt;br /&gt;
 a) port-level shaping&lt;br /&gt;
 b) interface-set scheduling and queueing&lt;br /&gt;
 c) VLAN scheduling and queueing&lt;br /&gt;
 d) full queue scheduling&lt;br /&gt;
&lt;br /&gt;
Включение нужного режиме делается на уровне настройки физического интерфейса:&lt;br /&gt;
 set interfaces ge-0/0/0 ''per-unit-scheduler'' ...&lt;br /&gt;
 or&lt;br /&gt;
 set interfaces ge-0/0/0 ''hierarchical-scheduler'' ...&lt;br /&gt;
&lt;br /&gt;
=== Hierarchical scheduling levels ===&lt;br /&gt;
&lt;br /&gt;
==== Level 1 - Port ====&lt;br /&gt;
&lt;br /&gt;
'''Shaping''': PIR - max rate for port. Пакеты, превышающие PIR не дропаются, а хранятся в буффере.&lt;br /&gt;
&lt;br /&gt;
Config: Для установления PIR нужно сконфигурировать traffic-control-profile, затем применить его на порт.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
 &lt;br /&gt;
 set class-of-service traffic-control-profile ''profile'' shaping-rate ''100m''&lt;br /&gt;
 set class-of-service interfaces ge-0/0/0 output-traffic-control-profile ''profile''&lt;br /&gt;
&lt;br /&gt;
==== Level 2 - Interface set ====&lt;br /&gt;
&lt;br /&gt;
Создание Interfaces-sets: 2 варианта объединить интерфейсы в группу: собрать группу из разных вланов, определить группу двутеггированных вланов по S-vlan (outer).&lt;br /&gt;
 &lt;br /&gt;
 set interfaces ge-0/0/0 hierarchical-scheduling&lt;br /&gt;
 set interfaces ge-0/0/0 flexible-vlan-tagging&lt;br /&gt;
 set interfaces ge-0/0/0 unit 100 vlan-id 100&lt;br /&gt;
 set interfaces ge-0/0/0 unit 200 vlan-id 200&lt;br /&gt;
 set interfaces ge-0/0/0 unit 1000 vlan-tags outer 1234 inner 1000&lt;br /&gt;
 set interfaces ge-0/0/0 unit 1100 vlan-tags outer 1234 inner 1100&lt;br /&gt;
&lt;br /&gt;
Для таких интерфейсов можем задать группы:&lt;br /&gt;
 &lt;br /&gt;
 set interfaces interface-set ''A'' interface ge-0/0/0 unit 100&lt;br /&gt;
 set interfaces interface-set ''A'' interface ge-0/0/0 unit 200&lt;br /&gt;
&lt;br /&gt;
 set interfaces interface-set ''B'' interface ge-0/0/0 vlan-tags-outer 1234&lt;br /&gt;
&lt;br /&gt;
'''Особенности:'''&lt;br /&gt;
&lt;br /&gt;
1. Нельзя использовать interface-range&lt;br /&gt;
&lt;br /&gt;
2. В interface-set нельзя использовать одновременно logical int и S-vlan.&lt;br /&gt;
&lt;br /&gt;
3. Один физ интерфейс для одного interface-set.&lt;br /&gt;
&lt;br /&gt;
4. Logical int или S-vlan может принадлежать только одному interface-set.&lt;br /&gt;
&lt;br /&gt;
'''Shaping''': используем CIP и PIR (гарантированная и максимальная скорости)&lt;br /&gt;
&lt;br /&gt;
'''Scheduling''': CIR и PIR также используются для обозначения относительного веса данного interface-set'а, учитывая другие interface-set для данного порта. &lt;br /&gt;
&lt;br /&gt;
- CIR mode: If any interface sets within port has defined CIR, bandwidth sharing among the interface sets is based on the CIR of the interface sets. &lt;br /&gt;
&lt;br /&gt;
- PIR mode: If no interface sets CIR defined, bandwidth sharing among interface sets base on the PIR of the interface sets.&lt;br /&gt;
&lt;br /&gt;
Когда траффик превышает PIR, интерфейс прекращает передачу пакетов.&lt;br /&gt;
&lt;br /&gt;
 set class-of-service traffic-control-profile '' profile '' shaping-rate 75m guaranteed-rate 50m&lt;br /&gt;
 set class-of-service interface-set ''A'' output-traffic-control-profile ''profile''&lt;br /&gt;
&lt;br /&gt;
==== Level 3 - logical interface (VLAN) ====&lt;br /&gt;
&lt;br /&gt;
'''Shaping''': CIR, PIR, Scheduler map - ассоциирует влан с его очередью.&lt;br /&gt;
&lt;br /&gt;
'''Scheduling''': CIR и PIR определяю относительный вес влана среди других вланов на том же порту.&lt;br /&gt;
&lt;br /&gt;
- CIR mode: If any vlan within port has defined CIR, bandwidth is shared among vlans in proportion on their CIR. &lt;br /&gt;
&lt;br /&gt;
- PIR mode: If noone vlan within port has defined CIR, bandwidth is shared among vlans in proportion on their PIR. &lt;br /&gt;
&lt;br /&gt;
Когда траффик превышает PIR, во влане прекращается передача пакетов.&lt;br /&gt;
&lt;br /&gt;
 set class-of-service traffic-control-profile ''profile'' schedule-map ''sched-exmple'' shaping-rate 30m guaranteed-rate 20m&lt;br /&gt;
 set interfaces ge-0/0/0 unit 100 output-traffic-control-profile ''profile''&lt;br /&gt;
&lt;br /&gt;
'''Без указания guaranteed-rate для traffic-control-profile будет выделено значение bandwidth =  2 MTU.'''&lt;br /&gt;
&lt;br /&gt;
==== Level 4 - Queue ====&lt;br /&gt;
&lt;br /&gt;
'''Scheduling''': самый обычный scheduler для port-level с обычными параметрами: transm-rate, priority, delay buffer, RED drop profiles. + Можно задавать H-Cos scheduling, оно будет немногим отличаться от обычного.&lt;br /&gt;
&lt;br /&gt;
Сам конфиг приводить не буду, но нужно:&lt;br /&gt;
&lt;br /&gt;
#Сконфигурировать scheduler: transm-rate, priority, delay-buffer, drop-profile, drop-profile-map.&lt;br /&gt;
#Сконфигурировать scheduler-map.&lt;br /&gt;
#Применить scheduler-map к интерфейсу в рамках class-of-service конфигурации.&lt;br /&gt;
При этом, важный момент: для port-based scheduling, scheduler map применяется к интерфейсу.&lt;br /&gt;
&lt;br /&gt;
А для H-COS scheduler map применяет на Level 3 к определенному unit.&lt;br /&gt;
&lt;br /&gt;
=== Remaining traffic ===&lt;br /&gt;
&lt;br /&gt;
Оставшийся трафик включает в себя units, которым не были присвоены какие-то traffic-contro-profile и набор из вланов, которые не были включены к какие-либо interface-sets.&lt;br /&gt;
&lt;br /&gt;
Remaining scheduler: простой scheduler, который применяется к вланам, которым не назначили конкретных traffic-control-profiles. Короче это scheduler, который применяется к remaining traffic.&lt;br /&gt;
&lt;br /&gt;
Цепочка: Port -&amp;gt; Interface set -&amp;gt; vlan -&amp;gt; queue.&lt;br /&gt;
&lt;br /&gt;
Для тех вланов, которых входят в interface set, но которым не назначены определенные traffic-control-profile, будут использовать remaining scheduler, заданный для interface set.&lt;br /&gt;
&lt;br /&gt;
Для тех вланов, которые не были включены в interface set, будут использоваться remaining scheduler, заданный для port.&lt;br /&gt;
&lt;br /&gt;
'''Remaining vlans - Interface set'''&lt;br /&gt;
&lt;br /&gt;
 set class-of-service traffic-control-profiles ''profile-remaining'' scheduler-map ''sched-example'' shaping-rate 50m guaranteed-rate 10m&lt;br /&gt;
 set class-of-service interface-set A output-traffic-control-profile ''profile''&lt;br /&gt;
 set class-of-service interface-set A output-traffic-control-profile-remaining ''profile-remaining''&lt;br /&gt;
&lt;br /&gt;
'''Remaining vlans - Port '''&lt;br /&gt;
&lt;br /&gt;
 set class-of-service traffic-control-profiles ''profile-remaining'' scheduler-map ''sched-example'' shaping-rate 50m guaranteed-rate 10m&lt;br /&gt;
 set class-of-service interface ge-0/0/0 output-traffic-control-profile ''profile''&lt;br /&gt;
 set class-of-service interface ge-0/0/0 output-traffic-control-profile-remaining ''profile-remaining''&lt;br /&gt;
&lt;br /&gt;
=== Queue properties in Hierarchical Scheduling ===&lt;br /&gt;
&lt;br /&gt;
'''Priority'''&lt;br /&gt;
&lt;br /&gt;
В port-level queueing '''очереди''' &amp;quot;соревнуются&amp;quot; за пропускную способность порта.&lt;br /&gt;
&lt;br /&gt;
В hierarchical queueing '''вланы''' &amp;quot;соревнуются&amp;quot; за проп способность порта. =&amp;gt; приоритет очереди определяется утилизацией проп способности влана, которому сопоставленая данная очередь.&lt;br /&gt;
&lt;br /&gt;
CIR &amp;lt; VLAN - приоритеты очереди остаются обычными: strict-high, high, med-high, med-low, low..&lt;br /&gt;
&lt;br /&gt;
CIR &amp;gt; VLAN &amp;gt; PIR - все приоритеты (за исключением strict-high) становятся excess.&lt;br /&gt;
&lt;br /&gt;
'''Работа Queueing priority''':&lt;br /&gt;
&lt;br /&gt;
Алгоритм планировщика, использующего HCoS включает в себя PQ-DWRR (выбор очереди и передача пакета) и Intelligent Prioritization.&lt;br /&gt;
&lt;br /&gt;
Для port-level queueing: если очередь с меньшим приоритетом уже передает пакет, то очередь с большим приоритетом должна подождать пока та очередь закончит передачу пакета  до того как она распределить снова (scheduled again).&lt;br /&gt;
&lt;br /&gt;
Для HCOS: приоритет отправки пакета определен для очередей с разными приоритетами. Сначала идет передача из очередей с strict-high и high приоритетами. Затем передача пакетов из medium-high и medium-low, затем low, затем excess.&lt;br /&gt;
&lt;br /&gt;
'''Transmission rate'''&lt;br /&gt;
&lt;br /&gt;
Полоса, которая не используется вланами называет избыточной (excess). Эта полоса может быть распределена между вланами пропорционально CIR (если не определен CIR, то смотрят по PIR) (дефолтное поведение), либо может быть разделена равными частями.&lt;br /&gt;
&lt;br /&gt;
'''mode per port''': применяется ко всем interface sets.&lt;br /&gt;
&lt;br /&gt;
'''mode per interface-set''': применяется ко всем вланам. Перебивает per port settings.&lt;br /&gt;
&lt;br /&gt;
Чтобы маршрутизатор более точно распределил избыточную полосу между вланами, в качестве excess-bandw нужно задать max queue bandtwidth =  max effeective guaranteed rate.&lt;br /&gt;
&lt;br /&gt;
 set class-of-service interfaces interface-set A excess-bandwidth-share equal&lt;br /&gt;
 &lt;br /&gt;
 set class-of-service interfaces ge-0/0/0 exceed-bandwidth-share proportional 14000000&lt;br /&gt;
&lt;br /&gt;
'''Buffer size'''&lt;br /&gt;
&lt;br /&gt;
В отличие от port-level, где buffer size определяется  определяется с помощью interface bandidth, для vlan размер определяется через traffic control profile, который задан явно в конфигурации.&lt;br /&gt;
&lt;br /&gt;
- vlan bandwidth is not implicitly known: must be configured in traffic-control-profile.&lt;br /&gt;
- delay buffer rate - configurable parameter, provides reference for buffer size calculation. &lt;br /&gt;
- buffer size is calculated implicitly using CIR (if no deay buffer rate) or PIR (if no CIR).&lt;br /&gt;
&lt;br /&gt;
В HCOS delay buffers не эластичны - не поддерживают динамического выделения памяти.&lt;br /&gt;
&lt;br /&gt;
На практике получается так, что delay buffer вланов становится ориентиром для scheduler.&lt;br /&gt;
&lt;br /&gt;
Level 1-3 поддерживают delay buffer.&lt;br /&gt;
&lt;br /&gt;
Каждый уровень использует уровень ниже как ориентир для полосы пропускания.&lt;br /&gt;
&lt;br /&gt;
Сумма буфферов на каждом уровне не должна превышать значения нижнего уровня.&lt;br /&gt;
&lt;br /&gt;
 [edit class-of-service]&lt;br /&gt;
  traffic-control-profiles {&lt;br /&gt;
      L1-port-prof {&lt;br /&gt;
          shaping-rate 100m;&lt;br /&gt;
          delay-buffer-rate 200; }&lt;br /&gt;
      L2-interface-sets-prof {&lt;br /&gt;
          shaping-rate 100m;&lt;br /&gt;
          guaranteed-rate 75m;&lt;br /&gt;
          delay-buffer-rate 100m; }&lt;br /&gt;
      L3-unit-prof {&lt;br /&gt;
          shaping-rate 30m;&lt;br /&gt;
          guaranteed-rate 20m;&lt;br /&gt;
          delay-buffer-rate 35m; }}&lt;br /&gt;
 [edit class-of-service interfaces]&lt;br /&gt;
    interface-set A {&lt;br /&gt;
        output-traffic-control-profile L2-interface-sets-prof; }&lt;br /&gt;
 [edit class-of-service interfaces]&lt;br /&gt;
    xe-0/0/0 {&lt;br /&gt;
        output-traffic-control-profile L1-port-prof;&lt;br /&gt;
        unit 181 {&lt;br /&gt;
            output-traffic-control-profile L3-unit-prof; }}&lt;br /&gt;
&lt;br /&gt;
'''RED drop profiles'''&lt;br /&gt;
Используется только сегментная.&lt;br /&gt;
&lt;br /&gt;
Задаются 2 точки и между ними рисуется прямая.&lt;br /&gt;
*minimum queue depth: below it drop probability = 0 &lt;br /&gt;
*maximum queue depth: above it drop probability = 100&lt;br /&gt;
&lt;br /&gt;
Задаем только 2 точки!!&lt;br /&gt;
&lt;br /&gt;
 [edit class-of-service]&lt;br /&gt;
  drop-profiles {&lt;br /&gt;
      test {&lt;br /&gt;
          fill-level 25 drop-probability 0;&lt;br /&gt;
          fill-level 90 drop-probability 90; } }&lt;br /&gt;
&lt;br /&gt;
=== Configuration steps ===&lt;br /&gt;
#Configure physical interface for HCOS: add hierarchical-scheduler statement.&lt;br /&gt;
#Configure interface sets.&lt;br /&gt;
#Configure schedulers, including drop profile.&lt;br /&gt;
#Configure scheduler-maps: associate schedulers and forwarding classes. schedulers do nothing until they are referenced in a scheduler-map.&lt;br /&gt;
#Configure traffic-control profiles: associate scheduler-maps to vlans.&lt;br /&gt;
#Apply traffic-control-profile to ports, interface-sets and vlans.&lt;br /&gt;
&lt;br /&gt;
 [edit interfaces xe-0/0/0]&lt;br /&gt;
     hierarchical-scheduler;&lt;br /&gt;
&lt;br /&gt;
 [edit interfaces]&lt;br /&gt;
   interface-set A {&lt;br /&gt;
       interface xe-0/0/0 {&lt;br /&gt;
           unit 285;&lt;br /&gt;
           unit 311; }}&lt;br /&gt;
&lt;br /&gt;
 [edit class-of-service]&lt;br /&gt;
  drop-profiles {&lt;br /&gt;
      aggressive {&lt;br /&gt;
          fill-level 5 drop-probability 50;&lt;br /&gt;
          fill-level 60 drop-probability 100; }&lt;br /&gt;
      tolerant {&lt;br /&gt;
          fill-level 25 drop-probability 0;&lt;br /&gt;
          fill-level 100 drop-probability 100; }}&lt;br /&gt;
 [edit class-of-service schedulers]&lt;br /&gt;
   sched0 {&lt;br /&gt;
       transmit-rate percent 20;&lt;br /&gt;
       buffer-size percent 20;&lt;br /&gt;
       drop-profile-map loss-priority low protocol any drop-profile tolerant; }&lt;br /&gt;
   sched1 {&lt;br /&gt;
       transmit-rate percent 80;&lt;br /&gt;
       buffer-size percent 80;&lt;br /&gt;
       drop-profile-map loss-priority high protocol any drop-profile aggressive; }&lt;br /&gt;
&lt;br /&gt;
  [edit class-of-service]&lt;br /&gt;
  traffic-control-profiles {&lt;br /&gt;
    set-A {&lt;br /&gt;
        shaping-rate 200m;&lt;br /&gt;
        guaranteed-rate 20m; }&lt;br /&gt;
    PIR-200-CIR-5 {&lt;br /&gt;
        scheduler-map schedule-0-1;&lt;br /&gt;
        shaping-rate 200m;&lt;br /&gt;
        guaranteed-rate 5m; }&lt;br /&gt;
    PIR-200-CIR-25 {&lt;br /&gt;
        scheduler-map schedule-0-1;&lt;br /&gt;
        shaping-rate 200m;&lt;br /&gt;
        guaranteed-rate 25m; }}&lt;br /&gt;
&lt;br /&gt;
 [edit class-of-service interfaces]&lt;br /&gt;
    interface-set A {&lt;br /&gt;
        excess-bandwidth-share proportional 6400g;&lt;br /&gt;
        output-traffic-control-profile set-A;&lt;br /&gt;
        output-traffic-control-profile-remaining PIR-200-CIR-25; }&lt;br /&gt;
    ge-0/0/0 {&lt;br /&gt;
        excess-bandwidth-share proportional 6400g;&lt;br /&gt;
        output-traffic-control-profile-remaining PIR-200-CIR-25;&lt;br /&gt;
        unit 246 {&lt;br /&gt;
            output-traffic-control-profile PIR-200-CIR-5; }&lt;br /&gt;
        unit 248 {&lt;br /&gt;
            output-traffic-control-profile PIR-200-CIR-5; }}&lt;br /&gt;
&lt;br /&gt;
===Дополнительная информация===&lt;br /&gt;
*[[Глава 4. Scheduling]]&lt;br /&gt;
*[[Глава 1. QoS]]&lt;br /&gt;
*[[Глава 8. Packet flow]]&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=%D0%93%D0%BB%D0%B0%D0%B2%D0%B0_4._Scheduling&amp;diff=2041</id>
		<title>Глава 4. Scheduling</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=%D0%93%D0%BB%D0%B0%D0%B2%D0%B0_4._Scheduling&amp;diff=2041"/>
		<updated>2021-07-15T18:20:33Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#description2:Основы scheduling. Шедулер. Port-based очереди. Компоненты scheduling: Transmission rate, Queue priority, Drop profiles (RED/WRED). Scheduler map. Конфигурация Scheduler. Информация для подготовки к экзаменам Juniper.}}&lt;br /&gt;
=Основы scheduling=&lt;br /&gt;
С помощью классификатора определили трафик в разные очереди, теперь нужно как-то трафик обрабатывать. Этим процессом как раз занимается scheduler:&lt;br /&gt;
*Порядок передачи пакетов&lt;br /&gt;
*Скорость передачи пакетов&lt;br /&gt;
*Кол-во пакетов, которое можно забуфферизировать&lt;br /&gt;
*Разные способы обработки пакетов в случае заторов на сети.&lt;br /&gt;
&lt;br /&gt;
Разная обработка трафика на основании loss-priority.&lt;br /&gt;
*Классификация или полисер назначили PLP&lt;br /&gt;
*PLP соответствует scheduling traffic profile&lt;br /&gt;
*Traffic profile соответствует drop profile&lt;br /&gt;
*Drop profile определяет вероятность отброса трафика&lt;br /&gt;
&lt;br /&gt;
=Port-based очереди (queues)=&lt;br /&gt;
Каждый порт может содержать 4-8 очереди.&lt;br /&gt;
&lt;br /&gt;
Одной очереди может быть назначено более одного forwarding class.&lt;br /&gt;
&lt;br /&gt;
'''PQ-DWRR''': priority queue deficit round-robin: механизм для выбора очереди и последующей передачи пакета. Priority - очереди обслуживаются в порядке, сконфигурированном для очередей.&lt;br /&gt;
&lt;br /&gt;
'''WRED''': Weighted random early detection: механизм для отброса пакетов. Основан на сконфигурированных параметрах: fw-class, PLP. С помощью него можно избежать и контролировать заторы.&lt;br /&gt;
&lt;br /&gt;
= Компонениы Scheduling =&lt;br /&gt;
==Transmission rate ==&lt;br /&gt;
'''Transmission rate''' - кол-во пропускной способности от физического интерфейса, выделенной для этой очереди. Похоже на CIR.&lt;br /&gt;
&lt;br /&gt;
Очередь может превышать tranmission rate, если есть неиспользуемая полоса (использовать большую полосу, чем выделили изначально). Тут также используется терминология in-profile, out-of-profile.&lt;br /&gt;
&lt;br /&gt;
 edit class-of-service schedule ''&amp;lt;schedule-name&amp;gt;'' '''transmit-rate''' (''rate | percent | remainder'') exact | rate-limit&lt;br /&gt;
&lt;br /&gt;
*'''remainder''' - заполнение оставшегося буфера.&lt;br /&gt;
*'''exact''' - буферизирует трафик, который превысил transm rate. При наличие неиспользуемой свободной полосы не будет давать очереди её использовать.&lt;br /&gt;
*'''rate-limit''' - дропает трафик, который превысил transm rate.&lt;br /&gt;
*'''no settings''' - очередь может превысить transm rate, если есть неиспользуемая полоса.&lt;br /&gt;
&lt;br /&gt;
Есть значения по умолчанию. Так как по умолчанию в джуне созданы 2 fw-class (best-effort (0) и network-control (3)), то дефолтные параметры есть только для этих очередей.&lt;br /&gt;
&lt;br /&gt;
Для best-effort - 95, для netw-control - 5.&lt;br /&gt;
&lt;br /&gt;
'''Unusable bandwidth'''&lt;br /&gt;
&lt;br /&gt;
В случае, когда у нас сформированы 2 очереди и trasm-rate между ними делится 50/20%, в таком случае получаем неиспользуемую полосу 30%.&lt;br /&gt;
&lt;br /&gt;
Эта неиспользуемая полоса будет использоваться только очередями, у которых есть превышение transm-rate.&lt;br /&gt;
&lt;br /&gt;
Scheduler будет делить неиспользуемую полосу между подходящими очередями.&lt;br /&gt;
&lt;br /&gt;
Чтобы исключить очередь, используем exact или rate-limit в настройке.&lt;br /&gt;
&lt;br /&gt;
==Приоритет очереди==&lt;br /&gt;
'''Priority''' - приоритет среди других очередей. Во времена запоров приоритетом определяется в каком порядке будут обрабатываться очереди.&lt;br /&gt;
&lt;br /&gt;
Значения: &lt;br /&gt;
*Low&lt;br /&gt;
*Medium-low&lt;br /&gt;
*Medium-high&lt;br /&gt;
*High&lt;br /&gt;
*Strict-high - traffic always in-profile. Пакеты в этой очереди всегда в первую очередь используют необходимую полосу.&lt;br /&gt;
&lt;br /&gt;
Остальные очереди передают трафик в порядке убывания приоритета от high к low.&lt;br /&gt;
&lt;br /&gt;
Трафик в in-profile (по transmission rate) low priority, будет обрабатывается до трафика out-profile strict priority.&lt;br /&gt;
&lt;br /&gt;
То есть сначала вне зависимости обрабатывается трафик в in-profile, только потом out-profile.&lt;br /&gt;
&lt;br /&gt;
Но при этом, при передаче каждого пакета в очереди, ниже strict, происходит проверка - есть ли в очереди пакеты из более высокой очереди. Если есть, то начинают передаваться они, а потом продолжает передавать прежняя очередь (если за это время не набежало пакетов из тоже приоритетной очереди).&lt;br /&gt;
&lt;br /&gt;
Strict-priority - опсана! она может сожрать всю полосу и остальные очереди могут &amp;quot;голодать&amp;quot;. Но High-prioroty делит полосу с Strict. &lt;br /&gt;
&lt;br /&gt;
Чтобы не происходило голодания, мы можем: &lt;br /&gt;
#также важным очередям назначать  high-priotity.&lt;br /&gt;
#для strict-priority задавать в transm-rate ''rate-limit''.&lt;br /&gt;
&lt;br /&gt;
Разрешается задавать 1 strict-priority на 1 интерфейс.&lt;br /&gt;
&lt;br /&gt;
 edit class-of-service schedule ''&amp;lt;schedule-name&amp;gt;'' '''priority''' ''&amp;lt; high / low / medium-high / medium-low / strict-high &amp;gt;''&lt;br /&gt;
&lt;br /&gt;
Дефолтные значения для дефолтных fw-class: '''best-effort - ''low'' ''', '''network-control - ''low'' '''.&lt;br /&gt;
&lt;br /&gt;
== Delay buffers ==&lt;br /&gt;
&lt;br /&gt;
- '''Delay buffers''' - кол-во данных, кот можно хранить.&lt;br /&gt;
&lt;br /&gt;
larger buffer = many packet stores = large supported latency.&lt;br /&gt;
&lt;br /&gt;
Buffer size - это параметр, определяющийся размер буфера интерфейса и также зависит от платформы.&lt;br /&gt;
&lt;br /&gt;
 edit class-of-service schedule ''&amp;lt;schedule-name&amp;gt;'' '''buffer-size''' ''&amp;lt;percent | temporal | remainder&amp;gt;''&lt;br /&gt;
&lt;br /&gt;
'''percentage''': буфер &amp;quot;эластичный&amp;quot;, когда очередь начинает использовать бОльшую полосу, чем ей было выделено изначально (transm-rate), буфер будет автоматически увеличиваться.&lt;br /&gt;
&lt;br /&gt;
 effective delay buffer (ms) = buffer size (%) * max port buffer size (ms)&lt;br /&gt;
 effective delay buffer (s) * interf bandwidth (Mbps) / 8 = buffer size (MB) [используется для конвертации в Мбайты]&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
 &lt;br /&gt;
 100 ms - max buffer size&lt;br /&gt;
 1GB ports&lt;br /&gt;
 для очереди 0 - задаем percentage = 30%: effective delay buffer = 30 ms, buffer size = 0,03 s * 1000 Mbps /8 = 3,75 MB&lt;br /&gt;
 для очереди 1 - задаем percentage = 45%: effective delay buffer = 45 ms, buffer size = 0,045 s * 1000 Mbps /8 = 5.625 MB&lt;br /&gt;
&lt;br /&gt;
'''temporal''': для задания размера такого буфера используются мс. Буфер не эластичный, имеет строгий верхний лимит и дропает весь трафик, превышающий этот лимит. Для вычисления оптимального размера буфера используется значение transmission-rate.&lt;br /&gt;
&lt;br /&gt;
 buffer size (MB) = max buffer size (s) * transmit rate (Mbps) / 8&lt;br /&gt;
 buffer size (MB) = max buffer size (s) * [interface bandw (Mbps) * transmit rate (%)] / 8&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
 &lt;br /&gt;
 100 ms - max buffer size&lt;br /&gt;
 1GB ports&lt;br /&gt;
 для очереди 2 - задаем transmission rate = 100 Mbps (10%): buffer size = 0,1 * 100 Mbps / 8 = 1,25 MB&lt;br /&gt;
 для очереди 2 - задаем transm rate = 10% : buffer size = 0,1 * 1000 Mbps * 0.1 / 8 = 1,25 MB&lt;br /&gt;
 для очереди 3 - задаем transmission rate = 300 Mbps (30%): buffer size = 0,1 * 300 Mbps / 8 = 3,75 MB&lt;br /&gt;
 для очереди 3 - задаем transm rate = 30% : buffer size = 0,1 * 1000 Mbps * 0.3 / 8 = 3,75 MB&lt;br /&gt;
  &lt;br /&gt;
'''remainder''': использует все не занятое другими очередями пространство.&lt;br /&gt;
 &lt;br /&gt;
Когда мы выставляем buffer size и transm rate в процентном соотношении, хорошей практикой считается выставлять пропорциональные (равные) значения, но это не обязательно вообще.&lt;br /&gt;
&lt;br /&gt;
В обоих случаях размер буффера будет увеличиваться при увеличении transm rate.&lt;br /&gt;
&lt;br /&gt;
'''Default scheduler settings''': Для '''best-effort - ''95'' ''', для '''netw-control - ''5'' ''', что равно дефолтным значениям transm-rate.&lt;br /&gt;
&lt;br /&gt;
== Drop profiles  (RED/WRED)==&lt;br /&gt;
'''RED drop profiles (random early discard)''' - как отбрасывать трафик, когда возникает запор. Работает напрямую с буфферами. Отбрасывание пакетов зависит от заполненности буфера.&lt;br /&gt;
&lt;br /&gt;
Определяет параметры отброшенного трафика, назначает PLP для использования (set on a packet at ingress).&lt;br /&gt;
&lt;br /&gt;
При этом в RED из-за &amp;quot;случайно отброшенных&amp;quot; пакетов может возникнуть такая ситуация, когда некоторые пакеты одного потока будут отброшены, тогда source перестанет получать acknowledgement от receiver. При этом затор на уже почти перегруженном линке будет только увеличиваться.&lt;br /&gt;
&lt;br /&gt;
В связи с этим более эффективно использовать WRED, он полностью не уберет проблему с &amp;quot;нечестным&amp;quot; отбросом пакетов из одного потока, но хотя бы можно исключить подобную ситуацию для трафика, нетерпимого к подобным потерям. О нем дальше.&lt;br /&gt;
===Параметры WRED===&lt;br /&gt;
#'''fullness''': наполненность буффера.&lt;br /&gt;
#'''drop probability''': вероятность, что пакет будет отброшен.&lt;br /&gt;
&lt;br /&gt;
Для drop-profile задаём значения для этих двух параметров.&lt;br /&gt;
По сути получается линия на графике, где соотносятся fullness (%) к drop probability (%).&lt;br /&gt;
&lt;br /&gt;
'''How it works''':&lt;br /&gt;
#Для каждого пакета в очереди маршрутизатор назначает любое число от 0-100.&lt;br /&gt;
#Числа нанесены на график отношения fullness к drop probability (по оси fullness).&lt;br /&gt;
#Когда случайный номер выше линии, пакет передается.&lt;br /&gt;
#Когда случайный номер ниже линии, пакет дропается.&lt;br /&gt;
&lt;br /&gt;
Чтобы сделать более тонкую обработку трафика, рекомендуется создать несколько drop pofiles с разной &amp;quot;агрессивностью&amp;quot;, и применять каждый к разному типу трафика.&lt;br /&gt;
&lt;br /&gt;
Такой подход является более взшешанным (weighted RED = '''WRED''').&lt;br /&gt;
&lt;br /&gt;
Если для очереди назначен менее агрессивный drop profile, то она полностью будет использовать буффер - такой drop-profile хорошо использовать для более приоритетного трафика. Если используем более агрессивный, то буффер не будет заполняться до конца - подобное поведение свойственно менее приоритетному трафику.&lt;br /&gt;
&lt;br /&gt;
Когда мы настраиваем drop profile таким образом, что fullness &amp;lt; 100%, drop probability = 100%, мы таким образом уменьшаем эффективный максимальный размер буффера. То есть с помощью drop-profile мы можем влиять на &amp;quot;рабочий&amp;quot; размер буфера.&lt;br /&gt;
&lt;br /&gt;
===Config options===&lt;br /&gt;
Помимо drop probability и fullness при конфигурации следует учитывать, что эти параметры могут задаваться:&lt;br /&gt;
&lt;br /&gt;
*'''segmented''': график строится по указанным в конфигурации значениям. Особенность: так как график будет выглядить как лесенка, то на разных промежутках, при разных значениях fullness, мы будем иметь одно и то же значение drop probability.&lt;br /&gt;
&lt;br /&gt;
Пример конфига:&lt;br /&gt;
&lt;br /&gt;
 set class-of-service drop-profiles ''segmented'' fill-level 25 drop-probability 25 &lt;br /&gt;
 set class-of-service drop-profiles ''segmented'' fill-level 50 drop-probability 50&lt;br /&gt;
 set class-of-service drop-profiles ''segmented'' fill-level 75 drop-probability 75&lt;br /&gt;
 set class-of-service drop-profiles ''segmented'' fill-level 95 drop-probability 100&lt;br /&gt;
&lt;br /&gt;
*'''interpolated''': &lt;br /&gt;
&lt;br /&gt;
Представляет собой гладкий график, постепенно возвышающийся.&lt;br /&gt;
&lt;br /&gt;
Строится автоматически, состоит из 64 координат, включая координаты, которые мы задали для построения кривой.&lt;br /&gt;
&lt;br /&gt;
(0,0) (100,100) - эти координаты включены по умолчанию.&lt;br /&gt;
&lt;br /&gt;
Пример конфига:&lt;br /&gt;
&lt;br /&gt;
 set class-of-service drop-profiles ''interpolated'' interpolate fill-level [50 75] drop-probability [25 50]&lt;br /&gt;
&lt;br /&gt;
===Default settings===&lt;br /&gt;
&lt;br /&gt;
 fill-level 0 drop-probability 0&lt;br /&gt;
 fill-level 100 drop-probability 100&lt;br /&gt;
&lt;br /&gt;
Вообще дефолтная настройка смысла не имеет, так как начинает отбрасывать пакеты только при полной загруженности буффера, что и без того происходит! )&lt;br /&gt;
&lt;br /&gt;
===Apply drop profile===&lt;br /&gt;
&lt;br /&gt;
Помимо того что drop profile нужно создать, для его работы его нужно прикрепить к какой-нибудь очереди.&lt;br /&gt;
&lt;br /&gt;
Одной очереди может быть применено более 1 drop profile для разных типов трафика.&lt;br /&gt;
&lt;br /&gt;
Также drop profile придает значение для PLP. До этого PLP было просто меткой, прикрепленной к пакету. Я так понимаю, что здесь речь о том, то прикрепленный к пакету PLP теперь имеет значение и на его основании, в том числе, будет обработан трафик.&lt;br /&gt;
&lt;br /&gt;
Также drop profile может быть назначен по protocol-specific: non-TCP, TCP, all traffic.&lt;br /&gt;
&lt;br /&gt;
===Drop profile map options===&lt;br /&gt;
&lt;br /&gt;
'''loss-priority''': ''low'', ''medium-low'', ''medium-high'', ''high''. ''any''&lt;br /&gt;
&lt;br /&gt;
'''protocol''': ''tcp'', ''non-tcp'', ''any''&lt;br /&gt;
&lt;br /&gt;
'''drop profile''': desired drop-profile.&lt;br /&gt;
&lt;br /&gt;
 edit class-of-service schedule schedule-name drop-profile-map loss-priority ... protocol ... drop-profile ...&lt;br /&gt;
&lt;br /&gt;
По сути здесь выцепляется трафик из определенного forwarding-class, с определенным PLP, опеределнного протокола и к нему применяется определенный drop-profile.&lt;br /&gt;
&lt;br /&gt;
===Default scheduler settings===&lt;br /&gt;
&lt;br /&gt;
 edit class-of-service schedule schedule-name drop-profile-map loss-priority any protocol any drop-profile terminal&lt;br /&gt;
&lt;br /&gt;
 set class-of-service drop-profiles terminal fill-level 100 drop-probability 100&lt;br /&gt;
&lt;br /&gt;
=Scheduler map=&lt;br /&gt;
Используется для группирования сложных наборов schedulers, чтобы можно было применить их к каждому FW class на интерфейсе.&lt;br /&gt;
&lt;br /&gt;
При создании scheduler map мы задаем кол-во сервисов, назначенных каждому FW class и соответствующих приоритетов.&lt;br /&gt;
&lt;br /&gt;
При этом к одной очереди можно применить несколько FW class (queue). Далее трафик можно будет обрабатывать особым образом, основываясь на PLP.&lt;br /&gt;
&lt;br /&gt;
=Конфигурация Scheduler=&lt;br /&gt;
&lt;br /&gt;
*Configure scheduler, including drop profile&lt;br /&gt;
:*Transmission rate&lt;br /&gt;
:*Queue priority&lt;br /&gt;
:*Delay buffers&lt;br /&gt;
:*Drop profile - не в рамках scheduler&lt;br /&gt;
:*Drop profile maps&lt;br /&gt;
*Configure scheduler map: schedulers придуманы, чтобы определенным образом управлять определенным трафиком. Сами по себе schedulers ничего не делают, нужна привязка. Scheduler-map как бы линк между forw-class и scheduler.&lt;br /&gt;
*Apply scheduler map to an interface: будет работать в outbound направлении. Для port-level queueing вешается на физический интерфейс.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
''scheduler''&lt;br /&gt;
&lt;br /&gt;
 set class-of-service drop-profiles relaxed interpolate fill-level [75 90 100] drop-probability [0 75 100]&lt;br /&gt;
 set class-of-service drop-profiles aggressive interpolate fill-level [50 75 90 100] drop-probability [0 50 75 100]&lt;br /&gt;
&lt;br /&gt;
 set class-of-service schedulers sch-be transmit-rate percent 70&lt;br /&gt;
 set class-of-service schedulers sch-be buffer-size percent 70&lt;br /&gt;
 set class-of-service schedulers sch-be priority low&lt;br /&gt;
 set class-of-service schedulers sch-be drop-profile-map loss-priority high protocol any drop-profile aggressive&lt;br /&gt;
 set class-of-service schedulers sch-be drop-profile-map loss-priority low protocol any drop-profile relaxed&lt;br /&gt;
&lt;br /&gt;
 set class-of-service schedulers sch-pri transmit-rate percent 30&lt;br /&gt;
 set class-of-service schedulers sch-pri buffer-size percent 30&lt;br /&gt;
 set class-of-service schedulers sch-pri priority high&lt;br /&gt;
&lt;br /&gt;
''scheduler map''&lt;br /&gt;
&lt;br /&gt;
 set class-of-service scheduler-maps ''sched-map-example'' forwarding-class best-effort-data scheduler ''sch-be''&lt;br /&gt;
 set class-of-service scheduler-maps ''sched-map-example'' forwarding-class priority-data scheduler ''sch-pri''&lt;br /&gt;
&lt;br /&gt;
''apply to an interface''&lt;br /&gt;
&lt;br /&gt;
 set class-of-service interfaces ge-0/0/0 scheduler-map ''sched-map-example''&lt;br /&gt;
&lt;br /&gt;
=Дополнительная информация=&lt;br /&gt;
*[[Глава 5. Hierarchical scheduling]]&lt;br /&gt;
*[[Глава 1. QoS]]&lt;br /&gt;
*[[Глава 8. Packet flow]]&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=%D0%93%D0%BB%D0%B0%D0%B2%D0%B0_3._Policing&amp;diff=2040</id>
		<title>Глава 3. Policing</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=%D0%93%D0%BB%D0%B0%D0%B2%D0%B0_3._Policing&amp;diff=2040"/>
		<updated>2021-07-15T18:19:54Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#description2: Основы policing. Shaping. Single-rate two-color policer. Tricolor marking policers. Two-rate tricolor marking policy. Color-blind mode. Color-aware mode. Policing с использованием firewall filter.Информация для подготовки к экзаменам Juniper.}}&lt;br /&gt;
==Основы policing==&lt;br /&gt;
*Первая ступень управления трафиком при заторах. Использует bandwidth threshold and max burst size. Может управлять трафиком (назначать PLP, forw-class), который превысил оба порога (не только шейпить).&lt;br /&gt;
*Применяются ограничения bandwidth для вх и исх трафика.&lt;br /&gt;
*Обеспечивает соблюдение SLA.&lt;br /&gt;
*Определяет трафик как: in-profile (трафик не превысивший threshold) и out-profile (трафик, превысивший threshold).&lt;br /&gt;
&lt;br /&gt;
===Особенности===&lt;br /&gt;
- Для создания policer:&lt;br /&gt;
:-bandwidth threshold + max burst size&lt;br /&gt;
:-действие: reject, discard, ...&lt;br /&gt;
- Применяется:&lt;br /&gt;
:- на интерфейс.&lt;br /&gt;
:- в качестве действия внутри firewall filter, firewall filter вешается на интерфейс.&lt;br /&gt;
- Использует token-bucket алгоритм: есть некий burst, до того, как начать влиять на трафик.&lt;br /&gt;
&lt;br /&gt;
=== Hard/Soft ===&lt;br /&gt;
'''Hard''': Все что выходит за рамки ограничения - дропается.&lt;br /&gt;
&lt;br /&gt;
'''Soft''': Трафик который превышает лимит: &lt;br /&gt;
#не дропается, но направляется в определенный forwarding class.&lt;br /&gt;
#не дропается, но ему присваивается определенное значение PLP, по которому в случае заторов он будет отброшен шедулерами.&lt;br /&gt;
&lt;br /&gt;
=== Параметры ===&lt;br /&gt;
&lt;br /&gt;
'''CIR, CBS''': commited information rate (бит/с) / burst size (байт): зеленый - кол-во трафика &amp;lt; CBS - точняк пройдет (in-profile).&lt;br /&gt;
&lt;br /&gt;
'''PIR, PBS/EBS''': peak information rate (бит/с), peak/exceed burst size (байт): то, что &amp;lt; PBS - пройдет, но в случае заторов пакеты могут быть дропнуты. То что больше - будет дропаться (out-of-profile).&lt;br /&gt;
&lt;br /&gt;
== Single-rate two-color policer ==&lt;br /&gt;
*Один threshold по скорости ('''CIR''')&lt;br /&gt;
*Один burst threshold, с помощью которого создается 2 цвета, в которые может быть &amp;quot;окрашен&amp;quot; трафик. ('''CBS''')&lt;br /&gt;
*Трафик, превышающий CIR + CBS =&amp;gt; '''discard / set forwarding class / set PLP / out-of-profile'''&lt;br /&gt;
&lt;br /&gt;
'''Конфигурация'''&lt;br /&gt;
 set firewall policer ''100m'' if-exceeding bandwidth-limit 100m      = '''CIR'''&lt;br /&gt;
 set firewall policer ''100m'' if-exceeding burst-size-limit 2.5m     = '''CBS'''&lt;br /&gt;
 set firewall policer ''100m'' if-exceeding then '''discard'''&lt;br /&gt;
&lt;br /&gt;
== Tricolor marking policers ==&lt;br /&gt;
Также не только дропает трафик, а можно задавать PLP в зависимости от значений CIR, PIR, CBS, EBS.&lt;br /&gt;
&lt;br /&gt;
Зеленые пакеты могут стать желтыми.&lt;br /&gt;
=== Single-rate tricolor marking policy===&lt;br /&gt;
Полисинг основан на двух burst thresholds.&lt;br /&gt;
*Один threshold по скорости ('''CIR''')&lt;br /&gt;
*Два burst size threshold ('''CBS, EBS'''). Что дает создать 3 цвета для &amp;quot;окраски&amp;quot; трафика.&lt;br /&gt;
*Назначение цветов: &lt;br /&gt;
:*&amp;lt; CBS - зеленый = low PLP&lt;br /&gt;
:*CBS &amp;lt; x &amp;lt; EBS - желтый = medium-high PLP&lt;br /&gt;
:*&amp;gt; EBS - красный - high PLP&lt;br /&gt;
'''Конфигурация'''&lt;br /&gt;
 set firewall three-color-policer 100m logical-interface-policer&lt;br /&gt;
 set firewall three-color-policer 100m action loss-priority high then discard&lt;br /&gt;
 set firewall three-color-policer 100m single-rate committed-information-rate 90m = '''CIR'''&lt;br /&gt;
 set firewall three-color-policer 100m single-rate committed-burst-size 10m       = '''CBS'''&lt;br /&gt;
 set firewall three-color-policer 100m single-rate excess-burst-size 100m         = '''EBS'''&lt;br /&gt;
 &lt;br /&gt;
 set firewall family inet filter 100m term 1 then three-color-policer single-rate 100m&lt;br /&gt;
&lt;br /&gt;
 set interfaces xe-0/0/0 unit 100 family inet filter input 100m&lt;br /&gt;
&lt;br /&gt;
===Two-rate tricolor marking policy===&lt;br /&gt;
Полисинг основан на 2х bandwidth thresholds.&lt;br /&gt;
*Два thresholds по скорости ('''CIR, PIR'''). Это уже создает 3 цвета для &amp;quot;окраски&amp;quot; трафика.&lt;br /&gt;
*Два burst size threshold ('''CBS, PBS'''). &lt;br /&gt;
*Markings:&lt;br /&gt;
:*&amp;lt; CIR+CBS - зеленый = low PLP&lt;br /&gt;
:*CIR+CBS &amp;lt; x &amp;lt; PIR+PBS - желтый = medium-low PLP&lt;br /&gt;
:*&amp;gt; PIR+PBS - красный = high PLP&lt;br /&gt;
&lt;br /&gt;
'''Конфигурация'''&lt;br /&gt;
 set firewall three-color-policer 50-60m two-rate committed-information-rate 50m&lt;br /&gt;
 set firewall three-color-policer 50-60m two-rate committed-burst-size 1m&lt;br /&gt;
 set firewall three-color-policer 50-60m two-rate peak-information-rate 60m&lt;br /&gt;
 set firewall three-color-policer 50-60m two-rate peak-burst-size 1m&lt;br /&gt;
 set firewall three-color-policer 50-60m logical-interface-policer&lt;br /&gt;
 set firewall three-color-policer 50-60m action loss-priority high then discard&lt;br /&gt;
&lt;br /&gt;
 set firewall family inet filter 50-60m term 1 then three-color-policer two-rate 50-60m&lt;br /&gt;
&lt;br /&gt;
 set interfaces xe-0/0/0 unit 100 family inet filter input 50-60m&lt;br /&gt;
&lt;br /&gt;
===Color-blind mode===&lt;br /&gt;
Policer не рассматривает предыдущее окрашивание пакета. Любые прежние настройки - игнорируются. PLP назначайся в соответствии с настройками policer.&lt;br /&gt;
&lt;br /&gt;
===Color-aware mode===&lt;br /&gt;
Policer учитывает предыдущую окраску пакета.&lt;br /&gt;
&lt;br /&gt;
При обработке single-rate tricolor и two-rate tricolor на выходе получается пакет с результирующей меткой PLP + учитывается текущее прохождение пакета.&lt;br /&gt;
&lt;br /&gt;
PLP может увеличиваться, оставаться прежним, но не уменьшаться.&lt;br /&gt;
&lt;br /&gt;
Применение:&lt;br /&gt;
 set firewall three-color-policer 100m single-rate ''(color-aware|color-blind)''&lt;br /&gt;
 или&lt;br /&gt;
 set firewall three-color-policer 50-60m two-rate ''(color-aware|color-blind)''&lt;br /&gt;
&lt;br /&gt;
'''По умолчанию tricolor mode включён только на М120 и МХ серии.'''&lt;br /&gt;
&lt;br /&gt;
Для остальных включается руками:&lt;br /&gt;
 [edit class-of-service]&lt;br /&gt;
    tri-color;&lt;br /&gt;
&lt;br /&gt;
== Применение полисеров==&lt;br /&gt;
=== Interface policers ===&lt;br /&gt;
*Не часть firewall filter.&lt;br /&gt;
*Можно применить к: protocol family, logical int, physical int.&lt;br /&gt;
*Можно применить на input и output.&lt;br /&gt;
'''Конфигурация'''&lt;br /&gt;
Для '''protocol family''':&lt;br /&gt;
 set interfaces ge-0/0/0 unit 500 family inet policer input 100m&lt;br /&gt;
 set interfaces ge-0/0/0 unit 500 family inet policer output 100m&lt;br /&gt;
&lt;br /&gt;
 set firewall policer 100m if-exceeding bandwidth-limit 100m&lt;br /&gt;
 set firewall policer 100m if-exceeding burst-size-limit 250k&lt;br /&gt;
 set firewall policer 100m then loss-priority low&lt;br /&gt;
&lt;br /&gt;
В таком случае threshold по трафику на каждую '''family''' будет 100 Мбит.&lt;br /&gt;
&lt;br /&gt;
Для '''Logical interface policers''': полисер применяется к family на интерфейсе, но threshold теперь применяется ко '''всем family в unit''' сразу. То есть в нашем случае в общем на ge-0/0/0.110 будет ограничение 100m.&lt;br /&gt;
&lt;br /&gt;
 [edit firewall policer 100m]&lt;br /&gt;
 +   logical-interface-policer;&lt;br /&gt;
&lt;br /&gt;
=== Policing с использованием firewall filter ===&lt;br /&gt;
*Можно применять полисеры внутри ff: тогда в ''then'' нужно указать не терминирующее действие, а назначение policer.&lt;br /&gt;
*Могут применяться только к ''family''&lt;br /&gt;
*Могут применяться на in/out&lt;br /&gt;
&lt;br /&gt;
'''Конфигурация'''&lt;br /&gt;
&lt;br /&gt;
''hard'':&lt;br /&gt;
 set firewall family inet filter hard term 1 from source-address 10.200.86.3/32 except&lt;br /&gt;
 set firewall family inet filter hard term 1 then policer hard-100m&lt;br /&gt;
 set firewall family inet filter hard term 1 then accept&lt;br /&gt;
 set firewall family inet filter hard term all-accept then accept&lt;br /&gt;
&lt;br /&gt;
 set firewall policer hard-100m if-exceeding bandwidth-limit 100m&lt;br /&gt;
 set firewall policer hard-100m if-exceeding burst-size-limit 250k&lt;br /&gt;
 set firewall policer hard-100m then discard&lt;br /&gt;
&lt;br /&gt;
''soft'':&lt;br /&gt;
 set firewall family inet filter soft term 1 from source-address 10.200.86.3/32 except&lt;br /&gt;
 set firewall family inet filter soft term 1 then policer soft-100m&lt;br /&gt;
 set firewall family inet filter soft term 1 then forwarding-class expedited-forwarding&lt;br /&gt;
 set firewall family inet filter soft term 1 then accept&lt;br /&gt;
 set firewall family inet filter soft term all-accept then accept&lt;br /&gt;
&lt;br /&gt;
 set firewall policer soft-100m if-exceeding bandwidth-limit 100m&lt;br /&gt;
 set firewall policer soft-100m if-exceeding burst-size-limit 250k&lt;br /&gt;
 set firewall policer soft-100m then forwarding-class best-effort&lt;br /&gt;
&lt;br /&gt;
В этом случае трафику, in-profile будет назначен fw-class expedited-forwarding, а трафику попадающему в out-of-profile - best-effort (default).&lt;br /&gt;
&lt;br /&gt;
'''Filter-specific policer''': применяется к ''term'', на все термы суммарно будет одно общее ограничение. Применяется для выделения разных типов трафика, но policing над ними будет делаться как над одним потоком.&lt;br /&gt;
&lt;br /&gt;
 set firewall policer hard '''filter-specific'''&lt;br /&gt;
 set firewall policer hard if-exceeding bandwidth-limit 100m&lt;br /&gt;
 set firewall policer hard if-exceeding burst-size-limit 250k&lt;br /&gt;
 set firewall policer hard then discard&lt;br /&gt;
&lt;br /&gt;
 set firewall family inet filter hard-f term A from source-address 10.200.86.5/32&lt;br /&gt;
 set firewall family inet filter hard-f term A then policer hard&lt;br /&gt;
 set firewall family inet filter hard-f term A then accept&lt;br /&gt;
 set firewall family inet filter hard-f term B from source-address 10.200.86.3/32&lt;br /&gt;
 set firewall family inet filter hard-f term B then policer hard&lt;br /&gt;
 set firewall family inet filter hard-f term B then accept&lt;br /&gt;
 set firewall family inet filter hard-f term all-other then accept&lt;br /&gt;
&lt;br /&gt;
=== Physical interface policer ===&lt;br /&gt;
Дает возможность создать аггрегированный полисер для одного физического интерфейса. &lt;br /&gt;
Может быть полезным, если хочется создать общий полисер для разных ''family'' и разных ''unit'' на одном физическом интерфейсе.&lt;br /&gt;
&lt;br /&gt;
 ''set firewall policer int-poli physical-interface-policer''&lt;br /&gt;
 set firewall policer int-poli if-exceeding bandwidth-limit 100m&lt;br /&gt;
 set firewall policer int-poli if-exceeding burst-size-limit 200k&lt;br /&gt;
 set firewall policer int-poli then forwarding-class best-effort&lt;br /&gt;
&lt;br /&gt;
 ''set firewall family inet filter phys-int physical-interface-filter''&lt;br /&gt;
 set firewall family inet filter phys-int term A then policer int-poli&lt;br /&gt;
 set firewall family inet filter phys-int term A then accept&lt;br /&gt;
&lt;br /&gt;
 set interfaces ge-1/0/5 unit 0 family inet filter input phys-int&lt;br /&gt;
 set interfaces ge-1/0/5 unit 0 family inet6 filter input phys-int&lt;br /&gt;
 set interfaces ge-1/0/5 unit 2 family inet filter input phys-int&lt;br /&gt;
 set interfaces ge-1/0/5 unit 2 family inet6 filter input phys-int&lt;br /&gt;
&lt;br /&gt;
В этом случае полисер 100 Мбит будет общим для всего физического интерфейса.&lt;br /&gt;
&lt;br /&gt;
=== Policiers + Firewalls ===&lt;br /&gt;
&lt;br /&gt;
Можно одновременно повесить на интерфейс и policer и filter.&lt;br /&gt;
&lt;br /&gt;
'''Вх. трафик''' будет обрабатываться: 1.policer =&amp;gt; 2.filter&lt;br /&gt;
&lt;br /&gt;
'''Исх. трафик''' будет обрабатываться: 1.filter =&amp;gt; 1.policer&lt;br /&gt;
&lt;br /&gt;
== Shaping ==&lt;br /&gt;
Помимо policing, можно лишний трафик обрезать шейпером. В Основном shaping делается на выходе (к исх трафику).&lt;br /&gt;
&lt;br /&gt;
Разница:&lt;br /&gt;
* policing на вх и вых | shaping на вых&lt;br /&gt;
* policing - hard: дропает лишний трафик, soft: меняет forwarding class, который в последующем скорей всего дропнется.&lt;br /&gt;
* shaping - лишний трафик кладет в буфер и чуть позже его передаст. Не хорошо для сервисов, чувствительных к задержке.&lt;br /&gt;
* policing может влиять ну судьбу трафика за пределами роутера, назначая forw class&lt;br /&gt;
* shaping не влияет на судьбу трафика за пределами роутера, т.к. кроме буферизации ничего не делает.&lt;br /&gt;
&lt;br /&gt;
==Дополнительная информация==&lt;br /&gt;
*[[Глава 1. QoS]]&lt;br /&gt;
*[[Глава 2. Packet classification]]&lt;br /&gt;
*[[Глава 7. CoS-based forwarding]]&lt;br /&gt;
*[[Глава 8. Packet flow]]&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=%D0%93%D0%BB%D0%B0%D0%B2%D0%B0_2._Packet_classification&amp;diff=2039</id>
		<title>Глава 2. Packet classification</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=%D0%93%D0%BB%D0%B0%D0%B2%D0%B0_2._Packet_classification&amp;diff=2039"/>
		<updated>2021-07-15T18:18:49Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#description2:Основы классификации пакетов. Дефолтные классы. Packet loss priority (PLP). Типы классификации: fixed (interface based), MF (multifield), BA (behavior aggregate), mixed. Классификаторы. Информация для подготовки к экзаменам Juniper.}}&lt;br /&gt;
=Основы классификации пакетов=&lt;br /&gt;
'''Цель классификации пакетов''': исследовать трафик и ассоциировать пакеты с конкретным cos service level (c forwarding class и loss priority). И уже на основании forw class пакет обрабатывается по правилам конкретной очереди (queue).&lt;br /&gt;
&lt;br /&gt;
Т.е.: определение и назначение forwarding class = помещение пакета в нужную очередь.&lt;br /&gt;
&lt;br /&gt;
Ассоциирование трафика происходит по code-point меткам любого типа: DSCP (ip) / EXP (mpls) и другим.&lt;br /&gt;
&lt;br /&gt;
'''Forwarding class''' - не возникает извне сети. Но при назначении FW class конкретному типу трафика на начальном узле, может быть опознан и обработай корректно на других узлах сети.&lt;br /&gt;
&lt;br /&gt;
Пакеты определенного класса могут быть перекласифицированы дальше в сети.&lt;br /&gt;
==Дефолтные классы==&lt;br /&gt;
На всех роутерах есть уже предустановленные F-classes и queues для них:&lt;br /&gt;
* BF (Best effort) = 0 queue - default for PHB -  по умолчанию пакеты в этой очереди при заторах - дропаются.&lt;br /&gt;
* EF (Expedited forwarding) = 1 - гарантированная полоса, low loss, low delay, low jitter - хорош для voice. Избыточный трафик принимается но при отправке его дальше часть трафика может быть дроппнута, часть переслана в неверном порядке.&lt;br /&gt;
* AF (assured forwarding) = 2 - концентрация в основном на packet loss - хорошо для типа трафика, чувствительного к потерям. Избыточный трафик принимается, но к нему применяется: RED drop profile. 4 drop probabilities для этого класса: low, medium-low, medium-high, and high.&lt;br /&gt;
* NC (network control) = 3 - low priority. Но в условиях заторов - трафик не дропается, т.к. передает служебную инфу для протоколов.&lt;br /&gt;
&lt;br /&gt;
Можно создавать свои или менять для существующих классов названия, например:&lt;br /&gt;
 blair&amp;gt; show class-of-service forwarding-class   &lt;br /&gt;
 Forwarding class	ID	Queue	Policing priority&lt;br /&gt;
  be			0	0	normal   &lt;br /&gt;
  ef			1	1	normal  &lt;br /&gt;
  voice			2	2	normal &lt;br /&gt;
  tv-data		3	3	normal&lt;br /&gt;
&lt;br /&gt;
 blair# show class-of-service forwarding-classes &lt;br /&gt;
 class be queue-num 0;&lt;br /&gt;
 class ef queue-num 1;&lt;br /&gt;
 class voice queue-num 2;&lt;br /&gt;
 class tv-data queue-num 3;&lt;br /&gt;
&lt;br /&gt;
MX, T, M7i/M10i с CFEB-E: до 16 классов, до 8 очередей.&lt;br /&gt;
&lt;br /&gt;
Назначение очереди происходит по следующим правилам:&lt;br /&gt;
*Если классификатор не занес пакет в какой-то класс, то умолчанию ему назначают BE forwardong-class, queue 0.&lt;br /&gt;
*Конфигурация CoS по умолчанию основана на номере очереди. Имя класса пересылки, которое появляется при отображении конфигурации по умолчанию - это класс пересылки, связанный в данный момент с этой очередью.&lt;br /&gt;
*Конфиг, где в QoS определено больше очередей, чем поддерживает роутер - не сможет быть закоммичен.&lt;br /&gt;
&lt;br /&gt;
Только для BE и NC по дефолту определены и forwarding classes и schedulers. Для EF, AF требуется их (schedulers) настраивать.&lt;br /&gt;
&lt;br /&gt;
Только IP precedence classifiers работают на интерфейсах.&lt;br /&gt;
&lt;br /&gt;
==Packet loss priority (PLP)==&lt;br /&gt;
&lt;br /&gt;
Определяет вероятность отбрасывания при заторах. Пакет с наибольшим PLP будет отброшен первым.&lt;br /&gt;
&lt;br /&gt;
PLP назначается на ingress, когда используем классификаторы. Однако, PLP также можно назначить и позднее с помощью policer.&lt;br /&gt;
&lt;br /&gt;
PLP может принимать 4 значения: low, medium-low, medium-high, high. По умолчанию JunoOS использует 2: low, high.&lt;br /&gt;
&lt;br /&gt;
Если смотреть на default classifier, можно менять их в конфигурации:&lt;br /&gt;
&lt;br /&gt;
000 - best-effor (low)&lt;br /&gt;
&lt;br /&gt;
001 - best effort (high)&lt;br /&gt;
&lt;br /&gt;
010 - exp-forwarding (low)&lt;br /&gt;
&lt;br /&gt;
011 - exp-forwarding (high)&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
110 - network-control (low)&lt;br /&gt;
&lt;br /&gt;
111 - network-control (high)&lt;br /&gt;
&lt;br /&gt;
lower-priority = high drop eligibility&lt;br /&gt;
&lt;br /&gt;
=Виды классификаций=&lt;br /&gt;
Каждый Ingress interface должен выбрать для себя способ классификации.&lt;br /&gt;
&lt;br /&gt;
== Fixed classification (interface based)==&lt;br /&gt;
Один forwarding class назначается на unit (vlan) и применяется ко всем входящим пакетам.&lt;br /&gt;
&lt;br /&gt;
Классификация очень грубая.&lt;br /&gt;
&lt;br /&gt;
Такую схему хорошо использовать, если нужно особым способом обработать весь трафик клиента на одном интерфейсе.&lt;br /&gt;
&lt;br /&gt;
Или если upstream узел ненадежный и нужно ''перекрасить'' весь трафик, приходящий на этот порт (обычно BE в подобных ситуациях).&lt;br /&gt;
&lt;br /&gt;
При использовании такого метода нельзя сделать исключения для какого-то трафика, поэтому такой метод считается не очень &amp;quot;гибким&amp;quot; для использования.&lt;br /&gt;
&lt;br /&gt;
'''Config'''&lt;br /&gt;
 blair# show class-of-service interfaces &lt;br /&gt;
 ge-0/0/0 {&lt;br /&gt;
     unit 60 {&lt;br /&gt;
         forwarding-class voice;}}&lt;br /&gt;
&lt;br /&gt;
== MF (multifield) classification ==&lt;br /&gt;
&lt;br /&gt;
Классификация основана на 1 или более полей в заголовке пакета: port, IP, prefix, mac.&lt;br /&gt;
 &lt;br /&gt;
Для выделения нужного трафика по определенным полям используется обычный '''stateless''' firewall-filter. (использует не только source/dest ip).&lt;br /&gt;
&lt;br /&gt;
MF лучше применять на ingress (в самом начале попадания пакета в сеть).&lt;br /&gt;
&lt;br /&gt;
Можно использовать MF для переклассификации пакетов, классифицированных ранее BA.&lt;br /&gt;
&lt;br /&gt;
Config (можно писать несколько term, определяя по разным параметрам трафик и запихивая его в разные очереди)&lt;br /&gt;
 set interfaces ge-0/0/0 unit 80 family inet filter input qos-tv-data&lt;br /&gt;
&lt;br /&gt;
 set firewall family inet filter qos-tv-data term 1 from source-address 239.30.30.0/24&lt;br /&gt;
 set firewall family inet filter qos-tv-data term 1 then '''forwarding-class tv-data'''&lt;br /&gt;
 set firewall family inet filter qos-tv-data term 1 then '''accept'''&lt;br /&gt;
 set firewall family inet filter qos-tv-data term all-accept '''then accept'''&lt;br /&gt;
&lt;br /&gt;
== BA (behavior aggregate) classification ==&lt;br /&gt;
BA классификация основана по уже заданному у пакета значении QoS, т.е. пакет уже был ранее классифицирован другим устройством и присвоил конкретную QoS метку. На основании этой метки пакет будет обработан устройством.&lt;br /&gt;
&lt;br /&gt;
Здесь напрямую приводится соответствие: CoS &amp;lt;&amp;gt; Forwarding class + PLP =&amp;gt; более эффективный способ по сравнению с MF (не нужно тратить ресурсы на классификацию).&lt;br /&gt;
&lt;br /&gt;
Применяется к unit (vlan).&lt;br /&gt;
&lt;br /&gt;
Обрабатывает все пакеты с одинаковой CoS меткой - одинаково.&lt;br /&gt;
&lt;br /&gt;
Обеспечивает одинаковый приоритет трафика на всей сети.&lt;br /&gt;
&lt;br /&gt;
Хорош для core device.&lt;br /&gt;
&lt;br /&gt;
Может работать по: IPv4 DSCP, IPv6 DSCP, IP precedence bits, MPLS EXP bits (experimental), IEEE 802.1p CoS bits, IEEE 802.1ad drop eligible indicator (DEI).&lt;br /&gt;
&lt;br /&gt;
Все логические интерфейсы по умолчанию используют ipprec-compatibility =&amp;gt; если включить MPLS на интерфейсе - он будет использовать exp-default классификатор.&lt;br /&gt;
&lt;br /&gt;
BA классификатор лучше применять внутри сети (не на входе в сеть).&lt;br /&gt;
&lt;br /&gt;
 set class-of-service interfaces ge-0/0/0 unit * classifiers dscp dscp-classifier&lt;br /&gt;
 set class-of-service interfaces ge-0/0/0 unit * classifiers exp exp-classifier&lt;br /&gt;
&lt;br /&gt;
 set class-of-service classifiers dscp dscp-classifier forwarding-class best-effort loss-priority low code-points be&lt;br /&gt;
 set class-of-service classifiers dscp dscp-classifier forwarding-class vpn loss-priority low code-points vpn-low&lt;br /&gt;
 set class-of-service classifiers dscp dscp-classifier forwarding-class vpn loss-priority high code-points vpn-high&lt;br /&gt;
 set class-of-service classifiers dscp dscp-classifier forwarding-class vpn-priority loss-priority low code-points vpn-priority&lt;br /&gt;
 set class-of-service classifiers dscp dscp-classifier forwarding-class nc loss-priority low code-points nc&lt;br /&gt;
 set class-of-service classifiers exp exp-classifier forwarding-class best-effort loss-priority low code-points be&lt;br /&gt;
 set class-of-service classifiers exp exp-classifier forwarding-class vpn loss-priority low code-points vpn-low&lt;br /&gt;
 set class-of-service classifiers exp exp-classifier forwarding-class vpn loss-priority high code-points vpn-high&lt;br /&gt;
 set class-of-service classifiers exp exp-classifier forwarding-class vpn-priority loss-priority low code-points vpn-priority&lt;br /&gt;
&lt;br /&gt;
 set class-of-service code-point-aliases dscp be 000000&lt;br /&gt;
 set class-of-service code-point-aliases dscp vpn-low 001010&lt;br /&gt;
 set class-of-service code-point-aliases dscp vpn-high 001100&lt;br /&gt;
 set class-of-service code-point-aliases dscp vpn-priority 101110&lt;br /&gt;
 set class-of-service code-point-aliases dscp nc 110000&lt;br /&gt;
 set class-of-service code-point-aliases exp be 000&lt;br /&gt;
 set class-of-service code-point-aliases exp vpn-low 010&lt;br /&gt;
 set class-of-service code-point-aliases exp vpn-high 011&lt;br /&gt;
 set class-of-service code-point-aliases exp vpn-priority 101&lt;br /&gt;
&lt;br /&gt;
p.s. code-points можно использовать и дефолтные, а можно прописать свои user-friendly. Посмотреть существующие: ''show class-of-service code-point-aliases''&lt;br /&gt;
&lt;br /&gt;
==Mixed classification==&lt;br /&gt;
На интерфейс можно применить как MF, так и BA классификатор. &lt;br /&gt;
*Сначала производится классификация по BA, потом по MF.&lt;br /&gt;
*При этом если трафик подойдет под оба классификатора, то так как последним будет MF, то и трафик классифицируется по его правилам.&lt;br /&gt;
 &lt;br /&gt;
=Classifiers=&lt;br /&gt;
 blair&amp;gt; show class-of-service interface    &lt;br /&gt;
  Logical interface: ge-0/0/0.100, Index: 72 ('''IPv4 + MPLS interface''')&lt;br /&gt;
    Object                  Name                   Type                    Index&lt;br /&gt;
    Rewrite                 '''exp-default'''            exp (mpls-any)             33&lt;br /&gt;
    Classifier              '''exp-default'''            exp                        10&lt;br /&gt;
    Classifier              '''ipprec-compatibility'''   ip                         13&lt;br /&gt;
  Logical interface: ge-0/0/1.0, Index: 75 ('''only IPv4 interface''')&lt;br /&gt;
    Object                  Name                   Type                    Index&lt;br /&gt;
    Classifier              '''ipprec-compatibility'''   ip                         13&lt;br /&gt;
&lt;br /&gt;
Остальные дефолтные классификаторы:&lt;br /&gt;
 blair&amp;gt; show class-of-service classifier | match Classifier &lt;br /&gt;
 Classifier: '''dscp-default''', Code point type: dscp, Index: 7&lt;br /&gt;
 Classifier: '''dscp-ipv6-default''', Code point type: dscp-ipv6, Index: 8&lt;br /&gt;
 Classifier: '''dscp-ipv6-compatibility''', Code point type: dscp-ipv6, Index: 9&lt;br /&gt;
 Classifier: '''exp-default''', Code point type: exp, Index: 10&lt;br /&gt;
 Classifier: '''ieee8021p-default''', Code point type: ieee-802.1, Index: 11&lt;br /&gt;
 Classifier: '''ipprec-default''', Code point type: inet-precedence, Index: 12&lt;br /&gt;
 Classifier: '''ipprec-compatibility''', Code point type: inet-precedence, Index: 13&lt;br /&gt;
 Classifier: '''ieee8021ad-default''', Code point type: ieee-802.1ad, Index: 41&lt;br /&gt;
&lt;br /&gt;
Если хотите использовать другой (или несколько других), то в ''class-of-service interfaces'' нужно их применить к интерфейсу.&lt;br /&gt;
 blair# set class-of-service interfaces ge-0/0/0 unit 100 classifiers ?                                   &lt;br /&gt;
 &amp;gt; dscp                 Differentiated Services code point classifier&lt;br /&gt;
 &amp;gt; dscp-ipv6            Differentiated Services code point classifier IPv6&lt;br /&gt;
 &amp;gt; exp                  EXP classifier&lt;br /&gt;
 &amp;gt; ieee-802.1           IEEE-802.1 classifier&lt;br /&gt;
 &amp;gt; ieee-802.1ad         IEEE-802.1ad (DEI) classifier&lt;br /&gt;
 &amp;gt; inet-precedence      IPv4 precedence classifier&lt;br /&gt;
&lt;br /&gt;
При создании собственных классификаторов, для простоты можно использовать дефолтные классификаторы как шаблон и заменить некоторые правила на свои. (в режиме конфигурации классификатора: import &amp;lt;default classifier&amp;gt;)&lt;br /&gt;
 [edit class-of-service]&lt;br /&gt;
   classifiers {&lt;br /&gt;
       dscp voice {&lt;br /&gt;
           '''import default''';&lt;br /&gt;
           forwarding-class assured-forwarding {&lt;br /&gt;
               '''loss-priority high code-points 001000'''; }}}&lt;br /&gt;
 [edit class-of-service interfaces ge-0/0/0]&lt;br /&gt;
   unit 100 {&lt;br /&gt;
         classifiers {&lt;br /&gt;
            dscp voice;}}&lt;br /&gt;
=Дополнительная информация=&lt;br /&gt;
*[[Глава 1. QoS]]&lt;br /&gt;
*[[Глава 4. Scheduling]]&lt;br /&gt;
*[[Глава 6. Rewrite rules]]&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=%D0%93%D0%BB%D0%B0%D0%B2%D0%B0_1._QoS&amp;diff=2038</id>
		<title>Глава 1. QoS</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=%D0%93%D0%BB%D0%B0%D0%B2%D0%B0_1._QoS&amp;diff=2038"/>
		<updated>2021-07-15T18:17:51Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#description2:Основы QoS. Различие IntServ и DifServ. Где можно увидеть метку QoS. Процесс работы QoS. Информация для подготовки к экзаменам Juniper.}}&lt;br /&gt;
&lt;br /&gt;
=Основы QoS= &lt;br /&gt;
QoS [quality of service] - обработка агрегированного трафика таким образом, чтобы поток передавался с требуемыми от генератора трафика правилами.&lt;br /&gt;
&lt;br /&gt;
CoS [class of service] - конфигурация определенной обработки трафика на конкретном узле.&lt;br /&gt;
&lt;br /&gt;
Каждый класс ассоциирован с трафиком, который требует одинаковой обработки, пока он идет по сети.&lt;br /&gt;
&lt;br /&gt;
Важно понимать, что неправильно заданное привило обработки трафика на одном из хопов может убить всю концепцию QoS на вашей сети.&lt;br /&gt;
&lt;br /&gt;
'''Как описать поведение (обработку) трафика?'''&lt;br /&gt;
&lt;br /&gt;
QoS поведение описывает как должен обрабатываться определенный тип трфика, пока он проходит по сети. Обычно, поведение можно описать с помощью следующих важных параметров:&lt;br /&gt;
*'''Loss''':  кол-во потерянных пакетов от source к dest. Некоторые виды трафика терпимы к потерям, некоторые запрашивают повторную отправку потерянных пакетов, некоторые устанавливают tcp-соединение, чтобы не терять пакеты.&lt;br /&gt;
*'''Latency''': задержка: время передачи пакета по сети от source к dest.&lt;br /&gt;
*'''Jitter''': разница между задержкой последовательно передаваемых пакетов.&lt;br /&gt;
*'''Bandwidth''': объем передаваемой информации.&lt;br /&gt;
&lt;br /&gt;
=IntServ vs DifServ=&lt;br /&gt;
&lt;br /&gt;
*'''BE''': Best effort: Негарантированная доставка. Обрабатывает трафик по принципу FIFO: first in - first out. По идее такая схема будет работать хорошо, только если на сети есть запасные емкости и не бывает полок. Это обработка трафика без настроенного QoS.&lt;br /&gt;
*'''IntServ:''' Integrated Service: Модель обслуживания, которая гарантирует качество за счет резервирования необходимой полосы. Использует RSVP.&lt;br /&gt;
*'''DifServ:''' Differentiated Service: Это модель привычная - разделяет классы трафика и в зависимости от этого каждый класс обрабатывает по своему. Разница с IntServ - нет сигналинга.&lt;br /&gt;
&lt;br /&gt;
При использовании DiffServ узлы обрабатывают &amp;quot;аггрегированный трафик&amp;quot; - '''BA(behavior aggregate)'''. Аггрегируется он по типу трафика.&lt;br /&gt;
&lt;br /&gt;
'''DiffServ field (DS)''': IPv4 ToS field, передающий DSCP.&lt;br /&gt;
&lt;br /&gt;
'''DSCP''' DiffServ Code point - определение BA разных типов трафика. Используется поле ToS =&amp;gt; имеет 6 бит =&amp;gt; 64 значения.&lt;br /&gt;
&lt;br /&gt;
'''PHB''' Per-hop behavior - как маршрутизатор будет обрабатывать трафик в зависимости от DSCP. (AF1, AF2, AF3, AF4, ...). PHB использует DSCP. &lt;br /&gt;
&lt;br /&gt;
Default PHB - Best Effort.&lt;br /&gt;
&lt;br /&gt;
'''PHB group''' - набор PHB (AF: AF11, AF12...).&lt;br /&gt;
&lt;br /&gt;
На '''edge node''' сваливается больше нагрузки: полисинг, классифицирование трафика, шейпинг, аккаунтинг.&lt;br /&gt;
&lt;br /&gt;
На '''core node''' сваливается меньше нагрузки: BA-based classification и передача трафика в зависимости от PHB.&lt;br /&gt;
&lt;br /&gt;
Основные типа DiffServ PHB:&lt;br /&gt;
* BF (Best effort) - default for PHB.&lt;br /&gt;
* EF (Expedited forwarding) - low loss, low delay, low jitter - voice.&lt;br /&gt;
* AF (assured forwarding) - концентрация в основном на packet loss. Содержит 4 класса: AF1, AF2, AF3, AF4. Каждый из них имеет по 3 Drop probabilities: AF11 (low), AF12 (medium), AF13 (high) .&lt;br /&gt;
*Class selectors Code Points: network control.&lt;br /&gt;
&lt;br /&gt;
Для каждого типа PHB есть свой рекомендованный DSCP.&lt;br /&gt;
 &amp;gt; show class-of-service code-point-aliases dscp&lt;br /&gt;
&lt;br /&gt;
=Где можно увидеть метку QoS=&lt;br /&gt;
==IPv4==&lt;br /&gt;
'''ToS'''&lt;br /&gt;
Был такой байт ToS, который состоял из 3 бита - IP precedence, остальные: D, T, R, ECN. Сейчас байт ToS состоит из: первые '''6 бит - DSCP''' (3 - CS/AF, 3 - циферки, определяющие класс и приоритет)&lt;br /&gt;
&lt;br /&gt;
CS: Class selector: это первые 3 бита DSCP. Используется для обратной совместимости. &lt;br /&gt;
&lt;br /&gt;
'''IP precedence''': приоритет: первые 3 бита в байте ToS. Использовался для того, чтобы минимизировать дропы control трафика.&lt;br /&gt;
&lt;br /&gt;
==IPv6==&lt;br /&gt;
&lt;br /&gt;
'''TC''': traffic class: 1 байт.&lt;br /&gt;
&lt;br /&gt;
=== Frame ===&lt;br /&gt;
&lt;br /&gt;
'''PCP''': priority code point: Используются 3 бита начала 802.1p заголовка (поле с vlan) - может использовать 8 значений приоритета.&lt;br /&gt;
&lt;br /&gt;
==MPLS==&lt;br /&gt;
&lt;br /&gt;
'''TC''': traffic class: 3 бит - 8 значений приоритета трафика.&lt;br /&gt;
&lt;br /&gt;
=Процесс работы QoS=&lt;br /&gt;
&lt;br /&gt;
Code Point (BA) Classifier =&amp;gt; Policing (rate limitimg) =&amp;gt; Multifield Classifier =&amp;gt; Forwarding Policy =&amp;gt; Fabric =&amp;gt; Policing =&amp;gt; Multifeild Classifier =&amp;gt; [RED  | Shaper | Scheduler] =&amp;gt; Rewriting QoS field&lt;br /&gt;
&lt;br /&gt;
'''Classifiers''' на ingress роутере создает соответствие трафика и определенного forwarding class, основываясь на BA (если с пакетом уже передана QoS метка):  IP precedence, DSCPs, MPLS EXP bits, or IEEE 802.1P priority values.&lt;br /&gt;
&lt;br /&gt;
'''Policing''' ограничивает кол-во трафика: превышенный трафик может быть либо отброшен, либо промаркирован и далее обработан определенным образом.&lt;br /&gt;
&lt;br /&gt;
'''Multifield classifier''' выделение определенного типа трафика с помощью firewall filters, назначение forwarding class и PLP.&lt;br /&gt;
&lt;br /&gt;
'''CBF: CoS based forwarding''' - определенный трафик можно посылать к определенному next-hop.&lt;br /&gt;
&lt;br /&gt;
'''Schedulers''': обработка очереди, ассоциированной с forwarding class. Определяет transmission rate, queue priority, delay buffers, congection management and avoidance (RED/WRED algorithm).&lt;br /&gt;
&lt;br /&gt;
RED алгоритм в случае затора отбрасывает пакеты.&lt;br /&gt;
WRED алгоритм при принятии решения об отбросе пакет учитивает значения traffic type и loss priority.&lt;br /&gt;
&lt;br /&gt;
'''Rewrite markers''': можно перезаписать QoS поля в заголовке пакета, чтобы следующий роутер мог проводить классификацию не заново, а обрабатывал бы прилетевший пакет по значению в заголовке (BA classification). IP precedence, DSCP (IPv4, IPv6), MPLS EXP, IEEE 802.1p.&lt;br /&gt;
{{note|text=''QoS является &amp;quot;однонаправленным&amp;quot;.'' То есть для настройки QoS на каком-то линке - нужно настроить его как для вх так и для исх  направления.}}&lt;br /&gt;
=Дополнительная информация=&lt;br /&gt;
*[[Глава 2. Packet classification]]&lt;br /&gt;
*[[Глава 7. CoS-based forwarding]]&lt;br /&gt;
*[[Глава 8. Packet flow]]&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=ERP_(Ethernet_Ring_Protection)&amp;diff=2037</id>
		<title>ERP (Ethernet Ring Protection)</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=ERP_(Ethernet_Ring_Protection)&amp;diff=2037"/>
		<updated>2021-07-15T18:16:27Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#description2:Основы ERP. Падение линка. Восстановление линка. Информация для подготовки к экзаменам Juniper.}}&lt;br /&gt;
== ERP (Ethernet Ring Protection) ==&lt;br /&gt;
&lt;br /&gt;
=== Idle state: ===&lt;br /&gt;
*Node A каждые 5 секунд отправляет R-APS сообщения во все интерфейсы.&lt;br /&gt;
(Request/State = no request, not flush = 0, RPL state block = 1).&lt;br /&gt;
*Остальные узлы узлы тупо передают друг другу APS сообщения то узла А.&lt;br /&gt;
*RPL (ring protection link) - заблокирован.&lt;br /&gt;
&lt;br /&gt;
=== Случилась авария. ===&lt;br /&gt;
*Узел B и С через 50 мс отправляют R-APS.&lt;br /&gt;
(Request/State = fail, no flush = 0).&lt;br /&gt;
*Узлы В и С отправляют 3 сообщения R-APS подряд в первые 10 мс.&lt;br /&gt;
*Упавший линк - блокируют, чистят маки.&lt;br /&gt;
*Узел А отправляет APS&lt;br /&gt;
(Request/State = no request, no flush = 1, RPL state block = 0).&lt;br /&gt;
*Состояние Idle -&amp;gt; protection.&lt;br /&gt;
*Узел А разблокирует RPL, слушает сообщения от своих соседей.&lt;br /&gt;
&lt;br /&gt;
=== Восстановился линк. ===&lt;br /&gt;
*Узлы В и С продолжают блокировать восстановленный линк.&lt;br /&gt;
(Request/State = no request, no flush = 1). &lt;br /&gt;
*Узел А ждет 5 минут (минимальное значение), после чего, блокирует RPL, отправляет APS сообщения во все интерфейсы&lt;br /&gt;
(Request/State = no request, no flush = 0, RPL state block = 1).&lt;br /&gt;
*Состояние protection -&amp;gt; idle.&lt;br /&gt;
*Все узлы чистят маки.&lt;br /&gt;
&lt;br /&gt;
==Дополнительная информация==&lt;br /&gt;
*[[L2 switching and VLANs]]&lt;br /&gt;
*[[Spanning-Tree protocol (STP)]]&lt;br /&gt;
*[[Virtual Chassis]]&lt;br /&gt;
*[[Provider bridging]]&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=Provider_bridging&amp;diff=2036</id>
		<title>Provider bridging</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=Provider_bridging&amp;diff=2036"/>
		<updated>2021-07-15T18:15:51Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#description2:Перемаркировка вланов. Tunnel all C-vlans. Explicit configuration of Tag operations. Network-to-Network interface. Информация для подготовки к экзаменам Juniper.}}&lt;br /&gt;
= Перемаркировка вланов =&lt;br /&gt;
&lt;br /&gt;
Разделяют 2 типа планов:  &lt;br /&gt;
&lt;br /&gt;
* S-vlan (service vlan) - outer tag&lt;br /&gt;
* C-vlan (customer vlan) - inner tag&lt;br /&gt;
&lt;br /&gt;
Режимы Bridge domain'ов:&lt;br /&gt;
* Independent VLAN learning mode (ILV) - трафик флудится в интерфейсы, принадлежащие одному домену.&lt;br /&gt;
* Shared VLAN learning mode (SLV) - трафик флудится во все интерфейсы и во все вланы, принадлежащие одному домену.&lt;br /&gt;
&lt;br /&gt;
= Tunnel all C-vlans =&lt;br /&gt;
&lt;br /&gt;
 Cust-site-1 (trunk) - (trunk) ISP-edge1 (trunk) - (trunk) ISP-core (trunk) - (trunk) ISP-edge2 (trunk) - (trunk) Cust-site-2&lt;br /&gt;
&lt;br /&gt;
 (trunk) ISP-edge1&lt;br /&gt;
    fe-0/0/2 {&lt;br /&gt;
        unit 0 {&lt;br /&gt;
            family bridge {&lt;br /&gt;
                interface-mode trunk;&lt;br /&gt;
                vlan-id-list 200-205;&lt;br /&gt;
&lt;br /&gt;
 ISP-edge1 (trunk):&lt;br /&gt;
 fe-0/0/3 {&lt;br /&gt;
    unit 0 {&lt;br /&gt;
        family bridge {&lt;br /&gt;
            interface-mode trunk;&lt;br /&gt;
            vlan-id-list 100;&lt;br /&gt;
&lt;br /&gt;
 ISP-edge1&lt;br /&gt;
 # show bridge-domains &lt;br /&gt;
 vlan100 {&lt;br /&gt;
    domain-type bridge;&lt;br /&gt;
    vlan-id 100;&lt;br /&gt;
&lt;br /&gt;
= Range of C-vlans (Part1) =&lt;br /&gt;
&lt;br /&gt;
 Cust-site-1 (access) - (access) ISP-edge1 (trunk) - (trunk) ISP-core (trunk) - (trunk) ISP-edge2 (access) - (access) Cust-site-￼2&lt;br /&gt;
&lt;br /&gt;
Для каждого C-vlan создается свой logical-interf + свой bridge domain.&lt;br /&gt;
&lt;br /&gt;
Для каждого клиента создается свой виртуальный роутер.&lt;br /&gt;
&lt;br /&gt;
 ISP-edge1&lt;br /&gt;
 bridge-domains {&lt;br /&gt;
    bd {&lt;br /&gt;
        vlan-id-list 200-205;&lt;br /&gt;
&lt;br /&gt;
 (access) ISP-edge1&lt;br /&gt;
     fe-0/0/2 {&lt;br /&gt;
        unit 0 {&lt;br /&gt;
            family bridge {&lt;br /&gt;
                interface-mode trunk;&lt;br /&gt;
                vlan-id-list 200-205;&lt;br /&gt;
&lt;br /&gt;
 ISP-edge1 (trunk):&lt;br /&gt;
    fe-0/0/3 {&lt;br /&gt;
        flexible-vlan-tagging;&lt;br /&gt;
        unit 0 {&lt;br /&gt;
            vlan-id 300;&lt;br /&gt;
            family bridge {&lt;br /&gt;
                interface-mode trunk;&lt;br /&gt;
                inner-vlan-id-list 200-205;&lt;br /&gt;
&lt;br /&gt;
= Range of C-vlans (Part2) =&lt;br /&gt;
&lt;br /&gt;
 Cust-site-1 (units) - (units) ISP-edge1 (trunk) - (trunk) ISP-core (trunk) - (trunk) ISP-edge2 (units) - (units) Cust-site-2&lt;br /&gt;
&lt;br /&gt;
 (units) ISP-edge1&lt;br /&gt;
 fe-0/0/2 {&lt;br /&gt;
    flexible-vlan-tagging;&lt;br /&gt;
    encapsulation flexible-ethernet-services;&lt;br /&gt;
    unit 200 {&lt;br /&gt;
        encapsulation vlan-bridge;&lt;br /&gt;
        vlan-id 200;&lt;br /&gt;
    }&lt;br /&gt;
    unit 201 {&lt;br /&gt;
        encapsulation vlan-bridge;&lt;br /&gt;
        vlan-id 201;&lt;br /&gt;
    }&lt;br /&gt;
    unit 202 {&lt;br /&gt;
        encapsulation vlan-bridge;&lt;br /&gt;
        vlan-id 202;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
 ISP-edge1 (trunk)&lt;br /&gt;
 fe-0/0/3 {&lt;br /&gt;
    flexible-vlan-tagging;&lt;br /&gt;
    encapsulation flexible-ethernet-services;&lt;br /&gt;
    unit 0 {&lt;br /&gt;
        encapsulation vlan-bridge;&lt;br /&gt;
        vlan-tags outer 300 inner 200;&lt;br /&gt;
&lt;br /&gt;
 ISP-edge1 &lt;br /&gt;
 bridge-domains &lt;br /&gt;
 bd {&lt;br /&gt;
    vlan-id none;&lt;br /&gt;
    interface fe-0/0/2.200;&lt;br /&gt;
    interface fe-0/0/2.201;&lt;br /&gt;
    interface fe-0/0/2.202;&lt;br /&gt;
    interface fe-0/0/2.203;&lt;br /&gt;
    interface fe-0/0/2.204;&lt;br /&gt;
    interface fe-0/0/2.205;&lt;br /&gt;
&lt;br /&gt;
Что происходит с фреймом:&lt;br /&gt;
#От клиента прилетает фрейм с меткой 201, с мак-адресом назначения, который находится в site2.&lt;br /&gt;
#Так как bridge-domain сконфигурирован с vlan-id-none, C-vlan срезается до начала mac-table-lookup.&lt;br /&gt;
#Если dst-mac неизвестен, то фрейм флудится во все интерфейсы данного домена, включая сабинтерфейсы fe-0/0/2. Если dst-mac известен, фрейм передается через fe-0/0/3.0 с C-vlan 200, S-vlan 300.&lt;br /&gt;
#На ISP-edge2 в домене также прописан vlan-id-none, поэтому S-vlan и C-vlan срезаются до mac-table-lookup.&lt;br /&gt;
#Если dst-mac неизвестен, то фрейм флудится во все интерфейсы данного домена, включая сабинтерфейсы fe-0/0/2. Если dst-mac известен, фрейм передается через назначенный сабинтерфейс, навешивая нужный tag.&lt;br /&gt;
&lt;br /&gt;
= Explicit configuration of Tag operations =&lt;br /&gt;
&lt;br /&gt;
 Cust-site-1 (access) - (access) ISP-edge1 (trunk) - (trunk) ISP-core (trunk) - (trunk) ISP-edge2 (access) - (access) Cust-site-2&lt;br /&gt;
&lt;br /&gt;
 (access) ISP-edge1&lt;br /&gt;
    fe-0/0/2 {&lt;br /&gt;
        vlan-tagging;&lt;br /&gt;
        encapsulation flexible-ethernet-services;&lt;br /&gt;
        unit 200 {&lt;br /&gt;
            encapsulation vlan-bridge;&lt;br /&gt;
            vlan-id 200;&lt;br /&gt;
             input-vlan-map {&lt;br /&gt;
                push;&lt;br /&gt;
                vlan-id 300;&lt;br /&gt;
            }&lt;br /&gt;
             output-vlan-map pop;&lt;br /&gt;
&lt;br /&gt;
 ISP-edge1 (trunk)&lt;br /&gt;
     fe-0/0/3 {&lt;br /&gt;
        encapsulation flexible-ethernet-services;&lt;br /&gt;
        unit 0 {&lt;br /&gt;
        vlan-tags outer 300 inner 200;&lt;br /&gt;
&lt;br /&gt;
 ISP-edge1 &lt;br /&gt;
 bridge-domains {&lt;br /&gt;
    cust1 {&lt;br /&gt;
    interface fe-0/0/2.200;&lt;br /&gt;
    interface fe-0/0/3.0;&lt;br /&gt;
&lt;br /&gt;
= Network-to-Network interface =&lt;br /&gt;
&lt;br /&gt;
 Cust-site-1 - ISP1-edge1 - ISP1-core (trunk) - (trunk) ISP2-core - ISP2-edge2 - Cust-site-2&lt;br /&gt;
&lt;br /&gt;
 ISP1-core (trunk)&lt;br /&gt;
 fe-0/0/6 {&lt;br /&gt;
    flexible-vlan-tagging;&lt;br /&gt;
    encapsulation flexible-ethernet-services;&lt;br /&gt;
    unit 1 {&lt;br /&gt;
        family bridge {&lt;br /&gt;
            interface-mode trunk;&lt;br /&gt;
            vlan-id-list 200;&lt;br /&gt;
            vlan-rewrite {&lt;br /&gt;
                translate 300 200;&lt;br /&gt;
&lt;br /&gt;
 ISP1-core&lt;br /&gt;
 # show bridge-domains  &lt;br /&gt;
 bd {&lt;br /&gt;
    vlan-id 200;&lt;br /&gt;
=Дополнительная информация=&lt;br /&gt;
*[[L2 switching and VLANs]]&lt;br /&gt;
*[[Spanning-Tree protocol (STP)]]&lt;br /&gt;
*[[Virtual Chassis]]&lt;br /&gt;
*[[ERP (Ethernet Ring Protection)]]&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=Virtual_Chassis&amp;diff=2035</id>
		<title>Virtual Chassis</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=Virtual_Chassis&amp;diff=2035"/>
		<updated>2021-07-15T18:15:06Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#description2:Компоненты virtual chassis. Master/Backup/Linecard. Обновление софта. High Availability. Управление virtual chassis. Информация для подготовки к экзаменам Juniper.}}&lt;br /&gt;
=Общее=&lt;br /&gt;
Кол-во свитчей, объединенных в одно шасси зависит от версии софта и модели.&lt;br /&gt;
&lt;br /&gt;
Можно объединять разные модели в стек. Софт при этом должен быть одинаковым у всех свитчей.&lt;br /&gt;
==Компоненты==&lt;br /&gt;
===VC-port===&lt;br /&gt;
Для объединения в стек используются специальные порты VCP (Virtual Chassis Ports).&lt;br /&gt;
&lt;br /&gt;
Некоторые модели свитчей имеют выделенные стековые порты, некоторые не имеют таковых.&lt;br /&gt;
&lt;br /&gt;
Чтобы объединить в стек свитчи, не имеющие отдельных VCP, или чтобы объединить свитчи, находящиеся на большом расстоянии друг от друга, можно использовать обычные порты, настроив их как VCP.&lt;br /&gt;
&lt;br /&gt;
SFP, SFP+, и XFP могут выполнять роль VCP портов.&lt;br /&gt;
&lt;br /&gt;
Если требуется емкость более 40G между членами стека (стековые порты и кабели поддерживают именно такую скорость), можно сделать 2 линка между свитчами.&lt;br /&gt;
&lt;br /&gt;
Оптические порты между двумя свитчами с одинаковой скоростью передачи, выступающие в роли VCP, автоматом объединяются в LAG (bundle). Порты с разной скоростью в LAG не соберутся.&lt;br /&gt;
&lt;br /&gt;
Когда оптический порт настроен в роли VCP, он не может использоваться в других целях.&lt;br /&gt;
&lt;br /&gt;
VCP используются как для служебного трафика между свитчами, так и для передачи трафика между свитчами.&lt;br /&gt;
&lt;br /&gt;
Все 40Gb QSFP+ порты на EX4300 под дефолту используются как VCP.&lt;br /&gt;
&lt;br /&gt;
Все 10Gb порты могут быть настроены и использоваться в качестве VPC.&lt;br /&gt;
&lt;br /&gt;
===Master/Backup/Linecard===&lt;br /&gt;
При объединении в стек, свитчи играют разные роли.&lt;br /&gt;
&lt;br /&gt;
====Master====&lt;br /&gt;
*управляет членами стека&lt;br /&gt;
*запускает Junos&lt;br /&gt;
*управляет шасси и control protocols (для chassis)&lt;br /&gt;
*держит единую конфигурацию для всего стека&lt;br /&gt;
&lt;br /&gt;
Если включить один свитч, который поддерживает стекирование, он будет иметь роль мастера.&lt;br /&gt;
&lt;br /&gt;
Если в стеке более одного свитча, то один будет мастером, один резервным (backup), остальные - линейные карты (linecard).&lt;br /&gt;
&lt;br /&gt;
Если для стека используются EX4300 и EX4600, то EX4600 должна быть назначена роль мастера.&lt;br /&gt;
&lt;br /&gt;
Если для стека используются EX4200, EX4500, EX4550, то любой из них может выполнять роль мастера.&lt;br /&gt;
&lt;br /&gt;
====Backup====&lt;br /&gt;
*находится в состоянии подхватить роль мастера, если мастер перестанет работать&lt;br /&gt;
*синхронизирует с мастером: состояния протоколов, forwarding tables и т.д... &lt;br /&gt;
&lt;br /&gt;
Если для стека используются EX4300 и EX4600, то EX4600 должна быть назначена роль backup (то есть если есть возможность EX4600 - master, второй EX4600 - backup).&lt;br /&gt;
&lt;br /&gt;
В случает использования EX4200, EX4500, EX4550 - любой подходит для роли backup.&lt;br /&gt;
&lt;br /&gt;
====Linecard====&lt;br /&gt;
*выполняет роль линейной карты, то есть как дополнительный свитч с портами&lt;br /&gt;
*не запускает chassis control protocols&lt;br /&gt;
*не может даже определить состояния интерфейсов (или ошибок), которые были настроены через master.&lt;br /&gt;
&lt;br /&gt;
====Mastership-priority====&lt;br /&gt;
Для назначения роли члену стека используется '''mastership-priority'''. Значение [0-255].&lt;br /&gt;
&lt;br /&gt;
Более высокое значение более приоритетно.&lt;br /&gt;
&lt;br /&gt;
Дефолтное значение = 128.&lt;br /&gt;
&lt;br /&gt;
Назначение одинакового приоритета master и backup позволяет более гладко произвести процесс переключения роли master на backup свитч. Также это позволяет на стать master свитчу, который после перерыва вернулся в работу, то есть избежать еще одного перерыва.&lt;br /&gt;
&lt;br /&gt;
Свитч с mastership-priority = 0 всегда будет работать только в роли linecard.&lt;br /&gt;
====Master Election====&lt;br /&gt;
#Выбирается с наибольшим mastership-priority&lt;br /&gt;
#Выбирается тот свитч, который был master в последний раз&lt;br /&gt;
#Выбирается тот свитч, который находится в стеке большее количество времени. (считается разница в 1 мин)&lt;br /&gt;
#Выбирается по наименьшему mac-address&lt;br /&gt;
&lt;br /&gt;
Модели свитчей никак не играют роли в выборе.&lt;br /&gt;
&lt;br /&gt;
Чтобы быть точно уверенным, что нужный свитч будет выступать в роли master:&lt;br /&gt;
#Включаем свитч (будущий master)&lt;br /&gt;
#Задаем ему mastership-priority = 255&lt;br /&gt;
#Задаем приоритеты другим членам стека&lt;br /&gt;
#Включаем остальные свитчи&lt;br /&gt;
&lt;br /&gt;
====Member switch/Member ID====&lt;br /&gt;
Каждый свитч, поддерживающий функцию стекирования назначает себе member-id. Если включить свитчи не объединяя их в стек, каждый из них будет иметь member-id = 0.&lt;br /&gt;
&lt;br /&gt;
Когда свитчи объединили в стек, master назначает каждому члену свой уникальный member-id, исходя из порядка, в котором свитчи были включены, исходя из преднастроенного member-id.&lt;br /&gt;
&lt;br /&gt;
Если в стеке был member, который физически отключили, его member-id более не будет использоваться мастером для присвоения member-id новому члену стека.&lt;br /&gt;
&lt;br /&gt;
Member-id работает как номер fps-слота.&lt;br /&gt;
=Обновление софта=&lt;br /&gt;
В кластере все свитчи должны обязательно иметь одинаковую версию софта.&lt;br /&gt;
&lt;br /&gt;
Софт можно поставить на весь кластер или на каждый свитч отдельно. Для этого используется одна и та же команда:&lt;br /&gt;
 request system software add validate&lt;br /&gt;
&lt;br /&gt;
Если в стеке используются разные модели, на них все-равно должен стоять одинаковый софт.&lt;br /&gt;
&lt;br /&gt;
Чтобы избежать длительного перерыва при обновлении, можно использовать NSSU. Он позволяет обновить отдельно каждого member'а, а при использовании дополнительных HA фид, перерыв можно сделать очень коротким (или вообще без перерыва обновить).&lt;br /&gt;
&lt;br /&gt;
=High Availability=&lt;br /&gt;
Само по себе использование стека из EX -  уже неплохое средство для HA.&lt;br /&gt;
&lt;br /&gt;
1. LAG (Link Aggregation Groups): подключать CE двумя линками на разные members.&lt;br /&gt;
&lt;br /&gt;
Без HA: kernel и forwarding state инфо не сохраняется инфо на обе RE. Поэтому процесс конвергенции занимает время, также как и процесс switchover может занимать до нескольких минут, до окончания процесса не передается трафик.&lt;br /&gt;
&lt;br /&gt;
#GRES (Graceful routing Engine switchover): kernel и forwarding state инфо хранится на обеих RE, что обеспечивает отсутствие конвергенции и сильно сокращает перерыв в передаче графики при switchover.&lt;br /&gt;
&lt;br /&gt;
#NSB (nonstop bridging): l2-протоколы, поддерживающие NSB, не падают при switchover. Инфо l2-протоколов хранится на обеих RE.&lt;br /&gt;
&lt;br /&gt;
#NSR (nonstop routing): l3-протоколы, поддерживающие NSR, не падают при switchover. Инфо хранится на обеих RE.&lt;br /&gt;
&lt;br /&gt;
#Graseful Protocol Restart: передача трафика не прерывается при switchover. interface и kernel инфо зарезервирована. Когда Control plane роутера падает, роутер не сразу сообщает об этом своим соседям а ждет заданный промежуток времени. Но! сосед тоже должен уметь GR.&lt;br /&gt;
&lt;br /&gt;
=Управление=&lt;br /&gt;
Из-за наличия нескольких свитчей в стеке к кластера появляется дофига консольных и mgmt портов. К какому подключиться?&lt;br /&gt;
&lt;br /&gt;
При подключении к любому, нас отредиректит к master.&lt;br /&gt;
&lt;br /&gt;
Если мастер сменился, то console сессия отключится от старого master и переустановится к новому.&lt;br /&gt;
&lt;br /&gt;
vme-port - виртуальный, используется для управления. По логинении на ip, настроенный на vme порту, кластер редиректнет вас на master switch.&lt;br /&gt;
&lt;br /&gt;
=Конфигурация=&lt;br /&gt;
=Траблшутинг=&lt;br /&gt;
 show virtual-chassis&lt;br /&gt;
 show virtual-chassis vc-ports all-members&lt;br /&gt;
=Дополнительная информация=&lt;br /&gt;
*[[L2 switching and VLANs]]&lt;br /&gt;
*[[Provider bridging]]&lt;br /&gt;
*[[Spanning-Tree protocol (STP)]]&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=Spanning-Tree_protocol_(STP)&amp;diff=2034</id>
		<title>Spanning-Tree protocol (STP)</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=Spanning-Tree_protocol_(STP)&amp;diff=2034"/>
		<updated>2021-07-15T18:14:20Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#description2: Основы Spanning-Tree protocol (STP). Роли портов. Состояния портов. BPDU. Модификации STP. Конфигурация STP. Мониторинг и траблшутинг STP. Информация для подготовки к экзаменам Juniper.}}&lt;br /&gt;
==В общем==&lt;br /&gt;
Ethernet легко подвержен бродкаст-штормам, когда в сети возникают петли.&lt;br /&gt;
&lt;br /&gt;
Но для обеспечения резервирования, требуются альтернативные линки и это приводит топологию сети к петлям.&lt;br /&gt;
&lt;br /&gt;
STP как раз дает возможность использовать резервирование, но избежать петель.&lt;br /&gt;
&lt;br /&gt;
Juniper поддерживает данные вариации STP: STP, RSTP(используется по дефолту), MSTP, VSTP.&lt;br /&gt;
&lt;br /&gt;
''Итого зачем вообще нужен STP:''&lt;br /&gt;
:- Предотвращает бродкаст штормы&lt;br /&gt;
:- Обеспечивает резервирование дополнительными линками, без петель&lt;br /&gt;
:- Позволяет подключать к сети устройства, не поддерживающие STP (используя edge ports)&lt;br /&gt;
&lt;br /&gt;
Корень дерева (''root tree | root bridge'') - это свитч, который выбирается алгоритмом STP на основании Bridge ID (Bridge Priority [0 - 65535] + MAC-addr свитча). Default priority = 32 768. В приоритете коммутатор с наименьшим Bridge ID. В дальнейшем он используется для рассчета наилучшего пути от bridge до root bridge.&lt;br /&gt;
&lt;br /&gt;
Фреймы ходят по сети к получателю - ''leaf'' (ПК или любой другой не транзитный хост) - вдоль ветвей (''branches'').&lt;br /&gt;
&lt;br /&gt;
Tree branch (ветвь) - сегмент сети или линк между бриджами.&lt;br /&gt;
&lt;br /&gt;
''Designated bridges'' - свитчи, которые передают фреймы по STP-дереву.&lt;br /&gt;
&lt;br /&gt;
STP создает единственный возможный путь между ''root'' и ''leaf''. Альтернативные пути переводятся в standby режим.&lt;br /&gt;
&lt;br /&gt;
==Роли портов (RSTP)==&lt;br /&gt;
*''Root port'' - ближайший к root bridge. Это единственный порт, который получает фреймы от root bridge и пересылает их на него. Root bridge от себя отправляет BPDU с cost = 0. свитч, получивший BPDU - добавляет cost интерфейса, с которого пришел BPDU. И так далее. В случае, когда cost равнозначны с двух интерфейсов - будет выбран с наименьшим номером (ge-0/0/0, в не ge-0/0/10).&lt;br /&gt;
*''Designated port'' - порт, передающий трафик от root bridge к leaf. Designated bridge имеет один designated порт для каждого LAN. Root bridge передает фреймы во все designated порты. Также определяется по наименьшей cost. На root bridge все порты designated. На Leaf только один designated, иначе петля.&lt;br /&gt;
*''Alternate port'' - альтернатиный порт к root bridge. Он не является частью активного spanning tree, но когда root port накрывается (если падает линк или переходит в состояние отбрасывания пакетов), то alternate port сразу принимает на себя его роль. Отсутствует в обычном STP, за счет чего STP отстает по времени сходимости.&lt;br /&gt;
*''Backup port'' - резервный для desidnated порта. Работает аналогично alternate port.&lt;br /&gt;
*''Disabled port'' - порт, не принимает участия в активном spanning tree.&lt;br /&gt;
*''Edge port'' - порт в сторону хоста, не поддерживаюшего STP (ПК, сервер, роутеры, тупиковые хабы). Т.к. предполагается, что хосты не способны образовать петлю =&amp;gt; edge port сразу переходит в состояние передачи фреймов. Можно назначить edge порт, а также STP может сам распознать edge порт (через отсутствие связи с конечными станциями).&lt;br /&gt;
&lt;br /&gt;
В STP:&lt;br /&gt;
*root&lt;br /&gt;
*designated&lt;br /&gt;
*non-designated&lt;br /&gt;
*disabled&lt;br /&gt;
&lt;br /&gt;
==Состояния портов (RSTP)==&lt;br /&gt;
*Discarding - отбрасывает все BPDU, все data-фреймы и не изучает mac-адреса. [в STP аналогичен по функциям: blocking, disabled, learning]&lt;br /&gt;
*Learning - изучает маки, и строит таблицу коммутации и пересылает BPDU&lt;br /&gt;
*Forwarding - порт пересылает и фильтрует фреймы &amp;gt; становится частью активного spanning tree. Также есть обмен BPDU.&lt;br /&gt;
&lt;br /&gt;
В STP:&lt;br /&gt;
*blocking - ничего не шлет, но слушает BPDU&lt;br /&gt;
*listening - начинает отправлять BPDU, но пока не фреймы&lt;br /&gt;
*learning&lt;br /&gt;
*forwarding&lt;br /&gt;
*disabled - admin down. ничего не пересылает.&lt;br /&gt;
&lt;br /&gt;
==BPDU (bridge protocol data units)==&lt;br /&gt;
BPDU фреймы - это сообщения, которыми обмениваются свитчи. В них содержится информация: bridge ID, root path costs, и port MAC addresses. Начальный обмен BPDU между коммутаторами определяет root bridge.&lt;br /&gt;
Также BPDU распространяют информацию о стоимости маршрутов (cost) между ветками (tree branches) - основанные либо на пропускной способности линков, либо заданные вручную. RTSP строит топологию исходя из cost. На этапе построения топологии используются Configuration BPDU.&lt;br /&gt;
&lt;br /&gt;
Когда отработал STA (spanning tree algorithm), всем портам назначены роли и состояния, идентифицированы root и designated bridges, требуется механизм для поддержания данной топологии в актуальном состоянии. Используем BPDU. &lt;br /&gt;
&lt;br /&gt;
Root bridge отправляет BPDU каждые '''2 сек''' (дефолтный hello time interval RSTP) на мультикаст-адрес: '''01:80:c2:00:00:00'''. Когда на порт приходит BPDU, он сравнивает данные, с полученными ранее, и на основании сравнения:&lt;br /&gt;
:- Если данные BPDU совпадают с существующей записью в таблице MAC-адресов, порт сбрасывает таймер max age на 0 и пересылает новый BPDU с текущей активной информацией о топологии на следующий порт в spanning tree.&lt;br /&gt;
:- Если топология в BPDU была изменена, обновляется таблица MAC-адресов, max age устанавливается в 0, и новый BPDU пересылается с текущей активной информацией о топологии на следующий порт в spanning tree.&lt;br /&gt;
:- Когда порт не получает BPDU в течение 3 * hello (3*2 = 6 сек), он реагирует одним из двух способов. &lt;br /&gt;
::-Если bridge является root port: происходит полное перестроение spanning tree. &lt;br /&gt;
::-Если bridge является любым некорневым мостом: RSTP обнаруживает, что подключенный хост не умеет отправлять BPDU, и назначает этот порт в edge port.&lt;br /&gt;
{{note|text=STP генерирует свои BPDUs. Сетевуха на хосте (ПК, сервер, ...) тоже генерирует свои BPDUs. Эти BPDU хостов могут быть обработаны STP свитча и привести к проблемам на сети. Поэтому лучше включать BPDU Protection на edge ports.}}&lt;br /&gt;
&lt;br /&gt;
Бывают BPDU:&lt;br /&gt;
*configuration BPDUs&lt;br /&gt;
*topology change notification (TCN) BPDUs&lt;br /&gt;
*topology change acknowledgment (TCA) BPDUs&lt;br /&gt;
&lt;br /&gt;
==Root Bridge Fails==&lt;br /&gt;
Когда link на root port падает, в BPDU добавляется флаг, topology change notification (TCN). &lt;br /&gt;
&lt;br /&gt;
Когда этот BPDU доходит до следующего порта в VLAN, таблица MAC-адресов сбрасывается, и BPDU едет на следующий bridge. В итоге, все порты во VLAN обнулили свои таблицы MAC. После этого RSTP назначает новый root port.&lt;br /&gt;
&lt;br /&gt;
Если root port или designated port падают - alternate или backup port берут на себя их роль после обмена BDPU (proposal-agreement handshake).&lt;br /&gt;
&lt;br /&gt;
Если локальный порт становится root или designated, то он согласовывает быстрое изменение тем же proposal-agreement handshake с ближайшим свитчем.&lt;br /&gt;
&lt;br /&gt;
Так как падение линка приводит к очистке маков на всей сети - это немного затормаживает работу сети и образует неплохой такой флуд для переобучения маков. &lt;br /&gt;
&lt;br /&gt;
Включенный ''ARP (address resolution protocol)'' заставляет коммутатор активно отправлять ARP-запросы на IP-адреса в кэше ARP. &lt;br /&gt;
{{note|text=Включение ARP в STP наиболее полезно для избегания чрезмерного флуда в L2.}}&lt;br /&gt;
&lt;br /&gt;
==Модификации STP==&lt;br /&gt;
===STP===&lt;br /&gt;
STP работает на основании &amp;quot;создания&amp;quot; bridge (switch). &lt;br /&gt;
&lt;br /&gt;
Root bridge (switch) - в самом верху.&lt;br /&gt;
&lt;br /&gt;
Ethernet от root switch подсоединяет другие свитчи в Local Area Network (LAN).&lt;br /&gt;
&lt;br /&gt;
В STP и RSTP инстансах свитчам присваиваются extended system-id.&lt;br /&gt;
&lt;br /&gt;
При изменении топологии, bridge извещает об этом root bridge, который требует от остальных почистить записи текущей топологии.&lt;br /&gt;
&lt;br /&gt;
В построенном дереве только root bridge генерирует BPDU.&lt;br /&gt;
&lt;br /&gt;
Дефолтные тайминги '''50 sec''' до перехода в состояние forwarding. &lt;br /&gt;
&lt;br /&gt;
Нахождение порта в состояниях:&lt;br /&gt;
*blocking (20 sec)&lt;br /&gt;
*listening (15 sec)&lt;br /&gt;
*learning (15 sec)&lt;br /&gt;
*forwarding&lt;br /&gt;
&lt;br /&gt;
Другие таймеры:&lt;br /&gt;
*Hello (2 sec)&lt;br /&gt;
*Max Age (20 sec)&lt;br /&gt;
*Forward delay timer (15 sec)&lt;br /&gt;
&lt;br /&gt;
'''+''':&lt;br /&gt;
*Работает с 802.1D 1998 bridges&lt;br /&gt;
*STP обратносовместим с RSTP, можно включать STP на 802.1D 1998 bridges&lt;br /&gt;
*Годится для устаревших сетей, где не требуется быстрая сходимость.&lt;br /&gt;
&lt;br /&gt;
'''-''':&lt;br /&gt;
*STP и RSTP ограничены одним инстансом для одного интерфейса. Используется set rstp interface для включения интерфейса в RSTP инстанс.&lt;br /&gt;
*STP медленее RSTP&lt;br /&gt;
*Не разделяет вланы. Создает spanning tree без учетов вланов и возможности постоения топологии для каждого влана. (в MSTP решена эта проблема)&lt;br /&gt;
*Не обеспечивает быструю сходимость. STP использует тайминги, RSTP использует handshake механизм.&lt;br /&gt;
*В IEEE 802.1D STP не используются edge ports.&lt;br /&gt;
&lt;br /&gt;
'''На MX''' (c 14.1R1):&lt;br /&gt;
- Без включения traceoptions работает логирование состояний и ролей интерфейсов STP.&lt;br /&gt;
- Сбор информации что стриггерило изменения в STP (роль или статус).&lt;br /&gt;
&lt;br /&gt;
'''На SRX''':&lt;br /&gt;
Поддерживается начиная с 15.1X49-D70 на некоторых девайсах.&lt;br /&gt;
&lt;br /&gt;
'''На EX''':&lt;br /&gt;
По дефолту используется RSTP. &lt;br /&gt;
Если работаем с Junos, поддерживающем Enhanced Layer 2 Software (ELS) - можно указать чтобы STP использовался принудительно (через указание force-version в конфиге).&lt;br /&gt;
&lt;br /&gt;
Основные команды:&lt;br /&gt;
 show spanning-tree statistics message-queues&lt;br /&gt;
 show spanning-tree stp-buffer see-all&lt;br /&gt;
 show spanning-tree statistics bridge&lt;br /&gt;
 show spanning-tree statistics interface&lt;br /&gt;
 clear spanning-tree stp-buffer&lt;br /&gt;
&lt;br /&gt;
====Config====&lt;br /&gt;
1. удаляем RSTP глобально или выключаем на конкретных интерфейсах:&lt;br /&gt;
 delete protocols rstp&lt;br /&gt;
 set protocols rstp interface ge-0/0/0.0 disable&lt;br /&gt;
&lt;br /&gt;
2. включаем STP глобально или для конкретных интерфейсов:&lt;br /&gt;
 set protocols stp interface all&lt;br /&gt;
 set protocols stp interface ge-0/0/0.0&lt;br /&gt;
&lt;br /&gt;
3. для более быстрого изучения маков - включаем Address Resolution Protocol (ARP) [при использовании irb | rvi]&lt;br /&gt;
 set protocols stp interface all arp-on-stp&lt;br /&gt;
 set protocols stp interface ge-0/0/0.0 arp-on-stp&lt;br /&gt;
&lt;br /&gt;
===RSTP (Rapid STP)===&lt;br /&gt;
Отличие в скорости реакции на изменение топологии. При изменении топологии, свитч немедленно чистит записи о текущей топологии. Для p2p и edge-портов - быстрый переход к forwarding state. &lt;br /&gt;
&lt;br /&gt;
+ появились alternate и backup роли портов. Что дает возможность заранее подготовиться к факапу, а не принимать решение во время факапа.&lt;br /&gt;
{{note|text=STP: сходимость до 50 сек}}&lt;br /&gt;
{{note|text=RSTP: сходимость 6 сек (3 * hello BPDU interval)}}&lt;br /&gt;
&lt;br /&gt;
В построенной топологии (дереве) все свитчи генерируют BPDU каждые 2 sec.&lt;br /&gt;
 &lt;br /&gt;
В RSTP добавились port-mode:&lt;br /&gt;
*'''shared''' (half duplex) - p2p между свитчами, проходит обычный цикл во всеми таймингами blocking &amp;gt; listening &amp;gt; learning &amp;gt; forwarding.&lt;br /&gt;
*'''p2p''' (full duplex) - тут свитч сам запрашивает у соседа-свитча на p2p линке - давай дружить (тут вся инфа о нашем bridge), я вижу root bridge вот так. Сосед принимает решение, сравнивая полученные данные с уже имеющимися. Для обмена данными используются proposal BPDU (запрос локального bridge) и agreement BPDU (ответ соседа). Этот метод обмена данными обходит стороной дефолтные тайминг STP и является основням ускорителем RSTP.&lt;br /&gt;
*'''egde''' - для конечных устройств. Моментально становятся в состояние - forwarding.&lt;br /&gt;
&lt;br /&gt;
По дефолту именно RSTP используется в Juniper.&lt;br /&gt;
&lt;br /&gt;
'''+''':&lt;br /&gt;
*Быстрее в сходимости при факапах.&lt;br /&gt;
*Voice и video лучше использовать с rstp.&lt;br /&gt;
*RSTP обратносовместим с STP, причем на свитче не обязательно использовать именно RSTP.&lt;br /&gt;
*Поддерживается больше портов, чем в MSTP или VSTP&lt;br /&gt;
*Поддерживает edge ports на MX и ACX роутерах&lt;br /&gt;
'''-''': &lt;br /&gt;
*STP и RSTP ограничены одним инстансом для одного интерфейса. Используется set rstp interface для включения интерфейса в RSTP инстанс.&lt;br /&gt;
*Не работает с 802.1D 1998 bridges&lt;br /&gt;
*Не разделяет вланы. Создает spanning tree без учетов вланов и возможности постоения топологии для каждого влана. (в MSTP решена эта проблема)&lt;br /&gt;
&lt;br /&gt;
====Config====&lt;br /&gt;
[глобально, внутри routing instance, внутри logical system]&lt;br /&gt;
&lt;br /&gt;
Необходимый минимум:&lt;br /&gt;
*Добавляем интерфейсы [все последующие фичи применимы и к 'interface all']&lt;br /&gt;
 set protocols rstp interface ge-0/0/0.0&lt;br /&gt;
 или&lt;br /&gt;
 set protocols rstp interface all &lt;br /&gt;
&lt;br /&gt;
*Назначаем приоритет интерфейса для определения root port. [default priority = 128, значение должно быть кратно 16 (16,32,112 и т.п.)]&lt;br /&gt;
 set protocols rstp interface ge-0/0/0.0 priority ''[0-240]''&lt;br /&gt;
&lt;br /&gt;
*Назначаем тип интерфейса. [defaults: full-duplex = p2p mode, half-duplex = shared]&lt;br /&gt;
 set protocols rstp interface ge-0/0/0.0 mode '''(p2p | shared)'''&lt;br /&gt;
&lt;br /&gt;
*Задаем bridge-priority (switch priority). [default priority = 32 768, значение должно быть кратно 4096]&lt;br /&gt;
 set protocols rstp bridge-priority ''[0 - 61 440]''&lt;br /&gt;
&lt;br /&gt;
*Max время ожидания hello-BPDU . [defaults: 20 sec]&lt;br /&gt;
 set protocols rstp max-age ''[6-40]''&lt;br /&gt;
&lt;br /&gt;
*Интервал пересылки configuration-BPDU от root bridge. [defaults: 2 sec]&lt;br /&gt;
 set protocols rstp hello-time ''[1-10]''&lt;br /&gt;
&lt;br /&gt;
'''Опционально:'''&lt;br /&gt;
* Для поддержания устаревших bridge включаем чистый stp. [чтобы откатить - удаляем force-version из конфига и clear spanning-tree protocol-migration]&lt;br /&gt;
 set protocols rstp force-version stp&lt;br /&gt;
&lt;br /&gt;
* Добавление provider-bridge в rstp. [dst mac-address BPDU выставляется = 01:80:c2:00:00:08 и он не блочится RE, на которую прилетел]&lt;br /&gt;
 set protocols rstp bpdu-destination-mac-address provider-bridge-group&lt;br /&gt;
&lt;br /&gt;
* Задать extended system ID. [это ID STP|RSTP инстанса]&lt;br /&gt;
 set protocols rstp extended-system-id ''[0 - 4095]''&lt;br /&gt;
&lt;br /&gt;
* interface cost (вместо определения cost по interface speed - задаем cost вручную)&lt;br /&gt;
  set protocols rstp interface ge-0/0/0.0 cost ''[1 - 200 000 000]''&lt;br /&gt;
&lt;br /&gt;
* Настроить интерфейс как edge - не ожидает BPDU от хоста. Если прилетела BPDU, порт становится non-edge port и переводится в forwarding state.  [не работает для чистого STP]&lt;br /&gt;
  set protocols rstp interface ge-0/0/0.0 edge&lt;br /&gt;
&lt;br /&gt;
* bridge port пребывает в learning и listening 15 sec, до перехода в forwarding state. Можно этот интервал изменить. [defaults: 15 sec]&lt;br /&gt;
 set protocols rstp forward-delay ''[4-30]''&lt;br /&gt;
{{note|text = NSB - non stop bridging ptorotoсol синхронизирует RSTP на обоих RE, чтобы избежать перерыва сервиса при RE switchover. }}&lt;br /&gt;
&lt;br /&gt;
* Включаем NSB, если на девайсе две RE [кстати, работает для STP, RSTP, MSTP]:&lt;br /&gt;
 set chassis redundancy graceful-switchover&lt;br /&gt;
 set system commit synchronize&lt;br /&gt;
 set protocols layer2-control nonstop-bridging&lt;br /&gt;
&lt;br /&gt;
===MSTP (Multiple STP)===&lt;br /&gt;
Является расширением RSTP.  На одну физическую топологию накладывается несколько STP-инстансов (STI). Одна STI может состоять из одного или нескольких вланов.&lt;br /&gt;
&lt;br /&gt;
В отличие от STP и RSTP, для одного влана порт будет в состоянии forwarding, для другого - blocked.&lt;br /&gt;
&lt;br /&gt;
Если требуется разбалансировать нагрузку или просто часть вланов пустить по одному дереву, а остальные по-другому, то MSTP для этого подойдет лучше всего. Будет создано столько STP, сколько топологий мы хотим использовать. &lt;br /&gt;
&lt;br /&gt;
Быстрая сходимость сети унаследована от RSTP.&lt;br /&gt;
&lt;br /&gt;
'''MSTI''' (MST instance) - это по сути набор вланов.&lt;br /&gt;
&lt;br /&gt;
'''MSTP region''' - это группка свитчей с одинаковыми MSTI. Также у свитчей одного региона должны быть одинаковыми:&lt;br /&gt;
*region name - задается админом - это просто зазвание&lt;br /&gt;
*revision level - задается админом &lt;br /&gt;
*mapping table&lt;br /&gt;
&lt;br /&gt;
MSTP region поддерживает до 64 MSTI, каждый MSTI может содержать до 4094 vlans.&lt;br /&gt;
&lt;br /&gt;
Когда мы создаем регион, MSTP автоматом создает '''internal STI (IST instance 0)''', в котором определяется Regional Root Bridge и добавляются все вланы, которые не определены в другие MSTI.&lt;br /&gt;
&lt;br /&gt;
Все вланы, на свитче одного MST-региона буду по умолчанию привязаны к IST. При создании новых вланов, по дефолту тоже пойдут в IST, или в MSTI, который зададим для vlan.&lt;br /&gt;
&lt;br /&gt;
IST (MST instance 0) - по умолчанию существует в каждом MSTP region. &lt;br /&gt;
&lt;br /&gt;
Кроме региона, MSTP создает '''CIST: Common and Internal Spanning Tree''', которое управляет всеми MSTP регионами, а также отдельными устройствами, на которых запущен RSTP/STP [MSTP определяет их как отдельные части дерева].&lt;br /&gt;
&lt;br /&gt;
CIST рассматривает MSTP регион как виртуальный bridge, несмотря на то сколько внутри региона девайсов, и позволяет коннектиться разным регионам внутри MSTP.&lt;br /&gt;
&lt;br /&gt;
Благодаря CIST - в MSTP может работать с STP и RSTP.&lt;br /&gt;
&lt;br /&gt;
Также есть Common Apanning Tree, который собирает IST (MSTI) и CIST вместе.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Ещё немного обобщив терминологию:&lt;br /&gt;
*IST - дерево внутри региона&lt;br /&gt;
*CIST - дерево между регионами&lt;br /&gt;
*CST - деревья внутри региона + деревья между регионами&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
О плюсах и минусах MSTP:&lt;br /&gt;
&lt;br /&gt;
'''+''':&lt;br /&gt;
*Работает с несколькими вланами&lt;br /&gt;
*Поддерживает несколько инстансов для одного физ интерфейса&lt;br /&gt;
*Поддерживает edge ports на MX и ACX роутерах&lt;br /&gt;
&lt;br /&gt;
'''-''':&lt;br /&gt;
*Не со всеми протоколами совместим&lt;br /&gt;
*Поддерживает ограниченное кол-во портов. MSTP регион поддерживает до 64 MSTIs (а в каждом инстансе 1-4094 вланов)&lt;br /&gt;
*MSTP больше нагружает CPU. &lt;br /&gt;
*Не так быстр как RSTP&lt;br /&gt;
&lt;br /&gt;
====Config====&lt;br /&gt;
 set protocols mstp interface all&lt;br /&gt;
&lt;br /&gt;
Для QFX5100 и других, которые не поддерживают interface all включаем mstp для диапазона интерфейсов:&lt;br /&gt;
&lt;br /&gt;
 set interfaces interface-range '''all-interfaces''' member-range '''ge-0/0/0''' to '''ge-0/0/23'''&lt;br /&gt;
 set protocols mstp interface '''all-interfaces'''&lt;br /&gt;
&lt;br /&gt;
Для конкретного интерфейса:&lt;br /&gt;
 set protocols mstp interface ge-0/0/0&lt;br /&gt;
 set protocols mstp interface ge-0/0/0 priority ''[0-240]''&lt;br /&gt;
 set protocols mstp interface ge-0/0/0 cost ''[1 - 200 000 000]''&lt;br /&gt;
 set protocols mstp interface ge-0/0/0 mode ''(p2p | shared)''&lt;br /&gt;
 set protocols mstp interface ge-0/0/0 edge&lt;br /&gt;
 set protocols mstp interface ge-0/0/0 disable&lt;br /&gt;
&lt;br /&gt;
Для протокола (аналогично RSTP):&lt;br /&gt;
 set protocols mstp bridge-priority ''[0 - 61 440]''&lt;br /&gt;
 set protocols mstp max-age ''[6-40]''&lt;br /&gt;
 set protocols mstp hello-time ''[1-10]''&lt;br /&gt;
 set protocols mstp forward-delay ''[4-30]''&lt;br /&gt;
&lt;br /&gt;
MSTP-specific options:&lt;br /&gt;
 set protocols mstp configuration-name ''region1''&lt;br /&gt;
 set protocols mstp revision-level ''[0 - 65 535]''&lt;br /&gt;
 set protocols mstp max-hops ''[1 - 255]'' | defaults = 19 hops 20 hops - кол-во хопов для BPDU в MSTP-регионе.&lt;br /&gt;
 set protocols mstp msti ''[1 - 64]''&lt;br /&gt;
 set protocols mstp msti ''[1 - 64]'' bridge-priority ''[0 - 61 440]''&lt;br /&gt;
 set protocols mstp msti ''[1 - 64]'' vlans ''(vlan-id | vlan-id-range)''&lt;br /&gt;
'''msti-id''' уникальна в рамках региона. То есть в другом регионе можно использовать тот же msti-id. CIST (common instance ST) msti-id = 0.&lt;br /&gt;
&lt;br /&gt;
 set protocols mstp msti ''[1 - 64]'' interface ge-0/0/0.0&lt;br /&gt;
 set protocols mstp msti ''[1 - 64]'' interface ge-0/0/0.0 priority ''[0-240]''&lt;br /&gt;
 set protocols mstp msti ''[1 - 64]'' interface ge-0/0/0.0 cost ''[1 - 200 000 000]''&lt;br /&gt;
 set protocols mstp msti ''[1 - 64]'' interface ge-0/0/0.0 edge&lt;br /&gt;
&lt;br /&gt;
Operational commands:&lt;br /&gt;
 show spanning-tree interface&lt;br /&gt;
 show spanning-tree bridge&lt;br /&gt;
&lt;br /&gt;
===VSTP (VLAN STP)===&lt;br /&gt;
Для PVST для каждого влана рассчитывается своя топология - при этом будут затрачены значительные ресурсы свитча (CPU, память) и по мере роста вланов - их будет тратиться всё больше и больше.&lt;br /&gt;
&lt;br /&gt;
'''+''':&lt;br /&gt;
*Работает в разными вланами. Включаем VSTP внутри вланов, для которых требуется работа STP. &lt;br /&gt;
*VSTP и RSTP могут быть включены на свитче одновременно.&lt;br /&gt;
* Совместим с Cisco PVST+ и Rapid-PVST+ (но без поддержки ISL trunks)&lt;br /&gt;
*Можно добавить интерфейс как в global level, так и в VLAN level. Если добавить global, то VSTP будет включен во всех вланах этого интерфейса. Если будет добавлен global и VLAN level, то конфиг VLAN level будет приоритетнее и перезапишеи global level.&lt;br /&gt;
*Поддерживает edge ports на MX и ACX роутерах&lt;br /&gt;
&lt;br /&gt;
'''-''':&lt;br /&gt;
*1 инстанс на один влан&lt;br /&gt;
*Использует ограниченное кол-во портов&lt;br /&gt;
*VSTP может работать максимум с 509 вланами. Однако, лучше использовать не более 190.&lt;br /&gt;
*Для одного влана нельзя включить и VSTP и RSTP.&lt;br /&gt;
*Если на свитче одновременно включаем VSTP + RSTP и на свитче более 253 вланов, то для 1-253 влана будет работаеть VSTP, для остальных RSTP.&lt;br /&gt;
* Не работает на SRX. Также имеет разные спецификации по кол-ву вланов для разныех моделей свитчей. Лучше смотреть на сайте juniper.&lt;br /&gt;
&lt;br /&gt;
TIPS: &lt;br /&gt;
:- Рекомендуется включать VSTP во всех вланах.&lt;br /&gt;
:- При использовании: ''set protocol vstp vlan all'',  '''vlan-id 1''' туда не включен, если он нужен, то добавляем отдельно: ''set protocol vstp vlan 1''&lt;br /&gt;
:- Максимальное кол-во вланов, используемых в VSTP - опредлеляется типов свитча и его OS.&lt;br /&gt;
:- Можно использовать VSTP вместе с cisco-свитчами PVST+ и Rapid-PVST+&lt;br /&gt;
&lt;br /&gt;
====Config====&lt;br /&gt;
 set protocols vstp interface all&lt;br /&gt;
 set protocols vstp vlan all interface all&lt;br /&gt;
 set protocols vstp vlan ''(vlan-id | vlan-id-range | vlans list)'' interface all&lt;br /&gt;
 set protocols vstp vlan-group ''(voice-vlans)'' vlan ''(vlan-id | vlan-id-range | vlans list)'' interface all&lt;br /&gt;
&lt;br /&gt;
 set protocols vstp interface ge-0/0/0.0&lt;br /&gt;
 set protocols vstp interface ge-0/0/0.0 disable&lt;br /&gt;
 set protocols vstp vlan all interface ge-0/0/0.0&lt;br /&gt;
 set protocols vstp vlan ''(vlan-id | vlan-id-range | vlans list)'' interface ge-0/0/0.0&lt;br /&gt;
 set protocols vstp vlan-group ''(voice-vlans)'' vlan ''(vlan-id | vlan-id-range | vlans list)'' interface ge-0/0/0.0&lt;br /&gt;
&lt;br /&gt;
Operational commands:&lt;br /&gt;
 show spanning-tree interface&lt;br /&gt;
 show spanning-tree bridge&lt;br /&gt;
 show spanning-tree statistics bridge&lt;br /&gt;
 show spanning-tree interface routing-instance ''RI-name''&lt;br /&gt;
 show spanning-tree bridge routing-instance ''RI-name''&lt;br /&gt;
&lt;br /&gt;
==Monitoring Troubleshooting ==&lt;br /&gt;
==Дополнительная информация==&lt;br /&gt;
*[[L2 switching and VLANs]]&lt;br /&gt;
*[[Provider bridging]]&lt;br /&gt;
*[[ERP (Ethernet Ring Protection)]]&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=L2_switching_and_VLANs&amp;diff=2033</id>
		<title>L2 switching and VLANs</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=L2_switching_and_VLANs&amp;diff=2033"/>
		<updated>2021-07-15T18:13:26Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#description2: Основы L2. Bridging process. Зачем используем вланы. Tagging. Режимы порта. Роутинг между вланами. Информация для подготовки к экзаменам Juniper.}}&lt;br /&gt;
=Краткое overview=&lt;br /&gt;
'''Ethernet''' = shared network: sharing collision domain. '''HUB''' - тот же shared collision domain, только хосты подключены не через шину, а через хаб (тупой свитч).&lt;br /&gt;
&lt;br /&gt;
'''CSMA/CD''': Хост хочет передать фрейм. Сначала он слушает: не вещает ли кто-то в домене. Начинает передавать свой фрейм, если не услышал шевелений от других. После передачи хост слушает - возникла ли коллизия. Если произошла коллизия, то хост замирает на время '''backoff delay'''. Если до начала отправки фрейма хост понимает, что кто-то тоже вещает в это время, он также замирает на '''backoff delay'''.&lt;br /&gt;
&lt;br /&gt;
'''Bridge''' делит хосты на несколько collision domains. И изучает маки хостов.&lt;br /&gt;
&lt;br /&gt;
'''Switch''' - каждый хост в своем порту. Каждый хост в своем collision domain. Изучает маки хостов.&lt;br /&gt;
&lt;br /&gt;
Juniper switch разделяет ''Control Plane'' (routing engine [RE] = мозги, ядро свитча) и ''Forwarding Plane'' (packet forwarding engine [PFE]).&lt;br /&gt;
&lt;br /&gt;
*'''Routing engine''': RPD - создает routing table и из неё forwarding table. L2-learning - создает bridging table.&lt;br /&gt;
*'''Packet forwarding engine''': содержит forwarding table, полученную от RE. Согласно таблице форвардит трафик.&lt;br /&gt;
&lt;br /&gt;
Если через свитч бегает трафик между уже изученными хостами, то дальше PFE такой трафик не поднимается.&lt;br /&gt;
&lt;br /&gt;
Если появляется новых хост, то PFE доставляет полученный пакет RE. RE проверяет всё ли ок (firewalls, policy, mac-add limits, ...). Если ok, то обновляет bridging table и передает обновленную bridging table на PFE. Дальше пакет форвардится на egress порт или флудится во все порты (если dst mac неизвестен).&lt;br /&gt;
&lt;br /&gt;
Enterprise Devices:&lt;br /&gt;
*SRX series - statefull firewall&lt;br /&gt;
*EX series - свитче, работают на ELS software&lt;br /&gt;
*QFX series - производительные коммутаторы, больше подходящие для DC - жирные порты, virtual chassis и т.д.&lt;br /&gt;
&lt;br /&gt;
Типы портов на большинстве свитчей EX series:&lt;br /&gt;
*aceess [10/100/1000 Mb] RJ45 + POE - для подключение хостов&lt;br /&gt;
*uplink [1/10 Gb] SFP+ - для uplink или chassis cluster&lt;br /&gt;
*MGMT - аналог fxp на роутерах Juniper - out of band mgmt Me0&lt;br /&gt;
*console - RJ45 + mini-USB&lt;br /&gt;
&lt;br /&gt;
=Bridging process=&lt;br /&gt;
Стандартные процедуры, которые происходят во время bridging:&lt;br /&gt;
*'''Изучение (learning).''' Изначально switch не в курсе где какие хосты включены. Как только к LAN/VLAN подключился хост и отправил пакет, свитч изучает mac-address этого хоста. Записывает с таблицу коммутации: port + mac + age (время, когда mac был изучен).&lt;br /&gt;
*'''Передача (Forwarding).''' Использую таблицу коммутации, свитч делает передачу фреймов между портам хостов. Если требуется передать фрейм на неизученный ранее mac-address, то запускается процесс flooding.&lt;br /&gt;
*'''Флуд (Flooding).''' Флуд производистя внутри LAN/VLAN. Флудится неизученный mac-address. Когда хост получит фрейм со своим адресом, он посылает в ответ ACK. Mac-addrees изучается и добавляется в таблицу коммутации.&lt;br /&gt;
*'''Фильтрация (Filtering).''' Трафик в рамках одного VLAN будет фильтроваться и не передаваться в другой VLAN.&lt;br /&gt;
*'''Устаревание (Aging).''' Каждый раз когда свитч детектит трафик от MAC, обновляется временная метка. Если трафик перестал поступать - обновляться время жизни более не будет. Когда временная метка станет больше заданного значения, запись о данном mac-address удалится из таблицы. default = 300sec.&lt;br /&gt;
&lt;br /&gt;
=Зачем используем вланы=&lt;br /&gt;
*уменьшение кол-ва трафика и как следствие увеличение скорости передачи&lt;br /&gt;
*вместо сегментироавния сети посредством маршрутизации, делаем сегментирование vlan'ами&lt;br /&gt;
*четкая сортировка и идентефикация пакетов по доменам&lt;br /&gt;
*секурность - управление меньшими бродкаст-доменами&lt;br /&gt;
*быстрая реакция на перемещение хоста&lt;br /&gt;
*используя вланы, можно сгруппировать хосты, находящиеся на разных концах страны в один домен.&lt;br /&gt;
&lt;br /&gt;
=Tagging=&lt;br /&gt;
VLAN-id диапазон: 1-4094. 0,4095 - зарезервированы под служебные нужды Junos.&lt;br /&gt;
&lt;br /&gt;
Точно определить кол-во вланов, подерживаемое на железке:&lt;br /&gt;
 set vlans ''vlan-name'' vlan-id ? &lt;br /&gt;
&lt;br /&gt;
Во фрейме есть поле: TPID (tag protocol identifier).&lt;br /&gt;
&lt;br /&gt;
Когда хост генерирует фрейм во влане, он заполняет поле TPID значением 0x8100, что означает - теггированный пакет.&lt;br /&gt;
&lt;br /&gt;
Также во фрейме есть поле: VLAN ID, которое заполняется присвоенным уникальным 802.1Q ID.&lt;br /&gt;
 TPID 0x8100 = tagged&lt;br /&gt;
 TPID 0x9100 = qinq&lt;br /&gt;
 TPID 0x88a8 = Provider Bridging and Shortest Path Bridging&lt;br /&gt;
&lt;br /&gt;
По дефолту используется vlan-id 1, как нетеггированный.&lt;br /&gt;
&lt;br /&gt;
Как создать и назначать влан на порт:&lt;br /&gt;
 set vlans ''v356'' vlan-id 356       &lt;br /&gt;
 set interfaces ge-2/0/0 unit 0 family ethernet-switching vlan members ''v356''&lt;br /&gt;
&lt;br /&gt;
=Interface-mode=&lt;br /&gt;
*'''Access.''' Принимает только untagged трафик. Дефолтное поведение чистого свитча: все порты в access default vlan (vlan-id 1 [можно при желании сменить vlan-id])&lt;br /&gt;
&lt;br /&gt;
 set interfaces ge-2/0/1 unit 0 family ethernet-switching interface-mode access&lt;br /&gt;
 set interfaces ge-2/0/1 unit 0 family ethernet-switching vlan members v356&lt;br /&gt;
&lt;br /&gt;
*'''Trunk.''' Принимает только tagged трафик. Можно настроить прохождение дофига vlan-id через один trunk-порт. Не пропускает untagged data-трафик. Но воспринимает untagged служебный трафик (например LACP, LLDP и прочее)&lt;br /&gt;
&lt;br /&gt;
 set interfaces ae0 unit 0 family ethernet-switching interface-mode trunk&lt;br /&gt;
 set interfaces ae0 unit 0 family ethernet-switching vlan members [ v355 v356 ]&lt;br /&gt;
*'''Trunk Mode and Native VLAN.''' Принимает tagged трафик + untagged трафик того влана, который будет настроен как native. Если добавить vlan-id только как native (без добавления в vlan-members), принцип обработки будет таким:&lt;br /&gt;
 set interfaces ge-0/0/34 native-vlan-id 391&lt;br /&gt;
 set interfaces ge-0/0/34 unit 0 family ethernet-switching interface-mode trunk&lt;br /&gt;
 set interfaces ge-0/0/34 unit 0 family ethernet-switching vlan members v356&lt;br /&gt;
{{note|text =  Transmit = '''untagged 391''' (pass)&lt;br /&gt;
 Receive = untagged 391 (pass)&lt;br /&gt;
 Receive = tagged to 391 ('''drop''')}}&lt;br /&gt;
&lt;br /&gt;
Если настроить native vlan-id + добавить этот vlan-id в trunk: когда свитч получит untagged трафик, он пометит его данным vlan-id, а также будет принимать и отправлять tagged трафик этого же vlan-id.&lt;br /&gt;
&lt;br /&gt;
 set interfaces ge-0/0/34 native-vlan-id 391&lt;br /&gt;
 set interfaces ge-0/0/34 unit 0 family ethernet-switching interface-mode trunk&lt;br /&gt;
 set interfaces ge-0/0/34 unit 0 family ethernet-switching vlan members v356&lt;br /&gt;
 set interfaces ge-0/0/34 unit 0 family ethernet-switching vlan members v391&lt;br /&gt;
{{note|text = Transmit = '''tagged''' 391 (pass)&lt;br /&gt;
 Receive = untagged 391 (pass - mapped to 391)&lt;br /&gt;
 Receive = tagged 391 ('''pass''')}}&lt;br /&gt;
&lt;br /&gt;
*'''Tagged-access mode.''' Используется для подключения серверов с виртуалками. Отсюда от access-mode взят тип подключения - host. Но по факту для если для каждой виртуалки используется свой влан, то порт должен пропускать tagged трафик. Это он и делает - это особенность от trunk-mode. Также поддерживается native vlan.&lt;br /&gt;
&lt;br /&gt;
Также есть инетерсные фичи, благодаря которым равнозначеные порты, требующие одинаковых настроек можно группировать:&lt;br /&gt;
 set interfaces interface-range Uplinks member-range ge-1/0/40 to ge-1/0/43&lt;br /&gt;
 set interfaces interface-range Uplinks unit 0 family ethernet-switching vlan members all&lt;br /&gt;
&lt;br /&gt;
=Inter-VLAN routing=&lt;br /&gt;
Чтобы появилась возможность коннектиться хостам из разных доменов - настраиваем Inter-VLAN routing.&lt;br /&gt;
&lt;br /&gt;
По сути это просто создание l3-интерфейса внутри влана [routed VLAN interface (RVI) или IRB].&lt;br /&gt;
&lt;br /&gt;
Внутри влана трафик будет бриджеваться, а между вланами - роутиться.&lt;br /&gt;
 set interfaces irb unit 356 family inet address 10.170.19.1/24&lt;br /&gt;
 set vlans v356 vlan-id 356 l3-interface irb.356         &lt;br /&gt;
&lt;br /&gt;
 set interfaces ge-2/0/46 unit 0 family ethernet-switching vlan members v356&lt;br /&gt;
 set interfaces ae0 unit 0 family ethernet-switching vlan members v356&lt;br /&gt;
&lt;br /&gt;
 show interfaces terse irb.356 &lt;br /&gt;
 Interface               Admin Link Proto    Local                 Remote&lt;br /&gt;
 irb.356                 up    up   inet     10.170.19.1/24  &lt;br /&gt;
&lt;br /&gt;
L3 интерфейс станет up как только vlan v356 будет назначен (trunk или access) на какой-нибудь физический интерфейс в состоянии up.&lt;br /&gt;
&lt;br /&gt;
В случае с RVI будет всё тоже самое, только изменится тип интерфейса: irb.356 &amp;gt; vlan.356.&lt;br /&gt;
=Дополнительная информация=&lt;br /&gt;
*[[Provider bridging]]&lt;br /&gt;
*[[ERP (Ethernet Ring Protection)]]&lt;br /&gt;
*[[Spanning-Tree protocol (STP)]]&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
	<entry>
		<id>https://juniper-exam.ru/index.php?title=High_Availability&amp;diff=2032</id>
		<title>High Availability</title>
		<link rel="alternate" type="text/html" href="https://juniper-exam.ru/index.php?title=High_Availability&amp;diff=2032"/>
		<updated>2021-07-15T18:12:03Z</updated>

		<summary type="html">&lt;p&gt;Наталия Бобкова: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#description2:Работы Junos без HA. Graceful restart (GR). Graceful RE switchover (GRES). Nonstop Active Routing (NSR). Bidirectional Forwarding Detection (BFD). Link Aggregation Control Protocol (LACP). Virtual Router Redundancy Protocol (VRRP). Unified in-service software upgrade (ISSU). Информация для подготовки к экзаменам Juniper.}}&lt;br /&gt;
= Без включенных фич High Availibility =&lt;br /&gt;
Когда есть 2 или более RE и падает master =&amp;gt; PFE стартует заново и все железо и интерфейсы изучаются новым RE.&lt;br /&gt;
&lt;br /&gt;
Новый RE запускает rpd, поэтому все соседствующие устройства детектят изменение топологии и заново производят вычисление кратчайших путей и активных маршрутов.&lt;br /&gt;
&lt;br /&gt;
То есть без включения дополнительных фич, сходимость на сети происходит крайне медленно!&lt;br /&gt;
&lt;br /&gt;
= Graceful restart (GR) =&lt;br /&gt;
Позволяет маршрутизатору информировать своих соседей (helper router) о предстоящей перезагрузке или перезагрузки процесса rpd.&lt;br /&gt;
&lt;br /&gt;
Перезагружающийся маршрутизатор (restarting router) запрашивает у соседей определенное время на перезагрузку, после которой они заново  станут соседями.&lt;br /&gt;
&lt;br /&gt;
О процессе перезагрузке будет знать не вся сеть, а только непосредственные соседи (соседство по протоколам падать не будет).&lt;br /&gt;
&lt;br /&gt;
Во время перерыва на control plane, трафик будет передаваться через forwarding plane.&lt;br /&gt;
&lt;br /&gt;
Применимо к протоколам: OSPF, ISIS, RIP, BGP, RSVP, LDP, MSDP, PIM.&lt;br /&gt;
&lt;br /&gt;
Каждому RE можно задать ip управления (interface fxp0).&lt;br /&gt;
&lt;br /&gt;
Требования: &lt;br /&gt;
&lt;br /&gt;
* и restarting роутер и helper роутер должны поддерживать GR (на Junos для helper роутера функция активна по умолчанию).&lt;br /&gt;
* роутер должен уметь передавать трафик через себя во время процесса перезагрузки (у Junos это по архитектуре есть, проблема может возникнуть только при соседстве с другими вендорами).&lt;br /&gt;
&lt;br /&gt;
== Настройка ==&lt;br /&gt;
 # show routing-options &lt;br /&gt;
 graceful-restart { &amp;lt;------------------------- включается глоально&lt;br /&gt;
         restart-duration 300; &amp;lt;--------------- max время, в теч которого маршрутизатор находится в GR&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 # show protocols bgp  &lt;br /&gt;
 graceful-restart { &lt;br /&gt;
     restart-time 300;&lt;br /&gt;
     stale-routes-time 300; &amp;lt;---------------- max время, в теч которого хранятся старые маршруты&lt;br /&gt;
 } &lt;br /&gt;
 group external {&lt;br /&gt;
     export bgp;&lt;br /&gt;
     neighbor 192.168.0.40 {&lt;br /&gt;
         peer-as 200;&lt;br /&gt;
         graceful-restart { &amp;lt;------------------- можно применить для более специфичного уровня иерархии&lt;br /&gt;
             disable;&lt;br /&gt;
&lt;br /&gt;
== Просмотр ==&lt;br /&gt;
Мониторинг только внутри протоколов: &lt;br /&gt;
 &lt;br /&gt;
 # show protocols ospf   &lt;br /&gt;
 traceoptions {&lt;br /&gt;
     file ospf_wtf;&lt;br /&gt;
     flag graceful-restart;&lt;br /&gt;
 # show log ospf_wtf&lt;br /&gt;
 # show bgp neighbor 192.168.0.40 [Options]&lt;br /&gt;
&lt;br /&gt;
= Graceful RE switchover (GRES) =&lt;br /&gt;
Когда включен GRES, RE синхронизируют конфигурации и обмениваются keepalive через internal link.&lt;br /&gt;
&lt;br /&gt;
Если один из RE падает (не приходят keepalive 2 сек), то передача пакетов через PFE продолжается.&lt;br /&gt;
&lt;br /&gt;
Graceful RE Switchover сохраняет инфо об интерфейсах, о ядре, но не инфо, содержащуюся в control plane.&lt;br /&gt;
&lt;br /&gt;
Новому RE придется заново устанавливать соседства для разных протоколов и запускать rpd процесс.&lt;br /&gt;
&lt;br /&gt;
Когда рухнет одна из RE, PFE разрывает связь со старым RE и устанавливает с новым, с которым обмениваются сообщениями в дальнейшем. &lt;br /&gt;
&lt;br /&gt;
PFE (packet forwarding engine) не ребутается и продолжает слать трафик, основываясь на существующей forwarding table.&lt;br /&gt;
&lt;br /&gt;
Чтобы сохранить работоспособность не только форвардинга, но и роутинга во время switchover, GRES должен использоваться совместно с NSR и Grasefull restart protocols extentions.&lt;br /&gt;
&lt;br /&gt;
Switchover происходит в том случае, если:&lt;br /&gt;
*RE kernel перестает работать&lt;br /&gt;
*hardware failure на RE&lt;br /&gt;
*принудительно руками&lt;br /&gt;
&lt;br /&gt;
'''Приложения, поддерживающие GRES:''' LACP, MPLS LSPs (transit only), Multicast, VPLS, DHCP relay, l2circuits, и другие...&lt;br /&gt;
&lt;br /&gt;
== Настройка ==&lt;br /&gt;
 set chassis redundancy graceful-switchover&lt;br /&gt;
&lt;br /&gt;
Для синхронизации конфигов&lt;br /&gt;
 set system commit synchronize&lt;br /&gt;
&lt;br /&gt;
Только что вставленная backup RE синхронизирует свой конфиг с конфигом master RE. &lt;br /&gt;
&lt;br /&gt;
Только при включенном GRES можно скопировать JunOS с master на backup RE.&lt;br /&gt;
&lt;br /&gt;
== Просмотр == &lt;br /&gt;
 show chassis routing-engine    &lt;br /&gt;
 show system switchover       || используется только на backup RE, поэтому сначала нужно перейти на backup: ''request routing-engine login backup''&lt;br /&gt;
&lt;br /&gt;
==Принудительно сделать switchover== &lt;br /&gt;
  R1&amp;gt; request chassis routing-engine master ?&lt;br /&gt;
  acquire Attempt to become master Routing Engine &amp;lt;/code&amp;gt;&lt;br /&gt;
  release Request that other Routing Engine become master&lt;br /&gt;
  switch Toggle mastership between Routing Engines&lt;br /&gt;
&lt;br /&gt;
= Nonstop Active Routing (NSR) =&lt;br /&gt;
&lt;br /&gt;
Используется только с кол-вом RE &amp;gt; 1.&lt;br /&gt;
&lt;br /&gt;
Также как и graceful RE switchover,  NSR хранит информацию об интерфейсах и ядре, но плюс к этому - хранит информацию о маршрутизации на backup RE =&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=&amp;gt; не нуждается в helper router =&amp;gt; используется на тех сетях, где роутерами не поддерживается GR =&amp;gt; полностью заменяет GR.&lt;br /&gt;
&lt;br /&gt;
Для протоколов, которые не поддерживаются NSR, после процесса переключения на новый RE, процесс восстановления работы протоколов происходит по стандартному алгоритму.&lt;br /&gt;
&lt;br /&gt;
Для работы NSR обязательно включить Graceful  RE Switchover, синхронизировать конфиги.&lt;br /&gt;
&lt;br /&gt;
После включения NSR, backup начинает собирать маршрутную информацию с master.&lt;br /&gt;
&lt;br /&gt;
== Просмотр ==&lt;br /&gt;
&lt;br /&gt;
Для переключения из master в backup&lt;br /&gt;
&lt;br /&gt;
 '''{master}'''&lt;br /&gt;
 user@R1-re0&amp;gt; request routing-engine login other-routing-engine&lt;br /&gt;
 --- JUNOS 10.1R1.8 built 2010-02-12 18:31:54 UTC&lt;br /&gt;
 '''{backup}''' &lt;br /&gt;
 user@R1-re1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Мониторинг работы также осущ-ся для каждого протокола отдельно (для traceoptions можно задать флаг: nsr-synchronization)&lt;br /&gt;
&lt;br /&gt;
= Bidirectional Forwarding Detection (BFD) =&lt;br /&gt;
Обнаружение падения соседства намного быстрее, чем у обычных протоколов  (и статической маршуртизации) - менее секунды.&lt;br /&gt;
&lt;br /&gt;
Хосты устанавливают сессию и обмениваются hello.&lt;br /&gt;
&lt;br /&gt;
Если перестали приходить hello, то BFD дает знать протоколу, что пропала связность между хостами.&lt;br /&gt;
&lt;br /&gt;
В настройках определяем минимальное значение для передачи и поучения hello на роутерах.&lt;br /&gt;
Если значения не совпадают, то BFD использует наибольшее значение (adaptive-mode).&lt;br /&gt;
Это поведение по умолчанию можно выключить: no-adaptation.&lt;br /&gt;
&lt;br /&gt;
Значение кол-ва пропущенных hello можно менять (multiplier).&lt;br /&gt;
&lt;br /&gt;
== Настройка ==&lt;br /&gt;
&lt;br /&gt;
 ospf {&lt;br /&gt;
     area 0.0.0.0 {&lt;br /&gt;
         interface fe-0/0/0.0 {&lt;br /&gt;
             bfd-liveness-detection {&lt;br /&gt;
                 minimum-interval 300;}}&lt;br /&gt;
&lt;br /&gt;
 bgp {&lt;br /&gt;
     bfd-liveness-detection {&lt;br /&gt;
         minimum-receive-interval 300;}&lt;br /&gt;
     group external {&lt;br /&gt;
         export bgp;&lt;br /&gt;
         bfd-liveness-detection {&lt;br /&gt;
             transmit-interval {&lt;br /&gt;
                 minimum-interval 300:}}&lt;br /&gt;
&lt;br /&gt;
== Просмотр ==&lt;br /&gt;
  show bfd session&lt;br /&gt;
&lt;br /&gt;
= Link Aggregation Control Protocol (LACP) =&lt;br /&gt;
*Автоматическое добавление и удаление отдельных линков в ae. (глобально, но не в JunOS)&lt;br /&gt;
*Мониторинг линка с целью проверки, что он с обоих концов включен в ae.&lt;br /&gt;
&lt;br /&gt;
Когда собрана ae и включен lacp, локальная и удаленная сторона начинает обмениваться PDU, которые содержат в себе инфо о состоянии линка.&lt;br /&gt;
Настраивается либо active-active, либо active-passive. Одна из сторон обязательно должна отправлять PDU, то есть быть active.&lt;br /&gt;
&lt;br /&gt;
==Link protection==&lt;br /&gt;
Link-protection: позволяет приоритезировать прохождение трафика по конкретному линку. Eggress трафик (транзитный или локально сгенерированный) будет проходить только через назначенный primary линк. &lt;br /&gt;
&lt;br /&gt;
Имеет смысл при объединении от 2х линков в ae.&lt;br /&gt;
&lt;br /&gt;
Если нужно задействовать большее кол-вол линков - собираем subgroups.&lt;br /&gt;
&lt;br /&gt;
Мы можем добавить линки в разные subgroups, в рамках одной ae - primary и secondary. По линкам из primary subgroup будет идти трафик, пока не возникнет проблем с линком из primary subgroup. Как только, так сразу трафик перестраивается на secondary subgroup.&lt;br /&gt;
&lt;br /&gt;
Трафик бегает пол инкам с высшим приоритетом. При добавлении нового линка с высшим приоритетом, или восстановления старого линка с высшим приоритетом, трафик сразу переходит на него. Чтобы избежать такого состояния, настраиваем: ''non-revertive''.&lt;br /&gt;
&lt;br /&gt;
Если настраиваем link-protection, настройки у линков с обеих сторон должны быть обязательно одинаковыми!&lt;br /&gt;
&lt;br /&gt;
Можно делать настройку как глобально, так и локально для конкретной ae.&lt;br /&gt;
===Config===&lt;br /&gt;
* Глобально&lt;br /&gt;
 [edit chassis aggregated-devices ethernet]&lt;br /&gt;
 +     lacp {&lt;br /&gt;
 +         link-protection {&lt;br /&gt;
 +             non-revertive;&lt;br /&gt;
*2 линка в ae:&lt;br /&gt;
 [edit interfaces ge-0/0/2 gigether-options 802.3ad]&lt;br /&gt;
 +      lacp {&lt;br /&gt;
 +          port-priority 33333;&lt;br /&gt;
 [edit interfaces ae0 aggregated-ether-options lacp]&lt;br /&gt;
 +      link-protection {&lt;br /&gt;
 +          non-revertive;&lt;br /&gt;
*&amp;gt;2 линков в ae:&lt;br /&gt;
 [edit interfaces ae0 aggregated-ether-options]&lt;br /&gt;
 + link-protection-sub-group &lt;br /&gt;
 +     subgroup-primary primary&lt;br /&gt;
 +     subgroup-backup backup&lt;br /&gt;
 [edit interfaces ge-0/0/2 ether-options 802.3ad]&lt;br /&gt;
 + link-protection-sub-group group-name&lt;br /&gt;
 [edit interfaces ge-0/0/3 ether-options 802.3ad]&lt;br /&gt;
 + link-protection-sub-group group-name&lt;br /&gt;
 [edit interfaces ge-0/0/4 ether-options 802.3ad]&lt;br /&gt;
 + link-protection-sub-group group-name&lt;br /&gt;
 и включаем link-protection на каком-нибудь уровне: LAG/LACP/AE.&lt;br /&gt;
 [edit interfaces ae0 aggregated-ether-options lacp]&lt;br /&gt;
 + link-protection&lt;br /&gt;
&lt;br /&gt;
==Link-speed==&lt;br /&gt;
Когда указываем в настройках ae link-speed, все линки, входящие в ae должны соответствовать этой настройке.&lt;br /&gt;
&lt;br /&gt;
Начиная с 14.2 версии, можно объединять в ae линки разных скоростей:&lt;br /&gt;
&lt;br /&gt;
 [edit interfaces ae33] &lt;br /&gt;
 +       aggregated-ether-options {&lt;br /&gt;
 +           link-speed mixed;&lt;br /&gt;
&lt;br /&gt;
Минимальное кол-во линков можно задавать, но по дефолту хотя бы один линк соберется в ae.&lt;br /&gt;
 [edit interfaces ae0 aggregated-ether-options]&lt;br /&gt;
 +    minimum-links 4;&lt;br /&gt;
&lt;br /&gt;
Если число линков указываем, то ae0 соберется, только если как минимум это число линков будет у статусе ''collecting distributing''.&lt;br /&gt;
&lt;br /&gt;
= Virtual Router Redundancy Protocol (VRRP) =&lt;br /&gt;
Особенности роутеров: &lt;br /&gt;
&lt;br /&gt;
*'''Master''' - выполняет ф-ию &lt;br /&gt;
*'''Backup''' - их может быть несколько&lt;br /&gt;
&lt;br /&gt;
Для обмена информацией между собой (о приоритете и состоянии мастера)  роутеры запихивают обновления в ip-пакеты и шлют на ip 224.0.0.18 раз в 1 сек (по умолчанию).&lt;br /&gt;
&lt;br /&gt;
Можно задать другой интервал для обмена обновлений (1-255). Или с помощью fast-interval (100–999 milliseconds). TTL = 255&lt;br /&gt;
&lt;br /&gt;
Мак-адрес для virtual-router: 00-00-5E-00-01-VRID [virt router ID]&lt;br /&gt;
&lt;br /&gt;
Приоритет по умолчанию: 100&lt;br /&gt;
&lt;br /&gt;
Выигрывает: '''больший приоритет'''&lt;br /&gt;
&lt;br /&gt;
Сотосяния: &lt;br /&gt;
*Initialization - выборы мастера&lt;br /&gt;
*Master - мастер отправляет остальным не master роутерам сообщения о своем состоянии&lt;br /&gt;
*Backup - backup роутер мониторит состояние master роутера&lt;br /&gt;
*Transit - короткий момент, когда master сдох, а backup еще не стал master'ом.&lt;br /&gt;
&lt;br /&gt;
== Настройка ==&lt;br /&gt;
 &amp;gt; show configuration interfaces ae5.398 &lt;br /&gt;
 vlan-id 398;&lt;br /&gt;
 family inet &lt;br /&gt;
     address 77.94.165.185/29 {&lt;br /&gt;
         vrrp-group 1 { &amp;lt;---------------------------------------------- в рамках одного маршрутизатора не должно существовать несколько групп с одинаковым ID&lt;br /&gt;
             virtual-address 77.94.165.187; &lt;br /&gt;
             priority 10; &amp;lt;----------------------------------------------- приоритет&lt;br /&gt;
             advertise-interval 10; &amp;lt;----------------------------------- интервал отправки сообщений внутри группы&lt;br /&gt;
             accept-data;   &amp;lt;------------------------------------------- позволяет отвечать на icmp-пакеты&lt;br /&gt;
             authentication-type md5; &amp;lt;------------------------------ md5, simple pass, none&lt;br /&gt;
             authentication-key &amp;quot;$9$&amp;quot;; ## SECRET-DATA&lt;br /&gt;
             no-preempt; &amp;lt;-------------------------------------------- backup не перехватывает роль master (In situations where the VIP address is not owned by any of the participating &lt;br /&gt;
 VRRP routers within a specific VRRP group)&lt;br /&gt;
&lt;br /&gt;
'''preempt/no-preempt''' - если падал vrrp интерфейс с большим приоритетом, и потом вернулся в работу - может выставить параметр не переключать master обратно на него. Либо интерфейс может себе вернуть роль мастера по истечению hold-timer. На практике сработал только когда интерфейс физически падал.&lt;br /&gt;
&lt;br /&gt;
'''vrrp-inheret-from''' - создан для удобства создания интерфейсов в одинаковыми параметрами. Все настройки интерфейса, который указан в качестве  vrrp-inheret-from - наследуются.&lt;br /&gt;
&lt;br /&gt;
== Просмотр ==&lt;br /&gt;
 show vrrp summary &lt;br /&gt;
 Interface     State       Group   VR state       VR Mode    Type   Address &lt;br /&gt;
 ae5.398       up              1   backup          Active    lcl    77.94.165.185      &lt;br /&gt;
                                                            vip    77.94.165.187&lt;br /&gt;
==Track interface/route==&lt;br /&gt;
У vrrp есть возможность следить за состоянием маршрута или интерфейса, или за кол-вом трафика на интерфейсе. И в зависимости от состояния - уменьшать приоритет. По сути пригодно, когде vrrp сделан на PE-роутер и через этот vrrp работает клиент. В таком случае, например, при &amp;quot;потере&amp;quot; uplink линков, роутер перестал быть master, и клиент слал бы трафик на другой роутер.&lt;br /&gt;
&lt;br /&gt;
 &amp;gt; show configuration interfaces ge-0/0/4  &lt;br /&gt;
 unit 300 {&lt;br /&gt;
    family inet {&lt;br /&gt;
        address 172.30.1.2/24 {&lt;br /&gt;
            vrrp-group 101 {&lt;br /&gt;
                track {&lt;br /&gt;
                    interface ge-0/0/2.204 {&lt;br /&gt;
                        priority-cost 10;&lt;br /&gt;
                    interface ge-0/0/3.228 {&lt;br /&gt;
                        priority-cost 10;&lt;br /&gt;
&lt;br /&gt;
= Unified in-service software upgrade (ISSU) =&lt;br /&gt;
&lt;br /&gt;
Позволяет обновиться без перерыва на control plane и с минимальным перерывом на forwarding plane.&lt;br /&gt;
&lt;br /&gt;
Обязательно должно быть 2 RE.&lt;br /&gt;
&lt;br /&gt;
Должны быть включены: GRES, NSR.&lt;br /&gt;
&lt;br /&gt;
На обоих RE должны быть одинаковые версии прошивки.&lt;br /&gt;
=Дополнительная информация=&lt;br /&gt;
*[[Static, Aggregate, Generate route]]&lt;br /&gt;
*[[OSPF]]&lt;br /&gt;
*[[BGP]]&lt;br /&gt;
*[[IS-IS]]&lt;/div&gt;</summary>
		<author><name>Наталия Бобкова</name></author>
	</entry>
</feed>