В данной статье описывается процесс настройки протокола динамической маршрутизации OSPF на маршрутизаторах Cisco. Перед прочтением статьи рекомендуется ознакомиться с общими принципами работы OSPF и основными понятиями. Кроме того, существует отдельная статья по настройке OSPF для работы с несколькими зонами.
Описание топологии и задач
Для демонстрации работы OSPF будем использовать следующий стенд. Подразумевается, что в начале, у нас подняты все необходимые интерфейсы и на них настроены ip адреса, у провайдера настроены статические маршруты в нашу сеть, соседние маршрутизаторы могут пинговать друг друга. Требуется настроить OSPF.

- ISP – маршрутизатор провайдера, он не входит в зону нашей ответственности и в OSPF процессе не участвует
- R1 – наш пограничный маршрутизатор, он должен обеспечить пропуск трафика из внутренних сетей к провайдеру и обратно. На нём следует настроить статический маршрут по умолчанию и передать его остальным маршрутизаторам с помощью OSPF
- R2, R3 и R4 – внутренние маршрутизаторы каждый из них отвечает за некую локальную сеть (192.168.2.0, 192.168.3.0 и 192.168.4.0), к которым подключаются клиенты. Чтобы не усложнять топологию, эти интерфейсы сети представлены в виде loopback, которые имитируют реальные интерфейсы.
Коммутатор не сконфигурирован, то есть, все маршрутизаторы находятся в одном VLAN и видят друг друга. В данном примере нет никакой необходимость его как-то настраивать. Приведём основные моменты конфигурации маршрутизаторов на начальный момент времени.
ISP
hostname ISP
interface FastEthernet0/0
description TO-CLIENT
ip address 10.10.10.1 255.255.255.252
ip route 192.168.0.0 255.255.0.0 FastEthernet0/0
ip route 10.0.0.0 255.0.0.0 FastEthernet0/0
R1
hostname R1
interface FastEthernet0/0
description TO-INTERNAL-NETWORK
ip address 192.168.0.1 255.255.255.252
interface FastEthernet0/1
description TO-ISP
ip address 10.10.10.2 255.255.255.252
R2
hostname R2
interface Loopback0
description TO-R2-LAN
ip address 192.168.2.1 255.255.255.0
interface FastEthernet0/0
description TO-BORDER-ROUTER
ip address 192.168.0.2 255.255.255.252
interface FastEthernet0/1
description TO-ROUTER-EXCHANGE-NETWORK
ip address 192.168.1.2 255.255.255.0
R3
hostname R3
interface Loopback0
description TO-R3-LAN
ip address 192.168.3.1 255.255.255.0
interface FastEthernet0/0
description TO-ROUTER-EXCHANGE-NETWORK
ip address 192.168.1.3 255.255.255.0
R4
hostname R4
interface Loopback0
description TO-R4-LAN
ip address 192.168.4.1 255.255.255.0
interface FastEthernet0/0
description TO-ROUTER-EXCHANGE-NETWORK
ip address 192.168.1.4 255.255.255.0
duplex auto
speed auto
Базовая настройка OSPF
На каждом маршрутизаторе необходимо создать процесс OSPF командой router ospf номер-процесса, какой именно номер мы укажем – не имеет значения, для простоты будем везде использовать 1, далее надо описать все сети, входящие в процесс маршрутизации с помощью команды network. Когда мы указываем некоторую сеть, это приводит к двум последствиям:
- Информация об этой сети начинает передаваться другим маршрутизаторам (при условии, что на маршрутизаторе есть рабочий интерфейс в данной сети)
- Через интерфейс, находящийся в этой сети маршрутизатор начинает общаться с соседями.
Таким образом, необходимо указывать на каждом маршрутизаторе все сети, непосредственно подключенные к нему. Исключением является R1 – на нём не надо указывать сеть 10.10.10.0, так как, во-первых, с той стороны находится провайдер, который ничего не знает про наш внутренний OSPF и с ним не надо устанавливать соседских отношений (он просто прописывает статический маршрут в наши сети), с другой стороны к провайдеру итак пойдёт маршрут по умолчанию, поэтому именно про сеть 10.10.10.0 никому из внутренних маршрутизаторов знать не обязательно. Настроим маршрутизацию.
R1
R1(config)#router ospf 1
R1(config-router)#network 192.168.0.0 0.0.0.3 area 0
При добавлении сетей используется wildcard маска, обратная к маске подсети. В данном случае 255.255.255.255-255.255.255.252=0.0.0.3.
R2
R2(config)#router ospf 1
R2(config-router)#network 192.168.0.0 0.0.0.3 area 0
00:37:37: %OSPF-5-ADJCHG: Process 1, Nbr 192.168.0.1 on FastEthernet0/0 from LOADING to FULL, Loading Done
R2(config-router)#network 192.168.1.0 0.0.0.255 area 0
Видно, что как только мы прописали с двух сторон одну и ту же сеть, маршрутизаторы сразу же установили соседские отношения. Так же мы прописали нашу «локальную» сеть 192.168.1.0 – чтобы сообщить маршрутизаторам о ней. Список соседей можно увидеть:
R2#show ip ospf neighbor
Neighbor ID Pri State Dead Time Address Interface
192.168.0.1 1 FULL/BDR 00:00:36 192.168.0.1 FastEthernet0/0
Пока у R2 только один сосед – R1, так как на R3 и R4 – ещё не включен OSPF и не добавлена сеть 192.168.1.0
R3
R3(config)#router ospf 1
R3(config-router)#network 192.168.1.0 0.0.0.255 area 0
00:43:23: %OSPF-5-ADJCHG: Process 1, Nbr 192.168.2.1 on FastEthernet0/0 from LOADING to FULL, Loading Done
R3(config-router)#network 192.168.3.0 0.0.0.255 area 0
R4
R4(config)#router ospf 1
R4(config-router)#network 192.168.4.0 0.0.0.255 area 0
R4(config-router)#network 192.168.1.0 0.0.0.255 area 0
R4(config-router)#
00:44:43: %OSPF-5-ADJCHG: Process 1, Nbr 192.168.3.1 on FastEthernet0/0 from LOADING to FULL, Loading Done
00:44:43: %OSPF-5-ADJCHG: Process 1, Nbr 192.168.2.1 on FastEthernet0/0 from LOADING to FULL, Loading Done
Диагностика OSPF
Как видно, маршрутизаторы установили друг с другом соседские отношения. Посмотрим снова таблицу соседей на R2:
R2#show ip ospf neighbor
Neighbor ID Pri State Dead Time Address Interface
192.168.0.1 1 FULL/BDR 00:00:37 192.168.0.1 FastEthernet0/0
192.168.3.1 1 FULL/BDR 00:00:37 192.168.1.3 FastEthernet0/1
192.168.4.1 1 FULL/DROTHER 00:00:37 192.168.1.4 FastEthernet0/1
Видно, что:
- Все соседи выбрали себе Router ID – в данном случае это наибольший из адресов их loopback интерфейсов
- Маршрутизатор R3 – стал BDR, R4 – не стал ни DR ни BDR, таким образом, в сети со множественным доступом 192.168.1.0/24, DR-ом стал сам R2.
- Все соседские отношения установились, в последнем столбце таблицы видно, через какой именно интерфейс доступны соседи.
Эта команда важна для диагностики OSPF и именно с неё надо начинать диагностику, так как, если маршрутизатор отсутствует в таблице соседей, то это один класс проблем (перепутали ip адреса, не включили нужную сеть командой network, не включили интерфейс командой no shutdown, не совпадают значения Hello-интервалов с двух сторон линка). Если же маршрутизатор есть в таблице соседей, значит, скорее всего, сам OSPF работает нормально и надо проверить таблицу маршрутизации.
R2#show ip route
Codes: C - connected, S - static, I - IGRP, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP
i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area
* - candidate default, U - per-user static route, o - ODR
P - periodic downloaded static route
Gateway of last resort is not set
192.168.0.0/30 is subnetted, 1 subnets
C 192.168.0.0 is directly connected, FastEthernet0/0
C 192.168.1.0/24 is directly connected, FastEthernet0/1
C 192.168.2.0/24 is directly connected, Loopback0
192.168.3.0/32 is subnetted, 1 subnets
O 192.168.3.1 [110/2] via 192.168.1.3, 00:07:48, FastEthernet0/1
192.168.4.0/32 is subnetted, 1 subnets
O 192.168.4.1 [110/2] via 192.168.1.4, 00:06:36, FastEthernet0/1
Как мы видим, все маршруты появились в таблицу с буквой «O», что означает работоспособность OSPF нам не хватает только маршрута по умолчанию, но об этом позже.
Ещё одна полезная команда позволяет нам посмотреть содержимое LSDB – то есть, кто где с кем связан. По сути, это и есть полная карта сети:
R2#show ip ospf database
OSPF Router with ID (192.168.2.1) (Process ID 1)
Router Link States (Area 0)
Link ID ADV Router Age Seq# Checksum Link count
192.168.0.1 192.168.0.1 895 0x80000005 0x00f2b3 1
192.168.2.1 192.168.2.1 554 0x80000004 0x007c3d 2
192.168.3.1 192.168.3.1 540 0x80000003 0x0051ce 2
192.168.4.1 192.168.4.1 468 0x80000003 0x006bb0 2
Net Link States (Area 0)
Link ID ADV Router Age Seq# Checksum
192.168.0.2 192.168.2.1 901 0x80000001 0x00f340
192.168.1.2 192.168.2.1 468 0x80000003 0x00a384
Passive-interface
Появляется одна неочевидная проблема с безопасностью. Когда мы включаем некоторую сеть в процесс ospf, мы не только рассказываем про неё всем маршрутизаторам, но и начинаем слать в неё hello пакеты. Для клиентских сетей (в нашем примере – loopback) этого делать не нужно, так как там не должно быть маршрутизаторов. В то же время, если мы исключим такую сеть – то про неё никто не узнает и трафик в неё доставляться не будет. Решение – включать такую сеть, но прописывать команду passive-interface, которая запрещает слать на некоторые интерфейсы апдейты. Подробнее с ней можно ознакомиться в отдельной статье.
R2(config-router)#passive-interface loopback 0
R3(config-router)#passive-interface loopback 0
R4(config-router)#passive-interface loopback 0
Передача статического маршрута по умолчанию средствами OSPF
Последняя задача, которую необходимо решить – сообщить всем внутренним маршрутизаторам о том, что у нас есть маршрут по умолчанию, смотрящий на провайдера. Задача эта решается достаточно просто на R1:
R1(config)#ip route 0.0.0.0 0.0.0.0 10.10.10.1
R1(config)#router ospf 1
R1(config-router)#default-information originate
Первая строчка добавляет статический маршрут по умолчанию в направлении ISP, но этот маршрут пока локальный, то есть он известен только на R1. Команда default-information originate заставляет OSPF передавать этот маршрут остальным маршрутизаторам.
R1#sh ip route
Codes: C - connected, S - static, I - IGRP, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP
i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area
* - candidate default, U - per-user static route, o - ODR
P - periodic downloaded static route
Gateway of last resort is 10.10.10.1 to network 0.0.0.0
10.0.0.0/30 is subnetted, 1 subnets
C 10.10.10.0 is directly connected, FastEthernet0/1
192.168.0.0/30 is subnetted, 1 subnets
C 192.168.0.0 is directly connected, FastEthernet0/0
O 192.168.1.0/24 [110/2] via 192.168.0.2, 00:53:25, FastEthernet0/0
192.168.3.0/32 is subnetted, 1 subnets
O 192.168.3.1 [110/3] via 192.168.0.2, 00:53:15, FastEthernet0/0
192.168.4.0/32 is subnetted, 1 subnets
O 192.168.4.1 [110/3] via 192.168.0.2, 00:51:54, FastEthernet0/0
S* 0.0.0.0/0 [1/0] via 10.10.10.1
Как видно, на R1 маршрут статический (с буквой «S»). Если посмотреть таблицу маршрутизации на R4, то она выглядит следующим образом:
R4#show ip route
Codes: C - connected, S - static, I - IGRP, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP
i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area
* - candidate default, U - per-user static route, o - ODR
P - periodic downloaded static route
Gateway of last resort is 192.168.1.2 to network 0.0.0.0
192.168.0.0/30 is subnetted, 1 subnets
O 192.168.0.0 [110/2] via 192.168.1.2, 00:53:21, FastEthernet0/0
C 192.168.1.0/24 is directly connected, FastEthernet0/0
192.168.3.0/32 is subnetted, 1 subnets
O 192.168.3.1 [110/2] via 192.168.1.3, 00:53:21, FastEthernet0/0
C 192.168.4.0/24 is directly connected, Loopback0
O*E2 0.0.0.0/0 [110/1] via 192.168.1.2, 00:05:49, FastEthernet0/0
В последней строчке «O» означает, что маршрут получат с помощью OSPF, «*» – что он является маршрутом по умолчанию, а «E2» – что маршрут является внешним по отношению к OSPF, то есть изначально он получен не от OSPF (в данном случае был статическим), а OSPF используется только для передачи этого маршрута. Конфигурация из данной статьи доступна в формате Packet Tracer