В этой статье рассматривается OSPF и все проблемы, которые могут возникнуть с этим протоколом. OSPF отличается от EIGRP протоколом состояния канала, но общим для них является то, что оба протокола маршрутизации устанавливают соседство до обмена информацией о маршрутизации. В случае OSPF мы обмениваемся LSA (объявление о состоянии канала), чтобы создать LSDB (база данных о состоянии канала). Наилучшая информация из LSDB будет скопирована в таблицу маршрутизации.
В этой части мы начнем с устранения неполадок соседей OSPF. Как только у нас есть рабочее соседство OSPF, мы рассмотрим другие проблемы, такие как отсутствующие маршруты.
При просмотре соседства OSPF, мы видим, что оно сообщает нам Full. Необходимо больше информации для понимания состояния Full.
Если смежность соседства OSPF не полная, мы рассматриваем одно из следующих состояний:
- Соседей нет вообще
- Оно "залипло" в ATTEMPT.
- Оно "залипло" в INIT.
- Оно "залипло" в 2-WAY.
- Оно "залипло" в EXSTART/EXCHANGE.
- Оно "залипло" в LOADING.
Давайте начнем и рассмотрим разные ситуации, которые могут возникнуть с соседством OSPF!
Видео: протокол OSPF (Open Shortest Path First) за 8 минут
Урок 1
Мы начнем со сценариев, когда OSPF вообще не имеет соседства. В приведенном выше примере у нас есть 2 маршрутизатора.
Как вы можете видеть, у нас нет никакого OSPF соседства, что может быть не так?
Можно было просто посмотреть на текущую конфигурацию и выяснить, что не так, но мы не ищем простых путей. Мы используем другие полезные команды OSPF. Сначала используем команду show ip ospf interface. Мы видим, что OSPF не включен на интерфейсе FastEthernet 0/0 R1, но он работает на R2.
Кто-то допустил ошибку с командой network и набрал неверный сетевой адрес ... простая ошибка, но такие вещи случаются.
R1(config)#router ospf 1 R1(config-router)#no network 192.168.21.0 0.0.0.255 area 0 R1(config-router)#network 192.168.12.0 0.0.0.255 area 0
Настройка правильного сетевого адреса и обратной маски устраняет эту ошибку.
Проблема решена. Соседство OSPF установлено. Это было легкое начало... Итог урока: проверьте правильность настройки сетевого адреса, обратной маски и области.
Урок 2
Очередная проблема. Схема аналогичная: 2 маршрутизатора, но проблема другая.
Как вы видите, нет никакого соседства OSPF.
Протокол OSPF был включен на интерфейсе обоих маршрутизаторов, поэтому мы знаем, что был использован правильный тип сети. Однако если вы внимательно посмотрите на R1, то увидите, что на нем написано "No Hellos (Пассивный интерфейс)". Если вы настроите пассивный интерфейс, то сеть на интерфейсе все равно будет объявлена, но она не будет отправлять приветственные пакеты OSPF. Таким образом, невозможно создать соседство OSPF.
Вот она проблема.
R1(config)#router ospf 1 R1(config-router) #no passive-interface Fe0/0
Удалим пассивный интерфейс.
Соседство OSPF работает. Проблема устранена!
Итог урока: проверьте, что OSPF отправляет приветственные пакеты на интерфейс, поскольку, в противном случае, вы не сможете создать соседство.
Урок 3
Следующий сценарий с теми же маршрутизаторами, но другая проблема.
Интересно... R1 показывает, что наш сосед OSPF находится в состоянии INIT, а R2 ничего не показывает.
Как мы видим, в примере выше OSPF был правильно настроен на обоих интерфейсах.
Поскольку R1 показывает состояние INIT, мы можем сделать вывод, что он получает что-то от R2. R2 ничего не показывает, поэтому, вероятно, ничего не получает от R1. OSPF использует пакеты приветствия для установления соседства OSPF, и они отправляются с использованием многоадресного адреса 224.0.0.5.
Рекомендуется проверить, можем ли мы пропинговать адрес многоадресной рассылки, который OSPF использует для пакетов приветствия. Мы видим, что R1 и R2 оба не получают ответа.
Отправка эхо-запросов друг другу проходят без проблем. Так что может вызвать проблемы с отправкой и получением многоадресного трафика OSPF? Как насчет списка доступа?
Мы что-то нашли. И это то, что на R2 имеется входящий список доступа с именем BLOCKSTUFF.
Список доступа разрешает только TCP, UDP и ICMP трафик. OSPF не использует TCP или UDP, и он удаляется этим списком доступа из-за deny any. Мы этого не видим в верхнем листинге, но в нижней части access-list имеется данный запрет.
R2(config)#ip access-list extended BLOCKSTUFF R2(config-ext-nacl)#5 permit ospf any any
Проведем коррекцию access-list, чтобы был разрешен трафик OSPF.
Проблема решена, теперь она отображается как Full.
Ну что, теперь можно пинговать адрес многоадресной рассылки 224.0.0.5 OSPF. Мы видим ответ с другой стороны.
Итог урока: не блокируйте многоадресные адреса OSPF 224.0.0.5 и 224.0.0.6 (DR / BDR).
Урок 4
Это еще не все! Тот же сценарий, другая проблема:
Соседство OSPF отсутствует, но мы видим, что OSPF был включен на интерфейсе.
Пинг на адреса многоадресной рассылки проходит, так что это уже хорошо. Это хороший момент для включения отладки, чтобы узнать, что происходит:
Это очень полезная отладка, которая позволяет увидеть, что происходит за кулисами.
Мы сбросим процесс OSPF, чтобы ускорить отладку. Имейте в виду, что вы также можете сбросить только одно соседство OSPF. Это лучшая идея, если это применяется в производственной сети (сети предприятия или организации).
Теперь нам есть с чем работать. R1 говорит, что он получил пакет hello, но у нас есть несоответствующие параметры hello. R означает то, что мы получили, а C - что мы настроили.
Как мы видим, существует несоответствие в маске подсети. R1 настроен с маской подсети 255.255.255.0, в то время как R2 имеет маску подсети 255.255.255.128. OSPF будет сравнивать маску подсети только в том случае, если вы используете широковещательный тип сети.
Можно использовать команду show ip ospf interface
для проверки типа сети, и видно, что она является broadcast.
Здесь мы видим, что R2 имеет другую маску подсети. Необходимо это исправить!
R2(config)#interface Fe0/0 R2(config-if)#ip address 192.168.12.2 255.255.255.0
Достаточно просто...
Теперь мы видим, соседство OSPF работает.
Итог урока: проверьте правильность использования одинаковых масок подсетей на маршрутизаторах, которые напрямую связаны друг с другом.
Урок 5
Давайте продолжим, но уже со следующей ошибкой. Та же топология, и у нас очередная проблема с пакетами hello
. Сразу перейдем к отладочной части:
Эта проблема похожа на наш последний сценарий. Есть часть параметров, которые должны совпадать в hello-пакете, чтобы создать соседство OSPF. dead-interval на R1 сконфигурирован на 24 секунды, а на R2 - на 11 секунд. hello-interval сконфигурирован на 10 секунд на R2 и 6 секунд на R1. Поменяем настройки параметров:
R1(config)#interface Fe0/0 R1(config-if)#ip ospf hello-interval 10 R1(config-if)#ip ospf dead-interval 11
Нам нужно изменить это на уровне интерфейса.
Введенные команды с новыми параметрами решают нашу проблему. Соседство OSPF работает.
Урок 6
Еще одна проблема, с которой нам, возможно, придется столкнуться, это аутентификация. OSPF предлагает 3 метода аутентификации:
- без аутентификации
- Plaintext
- MD5 аутентификация
Как мы видим, у нас нет соседей OSPF. Давайте используем debug:
Debug ip ospf adj
поможет нам решить эти неполадки. Видно, что мы получаем пакет с аутентификацией типа 2, а используется тип 0. Вот что это значит:
- Type 0: нет аутентификации.
- Type 1: plaintext аутентификация.
- Type 2: MD5 аутентификация.
Соответственно - R1 сконфигурирован без аутентификации, а R2 сконфигурирован на использование аутентификации MD5.
Мы также можем посмотреть информацию OSPF для каждого интерфейса, чтобы увидеть, включена ли аутентификация или нет.
Это то, что настроено на интерфейсе R2.
R1(config)#interface FastEthernet0/0 R1(config-if)#ip ospf authentication message-digest R1(config-if)#ip ospf message-digest-key 1 md5 MYKEY
Мы копируем и вставляем его в R1.
Проблема устранена! Если вам интересно, вот что вы увидите, когда задан неправильный пароль на одном из маршрутизаторов:
R1(config)#interface FastEthernet0/0 R1(config-if)#no ip ospf message-digest-key 1 md5 MYKEY R1(config-if)#ip ospf message-digest-key 1 md5 WRONGKEY
Сначала мы поменяем ключ:
Наш отладчик говорит нам, что мы используем неправильный ключ между нашими маршрутизаторами.
Извлеченный урок: убедитесь, что вы используете один и тот же тип аутентификации OSPF и пароль между маршрутизаторами.
Урок 7
Что еще может пойти не так? Кажется, что нет никаких проблем, связанных с соседством OSPF! Тот же сценарий, теперь другая проблема:
OSPF-соседство отсутствует.
На одном из наших маршрутизаторов появилось сообщение. Оно не требует объяснений, похоже, у нас есть несоответствие в номере области.
R1 настроен для области 1, а R2 настроен для области 0. Исправляем:
R1(config)#router ospf 1 R1(config-router)#no network 192.168.12.0 0.0.0.255 area 1 R1(config-router)#network 192.168.12.0 0.0.0.255 area 0
Мы используем команду network, чтобы задать правильный номер области.
Ура, все работает!
Итог урока: убедитесь, что ваши маршрутизаторы OSPF согласовывают один и тот же номер области.
Урок 8
Рисунок выше слегка отличается от предыдущего. На этот раз R1 и R2 находятся в одной зоне 1.
Вот так сюрприз... нет соседей! Запускаем отладку:
Очень интересно! Существует несоответствие в опции stub/transit area. OSPF имеет различные типы областей, и оба маршрута должны согласовываться с типом области (stub, nssa, totally stub и totally nssa).
R1, по-видимому, настроен на использование normal area.
R2, похоже, настроен на использование stub area. Несоответствие в типе области означает, что мы не можем установить соседство OSPF.
На листинге выше мы видим, что R2 имеет команду area 1 stub. Удалим ее.
R2(config)#router ospf 1 R2(config-router)#no area 1 stub
Изменим область 1 на normal area для R2.
Итог урока: убедитесь, что ваши маршрутизаторы OSPF используют один и тот же тип области.
Урок 9
Очередная ситуация с неполадками в OSPF, которая на первый взгляд кажется очень запутанной. Давайте посмотрим на конфигурацию OSPF обоих маршрутизаторов:
Это простая конфигурация.
У нас таблица соседства OSPF не пустая, но оба маршрутизатора "застряли" в состоянии 2WAY. Помимо поиска нужного нам слова "FULL", следует обратить внимание на две вещи, отображаемые командой show:
- Оба маршрутизатора показывают друг друга как DROTHER.
- Приоритет для обоих маршрутизаторов равен 0.
В multi-access сети, такой как Ethernet, OSPF будет выполнять выборы DR/BDR, если тип сети broadcast или non-broadcast.
Проверяем тип сети:
Оба интерфейса настроены для типа сети broadcast. Это значение по умолчанию для интерфейсов Ethernet. Это означает, что у нас есть выборы DR/BDR, но оба маршрутизатора настроены на приоритет 0, а это означает, что они не будут участвовать в выборах DR/BDR. По этой причине они застряли в состоянии 2WAY. Необходимо это исправить:
R1(config)#interface fastEthernet 0/0 R1(config-if)#ip ospf priority 1
Мы изменим приоритет на одном из маршрутизаторов.
Все работает. Мы видим, что R1 был выбран для DR, потому что он имеет приоритет 1. Итог урока: Типы широковещательной и не вещательной сети требуют выбора DR/BDR. Убедитесь, что один из маршрутизаторов выбран.
В следующей статье мы разберем еще 8 уроков траблшутинга OSPF.