3. OSPF

How can we help?

3. OSPF

Навигация

Для того, чтобы 2 роутера увидели друг друга и обменялись маршрутами нужно:

  • анонсировать те сети, по которым они соединены друг с другом. При этом они установят ТОЛЬКО СОСЕДСТВО.
  • анонсировать те сети, про которые мы хотим рассказать соседу. Только тогда второй роутер увидит сеть «за спиной» первого роутера

Общая конфигурация:

Router(config)#router ospf 1перейти в режим настройки ospf экземпляра 1
Router(config)#routerid 0.0.0.32назначить id роутеру
Router(config-router)#network 192.168.0.0 0.0.255.255 area 0Анонсировать сеть 192.168.0.0 0.0.255.255 в регион 0
Router(config-router)#passive-interface fa0/0.2не посылать hellow пакеты по интерфейсу fa0/0.2 (используется в интерфейсах, смотрящих на пользователей, за которыми точно нет роутеров)
Router(config-router)#auto-cost reference-bandwith10000  — изменить рефересную полосу пропуская (в мегабитах) (нужно делать на всех роутерах)
Router#clear ip ospf 1 proсбросить маршрутную информацию
Router(config-if)#ip ospf hellow-interval 8посылать hellow-пакеты каждые 8 скунд
Router(config-if)#ip ospf dead-interval 30признавать соседа недоступным, если мы от него не получили hellow пакет через 30 секунд
Router(config-if)#ip ospf priority 100изменить приоритет для OSPF на интерфейсе (влияет на выбор DR/BDR)
Router(config-if)#ip mtu 1400изменить размер MTU (необходимо выполнять на всех роутерах в одной канальной среде)

Диагностика:

Router#show ip ospf database показать LSA от соседних роутеров
Router#show ip ospf database router 1.1.1.1Показать детальное содержимое LSA, которую сгенерировал роутер с ID 1.1.1.1
Router#show ip protocols показать конфигурацию динамических протоколов (по какой сети работают, какой id имеют и так далее)
Router#show ip ospf database router (summary) 172.16.3.50показать содержание самой LSA типа router (summary) с id 172.16.3.50
Router#show ip ospf interface (brief)показать интерфейсы, на которых работает OSPF (brief выводит сокращенную информацию, но в PacketTracer не работает), кроме того, выводит информацию о стоимости интерфейса
Router#show ip ospf neighbor показать соседние роутеры, с которыми наш роутер обменивается маршрутами
Router#show ip ospf route показать список маршрутов, которые получил ospf и должен был передать в таблицу маршрутизации. Внимание! Не путать со следующей командой
Router#show ip route ospf показать таблицу маршрутизации и сделать выборку по тем маршрутам, которые попали в таблицу маршрутизации
Router#show ip route 192.168.3.2показать детальную информацию по маршруту к 192.168.3.2

Дополнительно:

Router(config)#int e0/1заходим на нужный интерфейс
Router(config-if)#ip ospf cost 12устанавливаем стоимость интерфейса равной 12
Router(config-router)#auto-cost reference-bandwidth 100000000изменить рефересную стоимость полосы пропускания (для правильного расчета стоимости маршрутов свыше 100 мегабит)

Внимание! Эта настройка должна быть одинакова у всех роутеров. Стоимость маршрута определяется по простой формуле:

рефересная полоса пропуская (reference bandwidth) / скорость интерфейса (interface bandwidth).

Указывается в килобитах. По умолчанию рефересная полоса пропускания равна 100000

Кроме того, можно поменять расчетную скорость интерфейса (reference bandwidth). Указывается в килобитах:

Router(config-router)#bandwidth 10000установить расчетную скорость интерфейса в 10000 килобит

Это может использоваться в сценарии, когда физический интерфейс 10 гигабит (данные взяты для примера), а скорость на нем только 45 мегабит (сценарий подключение к провайдеру). И вот для того, чтобы маршрут оценивался адекватно (по фактической скорости а не по скорости интерфейса) и используется функция, описанная выше.

Фильтрация маршрутов

Задача 1:

запретить анонс сетей 10.0.1.0 10.0.2.0 10.0.3.0 ….  из региона Area 0 (они в нем зародились) в регион Area 1 (а по умолчанию в регион Area 1 попадает все то, что есть в регионе Area 0)

Решение:

Решение идет от обратного — мы разрешаем те сети, которые хотим анонсировать из региона 0 в регион 1, а все остальные по умолчанию будут запрещены.

Router(config)#ip prefix-list OSPF permit 192.168.0.0/16создаем prefix-list и разрешаем подсеть 192.168.0.0/16
Router(config-router)#area <area-id> filter-list prefix <prefix-name> <in | out>применяем этот фильтр на ABR роутер

in — фильтрация сетей, которые передаются в указанную зону

out — фильтрация сетей, которые передаются из указанной зоны

Таким образом, на роутере из региона 1 мы уже не увидим сетей 10.0.1.0, 10.0.2.0, 10.0.3.0….., а у видим только разрешенную — 192.168.0.0.

Внимание! Это не распространяется на дефолтный маршрут 0.0.0.0 — он все равно попадет на другой роутер. Представим ситуацию —  мы развернули туннель с удаленным филиальным роутером и установили OSPF соседство с ним. В этой ситуации филиальный роутер будет ходить в интернет не через обычный маршрут, а через этот туннель, поскольку наш роутер в главном филиале по OSPF анонсирует ему дефолтный маршрут 0.0.0.0. Для того, чтобы исправить эту ситуацию можно ухудшить метрику для внешних ospf маршрутов:

Fil_Edge_Router1(config-router)#distance ospf external 255установить метрику для внешних ospf маршрутов равной 255

Благодаря этому, в таблице маршрутизации филиального роутера Fil_Edge_Router1 останется статический дефолтный маршрут, а дефолтный маршрут пришедший от роутера в главном офисе будет проигнорирован.

Задача 2: разрешить роутеру из региона 1 увидеть еще одну подсеть 10.0.2.0. Для этого на ABR роутере добавляем:

Router (config)#ip prefix-list OSPF permit 10.0.2.0/16создаем prefix-list и разрешаем еще одну подсеть 10.0.2.0/16

В итоге на роутере из Area 1 мы увидим 2 маршрута:

до 192.168.0.0

и до 10.0.2.0

Альтернативный способ фильтрации маршрутов:

Задача:

Нам нужно разрешить роутеру вбрасывать в свою таблицу маршрутизации только определенные маршруты, чтобы злоумышленники не могли вбросить какой-либо неверный маршрут. Для этого создадим ACL:

Fil_Edge_Router(config)#access-list 3 permit 172.10.0.0 0.0.255.255создаем access-list 3 и разрешаем подсеть 172.10.0.0 0.0.255.255
Fil_Edge_Router(config)#access-list 3 permit 30.0.0.0 0.0.255.255создаем access-list 3 и разрешаем подсеть 30.0.0.0 0.0.255.255
Fil_Edge_Router(config)#access-list 3 permit 20.0.0.0 0.0.255.255создаем access-list 3 и разрешаем подсеть 20.0.0.0 0.0.255.255
Fil_Edge_Router(config)#access-list 3 permit 192.168.0.0 0.0.255.255создаем access-list 3 и разрешаем подсеть 192.168.0.0 0.0.255.255
Fil_Edge_Router(config)#router ospf 1заходим в контекст конфигурации ospf
Fil_Edge_Router(config-router)#distribute-list 3 inприменяем созданными нами ACL к движку ospf

Таким образом, в таблицу маршрутизации филиального роутера Fil_Edge_Router попадут только указанные маршруты в ACL 3.

Разница между первым и вторым способом – в первом случае мы запрещали одному роутеру анонсировать маршруты другому роутеру. Во втором случае мы запрещаем роутеру получать маршруты.

*Маршрутизатор фильтрует маршруты, которые помещаются в таблицу маршрутизации, но LSDB остается неизменной.

Фильтрация маршрутов при редистрибуции:

Router (config)#ip prefix-list FILT permit 172.10.2.0/16создаем prefix-list и разрешаем (deny — запрещаем) подсеть 10.0.2.0/16, которую будем вбрасывать в OSPF
ip prefix-list FILT permit 172.10.2.0 le 16указываются все подсети маска которых меньше или равна 16
ip prefix-list FILT permit 172.10.2.0 ge 16указываются все подсети маски которых больше или равна 16
ip prefix-list FILT 0.0.0.0 ge 24 le 24здесь в таблицу маршрутизации попадут все маршруты до сетей имеющих маску 24 (в ACL можно фильтровать только по конкретной маске)
ip prefix-list deny 172.10.2.0/24
ip prefix-list permit any
разрешит все кроме указанной подсети
Router (config)#router ospf 1переходим к контекст настройки протокола ospf экземпляра 1
Router (config-router)#redistrubute eigrp 1 subnetsвключаем редистрибуцию из eigrp в ospf
Router (config-router)#destribute-list prefix FILT out eigrp 1применяем prefix-list на маршруты, которые из EIGRP вбрасываются в OSPF

Суммаризация маршрутов

На ABR роутере:

Router(config-router)#area 1 range 192.168.0.0 255.255.0.0разослать в другие регионы суммированный маршрут 192.168.0.0 за регион 1

На ASBR роутере:

Router(config-router)#summary-address  192.168.0.0 255.255.0.0разослать от ASBR суммированный маршрут 192.168.0.0

Редистрибуция маршрутов

Способ 1: разослать все роутером дефолтный маршрут. То есть по всем неизвестным ip адресам все роутеры будут идти к нам:

Router(config-router)#default-information originate always | metric | metric-type | route-mapвбрасываем всем соседям дефолтный маршрут до нас (через нас можно ходить в интернет). Делается на ASBR. Для того, чтобы эта команда сработала, на ASBR роутере нужно прописать статический маршрут 0.0.0.0 0.0.0.0 и замкнуть его на любой интерфейс, либо к команде default-information originate добавить always

Способ 2: разослать всем роутерам все маршруты до всех внешних сетей которые мы сами знаем. Нельзя использовать если сетей очень много (нельзя в OSPF вбрасывать BGP)

Router(config-router)#redistribute connected (static,eigrp, bgp и т.д) subnetsвбросить в OSPF коннектед-сетки (статические маршруты, маршруты eigrp, bgp и т.д) ASBR роутера. Аналогично выполняется и для EIGRP
Router(config-router)#redistrubute eigrp 1 metric-type 1 subnetsвбросить в OSPF маршруты из EIGRP с учетом стоимости транзита по сети OSPF

Изменение административного расстояния:

Router(config-router)#distance ospf external | inter-area |  intra-area 1-255изменить административное расстояние  для всех OSPF маршрутов
Router(config-router)#distance 1-255 172.20.0.0 0.0.255.255изменить административное расстояние только для одного маршрута 172.20.0.0 с перевернутой маской 0.0.255.255

Регионы OSPF

Регион stub:

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

Для этого регион помечаем как stub. Например:

Router(config-router)#area 1 stubпометить регион 1 как stub

Это делается на всех роутерах, входящих в регион 1. Таким образом, все другие регионы получат полноценные маршруты в интернет (зародившиеся на роутере ASBR), а регион 1 получит маршрут-восьми нулёвку. Другими словами, роутеры из региона 1 начинают получать LSA не 5-того типа, а LSA 3-го типа

Регионы Stub и Totally Stubby Area:

Этот режим заменяет LSA 3-го типа и LSA 5-го типа одним единственным дефолтным маршрутом. Для включения этого режима необходимо роутер из одного региона включить просто как stub, а на ABR роутере задать режим stub no-summary. Например:

Router(config-router)#area 2 stubпомечаем регион 2 как stub (на роутере второго региона)
Router(config-router)#area 2 stub no-summaryили помечаем регион как Totally Stubby Area

Таким образом, на роутерах из второго региона вброшенные маршруты от роутера ASBR (LSA 5-го типа) и внутренние маршруты из других регионов (LSA 3-го типа) будут в таблице маршрутизации замещены одним единственным дефолтным маршрутом.

Изменение стоимости маршрута для регионов:

Мы можем изменить стоимость дефолтного маршрута для определенного stub региона. Это может быть полезно если у нас есть два ABR роутера и мы хотим пропускать трафик больше через первого, чем через второго. На самом деле, поскольку OSPF не умеет балансировать трафик по маршрутам неравной стоимости (в отличие от EIGRP), трафик будет ходить только через тот ABR, который анонсировал маршрут меньшей стоимости

На ABR роутере:

Router(config-router)#area 2 default-cost 50определяем стоимость маршрута для региона 2 в 50

Внимание! По умолчанию, ASBR может находится только в нормальном регионе (не stub)

Однако есть обход этого запрета — stub регион нужно сделать типа NSSA. В таком случае, ASBR находящийся в NSSA регионе будет порождать не LSA 5-го типа, а LSA 7-го типа, которая на ABR будет преобразовываться в LSA 5-го типа.

На ABR роутере:

Router(config-router)#area 2 NSSA (no-autosammary)помечаем регион 2 как область NSSA (если добавить команду no-autosammary, то регион будет не просто NSSA, а еще и Totally Stubby Area)

И на всех роутерах 2-го региона

Router(config-router)#area 2 NSSA (no-autosammary)помечаем регион 2 как область NSSA (и Totally Stubby Area при задании команды no-autosammary)

Дополнительные функции

Дополнительно:

В случае работы по frame-relay у нас отсутствуют бродкасты и мультикасты. Поэтому соседей нужно прописывать вручную (они не могут друг друга автоматически обнаружить разослав мультикастовый hellow-пакет):

Router(config-router)#neighbor 10.0.2.1указываем соседа с ip адресом 10.0.2.1

Кроме того, в случае с frame-relay, необходимо так же указывать канальный адрес соседа (если не работает InverseARP). Поскольку схема frame-relay point to multipoint сложна, (там нужно отключать защиту от петель), лучше использовать систему point-to-point с помощью суб интерфейсов, настраивать InversARP и тогда OSPF будет работать почти как в ethernet.

Защита OSPF. Настройка аутентификации:

Router(config)#int e0/1переходим на интерфейс ethernet 0/1. Данный интерфейс смотрит на соседний роутер с включенным ospf.
Router(config-if)#ip ospf authentication message-digestвключаем аутентификацию ospf с алгоритмом хеширования message-digest
Router(config-if)#ip ospf message-digest-key 1 md5 ciscoзадаем ключ аутентификации. В нашем случае Cisco
Router#show ip ospf int e0/1посмотреть включена ли аутентификация на интерфейсе