Заметки к CCNP Route: OSPF часть 2

Продолжим упражняться с OSPF. Посмотрим на методику подсчета стоимости, а так же на способ ее изменить. Разберемся кто такие DR, BDR и почему без них никуда на общем сегменте сети, рассмотрим процесс их выборов и научимся им манипулировать. Ну и в конце, чтобы немного испачкать руки, произведем базовую настройку, изменим Hello и Dead таймеры, настроим аутентификацию аж всех двух типов.

OSPF Cost

После того, как каждый маршрутизатор в области получил свою копию базы LSDB он запускает процесс SPF. Смысл его состоит в том, маршрутизатор, анализируя LSDB, выбирает оптимальный маршрут до каждой сети, содержащейся в ней. Cost или метрика это суммарная дистанция, которую нужно “пройти”, чтобы оказаться в необходимой сети. К примеру, на этой картинке ниже лучшая метрика от R1 до 10.1.1.0/24 будет равна 22, а до 10.1.3.0/24 – 11, до 192.18.139.0/29 – 21 и т.д.

Теперь давайте посмотрим на механизм определения стоимости, а именно на формулу. Как вы понимаете скорости бывают и выше 100, но дробные значения не предусмотрены. То есть все, что выше 100 мбит будет иметь стоимость равную единицы. Этому нас учили на курсах, это содержится в official certification guide.

(*) На самом деле на современных IOS стоимость по умолчанию стала 1000/bw, т.е. теперь единице равно все то, что от 1gbit и выше. Пруф:

R3#sh ip ospf interface fa0/0
  Process ID 11, Router ID 172.16.255.3, Network Type BROADCAST, Cost: 10

Cost tuning

Значение, которые стоит в числите этой формулы есть reference bandwidth и его можно изменить, ведь в вашей сети могут встречаться и 1gbit и 10gbit и, даже, 40gbit каналы.

Изменить reference bandwidth с помощью команды auto-cost reference-bandwidth #_num.

R2(config-router)#auto-cost reference-bandwidth 1000
% OSPF: Reference bandwidth is changed.
        Please ensure reference bandwidth is consistent across all routers.
R2(config-router)#do sh ip ospf int fa0/0
--- опущено ---
  Process ID 2, Router ID 10.10.200.240, Network Type BROADCAST, Cost: 100
R2(config-router)#do sh ip proto
--- опущено ---
 Reference bandwidth unit is 1000 mbps 

Будьте осторожны с высокими значениями reference bandwidth если у вас имеются в наличии медленные каналы (56k, 64k и т.д.). Высокие значение Cost OSPF воспринимает как метрика, равная бесконечности. Такие каналы в этом случае не будут восприниматься как рабочие при формировании таблицы маршрутизации.

Альтернативно можно изменить стоимость с помощью команды ip ospf cost #_num поданной на интерфейсе.

DR & BDR

Мир без них был бы серым и унылым. Представим: один из маршрутизаторов теряет связь с сегментом сети. Тут же он пытается поведать эту грустную историю своим соседям, а они своим и начинаетя хаос. Чтобы полностью осознать весь масштаб трагедии представьте не 3 маршрутизатора, а 133.

Чтобы предотвратить этот ад и содомию один из маршрутизаторов выбирается как Designated Router, а другой как Backup Designated Router. Теперь вместо того, чтобы хаотично спамить всем соседям на shared сегменте о изменении в топологии, маршрутизатор сообщит об этом DR или BDR, если DR недоступен. На общем сегменте апдейты с измненной топологией поступают на мультикаст адрес 224.0.0.6, который слушают DR и BDR, а затем DR рассылает апдейты на мультикаст адрес 224.0.0.5, который слушают уже все остальные маршрутизаторы.

Если DR и BDR не предусмотрены (point-to-point сеть), то сообщения между соседями будут рассылаться на 224.0.0.5 адрес. На Point-to-Point каналах, где присутствуют только два соседа оно и не надо. В таблице соседства такие соседи будут помечены как “-“:

R4#sh ip ospf neighbor
Neighbor ID     Pri   State           Dead Time   Address         Interface
172.16.255.3      0   FULL/  -        00:00:36    172.16.254.1    Serial1/0
R4#sh ip ospf interface
Serial1/0 is up, line protocol is up
  Internet Address 172.16.254.2/30, Area 0
  Process ID 1, Router ID 172.16.254.2, Network Type POINT_TO_POINT, Cost: 64
Выборы DR и BDR

Изначально выборы идут по router priority, который по умолчанию равен единице:

R3#sh ip ospf interface fa0/0
--- опущено ---
  Transmit Delay is 1 sec, State DROTHER, Priority 1 

Сменить priority можно подав на интересующем интерфейсе команду ip ospf priority #_num.

Так как priority везде одинаковый, то тут в дело вступает RID и выборы осуществляются уже на основе него. Обратите внимание, что если вы настроили два маршрутизатора, они совершили выборы и разобрались кто из них DR, а кто BDR, то третий, четвертый, сто сорок четвертый маршрутизатор в этом shared сегменте будет считать их DR и BDR вне зависимости от своего RID и Priority, пока вы не перезапустите процесс OSPF на DR и BDR или пока вы их не перезагрузите.

Базовая настройка, тюнинг Hello и Dead таймеров, RID duplicate, аутентификация

У нас есть 3 маршрутизатора, один из которых ABR. Проведем простую настройку:

R1(config)#router ospf 1
R1(config-router)#network 10.0.0.0 0.255.255.255 area 0

R2(config)#router ospf 2
R2(config-router)#network 10.0.0.0 0.255.255.255 area 0
R2(config-router)#network 10.10.200.240 0.0.0.0 area 51
R2(config-router)#do sh run | s ospf
router ospf 2
 network 10.10.200.240 0.0.0.0 area 51
 network 10.0.0.0 0.255.255.255 area 0

R3(config)#int fa0/1
R3(config-if)#ip ospf 3 area 51
R3(config-if)#int fa0/0
R3(config-if)#ip ospf 3 area 51

Обратите внимание, что каждый процесс сконфигурирован с разным process id, что нисколько не мешает установлению соседства. Так же обратите внимание на R2 – там мы поместили всю сеть 10.0.0.0/8 и принадлежащие ей интерфейсы в Area 0, а 10.10.200.240/32 в Area 51. Longest prefix match – он и оказывается первым в списке сетей из-за более специфичной маски.

Hello & dead timers тюнинг 

Зачем нужен тюнинг Hello и Dead таймеров? По умолчанию Hello сообщения отправляются каждый 10 секунд и решение о том, что сосед безвозвратно потерян принимается только через 4 интервала – 40 секунд. В современных сетях это целая вечность. Подкрутим Hello таймер на интерфейсе R1 смотрящим в сторону R2 и посмотрим во что это выльется:

R1(config)#int fa0/0
R1(config-if)#ip ospf hello-interval 2
*Mar  1 00:52:49.667: %OSPF-5-ADJCHG: Process 1, Nbr 10.10.200.240 on FastEthernet0/0 from FULL to DOWN, Neighbor Down: Dead timer expired
R1#sh ip ospf interface | b 0/0
--- опушено ---
  Timer intervals configured, Hello 2, Dead 8, Wait 8, Retransmit 5

А вылилось это в развалившееся соседство из-за несовпадения таймеров:

R1#debug ip ospf hello
*Mar 1 00:56:09.651: OSPF: Rcv hello from 10.10.200.240 area 0 from FastEthernet0/0 10.10.10.2
*Mar 1 00:56:09.651: OSPF: Mismatched hello parameters from 10.10.10.2
*Mar 1 00:56:09.651: OSPF: Dead R 40 C 8, Hello R 10 C 2 Mask R 255.255.255.252 C 255.255.255.252

Помимо этого можно жестко указать dead таймер с помощью ip ospf dead-interval #_sec на интерфейсе.

Более того можно продолжить тюнинг и добиться Hello таймера меньше секунды – так называемый Fast Hello механизм – ip ospf dead-interval minimal hello-multiplier #. Данная команда устанавливает dead интервал в 1 секунду, а hello в 1с/multiplier. То есть иными словами  ip ospf dead-interval minimal hello-multiplier установит dead timer в 1c, а hello в 250ms. С подобным тюнингом следует быть осторожным, принимая во внимание факт того, что генерировать, принимать и обрабатывать лавину из hello сообщений каждые доли секунды может быть весьма затруднительно.

RID duplicate

Сабж опасен тем, что маршрутизаторы строят свое представление о топологии области на основе LSDB, в который соседи идентифицируются по их Router ID. RID должен быть уникален для каждого маршрутизатора в автономной системе. Соседство между двумя маршрутизаторами с одинаковым Router ID просто не сформируется.

Аутентификация

Аутентификация в OSPF использует один из трех типов:

  • 0 – без аутентификации
  • 1 – аутентификация без хэширования – clear-text
  • 2 – аутентифиция посредству MD5 хэширования

Настраивается в два шага:

  1. Аутентификация должна быть включена, плюс тип аутентификации должен быть выбран либо на интерфейсе (ip ospf authentication [message-digest]), либо на все процессе, а значит во всей области (area #_area authentication [message-digest]).
  2. Ключи для аутентификации должны быть сконфигурированы на интерфейсе:
    тип 0 – ip ospf authentication null
    тип 1 – ip ospf authentication; ip ospf authentication-key DERKEY
    тип 2 – ip ospf authentication message-digest; ip ospf message-digest-key #_key md5 DERKEY

Номера последовательностей ключей должны совпадать. При несовпадение типа аутентификации  и включенном дебаге (debug ip ospf adj) вы получите сообщение:

*Mar 1 01:50:34.427: OSPF: Rcv pkt from 10.10.200.240, FastEthernet0/0 : Mismatch Authentication type. Input packet specified type 0, we use type 2

Если забыли настроить ключ на одном из маршрутизаторов, собирающихся сформировать соседство:

*Mar 1 01:52:54.439: OSPF: Rcv pkt from 10.10.200.240, FastEthernet0/0 : Mismatch Authentication Key - No message digest key 0 on interface

Если напутали с номерами для MD5 ключей:

*Mar 1 01:53:34.423: OSPF: Rcv pkt from 10.10.200.240, FastEthernet0/0 : Mismatch Authentication Key - No message digest key 20 on interface

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

Суммирование маршрутной информации и редистрибуция, типы внешних маршрутов

Вернемся к нашей топологии. R1 превратился в ASBR и приобрел тайное знание о четырех сетях с 172.16.0.0/24 по 172.16.3.0/24. Неплохо было бы отправить эти маршруты товарищам.

R1(config)#router ospf 1
R1(config-router)#redistribute static subnets metric-type 2 metric 200

Разберем команду и ключи:

  • redistribute – указывает протоколу, что надо заняться редистрибуцией;
  • static – указывает на то, что надо поместить, в данном случае это статические маршруты. На месте static могут быть другие протоколы маршрутизации;
  • subnets – по умолчанию будет производится редистрибуция полноклассовых сетей, в нашем случае только /16;
  • metric 200 – указывает с какой метрикой производить редисрибуцию в OSPF;
  • metric-type – бывает двух видов – 1 и 2. OSPF metric type 1 – позволяет изменять метрику по мере удаления от маршрутизатора, содержащего исходную информацию о этих сетях. OSPF metric type 2 – метрика всегда остается одной и той же. Когда стоит использовать тип 1, а когда тип 2? Если у вас только один путь к сетям (1 ASBR до этих сетей), редистрибуцией которых вы занимаетесь в OSPF, можно использовать тип 2, так как он снимает нагрузку с маршрутизаторов и они больше не занимаются подсчетом метрики. Если у вас 2 и более ASBR до этих сетей, то некоторые соседи могут оказаться ближе к одному из ASBR – тут имеет смысл использовать тип 1. E2 – это как раз префикс, указывающий на второй тип внешнего маршрута:
R2#sh ip route
--- опущено ---
     172.16.0.0/24 is subnetted, 4 subnets
O E2  172.16.0.0 [110/200] via 10.10.10.1, 00:00:09, FastEthernet0/0
O E2  172.16.1.0 [110/200] via 10.10.10.1, 00:00:09, FastEthernet0/0
O E2  172.16.2.0 [110/200] via 10.10.10.1, 00:00:09, FastEthernet0/0
O E2  172.16.3.0 [110/200] via 10.10.10.1, 00:00:09, FastEthernet0/0

Дополнительно можно причесать все это дело, занявшись суммированием на ASBR этих сетей:

R1(config-router)#summary-address 172.16.0.0 255.255.252.0
R2#sh ip route
172.16.0.0/22 is subnetted, 1 subnets
O E2 172.16.0.0 [110/200] via 10.10.10.1, 00:00:24, FastEthernet0/0

Челенджа ради давайте добавим несколько сетей за R3 и суммируем их на R2:

R3#sh ip int br
--- опущено --- 
Loopback0                  10.10.211.1     YES manual up                    up
Loopback1                  10.10.212.1     YES manual up                    up
Loopback2                  10.10.213.1     YES manual up                    up
Loopback3                  10.10.210.1     YES manual up                    up

R1#sh ip route
--- опущено --- 
O IA    10.10.210.0/24 [110/21] via 10.10.10.2, 00:00:02, FastEthernet0/0
O IA    10.10.211.0/24 [110/21] via 10.10.10.2, 00:00:02, FastEthernet0/0
O IA    10.10.212.0/24 [110/21] via 10.10.10.2, 00:00:02, FastEthernet0/0
O IA    10.10.213.0/24 [110/21] via 10.10.10.2, 00:00:04, FastEthernet0/0

R2(config-router)#area 51 range 10.10.208.0 255.255.248.0

R1#sh ip route
--- опущено --- 
O IA    10.10.208.0/21 [110/21] via 10.10.10.2, 00:00:10, FastEthernet0/0

Префикс IA означает Inter Area – маршрут получен из другой области.