Продолжим упражняться с 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 4 установит dead timer в 1c, а hello в 250ms. С подобным тюнингом следует быть осторожным, принимая во внимание факт того, что генерировать, принимать и обрабатывать лавину из hello сообщений каждые доли секунды может быть весьма затруднительно.
RID duplicate
Сабж опасен тем, что маршрутизаторы строят свое представление о топологии области на основе LSDB, в который соседи идентифицируются по их Router ID. RID должен быть уникален для каждого маршрутизатора в автономной системе. Соседство между двумя маршрутизаторами с одинаковым Router ID просто не сформируется.
Аутентификация
Аутентификация в OSPF использует один из трех типов:
- 0 – без аутентификации
- 1 – аутентификация без хэширования – clear-text
- 2 – аутентифиция посредству MD5 хэширования
Настраивается в два шага:
- Аутентификация должна быть включена, плюс тип аутентификации должен быть выбран либо на интерфейсе (ip ospf authentication [message-digest]), либо на все процессе, а значит во всей области (area #_area authentication [message-digest]).
- Ключи для аутентификации должны быть сконфигурированы на интерфейсе:
тип 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 – маршрут получен из другой области.