В прошлом посте про OSPFv2 я описал некую базовую информацию по протоколу. Сегодня попытаемся настроить все это на Juniper. Множим VMx'ы и вперед.
OSPF какой-то очень непростой. Я снова думал, что уж лабу-то я за недельку сколочу, даже со своей нехваткой времени. Как выяснилось, Cisco и Juniper имплементируют OSPF немного по разному. Ну и тема сама по себе довольно масштабная.
В заголовок к посту нужно было ставить следующую картинку из AT&T презентации.
Особо рассусоливать не будем. Строю я все, как обычно, на голом ESXi. Мне очень нравится UNL, например, но в процессе я хочу ещё немножко разобраться в ESXi подходе к виртуализации. Наступить на больше граблей. Двух зайцев, так сказать, убить.
Включаем виртуалки, соединяем все это vSwitch'ами, расстраиваемся от использованной оперативки, но все ворочается.
Можно открыть в новом окне и обращатся к картинке по мере прочтения |
Базовая конфигурация
Тут все довольно просто. Настраивает имя хоста, задаем пароль для root пользователя и настраиваем необходимые адреса в соответствии с картинкой.
show configuration | display set
set system host-name O1
set system root-authentication encrypted-password "$1$H7QSbc8x$gmAQdANmVu2E8y2DqvA/Q0"
set interfaces em2 unit 0 family inet address 10.10.0.1/24
set interfaces lo0 unit 0 family inet address 10.0.10.1/32
Backbone Area
Настроим все маршрутизаторы в area 0 - O1, O2, O3 и O4. Делается это одной командой. Даем её на каждом роутере в backbone area.
set protocols ospf area 0.0.0.0 interface em2.0
Посмотрим состояние соседей у O3
root@O3> show ospf neighbor detail
Address Interface State ID Pri Dead
10.10.0.4 em2.0 Full 10.0.10.4 128 36
Area 0.0.0.0, opt 0x52, DR 10.10.0.3, BDR 10.10.0.2
Up 00:00:47, adjacent 00:00:47
10.10.0.2 em2.0 Full 10.0.10.2 128 36
Area 0.0.0.0, opt 0x52, DR 10.10.0.3, BDR 10.10.0.2
Up 00:03:54, adjacent 00:03:14
10.10.0.1 em2.0 Full 10.0.10.1 128 35
Area 0.0.0.0, opt 0x52, DR 10.10.0.3, BDR 10.10.0.2
Up 00:03:54, adjacent 00:03:09
Как видно, соседство от O3 к каждому из роутеров в этой зоне успешно поднялось. Состояние каждого соседа Full, что намекает нам на то, что O3 либо DR, либо BDR. В выводе можно увидеть однозначную информацию об этом - DR 10.10.0.3, BDR 10.10.0.2.
Почему O4 не DR, ведь он имеет приоритет 128 и наивысший RouterID 10.10.0.4? Дело а том, что я немного замешкался перед тем как настроить OSPF на нем. За это время оставшиеся маршрутизаторы успели прийти к согласию. Потом пришел O4, но, как я и писал в прошлом посте, перевыборов не произошло. Займемся тюнингом чуть позже, сейчас настроим другие зоны.
К слову, выражения area 0 и area 0.0.0.0 тождественны.
Regular Area 1
На O2 и O5 делаем примерно следующую конфигурацию.root@O2# set protocols ospf area 1 interface em3.0 interface-type p2p
Как видно, я указал interface-type p2p. В этой зоне нет других маршрутизаторов, поэтому и линк такого типа. Напомню, никаких DR/BDR тут быть не может.
root@O5> show ospf neighbor detail
Address Interface State ID Pri Dead
10.10.1.1 em2.0 Full 10.0.10.2 128 35
Area 0.0.0.1, opt 0x52, DR 0.0.0.0, BDR 0.0.0.0
Up 00:02:57, adjacent 00:02:57
Как видно DR и BDR значения выставлены в нули. Но соседство поднялось и это прекрасно. Пока хорошо идем.
Totally Stub Area 2
Напомню, в эту зону, как в stub area, не будут передаваться Type 5 LSA о внешних маршрутах. Однако в нашем случае, это Tottaly Stub Area, и это значит, что даже информация о других OSPF областях содержащаяся в Type 3 LSA сюда передаваться не должна. То есть, ABR O3 не должен генерировать суммарные LSA в эту зону, так и напишем. В одну строку уместить конфигурацию уже не получиться.
root@O3# set protocols ospf area 2 stub no-summaries
root@O3# set protocols ospf area 2 interface em3.0 interface-type p2p
На O6 мы так же должны указать, что данная область является тупиковой. Иначе он не будет отправлять Stub Flag и соседство не сформируется. no-summaries ключ нам уже не нужен, потому что эта конфигурация применима только для ABR, ведь именно он не будет генерировать LSA Type 3.
root@O6# set protocols ospf area 0.0.0.2 stub
root@O6# set protocols ospf area 0.0.0.2 interface em2.0 interface-type p2p
Смотрим соседство.
root@O6> show ospf neighbor detail
Address Interface State ID Pri Dead
10.10.2.1 em2.0 Full 10.0.10.3 128 33
Area 0.0.0.2, opt 0x50, DR 0.0.0.0, BDR 0.0.0.0
Up 00:00:33, adjacent 00:00:33
Отлично.
Чуть ниже я заметил, что я забыл добавить дефолтный маршрут в эту зону на О3. Нужно ещё вот так сделать, иначе в area 2 будет совсем грустно.
root@O3# set protocols ospf area 2 stub default-metric 2
NSSA Area 3
Настраиваем O4 и O7 маршрутизаторы в зоне NSSA. Особых отличий от Stub зоны нет.
root@04# set protocols ospf area 3 nssa
root@04# set protocols ospf area 3 interface em3.0 interface-type p2p
root@O7# set protocols ospf area 3 nssa
root@O7# set protocols ospf area 3 interface em2.0 interface-type p2p
Смотрим соседство.
root@O7> show ospf neighbor detail
Address Interface State ID Pri Dead
10.10.3.1 em2.0 Full 10.0.10.4 128 34
Area 0.0.0.3, opt 0x50, DR 0.0.0.0, BDR 0.0.0.0
Up 00:01:05, adjacent 00:01:05
Отлично.
Stub Area 4
Конфигурация stub area особо ничем не отличается. Это как stub no-summary только без no-summary.
root@O5# set protocols ospf area 4 stub
root@O5# set protocols ospf area 4 interface em3.0 interface-type p2p
root@O8#set protocols ospf area 0.0.0.4 stub
root@O8#set protocols ospf area 0.0.0.4 interface em2.0 interface-type p2p
Соседство? Есть.
root@O8> show ospf neighbor
Address Interface State ID Pri Dead
10.10.4.1 em2.0 Full 10.0.10.5 128 30
Networks
Пока что мы установили соседство между роутерами и автоматически добавили "линковые" сети в процесс. Хотелось бы, что бы loopback адреса тоже были доступны. Для этого нам нужно аналогично добавить lo0.0 интерфейс в ту или иную область. Конфиг для всех роутеров будет выглядеть примерно вот так.
root@O1# set protocols ospf area 0 interface lo0.0
root@O2# set protocols ospf area 0 interface lo0.0
root@O3# set protocols ospf area 0 interface lo0.0
root@O4# set protocols ospf area 0 interface lo0.0
root@O5# set protocols ospf area 1 interface lo0.0
root@O6# set protocols ospf area 2 interface lo0.0
root@O7# set protocols ospf area 3 interface lo0.0
root@O8# set protocols ospf area 4 interface lo0.0
Virtual-link O8 - O2
Каждая область в OSPF должна иметь связность с area 0. Для этого мне придется настроить virtual-link через O5. Ок. Но мне стало интересно почему так.
Да, весь прикол в том, что между зонами OSPF работает как distance-vector прококол.
То есть в нашем случае O1 отправляет LSA Type1 со своим адресом 10.0.10.1, его получает O2. Это видно на выводе ниже.
root@O2> show ospf database area 0 router lsa-id 10.0.10.1 detail
OSPF database, Area 0.0.0.0
Type ID Adv Rtr Seq Age Opt Cksum Len
Router 10.0.10.1 10.0.10.1 0x80000026 1091 0x22 0xc0d1 48
bits 0x0, link count 2
id 10.10.0.3, data 10.10.0.1, Type Transit (2)
Topology count: 0, Default metric: 1
id 10.0.10.1, data 255.255.255.255, Type Stub (3)
Topology count: 0, Default metric: 0
Topology default (ID 0)
Type: Transit, Node ID: 10.10.0.3
Metric: 1, Bidirectional
Он является ABR и его святая обязанность передать эти знания в другие зоны, такие как area 1, например. Как мы уже знаем, ABR передает LSA Type3 в другие зоны. То есть O5 получит такой Network Summary LSA от O2. Его можно посмотреть ниже.
root@O5> show ospf database area 1 netsummary | match 10.0.10.1
Summary 10.0.10.1 10.0.10.2 0x80000014 1678 0x22 0xc538 28
Здесь и можно рассмотреть distance-vector логику. О5 при получении такого LSA просто добавляет к стоимости указанной в этом LSA свою стоимость для достижения O2 в своей области. То есть, если грубо, О5 ничего не знает про топологию нулевой зоны, он просто знает куда слать трафик и сколько это будет стоить. Такое поведение чревато петлями маршрутизации. Если мы не знаем про топологию соседней зоны, мы не можем быть уверены, что там нет петли. Для обхода этой проблемы, в OSPF должна быть топология типа "Звезда", где петли исключены "by design", что называется.
Это все в теории, а вот что происходит на практике?
Мы уже видели, что LSA Type 3 от O2 был доставлен до О5. Дальше интереснее, O5 по факту тоже считает себя ABR, ведь он располагается на границе зон 1 и 4. Так ли это? Безусловно.
root@O5> show ospf overview
Instance: master
Router ID: 10.0.10.5
Route table index: 0
Area border router
В моем представлении, ABR при получении Network Summary "перегенирирует" его в другую зону, как парой абзацев раньше это сделал O2.
Но нет, О8 так и не узнает про 10.0.10.1 из area0. В LSDB у О8 будет только информация из area1. Убедимся в этом.
root@O8> show ospf database
OSPF database, Area 0.0.0.4
Type ID Adv Rtr Seq Age Opt Cksum Len
Router 10.0.10.5 10.0.10.5 0x80000017 2984 0x20 0x256c 48
Router *10.0.10.8 10.0.10.8 0x80000015 1981 0x20 0xd57 60
Summary 10.0.10.5 10.0.10.5 0x80000014 1984 0x20 0x9f5a 28
Summary 10.10.1.0 10.0.10.5 0x80000014 1484 0x20 0xb44b 28
Непонятно... После некоторых поисков, выяснилось, что Cisco и Juniper ведут себя в этой ситуации по разному. Этот вопрос неплохо отражен, например, на этом форуме, в том числе в этой теме, или в RFC3509.
Если кратко, то я нашел следующую информацию.
- Роутер Juniper считает себя ABR в случае, когда у него есть интерфейсы в две или более области. Это мы видели в предыдущем выводе - O5 считает себя ABR, потому что имеет интерфейсы в две зоны. Т.е. в нашем примере, LSA3 из area 1 будут отправлены в area 4. Но вот роутеры в area 4 не добавят такие префиксы в таблицу маршрутизации, они ожидают увидеть их из нулевой области. Обсуждалось здесь.
- Роутер Cisco считает себя ABR, когда у него есть интерфейсы в разные области, но один из этих зон должна быть backbone. В случае с Cisco, LSA3 из area1 даже и не дошли бы до area4.
Однако в моей лабе ситуация совсем иная. O1 не знает про О8 и наоборот. Судя по той информации, которую я сумел найти LSA Type 3 должны добраться до O8, но этого не происходит.
Более того, я нашел прям точное описание такого поведения в книге "OSPF and ISIS: Choosing an IGP for Large-Scale networks. Книга эта коммерческая, так что цитировать не возьмусь...
В моем случае ясно видно, что роутер не регенирирует полученные LSA Type 3 в другие зоны, если только они не получены или не отправляются в area0.
Как видно, О1 отправит Type1, О2 его получит и сгенерирует Type3 в area1, О5 получив такой LSA уже ничего не предпримет... Справедлива и обратная ситуация от О8 в сторону О1.
Можно открыть в отдельной вкладке крупнее |
А как будуте вести себя роутеры, если дизайн будет по книжке. Скажем, пришедшие LSA Type3 от О3 будут перегенирированный роутером О2 в area1. Безусловно.
Можно открыть в отдельной вкладке крупнее |
Что-то я опять закопался, чтобы исправить эту ситуацию, нужно настроить virtual-link, чтобы соединить далекую area4 с area0. Настраиваться такой линк будет между роутерами О2 и О5 через транзитную область area1. На роутере O2 мы должны связать нулевую зону с маршрутизатором О5.
root@O2# set protocols ospf area 0.0.0.0 virtual-link neighbor-id 10.0.10.5 transit-area 1
На О5 нужно применить симметричную конфигурацию
root@O5# set protocols ospf area 0.0.0.0 virtual-link neighbor-id 10.0.10.2 transit-area 1
Теперь видно, что у О2 появился новый сосед через новый интерфейс.
root@O2> show ospf neighbor
Address Interface State ID Pri Dead
...
10.10.1.2 vl-10.0.10.5 Full 10.0.10.5 0 34
...
Address Interface State ID Pri Dead
...
10.10.1.2 vl-10.0.10.5 Full 10.0.10.5 0 34
...
Да, выводы команд становятся все больше и больше, поэтому я позволю себе сокращать их, помещая на месте пропусков "...".
Что важней, у О5 появился выход в backbone зону
root@O5> show ospf overview
Instance: master
Router ID: 10.0.10.5
Route table index: 0
Area border router
LSA refresh time: 50 minutes
...
Instance: master
Router ID: 10.0.10.5
Route table index: 0
Area border router
LSA refresh time: 50 minutes
...
Area: 0.0.0.0
Stub type: Not Stub
Authentication Type: None
Area border routers: 3, AS boundary routers: 1
Neighbors
Up (in full state): 1
...
Stub type: Not Stub
Authentication Type: None
Area border routers: 3, AS boundary routers: 1
Neighbors
Up (in full state): 1
...
Ну и самое инетересное, что же поменялось на О8. Как видно ниже, О5 теперь пересылает все Network Summary LSA в сторону О8.
root@O8> show ospf database
OSPF database, Area 0.0.0.4
Type ID Adv Rtr Seq Age Opt Cksum Len
Router 10.0.10.5 10.0.10.5 0x8000001b 238 0x20 0x1d70 48
Router *10.0.10.8 10.0.10.8 0x80000019 87 0x20 0x55b 60
Summary 10.0.10.1 10.0.10.5 0x80000001 473 0x20 0x20d 28
Summary 10.0.10.2 10.0.10.5 0x80000001 473 0x20 0xed21 28
Summary 10.0.10.3 10.0.10.5 0x80000001 473 0x20 0xed1f 28
Summary 10.0.10.4 10.0.10.5 0x80000001 473 0x20 0xe328 28
Summary 10.0.10.5 10.0.10.5 0x80000017 1998 0x20 0x995d 28
Summary 10.0.10.6 10.0.10.5 0x80000001 473 0x20 0xd92f 28
Summary 10.0.10.7 10.0.10.5 0x80000001 473 0x20 0xcf38 28
Summary 10.10.0.0 10.0.10.5 0x80000002 473 0x20 0xff0f 28
Summary 10.10.1.0 10.0.10.5 0x80000017 1492 0x20 0xae4e 28
Summary 10.10.2.0 10.0.10.5 0x80000001 473 0x20 0xe32c 28
Summary 10.10.3.0 10.0.10.5 0x80000001 473 0x20 0xd836 28
OSPF database, Area 0.0.0.4
Type ID Adv Rtr Seq Age Opt Cksum Len
Router 10.0.10.5 10.0.10.5 0x8000001b 238 0x20 0x1d70 48
Router *10.0.10.8 10.0.10.8 0x80000019 87 0x20 0x55b 60
Summary 10.0.10.1 10.0.10.5 0x80000001 473 0x20 0x20d 28
Summary 10.0.10.2 10.0.10.5 0x80000001 473 0x20 0xed21 28
Summary 10.0.10.3 10.0.10.5 0x80000001 473 0x20 0xed1f 28
Summary 10.0.10.4 10.0.10.5 0x80000001 473 0x20 0xe328 28
Summary 10.0.10.5 10.0.10.5 0x80000017 1998 0x20 0x995d 28
Summary 10.0.10.6 10.0.10.5 0x80000001 473 0x20 0xd92f 28
Summary 10.0.10.7 10.0.10.5 0x80000001 473 0x20 0xcf38 28
Summary 10.10.0.0 10.0.10.5 0x80000002 473 0x20 0xff0f 28
Summary 10.10.1.0 10.0.10.5 0x80000017 1492 0x20 0xae4e 28
Summary 10.10.2.0 10.0.10.5 0x80000001 473 0x20 0xe32c 28
Summary 10.10.3.0 10.0.10.5 0x80000001 473 0x20 0xd836 28
Всю ситуацию можно изобразить примерно следующим образом. О2 как бы дотягивает area0 до О5.
DR/BDR
Пришло время нулевую зону сконфигурировать в соостветсвии с картинкой. Сейчас все работает по дефолту и роли DR/BDR назначаются динамически. Нам же нужен O1 в роли DR и O3 и роли BDR. Погнали.
Помним, что контролировать назначение ролей DR/BDR мы можем средствами приоритета. Сейчас приоритет у всех одинаковый и равен 128, поэтому роли назначаются по RouterID. Наивысший RouterID у O4, он и будет DRом. O3 - BDR. Но это зависит от порядка загрузки роутеров, что и было доказано ещё в начале лабы.
root@O1> show ospf interface extensive
Interface State Area DR ID BDR ID Nbrs
em2.0 DRother 0.0.0.0 10.0.10.4 10.0.10.3 3
Type: LAN, Address: 10.10.0.1, Mask: 255.255.255.0, MTU: 1986, Cost: 1
DR addr: 10.10.0.4, BDR addr: 10.10.0.3, Priority: 128
Adj count: 2
Hello: 10, Dead: 40, ReXmit: 5, Not Stub
Auth type: None
Protection type: None
Topology default (ID 0) -> Cost: 1
Также помним, что роль (Backup) Designated Router - свойство интерйейса, а не роутера вовсе. Поэтому настройку будет производить именно на интерфейсе. Для того чтобы сделать O1 Designated Router'ом, завышаем ему приоритет, скажем до 200. Обычно завышают до максимального значения, но мне такой подход не очень по душе.
root@O1# set protocols ospf area 0 interface em2.0 priority 200
Ну, а приоритеты O2 и O4 занизим, чтобы они не стали BDR роутерами.
root@O2# set protocols ospf area 0 interface em2.0 priority 50
root@O4# set protocols ospf area 0 interface em2.0 priority 50
Перевыборов не произойдет, мы должны "перетолкнуть" процесс OSPF на всех роутерах в этой области. Выполняем следующую команду.
clear ospf neighbor area 0
После рестарта смотрим "выхлоп" и убеждаемся в правильности конфигурации.
root@O1> show ospf neighbor area 0 detail
Address Interface State ID Pri Dead
10.10.0.4 em2.0 Full 10.0.10.4 50 32
Area 0.0.0.0, opt 0x52, DR 10.10.0.1, BDR 10.10.0.3
Up 00:01:51, adjacent 00:01:51
...
Теперь роутер О1 рассылает Network LSA.
root@O1> show ospf database advertising-router self
OSPF database, Area 0.0.0.0
Type ID Adv Rtr Seq Age Opt Cksum Len
Router *10.0.10.1 10.0.10.1 0x80000050 107 0x22 0xf32b 72
Network *10.10.0.1 10.0.10.1 0x8000000b 901 0x22 0xf8aa 40
Отлично.
Router ID
RouterID (RID) считается по определенным правилам
1. Берется сконфигурированный RouterID
2. Если нет - самый маленький сконфигурированный адрес на loopback'ах.
3. Нет loopback'ов - самый маленький сконфигурированный адрес на всех других интерфейсах.
Как у Cisco, только вот берется наименьший адрес, вместо наибольшего у Cisco.
Сейчас RID не настроен, но есть единсвтенный loopback. Он и выступает в роли RID. Меня такая ситуация в целом устраивает. Но на реальной сети лучше RID конфигурировать статически, потому как нет никакой гарантии, что не будет настроен второй, третий, четвертый loopback. Один из адресов на этих loopback'ах может стать новым RID.
Настроим на каждому роутере RID для порядка. По хорошему после этого нужно рестартануть OSPF процесс, но мы этого делать не будет, потому как текущие RID меня устраивают.
set routing-options router-id 10.0.10.X
Так-то надо было в самом начале его настроить. Показываю тут в своем блоге не Best Practises. )
Authentification
Давайте-ка настроим аутентификацию. Согласно схеме между О3 и О6 будет plaintext аутентификация. Стильный модный молодежный, но уже давно кракнутый MD5 между О2 и О5.
Начнем с MD5.
root@O2# set protocols ospf area 1 interface em3.0 authentication md5 1 key SuperSecretKey
Как видно, есть здесь key-id после md5. Дело в том, что для каждого ключа можно утсановить своё время валидности и, для увеличения секьюрности, периодически менять ключи.
После коммита соседство с О5 должно потеряться. Так оно и есть, на О5 больше нет соседа 10.0.10.2
root@O5> show ospf neighbor
Address Interface State ID Pri Dead
10.10.4.2 em3.0 Full 10.0.10.8 128 39
Address Interface State ID Pri Dead
10.10.4.2 em3.0 Full 10.0.10.8 128 39
Настроим и на О5 аутентификацию. Key-id, к слову, должен совпадать.
root@O5# set protocols ospf area 1 interface em2.0 authentication md5 1 key SuperSecretKey
Все поднялось обратно. Как видно, поломав аутентификацию, мы сломали не только соседство между О2 и О5, но и отрезали всю четвертую зону от сети. Ведь у нас был настроен virtual-link через транзитную первую зону, где O2 и O5 являются ABRаим. Так что с этим нужно быть аккуратнее в реальной жизни.
root@O5> show ospf neighbor
Address Interface State ID Pri Dead
10.10.1.1 em2.0 Full 10.0.10.2 128 36
10.10.4.2 em3.0 Full 10.0.10.8 128 36
10.10.1.1 vl-10.0.10.2 Full 10.0.10.2 0 38
Address Interface State ID Pri Dead
10.10.1.1 em2.0 Full 10.0.10.2 128 36
10.10.4.2 em3.0 Full 10.0.10.8 128 36
10.10.1.1 vl-10.0.10.2 Full 10.0.10.2 0 38
Теперь plaintext между O3 и О6.
root@O3# set protocols ospf area 2 interface em3.0 authentication simple-password SuperKey
root@O6# set protocols ospf area 2 interface em2.0 authentication simple-password SuperKey
root@O6# set protocols ospf area 2 interface em2.0 authentication simple-password SuperKey
Juniper использует термин simple-password вместо цисковского plain-text.
Соседство О6 и О3 снова в Full.
root@O6> show ospf neighbor detail
Address Interface State ID Pri Dead
10.10.2.1 em2.0 Full 10.0.10.3 128 33
Area 0.0.0.2, opt 0x50, DR 0.0.0.0, BDR 0.0.0.0
Up 02:34:40, adjacent 02:34:40
Соседство О6 и О3 снова в Full.
root@O6> show ospf neighbor detail
Address Interface State ID Pri Dead
10.10.2.1 em2.0 Full 10.0.10.3 128 33
Area 0.0.0.2, opt 0x50, DR 0.0.0.0, BDR 0.0.0.0
Up 02:34:40, adjacent 02:34:40
More networks
На картинке есть ещё подсети вида 10.11, которые пока не вовлечены в процесс. К сожалению, пойти протаренным путем с созданием лупбеков я не могу, потому что на vMX разрешено создание только одного unit0 под lo0. Ну ок, добавим второй адрес на lo0.0. RouterID ведь сконфигурирован статически. )
Для начала сконфигурим второй адрес на О1. Получилось как-то так
lo0 {
unit 0 {
family inet {
address 10.0.10.1/32;
address 10.11.0.1/16;
lo0 {
unit 0 {
family inet {
address 10.0.10.1/32;
address 10.11.0.1/16;
Теперь О1 передает информацию о подключенных сетях в Router LSA.
root@O1> show ospf database advertising-router self lsa-id 10.0.10.1 extensive
OSPF database, Area 0.0.0.0
Type ID Adv Rtr Seq Age Opt Cksum Len
Router *10.0.10.1 10.0.10.1 0x80000050 1541 0x22 0xf32b 72
bits 0x0, link count 4
id 10.10.0.1, data 10.10.0.1, Type Transit (2)
Topology count: 0, Default metric: 1
id 10.0.10.1, data 255.255.255.255, Type Stub (3)
Topology count: 0, Default metric: 0
id 10.11.0.1, data 255.255.255.255, Type Stub (3)
Topology count: 0, Default metric: 0
id 10.11.0.0, data 255.255.0.0, Type Stub (3)
Topology count: 0, Default metric: 0
Type ID Adv Rtr Seq Age Opt Cksum Len
Router *10.0.10.1 10.0.10.1 0x80000050 1541 0x22 0xf32b 72
bits 0x0, link count 4
id 10.10.0.1, data 10.10.0.1, Type Transit (2)
Topology count: 0, Default metric: 1
id 10.0.10.1, data 255.255.255.255, Type Stub (3)
Topology count: 0, Default metric: 0
id 10.11.0.1, data 255.255.255.255, Type Stub (3)
Topology count: 0, Default metric: 0
id 10.11.0.0, data 255.255.0.0, Type Stub (3)
Topology count: 0, Default metric: 0
Такой LSA доходит до О2, например, и тот добавляет эти маршруты в свою таблицу.
root@O2> show ospf route detail
Topology default Route Table:
Prefix Path Route NH Metric NextHop Nexthop
Type Type Type Interface Address/LSP
...
10.11.0.0/16 Intra Network IP 1 em2.0 10.10.0.1
area 0.0.0.0, origin 10.0.10.1, priority medium
10.11.0.1/32 Intra Network IP 1 em2.0 10.10.0.1
area 0.0.0.0, origin 10.0.10.1, priority medium
Topology default Route Table:
Prefix Path Route NH Metric NextHop Nexthop
Type Type Type Interface Address/LSP
...
10.11.0.0/16 Intra Network IP 1 em2.0 10.10.0.1
area 0.0.0.0, origin 10.0.10.1, priority medium
10.11.0.1/32 Intra Network IP 1 em2.0 10.10.0.1
area 0.0.0.0, origin 10.0.10.1, priority medium
Ну и генерирует в area1 Network Summary LSA. Ничего необычного.
root@O2> show ospf database advertising-router self area 1 netsummary
OSPF database, Area 0.0.0.1
Type ID Adv Rtr Seq Age Opt Cksum Len
...
Summary *10.11.0.0 10.0.10.2 0x80000001 2108 0x22 0xdf31 28
Summary *10.11.0.1 10.0.10.2 0x80000001 2108 0x22 0xd53a 28
OSPF database, Area 0.0.0.1
Type ID Adv Rtr Seq Age Opt Cksum Len
...
Summary *10.11.0.0 10.0.10.2 0x80000001 2108 0x22 0xdf31 28
Summary *10.11.0.1 10.0.10.2 0x80000001 2108 0x22 0xd53a 28
Интересно будет на О5, который, как видно ниже, получает данные об этих префиксах из двух зон, из нулевой (от О1) и первой (от О2). Так получилось, потому что О5 фактически соединен с нулевой зоной через виртуальный линк.
root@O5> show ospf database
OSPF database, Area 0.0.0.0
Type ID Adv Rtr Seq Age Opt Cksum Len
Router 10.0.10.1 10.0.10.1 0x80000050 2104 0x22 0xf32b 72
...
OSPF database, Area 0.0.0.1
Type ID Adv Rtr Seq Age Opt Cksum Len
...
Summary 10.11.0.0 10.0.10.2 0x80000001 2142 0x22 0xdf31 28
Summary 10.11.0.1 10.0.10.2 0x80000001 2142 0x22 0xd53a 28
...
OSPF database, Area 0.0.0.0
Type ID Adv Rtr Seq Age Opt Cksum Len
Router 10.0.10.1 10.0.10.1 0x80000050 2104 0x22 0xf32b 72
...
OSPF database, Area 0.0.0.1
Type ID Adv Rtr Seq Age Opt Cksum Len
...
Summary 10.11.0.0 10.0.10.2 0x80000001 2142 0x22 0xdf31 28
Summary 10.11.0.1 10.0.10.2 0x80000001 2142 0x22 0xd53a 28
...
Выбирает О5, к слову, префикс пришедший через виртуальный линк из area0...
root@O5> show ospf route
Topology default Route Table:
Prefix Path Route NH Metric NextHop Nexthop
Type Type Type Interface Address/LSP
...
10.11.0.0/16 Intra Network IP 2 em2.0 10.10.1.1
10.11.0.1/32 Intra Network IP 2 em2.0 10.10.1.1
Topology default Route Table:
Prefix Path Route NH Metric NextHop Nexthop
Type Type Type Interface Address/LSP
...
10.11.0.0/16 Intra Network IP 2 em2.0 10.10.1.1
10.11.0.1/32 Intra Network IP 2 em2.0 10.10.1.1
root@O5> show route extensive match-prefix 10.11.0.1/32
inet.0: 18 destinations, 18 routes (18 active, 0 holddown, 0 hidden)
10.11.0.1/32 (1 entry, 1 announced)
TSI:
KRT in-kernel 10.11.0.1/32 -> {10.10.1.1}
*OSPF Preference: 10
Next hop type: Router, Next hop index: 330
Address: 0x940fe68
Next-hop reference count: 22
Next hop: 10.10.1.1 via em2.0, selected
Session Id: 0x1
State: <Active Int>
Age: 50:36 Metric: 2
Validation State: unverified
Area: 0.0.0.0
Task: OSPF
Announcement bits (1): 0-KRT
AS path: I
Прикольно... Хотя next-hop, конечно же, 10.10.1.1. Это О2 - другой конец virtual-link'a.
inet.0: 18 destinations, 18 routes (18 active, 0 holddown, 0 hidden)
10.11.0.1/32 (1 entry, 1 announced)
TSI:
KRT in-kernel 10.11.0.1/32 -> {10.10.1.1}
*OSPF Preference: 10
Next hop type: Router, Next hop index: 330
Address: 0x940fe68
Next-hop reference count: 22
Next hop: 10.10.1.1 via em2.0, selected
Session Id: 0x1
State: <Active Int>
Age: 50:36 Metric: 2
Validation State: unverified
Area: 0.0.0.0
Task: OSPF
Announcement bits (1): 0-KRT
AS path: I
Прикольно... Хотя next-hop, конечно же, 10.10.1.1. Это О2 - другой конец virtual-link'a.
Как порядочный ABR, который имеет выход в нулевую зоны, О5 передает данные о 10.11.0.0 в четвертую область.
root@O5> show ospf database area 4 netsummary advertising-router self
OSPF database, Area 0.0.0.4
Type ID Adv Rtr Seq Age Opt Cksum Len
...
Summary *10.11.0.0 10.0.10.5 0x80000002 480 0x20 0xf31a 28
Summary *10.11.0.1 10.0.10.5 0x80000002 344 0x20 0xe923 28
OSPF database, Area 0.0.0.4
Type ID Adv Rtr Seq Age Opt Cksum Len
...
Summary *10.11.0.0 10.0.10.5 0x80000002 480 0x20 0xf31a 28
Summary *10.11.0.1 10.0.10.5 0x80000002 344 0x20 0xe923 28
А как там дела у О6, он же находится в Totally Stub Area, в которой никакие Network Summary не доходят.
root@O6> show ospf database
OSPF database, Area 0.0.0.2
Type ID Adv Rtr Seq Age Opt Cksum Len
Router 10.0.10.3 10.0.10.3 0x80000037 2567 0x20 0xacce 48
Router *10.0.10.6 10.0.10.6 0x80000037 1343 0x20 0x4c02 60
OSPF database, Area 0.0.0.2
Type ID Adv Rtr Seq Age Opt Cksum Len
Router 10.0.10.3 10.0.10.3 0x80000037 2567 0x20 0xacce 48
Router *10.0.10.6 10.0.10.6 0x80000037 1343 0x20 0x4c02 60
В итоге, О6 сейчас не может пинговать даже нулевую зону. А все потому что я забыл добавить дефолтный маршрут в эту область от О3... блин...
root@O3# set protocols ospf area 2 stub default-metric 2
Воо, так намного лучше.
root@O6> show ospf database
OSPF database, Area 0.0.0.2
Type ID Adv Rtr Seq Age Opt Cksum Len
Router 10.0.10.3 10.0.10.3 0x80000038 264 0x20 0xaacf 48
Router *10.0.10.6 10.0.10.6 0x80000037 2007 0x20 0x4c02 60
Summary 0.0.0.0 10.0.10.3 0x80000001 34 0x20 0x91d 28
OSPF database, Area 0.0.0.2
Type ID Adv Rtr Seq Age Opt Cksum Len
Router 10.0.10.3 10.0.10.3 0x80000038 264 0x20 0xaacf 48
Router *10.0.10.6 10.0.10.6 0x80000037 2007 0x20 0x4c02 60
Summary 0.0.0.0 10.0.10.3 0x80000001 34 0x20 0x91d 28
Опять отвлекся. Добавляем все префиксы с картинки в сеть.
В итоге, будет так.
root@O1> show ospf route | match /16
10.11.0.0/16 Intra Network IP 0 lo0.0
10.12.0.0/16 Intra Network IP 1 em2.0 10.10.0.2
10.13.0.0/16 Intra Network IP 1 em2.0 10.10.0.3
10.14.0.0/16 Intra Network IP 1 em2.0 10.10.0.4
10.15.0.0/16 Inter Network IP 2 em2.0 10.10.0.2
10.16.0.0/16 Inter Network IP 2 em2.0 10.10.0.3
10.17.0.0/16 Inter Network IP 2 em2.0 10.10.0.4
10.18.0.0/16 Inter Network IP 3 em2.0 10.10.0.2
root@O1> show ospf route | match /16
10.11.0.0/16 Intra Network IP 0 lo0.0
10.12.0.0/16 Intra Network IP 1 em2.0 10.10.0.2
10.13.0.0/16 Intra Network IP 1 em2.0 10.10.0.3
10.14.0.0/16 Intra Network IP 1 em2.0 10.10.0.4
10.15.0.0/16 Inter Network IP 2 em2.0 10.10.0.2
10.16.0.0/16 Inter Network IP 2 em2.0 10.10.0.3
10.17.0.0/16 Inter Network IP 2 em2.0 10.10.0.4
10.18.0.0/16 Inter Network IP 3 em2.0 10.10.0.2
ASBRs
Два роутера в нашей сети имеют выходы во "внешний мир". Речь идет о О1 и О7. С первым все довльно просто, а вот О7 находится у нас в NSSA зоне. Это stub зона, в которой может находится ASBR. О7 будет генерировать Type7 LSA, ну а ближайший ABR O4 будет конвертировать такой LSA в Type5.
Я ещё ничего не настраивал, но заметил важную особенность.
root@O2> show ospf database asbrsummary detail
OSPF database, Area 0.0.0.1
Type ID Adv Rtr Seq Age Opt Cksum Len
ASBRSum *10.0.10.4 10.0.10.2 0x8000004b 2033 0x22 0x2b97 28
mask 0.0.0.0
Topology default (ID 0) -> Metric: 1
Как видно, О2 генерирует Type 4 ASBR Summary LSA в первую область... Этот тип LSA который отправляется ABRом для того чтобы рассказать другим роутерам про ASBR на сети.
Почему так?
Ситуация примерно слудующая. Мы сконфигурировали NSSA, эти изменения увидели все роутеры в backbone зоне. Единственная причина конфигурировать NSSA - располагать ASBR в ней. Роутеры это понимают. Каждый ABR теперь должен передать в другие зоны знания о том, что за роутером 10.0.10.4 в area3 находится выход из OSPF домена (или автономной системы). В нашем случае, О1 не будет ничего отправлять, потому как у него нет выходов в другие области, О3 был бы рад передать, но ему нет смысла, в Tottaly Stub area такие LSA не передаются. А вот О2 есть куда отправить такой LSA, ведь у него есть самая обычная area1. Более подробное объяснение такого поведения можно прочитать в этом посте на packetlife.net.
Не могу не задать себе вопрос, а как О2 понимает, что О4 сконфигурировал NSSA на своем интерйесе? Блин, я так никогда лабу не закончу... Врубаем Promiscuous Mode на vSwitch'е, в который подключены роутеры area 0, врубаем в свитч специально обученую XPшку и расчехляем Wireshark.
Дело в том, что О7 после того как NSSA зона была сконфигурирована, отсылает специальный флаг E в своем Type1 LSA. Это видно на картинке ниже.
Более того, это видно даже в в консоли О7, но, к сожалению, не так очевидно. Мы видим, bits 0x2.
root@O7> show ospf database advertising-router self router detail
OSPF database, Area 0.0.0.3
Type ID Adv Rtr Seq Age Opt Cksum Len
Router *10.0.10.7 10.0.10.7 0x80000003 985 0x20 0x3de5 84
bits 0x2, link count 5
...
О4 тоже знает про NSSA, ведь на нем настроен линк в эту зону. Именно поэтому он тоже рассказывает своим соседям в нулевой зоне про то, что у него есть выход в другую AS.В том числе и роутеру О2. Как видно ниже, он говорит про то, что он является ABR и ASBR роутером. Последнее утверждение не совсем корректно, ну да ладно.
Полученый LSA видно в консоли О2 со всеми этимми флагами. bits 0x3.
root@O2> show ospf database area 0 router lsa-id 10.0.10.4 detail
OSPF database, Area 0.0.0.0
Type ID Adv Rtr Seq Age Opt Cksum Len
Router 10.0.10.4 10.0.10.4 0x80000006 161 0x22 0xd080 72
bits 0x3, link count 4
root@O2> show ospf database area 0 router lsa-id 10.0.10.4 detail
OSPF database, Area 0.0.0.0
Type ID Adv Rtr Seq Age Opt Cksum Len
Router 10.0.10.4 10.0.10.4 0x80000006 161 0x22 0xd080 72
bits 0x3, link count 4
О2, получив такой LSA, сгенерирует в первую область LSA Type 3. Но он также отправит LSA Type 4, чтобы рассказать про то, что выход из автономной системы находится за роутером О4. Это мы и видели чуть выше.
root@O2> show ospf database asbrsummary detail
OSPF database, Area 0.0.0.1
Type ID Adv Rtr Seq Age Opt Cksum Len
ASBRSum *10.0.10.4 10.0.10.2 0x8000004b 2033 0x22 0x2b97 28
Короче, каждый роутер в нулевой зоне стремиться рассказать другим зонам про своё знание о существовании потенциального ASBR на сети.
Пора уже добавить внешние маршруты. Понятно, что на О7 никаких коннектов к другим автономным сисетмам нет. Поэтому мы просто добавим пачку статических маршрутов и экспортируем их в OSPF. Попробуем так
root@O7# set routing-options static route 172.16.0.0/24 discard
...
...
root@O7# set routing-options static route 172.16.6.0/24 discard
Далее создаем полиси (вот где дейтвительно Juniper way...). Пока не будем заморачиваться и экспортнем все статические маршруты.
root@O7# set policy-options policy-statement 172.16_TO_OSPF from protocol static
root@O7# set policy-options policy-statement 172.16_TO_OSPF then accept
root@O7# set policy-options policy-statement 172.16_TO_OSPF then accept
Добавляем на экспорт в OSPF
root@O7# set protocols ospf export 172.16_TO_OSPF
Итак, O7 как и ожидалось отправил Type 7 NSSA External LSA.
root@O7> show ospf database nssa
OSPF database, Area 0.0.0.3
Type ID Adv Rtr Seq Age Opt Cksum Len
NSSA *172.16.0.0 10.0.10.7 0x80000001 759 0x28 0x8d2a 36
NSSA *172.16.1.0 10.0.10.7 0x80000001 759 0x28 0x8234 36
NSSA *172.16.2.0 10.0.10.7 0x80000001 759 0x28 0x773e 36
NSSA *172.16.3.0 10.0.10.7 0x80000001 759 0x28 0x6c48 36
NSSA *172.16.4.0 10.0.10.7 0x80000001 759 0x28 0x6152 36
NSSA *172.16.5.0 10.0.10.7 0x80000001 759 0x28 0x565c 36
NSSA *172.16.6.0 10.0.10.7 0x80000001 759 0x28 0x4b66 36
OSPF database, Area 0.0.0.3
Type ID Adv Rtr Seq Age Opt Cksum Len
NSSA *172.16.0.0 10.0.10.7 0x80000001 759 0x28 0x8d2a 36
NSSA *172.16.1.0 10.0.10.7 0x80000001 759 0x28 0x8234 36
NSSA *172.16.2.0 10.0.10.7 0x80000001 759 0x28 0x773e 36
NSSA *172.16.3.0 10.0.10.7 0x80000001 759 0x28 0x6c48 36
NSSA *172.16.4.0 10.0.10.7 0x80000001 759 0x28 0x6152 36
NSSA *172.16.5.0 10.0.10.7 0x80000001 759 0x28 0x565c 36
NSSA *172.16.6.0 10.0.10.7 0x80000001 759 0x28 0x4b66 36
О4 получив такую красоту из area3 переконвертировал их в обычный Type5 и отправил в area0
root@04> show ospf database area 0
OSPF database, Area 0.0.0.0
...
OSPF AS SCOPE link state database
Type ID Adv Rtr Seq Age Opt Cksum Len
Extern *172.16.0.0 10.0.10.4 0x80000001 1015 0x22 0x16ac 36
Extern *172.16.1.0 10.0.10.4 0x80000001 1015 0x22 0xbb6 36
Extern *172.16.2.0 10.0.10.4 0x80000001 1015 0x22 0xffc0 36
Extern *172.16.3.0 10.0.10.4 0x80000001 1015 0x22 0xf4ca 36
Extern *172.16.4.0 10.0.10.4 0x80000001 1015 0x22 0xe9d4 36
Extern *172.16.5.0 10.0.10.4 0x80000001 1015 0x22 0xdede 36
Extern *172.16.6.0 10.0.10.4 0x80000001 1015 0x22 0xd3e8 36
OSPF database, Area 0.0.0.0
...
OSPF AS SCOPE link state database
Type ID Adv Rtr Seq Age Opt Cksum Len
Extern *172.16.0.0 10.0.10.4 0x80000001 1015 0x22 0x16ac 36
Extern *172.16.1.0 10.0.10.4 0x80000001 1015 0x22 0xbb6 36
Extern *172.16.2.0 10.0.10.4 0x80000001 1015 0x22 0xffc0 36
Extern *172.16.3.0 10.0.10.4 0x80000001 1015 0x22 0xf4ca 36
Extern *172.16.4.0 10.0.10.4 0x80000001 1015 0x22 0xe9d4 36
Extern *172.16.5.0 10.0.10.4 0x80000001 1015 0x22 0xdede 36
Extern *172.16.6.0 10.0.10.4 0x80000001 1015 0x22 0xd3e8 36
Как я писал в предыдущем посте, Type 5 LSA передаются по всем зонам. Так, например, О2 получив от О4 внешние префиксы отправит их в area1 с тем же значением Advertised Router. Обратите внимание, ASBR Summary LSA все ещё не месте.
root@O2> show ospf database area 1
OSPF database, Area 0.0.0.1
Type ID Adv Rtr Seq Age Opt Cksum Len
...
ASBRSum *10.0.10.4 10.0.10.2 0x80000001 33 0x22 0xbf4d 28
OSPF AS SCOPE link state database
Type ID Adv Rtr Seq Age Opt Cksum Len
Extern 172.16.0.0 10.0.10.4 0x80000001 1141 0x22 0x16ac 36
Extern 172.16.1.0 10.0.10.4 0x80000001 1141 0x22 0xbb6 36
Extern 172.16.2.0 10.0.10.4 0x80000001 1141 0x22 0xffc0 36
Extern 172.16.3.0 10.0.10.4 0x80000001 1141 0x22 0xf4ca 36
Extern 172.16.4.0 10.0.10.4 0x80000001 1141 0x22 0xe9d4 36
Extern 172.16.5.0 10.0.10.4 0x80000001 1141 0x22 0xdede 36
Extern 172.16.6.0 10.0.10.4 0x80000001 1141 0x22 0xd3e8 36
OSPF database, Area 0.0.0.1
Type ID Adv Rtr Seq Age Opt Cksum Len
...
ASBRSum *10.0.10.4 10.0.10.2 0x80000001 33 0x22 0xbf4d 28
OSPF AS SCOPE link state database
Type ID Adv Rtr Seq Age Opt Cksum Len
Extern 172.16.0.0 10.0.10.4 0x80000001 1141 0x22 0x16ac 36
Extern 172.16.1.0 10.0.10.4 0x80000001 1141 0x22 0xbb6 36
Extern 172.16.2.0 10.0.10.4 0x80000001 1141 0x22 0xffc0 36
Extern 172.16.3.0 10.0.10.4 0x80000001 1141 0x22 0xf4ca 36
Extern 172.16.4.0 10.0.10.4 0x80000001 1141 0x22 0xe9d4 36
Extern 172.16.5.0 10.0.10.4 0x80000001 1141 0x22 0xdede 36
Extern 172.16.6.0 10.0.10.4 0x80000001 1141 0x22 0xd3e8 36
О8 не должен получить такие маршруты, потому как он находится в stub area. Собственно, так оно и есть.
root@O8> show ospf database
OSPF database, Area 0.0.0.4
Type ID Adv Rtr Seq Age Opt Cksum Len
Router 10.0.10.5 10.0.10.5 0x80000054 432 0x20 0xaaa9 48
Router *10.0.10.8 10.0.10.8 0x80000053 804 0x20 0x3993 84
Summary 10.0.10.1 10.0.10.5 0x80000001 33 0x20 0x20d 28
Summary 10.0.10.2 10.0.10.5 0x80000001 464 0x20 0xed21 28
Summary 10.0.10.5 10.0.10.5 0x80000051 2434 0x20 0x2597 28
Summary 10.10.0.0 10.0.10.5 0x80000001 33 0x20 0x20e 28
Summary 10.10.1.0 10.0.10.5 0x80000051 664 0x20 0x3a88 28
Summary 10.11.0.0 10.0.10.5 0x80000001 33 0x20 0xf519 28
Summary 10.11.0.1 10.0.10.5 0x80000001 33 0x20 0xeb22 28
Summary 10.12.0.0 10.0.10.5 0x80000001 464 0x20 0xdf2f 28
Summary 10.12.0.1 10.0.10.5 0x80000001 464 0x20 0xd538 28
Summary 10.15.0.0 10.0.10.5 0x8000001d 2302 0x20 0x7977 28
Summary 10.15.0.1 10.0.10.5 0x8000001d 2037 0x20 0x6f80 28
Ну про О6 и говорить не стоит, у него LSDB ещё скучней.
OSPF database, Area 0.0.0.4
Type ID Adv Rtr Seq Age Opt Cksum Len
Router 10.0.10.5 10.0.10.5 0x80000054 432 0x20 0xaaa9 48
Router *10.0.10.8 10.0.10.8 0x80000053 804 0x20 0x3993 84
Summary 10.0.10.1 10.0.10.5 0x80000001 33 0x20 0x20d 28
Summary 10.0.10.2 10.0.10.5 0x80000001 464 0x20 0xed21 28
Summary 10.0.10.5 10.0.10.5 0x80000051 2434 0x20 0x2597 28
Summary 10.10.0.0 10.0.10.5 0x80000001 33 0x20 0x20e 28
Summary 10.10.1.0 10.0.10.5 0x80000051 664 0x20 0x3a88 28
Summary 10.11.0.0 10.0.10.5 0x80000001 33 0x20 0xf519 28
Summary 10.11.0.1 10.0.10.5 0x80000001 33 0x20 0xeb22 28
Summary 10.12.0.0 10.0.10.5 0x80000001 464 0x20 0xdf2f 28
Summary 10.12.0.1 10.0.10.5 0x80000001 464 0x20 0xd538 28
Summary 10.15.0.0 10.0.10.5 0x8000001d 2302 0x20 0x7977 28
Summary 10.15.0.1 10.0.10.5 0x8000001d 2037 0x20 0x6f80 28
Ну про О6 и говорить не стоит, у него LSDB ещё скучней.
root@O6> show ospf database
OSPF database, Area 0.0.0.2
Type ID Adv Rtr Seq Age Opt Cksum Len
Router 10.0.10.3 10.0.10.3 0x8000005a 1356 0x20 0x66f1 48
Router *10.0.10.6 10.0.10.6 0x80000058 2301 0x20 0xe9ed 84
Summary 0.0.0.0 10.0.10.3 0x80000001 159 0x20 0x91d 28
OSPF database, Area 0.0.0.2
Type ID Adv Rtr Seq Age Opt Cksum Len
Router 10.0.10.3 10.0.10.3 0x8000005a 1356 0x20 0x66f1 48
Router *10.0.10.6 10.0.10.6 0x80000058 2301 0x20 0xe9ed 84
Summary 0.0.0.0 10.0.10.3 0x80000001 159 0x20 0x91d 28
Осталось настроить аналогичную редистрибуцию на О1.
root@O1# set routing-options static route 192.168.0.0/24 discard
...
root@O1# set routing-options static route 192.168.6.0/24 discard
root@O1# set policy-options policy-statement 192.168_TO_OSPF from protocol static
root@O1# set policy-options policy-statement 192.168_TO_OSPF then accept
root@O1# set policy-options policy-statement 192.168_TO_OSPF then accept
root@O1# set protocols ospf export 192.168_TO_OSPF
Как там на О5, например. В целом, все ожидаемо хорошо.
root@O5> show ospf database area 0
OSPF database, Area 0.0.0.0
...
OSPF AS SCOPE link state database
Type ID Adv Rtr Seq Age Opt Cksum Len
Extern 172.16.0.0 10.0.10.4 0x80000004 197 0x22 0x10af 36
Extern 172.16.1.0 10.0.10.4 0x80000004 79 0x22 0x5b9 36
Extern 172.16.2.0 10.0.10.4 0x80000003 1003 0x22 0xfbc2 36
Extern 172.16.3.0 10.0.10.4 0x80000003 1003 0x22 0xf0cc 36
Extern 172.16.4.0 10.0.10.4 0x80000003 1003 0x22 0xe5d6 36
Extern 172.16.5.0 10.0.10.4 0x80000003 1003 0x22 0xdae0 36
Extern 172.16.6.0 10.0.10.4 0x80000003 1003 0x22 0xcfea 36
Extern 192.168.0.0 10.0.10.1 0x80000001 111 0x22 0xa88b 36
Extern 192.168.1.0 10.0.10.1 0x80000001 111 0x22 0x9d95 36
Extern 192.168.2.0 10.0.10.1 0x80000001 111 0x22 0x929f 36
Extern 192.168.3.0 10.0.10.1 0x80000001 111 0x22 0x87a9 36
Extern 192.168.4.0 10.0.10.1 0x80000001 111 0x22 0x7cb3 36
Extern 192.168.5.0 10.0.10.1 0x80000001 111 0x22 0x71bd 36
Extern 192.168.6.0 10.0.10.1 0x80000001 111 0x22 0x66c7 36
OSPF database, Area 0.0.0.0
...
OSPF AS SCOPE link state database
Type ID Adv Rtr Seq Age Opt Cksum Len
Extern 172.16.0.0 10.0.10.4 0x80000004 197 0x22 0x10af 36
Extern 172.16.1.0 10.0.10.4 0x80000004 79 0x22 0x5b9 36
Extern 172.16.2.0 10.0.10.4 0x80000003 1003 0x22 0xfbc2 36
Extern 172.16.3.0 10.0.10.4 0x80000003 1003 0x22 0xf0cc 36
Extern 172.16.4.0 10.0.10.4 0x80000003 1003 0x22 0xe5d6 36
Extern 172.16.5.0 10.0.10.4 0x80000003 1003 0x22 0xdae0 36
Extern 172.16.6.0 10.0.10.4 0x80000003 1003 0x22 0xcfea 36
Extern 192.168.0.0 10.0.10.1 0x80000001 111 0x22 0xa88b 36
Extern 192.168.1.0 10.0.10.1 0x80000001 111 0x22 0x9d95 36
Extern 192.168.2.0 10.0.10.1 0x80000001 111 0x22 0x929f 36
Extern 192.168.3.0 10.0.10.1 0x80000001 111 0x22 0x87a9 36
Extern 192.168.4.0 10.0.10.1 0x80000001 111 0x22 0x7cb3 36
Extern 192.168.5.0 10.0.10.1 0x80000001 111 0x22 0x71bd 36
Extern 192.168.6.0 10.0.10.1 0x80000001 111 0x22 0x66c7 36
Я писал в прошлом посте, про то, что External LSA бывают двух типов
- Type 1 - к анонсируемой стоимости будут добавляться стоимости линков по пути,
- Type 2 - стоимость добавляться не будет.
В Juniper по умолчанию будет анонсироваться Type 2.
Если посмотреть метрику на О1, О2 и О5, то она будет одинаковой и равна нулю. Как видно, у Juniper ситуация с метрикой немного иная, нежели чем в Cisco. Об этом позже.
Type ID Adv Rtr Seq Age Opt Cksum Len
Type: 2, Metric: 0, Fwd addr: 0.0.0.0, Tag: 0.0.0.0
root@O2> show ospf database lsa-id 192.168.0.0 detail | match Type
Type ID Adv Rtr Seq Age Opt Cksum Len
Type: 2, Metric: 0, Fwd addr: 0.0.0.0, Tag: 0.0.0.0
Type ID Adv Rtr Seq Age Opt Cksum Len
Type: 2, Metric: 0, Fwd addr: 0.0.0.0, Tag: 0.0.0.0
root@O5> show ospf database lsa-id 192.168.0.0 detail | match Type
Type ID Adv Rtr Seq Age Opt Cksum Len
Type: 2, Metric: 0, Fwd addr: 0.0.0.0, Tag: 0.0.0.0
Type ID Adv Rtr Seq Age Opt Cksum Len
Type: 2, Metric: 0, Fwd addr: 0.0.0.0, Tag: 0.0.0.0
В таблицу маршрутизации будут внесены метрики из LSA. На О5, например, метрика в таблице машрутизации так и останется равной нулю.
root@O5> show ospf route extern network 192.168.0.0
Topology default Route Table:
Prefix Path Route NH Metric NextHop Nexthop
Type Type Type Interface Address/LSP
192.168.0.0/32 Ext2 Network IP 0 em2.0 10.10.1.1
Поменяем тип на первый и посмотрим что получиться. К слову, не так-то уж просто это сделать. В циске как-то проще, а вот в Juniper придется изменять policy-statement. Поменяем тип метрики и назначим значение 10 для примера.
policy-options {
policy-statement 192.168_TO_OSPF {
from protocol static;
then {
metric 10;
external {
type 1;
}
accept;
}
}
}
policy-statement 192.168_TO_OSPF {
from protocol static;
then {
metric 10;
external {
type 1;
}
accept;
}
}
}
Далее будем смотреть как поведет себя O2. Видно, что тип метрики сменился, а сама метрика передается от О1 равной 10.
root@O2> show ospf database lsa-id 192.168.0.0 detail
OSPF AS SCOPE link state database
Type ID Adv Rtr Seq Age Opt Cksum Len
Extern 192.168.0.0 10.0.10.1 0x80000004 2180 0x22 0x8324 36
mask 255.255.255.255
Topology default (ID 0)
Type: 1, Metric: 10, Fwd addr: 0.0.0.0, Tag: 0.0.0.0
В теории, О2 должен добавить свою стоимость до О1 и добавить такой маршрут в таблицу маршрутизации. Так и есть, О2 добавляет к 10 единицу и добавляет маршрут с метрикой 11 в свою таблиц маршрутизации.
root@O2> show ospf route extern network 192.168.0.0
Topology default Route Table:
Prefix Path Route NH Metric NextHop Nexthop
Type Type Type Interface Address/LSP
192.168.0.0/32 Ext1 Network IP 11 em2.0 10.10.0.1
root@O2> show ospf database lsa-id 192.168.0.0 detail
OSPF AS SCOPE link state database
Type ID Adv Rtr Seq Age Opt Cksum Len
Extern 192.168.0.0 10.0.10.1 0x80000004 2180 0x22 0x8324 36
mask 255.255.255.255
Topology default (ID 0)
Type: 1, Metric: 10, Fwd addr: 0.0.0.0, Tag: 0.0.0.0
В теории, О2 должен добавить свою стоимость до О1 и добавить такой маршрут в таблицу маршрутизации. Так и есть, О2 добавляет к 10 единицу и добавляет маршрут с метрикой 11 в свою таблиц маршрутизации.
root@O2> show ospf route extern network 192.168.0.0
Topology default Route Table:
Prefix Path Route NH Metric NextHop Nexthop
Type Type Type Interface Address/LSP
192.168.0.0/32 Ext1 Network IP 11 em2.0 10.10.0.1
Тоже самое произойдет и на О5, но метрика в таблице машрутизации уже будет равна 12.
root@O5> show ospf route extern network 192.168.0.0
Topology default Route Table:
Prefix Path Route NH Metric NextHop Nexthop
Type Type Type Interface Address/LSP
192.168.0.0/32 Ext1 Network IP 12 em2.0 10.10.1.1
Редистрибуцируем остальные сети на О1 с таким же первым типом, но метрику оставим по умолчанию. После чего на О5 увидим полный список экстернал маршрутов, 172ые префиксы приходят со вторым типом и устанавливаются в таблицу с первоначальной метрикой, 192ые маршруты приходят с первым типом и метрика калькулируется.
root@O5> show ospf route extern
Topology default Route Table:
Prefix Path Route NH Metric NextHop Nexthop
Type Type Type Interface Address/LSP
172.16.0.0/24 Ext2 Network IP 0 em2.0 10.10.1.1
172.16.1.0/24 Ext2 Network IP 0 em2.0 10.10.1.1
172.16.2.0/24 Ext2 Network IP 0 em2.0 10.10.1.1
172.16.3.0/24 Ext2 Network IP 0 em2.0 10.10.1.1
172.16.4.0/24 Ext2 Network IP 0 em2.0 10.10.1.1
172.16.5.0/24 Ext2 Network IP 0 em2.0 10.10.1.1
172.16.6.0/24 Ext2 Network IP 0 em2.0 10.10.1.1
192.168.0.0/32 Ext1 Network IP 2 em2.0 10.10.1.1
192.168.1.0/24 Ext1 Network IP 2 em2.0 10.10.1.1
192.168.2.0/24 Ext1 Network IP 2 em2.0 10.10.1.1
192.168.3.0/24 Ext1 Network IP 2 em2.0 10.10.1.1
192.168.4.0/24 Ext1 Network IP 2 em2.0 10.10.1.1
192.168.5.0/24 Ext1 Network IP 2 em2.0 10.10.1.1
192.168.6.0/24 Ext1 Network IP 2 em2.0 10.10.1.1
Default route
Из прошлой лабораторки перекочевал маршрут по умолчанию на О1. Давайте и его добавим в процесс. Настраивается добавляение дефолтного маршрута практически так же как и редистрибуция.
Сначала нужно создать этот самый маршрут на роутере. Это мы уже делали раньше. Но теперь мы будет использывать ключ no-install. Машруты с таким ключом не будут установлены в таблицу маршрутизации.
root@O1# set routing-options static route 0.0.0.0/0 discard no-install
Создаем полиси, куда так же добавляем маршрут по умолчанию. Но на этот раз добавляем фильтр, где указываем, что мы хотим пропускать только 0.0.0.0/0 и ничего больше.
root@O1# set policy-options policy-statement DEFAULT_ROUTE from protocol static
root@O1# set policy-options policy-statement DEFAULT_ROUTE from route-filter 0.0.0.0/0 exact
root@O1# set policy-options policy-statement DEFAULT_ROUTE then accept
Ну и крепим такую политику на OSPF процесс на экспорт. То есть, у нас таких политк уже две.
Одной политикой редистрибуцируются внешние маршруты, второй - дефолтный маршрут.
root@O1# set protocols ospf export DEFAULT_ROUTE
root@O1# set protocols ospf export DEFAULT_ROUTE
После чего О1 начнет анонсировать дефотлный маршрут в сеть как внешний маршрут со вторым типом.
root@O1> ...abase advertising-router self external lsa-id 0.0.0.0 detail
OSPF AS SCOPE link state database
Type ID Adv Rtr Seq Age Opt Cksum Len
Extern *0.0.0.0 10.0.10.1 0x80000002 51 0x22 0x5844 36
mask 0.0.0.0
Topology default (ID 0)
Type: 2, Metric: 0, Fwd addr: 0.0.0.0, Tag: 0.0.0.0
OSPF AS SCOPE link state database
Type ID Adv Rtr Seq Age Opt Cksum Len
Extern *0.0.0.0 10.0.10.1 0x80000002 51 0x22 0x5844 36
mask 0.0.0.0
Topology default (ID 0)
Type: 2, Metric: 0, Fwd addr: 0.0.0.0, Tag: 0.0.0.0
За весь пост, хоть раз нужно пустить трассировку... Трассернем гугл из дальней точки нашей сети. Как видно, маршрут по умолчанию пропагируется.
root@O8> traceroute 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 40 byte packets
1 10.10.4.1 (10.10.4.1) 0.319 ms 14.784 ms 7.026 ms
2 10.10.1.1 (10.10.1.1) 4.121 ms 77.541 ms 0.427 ms
3 10.10.0.1 (10.10.0.1) 50.893 ms 105.610 ms 25.262 ms
4 10.10.0.1 (10.10.0.1) 51.201 ms !H 11.853 ms !H 28.309 ms !H
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 40 byte packets
1 10.10.4.1 (10.10.4.1) 0.319 ms 14.784 ms 7.026 ms
2 10.10.1.1 (10.10.1.1) 4.121 ms 77.541 ms 0.427 ms
3 10.10.0.1 (10.10.0.1) 50.893 ms 105.610 ms 25.262 ms
4 10.10.0.1 (10.10.0.1) 51.201 ms !H 11.853 ms !H 28.309 ms !H
Summarization/Filtering
В общем и целом, картинка уже сооствесвтует действительности, но рассказ был бы не полным, если бы я не затронул темы суммаризации и фильтрации маршрутов. Тема довольно масштабна, как водится. Но мы коснемся её только вкратце.
Сначала про суммаризацию. Итак, в OSPFе можно настраивать суммаризацию на границах зон. Уже сейчас такая суммаризация настроена в сторону зон 4, 6 и 7. По факту, во вторую зону, например, все префиксы суммируются до 0.0.0.0/0. Но мы про другое.
Тут стоит опять немного отвлечься. Взглянул я на топологию, и понял, что для адекватного суммирования, надо было делать немного по другому. Но уже поздно, поэтому я добавлю ещё несколько подсетей на О8, чтобы потом их проссумировать.
root@O8# set interfaces lo0 unit 0 family inet address 10.19.0.1/16
Теперь взглянем на то, как видит сети О8, скажем, О1.
root@O1> show ospf database
OSPF database, Area 0.0.0.0
Type ID Adv Rtr Seq Age Opt Cksum Len
...
Summary 10.18.0.0 10.0.10.5 0x80000005 1334 0x22 0x7191 28
Summary 10.18.0.1 10.0.10.5 0x80000005 1188 0x22 0x679a 28
Summary 10.19.0.0 10.0.10.5 0x80000001 31 0x22 0x6d98 28
Summary 10.19.0.1 10.0.10.5 0x80000001 31 0x22 0x63a1 28
OSPF database, Area 0.0.0.0
Type ID Adv Rtr Seq Age Opt Cksum Len
...
Summary 10.18.0.0 10.0.10.5 0x80000005 1334 0x22 0x7191 28
Summary 10.18.0.1 10.0.10.5 0x80000005 1188 0x22 0x679a 28
Summary 10.19.0.0 10.0.10.5 0x80000001 31 0x22 0x6d98 28
Summary 10.19.0.1 10.0.10.5 0x80000001 31 0x22 0x63a1 28
А надо ли О1 знать про то, что 10.18.0.0/16 и 10.19.0.0/16 "сидят" за О5. Конечно нет. Гораздо эффективнее было бы ссумировать эти два префикса до 10.18.0.0/15. Это и сделаем на О5. Помним, что О5 по факту имеет выход к первой зоне через виртуальный линк.
protocols {
ospf {
...
}
area 0.0.0.0 {
virtual-link neighbor-id 10.0.10.2 transit-area 0.0.0.1;
}
}
}
ospf {
...
}
area 0.0.0.0 {
virtual-link neighbor-id 10.0.10.2 transit-area 0.0.0.1;
}
}
}
Указываем, что в area 4 находятся адреса, которые можно проссумировать до 10.18.0.0/15.
Я сначала некоторое время букосвал и пытался дать такую команду в area 0, но это был неверный подход.
root@O5# set protocols ospf area 4 area-range 10.18.0.0/15
О1 перестал видеть 4 LSA. Вместо них одна красивая проссумированная LSA с маской 255.254.0.0.
root@O1> show ospf database lsa-id 10.18.0.0 detail
OSPF database, Area 0.0.0.0
Type ID Adv Rtr Seq Age Opt Cksum Len
Summary 10.18.0.0 10.0.10.5 0x80000008 433 0x22 0x6799 28
mask 255.254.0.0
Topology default (ID 0) -> Metric: 1
OSPF database, Area 0.0.0.0
Type ID Adv Rtr Seq Age Opt Cksum Len
Summary 10.18.0.0 10.0.10.5 0x80000008 433 0x22 0x6799 28
mask 255.254.0.0
Topology default (ID 0) -> Metric: 1
Ок. Теперь займемся внешними маршрутами. Зачем, скажем, всей сети знать про 7 префиксов 172.16.
root@O1> show ospf database external
OSPF AS SCOPE link state database
Type ID Adv Rtr Seq Age Opt Cksum Len
...
Extern 172.16.0.0 10.0.10.4 0x80000006 1018 0x22 0xcb1 36
Extern 172.16.1.0 10.0.10.4 0x80000006 942 0x22 0x1bb 36
Extern 172.16.2.0 10.0.10.4 0x80000006 866 0x22 0xf5c5 36
Extern 172.16.3.0 10.0.10.4 0x80000006 791 0x22 0xeacf 36
Extern 172.16.4.0 10.0.10.4 0x80000006 715 0x22 0xdfd9 36
Extern 172.16.5.0 10.0.10.4 0x80000006 639 0x22 0xd4e3 36
Extern 172.16.6.0 10.0.10.4 0x80000006 563 0x22 0xc9ed 36
...
OSPF AS SCOPE link state database
Type ID Adv Rtr Seq Age Opt Cksum Len
...
Extern 172.16.0.0 10.0.10.4 0x80000006 1018 0x22 0xcb1 36
Extern 172.16.1.0 10.0.10.4 0x80000006 942 0x22 0x1bb 36
Extern 172.16.2.0 10.0.10.4 0x80000006 866 0x22 0xf5c5 36
Extern 172.16.3.0 10.0.10.4 0x80000006 791 0x22 0xeacf 36
Extern 172.16.4.0 10.0.10.4 0x80000006 715 0x22 0xdfd9 36
Extern 172.16.5.0 10.0.10.4 0x80000006 639 0x22 0xd4e3 36
Extern 172.16.6.0 10.0.10.4 0x80000006 563 0x22 0xc9ed 36
...
Ведь достаточно только знать кому отправлять трафик для их достижения. Как насчет суммаризации и здесь. Суммирование external машрутов немного сложнее. Нужно настроить полиси (surprise!) на О7.
Проссумировать все маршруты на О7 довольно просто. Давайте усложним задачу.
Например, добавим ещё пачку статических маршрутов.
root@O7# set routing-options static route 100.0.0.0/16 discard
root@O7# set routing-options static route 100.1.0.0/16 discard
root@O7# set routing-options static route 100.2.0.0/16 discard
root@O7# set routing-options static route 100.3.0.0/16 discard
Они автоматом проэкспортируются в OSPF процесс. На подопытном О1 их видно.
root@O1> show ospf database external
OSPF AS SCOPE link state database
Type ID Adv Rtr Seq Age Opt Cksum Len
...
Extern 100.0.0.0 10.0.10.4 0x80000001 187 0x22 0x8298 36
Extern 100.1.0.0 10.0.10.4 0x80000001 187 0x22 0x76a3 36
Extern 100.2.0.0 10.0.10.4 0x80000001 187 0x22 0x6aae 36
Extern 100.3.0.0 10.0.10.4 0x80000001 187 0x22 0x5eb9 36
Extern 172.16.0.0 10.0.10.4 0x80000002 1827 0x22 0x14ad 36
Extern 172.16.1.0 10.0.10.4 0x80000005 2057 0x22 0x3ba 36
Extern 172.16.2.0 10.0.10.4 0x80000005 1903 0x22 0xf7c4 36
Extern 172.16.3.0 10.0.10.4 0x80000005 1750 0x22 0xecce 36
Extern 172.16.4.0 10.0.10.4 0x80000005 1673 0x22 0xe1d8 36
Extern 172.16.5.0 10.0.10.4 0x80000005 1596 0x22 0xd6e2 36
Extern 172.16.6.0 10.0.10.4 0x80000005 1519 0x22 0xcbec 36
Extern 172.16.7.0 10.0.10.4 0x80000002 1980 0x22 0xc6f3 36
...
Ок. Мы хотим проссумировать все 172.16. префиксы до 172.16.0.0/21 и оставить как есть все 100ые префиксы.
Первое. Создаем aggregate route.
Например, добавим ещё пачку статических маршрутов.
root@O7# set routing-options static route 100.0.0.0/16 discard
root@O7# set routing-options static route 100.1.0.0/16 discard
root@O7# set routing-options static route 100.2.0.0/16 discard
root@O7# set routing-options static route 100.3.0.0/16 discard
Они автоматом проэкспортируются в OSPF процесс. На подопытном О1 их видно.
root@O1> show ospf database external
OSPF AS SCOPE link state database
Type ID Adv Rtr Seq Age Opt Cksum Len
...
Extern 100.0.0.0 10.0.10.4 0x80000001 187 0x22 0x8298 36
Extern 100.1.0.0 10.0.10.4 0x80000001 187 0x22 0x76a3 36
Extern 100.2.0.0 10.0.10.4 0x80000001 187 0x22 0x6aae 36
Extern 100.3.0.0 10.0.10.4 0x80000001 187 0x22 0x5eb9 36
Extern 172.16.0.0 10.0.10.4 0x80000002 1827 0x22 0x14ad 36
Extern 172.16.1.0 10.0.10.4 0x80000005 2057 0x22 0x3ba 36
Extern 172.16.2.0 10.0.10.4 0x80000005 1903 0x22 0xf7c4 36
Extern 172.16.3.0 10.0.10.4 0x80000005 1750 0x22 0xecce 36
Extern 172.16.4.0 10.0.10.4 0x80000005 1673 0x22 0xe1d8 36
Extern 172.16.5.0 10.0.10.4 0x80000005 1596 0x22 0xd6e2 36
Extern 172.16.6.0 10.0.10.4 0x80000005 1519 0x22 0xcbec 36
Extern 172.16.7.0 10.0.10.4 0x80000002 1980 0x22 0xc6f3 36
...
Ок. Мы хотим проссумировать все 172.16. префиксы до 172.16.0.0/21 и оставить как есть все 100ые префиксы.
Первое. Создаем aggregate route.
root@O7# set routing-options aggregate route 172.16.0.0/21
Далее создаю Policy Statement. Однако тут надо ввести ещё один уровень иерархии. Сейчас пропишем наш полиси в первом term'e.
root@O7# set policy-options policy-statement EXTERNAL_SUMMARY term AGGR_TO_OSPF to protocol ospf
root@O7# set policy-options policy-statement EXTERNAL_SUMMARY term AGGR_TO_OSPF then accept
root@O7# set policy-options policy-statement EXTERNAL_SUMMARY term AGGR_TO_OSPF then accept
В конфиге это выглядит следующим образом
policy-options {
policy-statement EXTERNAL_SUMMARY {
term AGGR_TO_OSPF {
to protocol ospf;
then accept;
}
}
}
Применяем, смотрим со стороны О1.
root@O7# set protocols ospf export EXTERNAL_SUMMARY
root@O1> show ospf database external
OSPF AS SCOPE link state database
Type ID Adv Rtr Seq Age Opt Cksum Len
...
Extern 100.0.0.0 10.0.10.4 0x80000001 417 0x22 0x8298 36
Extern 100.1.0.0 10.0.10.4 0x80000001 417 0x22 0x76a3 36
Extern 100.2.0.0 10.0.10.4 0x80000001 417 0x22 0x6aae 36
Extern 100.3.0.0 10.0.10.4 0x80000001 417 0x22 0x5eb9 36
Extern 172.16.0.0 10.0.10.4 0x80000002 2057 0x22 0x14ad 36
Extern 172.16.1.0 10.0.10.4 0x80000005 2287 0x22 0x3ba 36
Extern 172.16.2.0 10.0.10.4 0x80000005 2133 0x22 0xf7c4 36
Extern 172.16.3.0 10.0.10.4 0x80000005 1980 0x22 0xecce 36
Extern 172.16.4.0 10.0.10.4 0x80000005 1903 0x22 0xe1d8 36
Extern 172.16.5.0 10.0.10.4 0x80000005 1826 0x22 0xd6e2 36
Extern 172.16.6.0 10.0.10.4 0x80000005 1749 0x22 0xcbec 36
Extern 172.16.7.0 10.0.10.4 0x80000002 2210 0x22 0xc6f3 36
Extern 172.16.7.255 10.0.10.4 0x80000001 5 0x22 0xa51d 36
...
OSPF AS SCOPE link state database
Type ID Adv Rtr Seq Age Opt Cksum Len
...
Extern 100.0.0.0 10.0.10.4 0x80000001 417 0x22 0x8298 36
Extern 100.1.0.0 10.0.10.4 0x80000001 417 0x22 0x76a3 36
Extern 100.2.0.0 10.0.10.4 0x80000001 417 0x22 0x6aae 36
Extern 100.3.0.0 10.0.10.4 0x80000001 417 0x22 0x5eb9 36
Extern 172.16.0.0 10.0.10.4 0x80000002 2057 0x22 0x14ad 36
Extern 172.16.1.0 10.0.10.4 0x80000005 2287 0x22 0x3ba 36
Extern 172.16.2.0 10.0.10.4 0x80000005 2133 0x22 0xf7c4 36
Extern 172.16.3.0 10.0.10.4 0x80000005 1980 0x22 0xecce 36
Extern 172.16.4.0 10.0.10.4 0x80000005 1903 0x22 0xe1d8 36
Extern 172.16.5.0 10.0.10.4 0x80000005 1826 0x22 0xd6e2 36
Extern 172.16.6.0 10.0.10.4 0x80000005 1749 0x22 0xcbec 36
Extern 172.16.7.0 10.0.10.4 0x80000002 2210 0x22 0xc6f3 36
Extern 172.16.7.255 10.0.10.4 0x80000001 5 0x22 0xa51d 36
...
root@O1> show ospf database external lsa-id 172.16.7.255 detail
OSPF AS SCOPE link state database
Type ID Adv Rtr Seq Age Opt Cksum Len
Extern 172.16.7.255 10.0.10.4 0x80000001 176 0x22 0xa51d 36
mask 255.255.248.0
Topology default (ID 0)
Type: 2, Metric: 0, Fwd addr: 10.0.10.7, Tag: 0.0.0.0
OSPF AS SCOPE link state database
Type ID Adv Rtr Seq Age Opt Cksum Len
Extern 172.16.7.255 10.0.10.4 0x80000001 176 0x22 0xa51d 36
mask 255.255.248.0
Topology default (ID 0)
Type: 2, Metric: 0, Fwd addr: 10.0.10.7, Tag: 0.0.0.0
Видно, что ссумировать получилось. Только вот и другие префиксы, коорые входят в суммарный, тоже приходят. Именно по этой причине, нужно дописать ещё один терм в полиси и отфильтровать их.
Для начала нужно создать prefix-list, в котором описать те префиксы, которые мы будем обрабатывать.
root@O7# set policy-options prefix-list DROP_UNSUMMARY 172.16.0.0/24
...
root@O7# set policy-options prefix-list DROP_UNSUMMARY 172.16.6.0/24
policy-options {
prefix-list DROP_UNSUMMARY {
172.16.0.0/24;
172.16.1.0/24;
172.16.2.0/24;
172.16.3.0/24;
172.16.4.0/24;
172.16.5.0/24;
172.16.6.0/24;
172.16.7.0/24;
}
prefix-list DROP_UNSUMMARY {
172.16.0.0/24;
172.16.1.0/24;
172.16.2.0/24;
172.16.3.0/24;
172.16.4.0/24;
172.16.5.0/24;
172.16.6.0/24;
172.16.7.0/24;
}
Затем создаем ещё одинм term в уже созданном policy-statement EXTERNAL_SUMMARY
root@O7# set policy-options policy-statement EXTERNAL_SUMMARY term DROP_UNSUM from prefix-list DROP_UNSUMMARY
root@O7# set policy-options policy-statement EXTERNAL_SUMMARY term DROP_UNSUM then reject
Смотрим на итоговый policy-statement.
policy-statement EXTERNAL_SUMMARY {
term AGGR_TO_OSPF {
to protocol ospf;
then accept;
}
term DROP_UNSUM {
from {
prefix-list DROP_UNSUMMARY;
}
then reject;
}
Выглядит неплохо, однако в таком случае, ситуация не поменяется. Сработает первое правило, до второго дело просто не дойдет. Меняем порядок правил.
root@O7# insert policy-options policy-statement EXTERNAL_SUMMARY term DROP_UNSUM before term AGGR_TO_OSPF
Проверяем на О1.
Ничего не поменялось... Если кратко, то мы двумя разными политиками инжектим сначала /24 роуты, а потом ещё и суммарный.
protocols {
ospf {
export [ 172.16_TO_OSPF EXTERNAL_SUMMARY ];
area 0.0.0.3 {
nssa;
interface em2.0 {
interface-type p2p;
}
interface lo0.0;
}
}
}
Уберем 172.16_TO_OSPF с экспорта и все должно стать хорошо.
root@O7# delete protocols ospf export 172.16_TO_OSPF
root@O1> show ospf database external
OSPF AS SCOPE link state database
Type ID Adv Rtr Seq Age Opt Cksum Len
...
Extern 100.0.0.0 10.0.10.4 0x80000001 1435 0x22 0x8298 36
Extern 100.1.0.0 10.0.10.4 0x80000001 1435 0x22 0x76a3 36
Extern 100.2.0.0 10.0.10.4 0x80000001 1435 0x22 0x6aae 36
Extern 100.3.0.0 10.0.10.4 0x80000001 1435 0x22 0x5eb9 36
Extern 172.16.0.0 10.0.10.4 0x80000003 386 0x22 0xc4f4 36
...
root@O1> show ospf database external lsa-id 172.16.0.0 detail
OSPF AS SCOPE link state database
Type ID Adv Rtr Seq Age Opt Cksum Len
Extern 172.16.0.0 10.0.10.4 0x80000003 500 0x22 0xeed8 36
mask 255.255.248.0
Topology default (ID 0)
Type: 2, Metric: 0, Fwd addr: 10.0.10.7, Tag: 0.0.0.0
Про то как обрабатываются полиси у Juniper написано здесь, здесь и здесь.
Производить манипуляции будем на О1. Смотрим, как чейчас выглядит информация по маршрутам. Видно, что добраться до соседа по области стоит 1 "попугай".
root@O1> show ospf route 10.0.10.2
Topology default Route Table:
Prefix Path Route NH Metric NextHop Nexthop
Type Type Type Interface Address/LSP
10.0.10.2 Intra Area BR IP 1 em2.0 10.10.0.2
10.0.10.2/32 Intra Network IP 1 em2.0 10.10.0.2
Видно также что О2 передает метрику равной нулю, а О2 добавялет к ней единицу. Получается такой hop-count принцип.
root@O1> show ospf database lsa-id 10.0.10.2 router detail
OSPF database, Area 0.0.0.0
Type ID Adv Rtr Seq Age Opt Cksum Len
Router 10.0.10.2 10.0.10.2 0x80000019 778 0x22 0xd03d 84
bits 0x1, link count 5
...
id 10.0.10.2, data 255.255.255.255, Type Stub (3)
Topology count: 0, Default metric: 0
Устанавливаем reference-bandwith в 100G.
root@O1# set protocols ospf reference-bandwidth 100g
О2 все так же шлет нам нолик, на нем же reference-bandwidth не настроен. Но вот О1 ведет себя уже по другому. Когда он запускает SPF алгоритм, он смотрит на bandwidth на порту в сторону О2 и видит там 1000mbps.
root@O1> show interfaces em2 | match speed
Type: Ethernet, Link-level type: Ethernet, MTU: 2000, Speed: 1000mbps
Далее он калькулирует метрику по простой формуле reference-bandwidth/configured-bandwidth. В нашем случае 100G/1G = 100. Проверяем.
root@O1> show ospf route 10.0.10.2
Topology default Route Table:
Prefix Path Route NH Metric NextHop Nexthop
Type Type Type Interface Address/LSP
10.0.10.2 Intra Area BR IP 100 em2.0 10.10.0.2
10.0.10.2/32 Intra Network IP 100 em2.0 10.10.0.2
Пожалуй, здесь стоит закончить этот пост. Конечно, многое осталось за кадром. Пишу это в каждом своем посте, но как иначе?..
Получилось довольно хардкорно и не очень ориентировано на читателя. В посте много текста и вывода и не так уж много картинок. К сожелению, часто просто не хватает времени даже толком вычитать текст, не говоря уж про рисование картинок.
Честно говоря, подумываю о том, что может быть проще делать видео по таким вот лабам. Не уверен правда, что их будет интересно смотреть... К тому же, движок явно начинает подглючивать при таком обилии текста и форматирвоания.
Ну что ж, в этом посте я хотел настроить OSPF с нуля и описать каждый сущесвтенный шаг. Думаю, задачу можно считать выполненной.
Если у вас есть мысли по поводу статьи, можно оставлять их в комментариях.
Хочу поблагодарить тех, кто дочитал до конца. )
root@O7# set policy-options policy-statement EXTERNAL_SUMMARY term DROP_UNSUM then reject
Смотрим на итоговый policy-statement.
policy-statement EXTERNAL_SUMMARY {
term AGGR_TO_OSPF {
to protocol ospf;
then accept;
}
term DROP_UNSUM {
from {
prefix-list DROP_UNSUMMARY;
}
then reject;
}
Выглядит неплохо, однако в таком случае, ситуация не поменяется. Сработает первое правило, до второго дело просто не дойдет. Меняем порядок правил.
root@O7# insert policy-options policy-statement EXTERNAL_SUMMARY term DROP_UNSUM before term AGGR_TO_OSPF
Проверяем на О1.
root@O1> show ospf database external
OSPF AS SCOPE link state database
Type ID Adv Rtr Seq Age Opt Cksum Len
...
Extern 100.0.0.0 10.0.10.4 0x80000001 885 0x22 0x8298 36
Extern 100.1.0.0 10.0.10.4 0x80000001 885 0x22 0x76a3 36
Extern 100.2.0.0 10.0.10.4 0x80000001 885 0x22 0x6aae 36
Extern 100.3.0.0 10.0.10.4 0x80000001 885 0x22 0x5eb9 36
Extern 172.16.0.0 10.0.10.4 0x80000002 2525 0x22 0x14ad 36
Extern 172.16.1.0 10.0.10.4 0x80000005 2755 0x22 0x3ba 36
Extern 172.16.2.0 10.0.10.4 0x80000005 2601 0x22 0xf7c4 36
Extern 172.16.3.0 10.0.10.4 0x80000005 2448 0x22 0xecce 36
Extern 172.16.4.0 10.0.10.4 0x80000005 2371 0x22 0xe1d8 36
Extern 172.16.5.0 10.0.10.4 0x80000005 2294 0x22 0xd6e2 36
Extern 172.16.6.0 10.0.10.4 0x80000005 2217 0x22 0xcbec 36
Extern 172.16.7.0 10.0.10.4 0x80000002 2678 0x22 0xc6f3 36
Extern 172.16.7.255 10.0.10.4 0x80000001 473 0x22 0xa51d 36
...
OSPF AS SCOPE link state database
Type ID Adv Rtr Seq Age Opt Cksum Len
...
Extern 100.0.0.0 10.0.10.4 0x80000001 885 0x22 0x8298 36
Extern 100.1.0.0 10.0.10.4 0x80000001 885 0x22 0x76a3 36
Extern 100.2.0.0 10.0.10.4 0x80000001 885 0x22 0x6aae 36
Extern 100.3.0.0 10.0.10.4 0x80000001 885 0x22 0x5eb9 36
Extern 172.16.0.0 10.0.10.4 0x80000002 2525 0x22 0x14ad 36
Extern 172.16.1.0 10.0.10.4 0x80000005 2755 0x22 0x3ba 36
Extern 172.16.2.0 10.0.10.4 0x80000005 2601 0x22 0xf7c4 36
Extern 172.16.3.0 10.0.10.4 0x80000005 2448 0x22 0xecce 36
Extern 172.16.4.0 10.0.10.4 0x80000005 2371 0x22 0xe1d8 36
Extern 172.16.5.0 10.0.10.4 0x80000005 2294 0x22 0xd6e2 36
Extern 172.16.6.0 10.0.10.4 0x80000005 2217 0x22 0xcbec 36
Extern 172.16.7.0 10.0.10.4 0x80000002 2678 0x22 0xc6f3 36
Extern 172.16.7.255 10.0.10.4 0x80000001 473 0x22 0xa51d 36
...
Ничего не поменялось... Если кратко, то мы двумя разными политиками инжектим сначала /24 роуты, а потом ещё и суммарный.
protocols {
ospf {
export [ 172.16_TO_OSPF EXTERNAL_SUMMARY ];
area 0.0.0.3 {
nssa;
interface em2.0 {
interface-type p2p;
}
interface lo0.0;
}
}
}
Уберем 172.16_TO_OSPF с экспорта и все должно стать хорошо.
root@O7# delete protocols ospf export 172.16_TO_OSPF
root@O1> show ospf database external
OSPF AS SCOPE link state database
Type ID Adv Rtr Seq Age Opt Cksum Len
...
Extern 100.0.0.0 10.0.10.4 0x80000001 1435 0x22 0x8298 36
Extern 100.1.0.0 10.0.10.4 0x80000001 1435 0x22 0x76a3 36
Extern 100.2.0.0 10.0.10.4 0x80000001 1435 0x22 0x6aae 36
Extern 100.3.0.0 10.0.10.4 0x80000001 1435 0x22 0x5eb9 36
Extern 172.16.0.0 10.0.10.4 0x80000003 386 0x22 0xc4f4 36
...
root@O1> show ospf database external lsa-id 172.16.0.0 detail
OSPF AS SCOPE link state database
Type ID Adv Rtr Seq Age Opt Cksum Len
Extern 172.16.0.0 10.0.10.4 0x80000003 500 0x22 0xeed8 36
mask 255.255.248.0
Topology default (ID 0)
Type: 2, Metric: 0, Fwd addr: 10.0.10.7, Tag: 0.0.0.0
Про то как обрабатываются полиси у Juniper написано здесь, здесь и здесь.
Metric (cost)
Во всех примерах видно, что Juniper использует несколько другой подход к расчету стоимости, и он отличается от Cisco.
По дефолту в Juniper:
Metric = 0 ставится на все looppack интерфейсы
Metric = 1 имею все интерфейсы, быстрее чем 100Mbps.
Все верно, в таком случае, все интерфейсы от 100 и выше получат одинаковую метрику. 100G и 1G будут иметь одинаковую метрику. Получается прям как IS-IS.
В некоторых ситуациях это недопустимо. Выхода два:
1. Назначать метрики руками
2. Указать reference-bandwidth, что включит похожее на Cisco поведение.
Второй вариант интереснее, его и включим. Будем смотреть в лицо 100G реальности и укажем reference-bandwith равный 100g. Таким образом,получим примерно следующую картину по Metric'ам.
100G - 1
40G - 3 (округляется до большего от 2,5)
10G - 10
1G - 100
100M - 1000
10M - 10000
100G - 1
40G - 3 (округляется до большего от 2,5)
10G - 10
1G - 100
100M - 1000
10M - 10000
Производить манипуляции будем на О1. Смотрим, как чейчас выглядит информация по маршрутам. Видно, что добраться до соседа по области стоит 1 "попугай".
root@O1> show ospf route 10.0.10.2
Topology default Route Table:
Prefix Path Route NH Metric NextHop Nexthop
Type Type Type Interface Address/LSP
10.0.10.2 Intra Area BR IP 1 em2.0 10.10.0.2
10.0.10.2/32 Intra Network IP 1 em2.0 10.10.0.2
Видно также что О2 передает метрику равной нулю, а О2 добавялет к ней единицу. Получается такой hop-count принцип.
root@O1> show ospf database lsa-id 10.0.10.2 router detail
OSPF database, Area 0.0.0.0
Type ID Adv Rtr Seq Age Opt Cksum Len
Router 10.0.10.2 10.0.10.2 0x80000019 778 0x22 0xd03d 84
bits 0x1, link count 5
...
id 10.0.10.2, data 255.255.255.255, Type Stub (3)
Topology count: 0, Default metric: 0
Устанавливаем reference-bandwith в 100G.
root@O1# set protocols ospf reference-bandwidth 100g
О2 все так же шлет нам нолик, на нем же reference-bandwidth не настроен. Но вот О1 ведет себя уже по другому. Когда он запускает SPF алгоритм, он смотрит на bandwidth на порту в сторону О2 и видит там 1000mbps.
root@O1> show interfaces em2 | match speed
Type: Ethernet, Link-level type: Ethernet, MTU: 2000, Speed: 1000mbps
Далее он калькулирует метрику по простой формуле reference-bandwidth/configured-bandwidth. В нашем случае 100G/1G = 100. Проверяем.
root@O1> show ospf route 10.0.10.2
Topology default Route Table:
Prefix Path Route NH Metric NextHop Nexthop
Type Type Type Interface Address/LSP
10.0.10.2 Intra Area BR IP 100 em2.0 10.10.0.2
10.0.10.2/32 Intra Network IP 100 em2.0 10.10.0.2
Заключение
Пожалуй, здесь стоит закончить этот пост. Конечно, многое осталось за кадром. Пишу это в каждом своем посте, но как иначе?..
Получилось довольно хардкорно и не очень ориентировано на читателя. В посте много текста и вывода и не так уж много картинок. К сожелению, часто просто не хватает времени даже толком вычитать текст, не говоря уж про рисование картинок.
Честно говоря, подумываю о том, что может быть проще делать видео по таким вот лабам. Не уверен правда, что их будет интересно смотреть... К тому же, движок явно начинает подглючивать при таком обилии текста и форматирвоания.
Ну что ж, в этом посте я хотел настроить OSPF с нуля и описать каждый сущесвтенный шаг. Думаю, задачу можно считать выполненной.
Если у вас есть мысли по поводу статьи, можно оставлять их в комментариях.
Хочу поблагодарить тех, кто дочитал до конца. )
Шикарный труд! Спасибо
ОтветитьУдалитьСпасибо, всегда рад, когда информация пригождается!
ОтветитьУдалитьСпасибо большое! Вы не зря трудились!
ОтветитьУдалитьСпасибо, приятно слышать!
Удалить