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