Лабораторная работа №9 — Маршрутизация сетей с использованием OSPF
- Все лабораторные работы по сетевым протоколам в Linux
- Предыдущая лабораторная работа — Маршрутизация сетей с использованием RIP
- Следующая лабораторная работа — Фильтрация трафика при помощи списков контроля доступа
Быстрый поиск
Цель лабораторной — познакомить изучающего с основами протокола маршрутизации OSPF
Задачи лабораторной:
- Изучить логику работы протокола;
- Изучить агента маршрутизации FRRouting для настройки OSPF;
- Реализовать тестовую топологию с применением протокола маршрутизации OSPF.
Протокол OSPF
Протокол OSPF (Open Shortest Path First) — Протокол маршрутизации по состоянию канала.
Глобально протокол можно разделить на два этапа — обмен данными и построение маршрутов. Данные этапы могут конвейерным образом сочетаться.
При обмене данными каждый узел передаёт своим соседям данные заголовков LSA (Link State Advertisement) интерфейсов из своей базы данных. При получении новых записей или обновления данных о каком-то канале узел запоминает эти данные и запрашивает полные данные LSA. На основании полных данных строится взвешенный ориентированный остовный граф всей сетевой топологии, веса рассчитываются согласно метрике стоимости канала (некоторой величины на базе информации о состоянии канала)
После получения полных данных, на этапе построения маршрутов, используется алгоритм Дейкстры для построения связного ориентированного остовного дерева маршрутов с минимальной стоимостью.
Пример настройки OSPF
Для изучения маршрутизации с помощью OSPF разберём топологию между тремя маршрутизаторами.

Для работы создайте 3 клона согласно топологии сети. Для создания соединений между машинами необходимо в VirtualBox настроить сетевые интерфейсы (описание настройки подключения находится в разделе настройки сетевых подключений):
R1:- Adapter2 — intnet
- Adapter3 — deepnet
R2:- Adapter2 — intnet
R3:- Adapter2 — deepnet
Базовая настройка виртуальных машин
📍 1. С помощью команд управления интерфейсами создайте и включите интерфейсы согласно топологии
@R1
[root@R1 ~]# ip link set eth1 up
[root@R1 ~]# ip link set eth2 up
[root@R1 ~]# ip link add dev lo0 type dummy
[root@R1 ~]# ip link set lo0 up
[root@R1 ~]#
@R2
[root@R2 ~]# ip link set eth1 up
[root@R2 ~]# ip link add dev lo0 type dummy
[root@R2 ~]# ip link set lo0 up
[root@R2 ~]#
@R3
[root@R3 ~]# ip link set eth1 up
[root@R3 ~]# ip link add dev lo0 type dummy
[root@R3 ~]# ip link add dev lo2 type dummy
[root@R3 ~]# ip link set lo0 up
[root@R3 ~]# ip link set lo2 up
[root@R3 ~]#
С помощью команд настройки IP-адресов и настройки IP-Forwarding на маршрутизаторах установите адреса согласно топологии.
@R1
[root@R1 ~]# ip addr add dev eth1 10.0.12.1/24
[root@R1 ~]# ip addr add dev eth2 10.0.13.1/24
[root@R1 ~]# ip addr add dev lo0 10.0.1.1/24
[root@R1 ~]#
[root@R1 ~]# sysctl net.ipv4.conf.all.forwarding=1
[root@R1 ~]#
@R2
[root@R2 ~]# ip addr add dev eth1 10.0.12.2/24
[root@R2 ~]# ip addr add dev lo0 10.0.2.2/24
[root@R2 ~]#
@R3
[root@R3 ~]# ip addr add dev eth1 10.0.13.3/24
[root@R3 ~]# ip addr add dev lo0 10.0.3.3/24
[root@R3 ~]# ip addr add dev lo2 172.16.0.1/24
[root@R3 ~]#
📍 2. С помощью команд управления таблицами маршрутизации на маршрутизаторах выведите данные всех таблиц маршрутизации
@R1
[root@R1 ~]# ip route
10.0.1.0/24 dev lo0 proto kernel scope link src 10.0.1.1 linkdown
10.0.12.0/24 dev eth1 proto kernel scope link src 10.0.12.1
10.0.13.0/24 dev eth2 proto kernel scope link src 10.0.13.1
@R2
[root@R2 ~]# ip route
10.0.2.0/24 dev lo0 proto kernel scope link src 10.0.2.2 linkdown
10.0.12.0/24 dev eth1 proto kernel scope link src 10.0.12.2
@R3
[root@R3 ~]# ip route
10.0.3.0/24 dev lo0 proto kernel scope link src 10.0.3.3 linkdown
10.0.13.0/24 dev eth1 proto kernel scope link src 10.0.13.3
172.16.0.0/24 dev lo2 proto kernel scope link src 172.16.0.1 linkdown
FRRouting Daemon
ℹ Для работы протоколов (в частности, протоколов маршрутизации) необходимо использовать специальные программы-менеджеры, которые управляют настройками и параметрами протоколов — Routing Daemons. Для выполнения лабораторной используется демон FRRouting. Для настройки демона используются конфигурационные файлы /etc/frr/frr.conf для описания работы протоколов и /etc/frr/daemons для подключения используемых протокольных демонов.
Настройка OSPF
📍 1. Опишите (или скопируйте) конфигурационный файл для R1 в соответствующем файле виртуальной машины
@R1:/etc/frr/frr.conf
!
router ospf
ospf router-id 10.0.1.1
network 10.0.1.0/24 area 0
network 10.0.12.0/24 area 0
network 10.0.13.0/24 area 1
area 1 range 172.16.0.0/24 not-advertise
!
ℹ Конфигурационный файл включает в себя:
- указание настраиваемого протокола;
- описание уникального идентификатора маршрутизатора в сети, «от имени» которого будут рассылаться данные о маршрутах;
- описание сетей, информация о которых будет распространяться через интерфейсы устройства:
- для каждой сети необходимо указывать зону OSPF, которой она принадлежит;
- для большинства задач настройки локальной связности достаточно основной нулевой зоны;
- ограничения о распространении информации о сетях:
- для того, чтобы какая-то OSPF-запись не распространялась дальше разрешенной зоны, необходимо явно разделять допустимую и недопустимую зоны и явно указывать запрет на распространение записи дальше зоны;
📍 2. Аналогично опишите (или скопируйте) конфигурационные файлы для R2 и R3
@R2:/etc/frr/frr.conf
!
router ospf
ospf router-id 10.0.2.2
network 10.0.2.0/24 area 0
network 10.0.12.0/24 area 0
!
@R3:/etc/frr/frr.conf
!
router ospf
ospf router-id 10.0.3.3
network 10.0.3.0/24 area 1
network 10.0.13.0/24 area 1
network 172.16.0.0/24 area 1
!
📍 3. Для работы модуля OSPF подключите его. Опишите следующие настройки в /etc/frr/daemons на каждой ВМ:
@R1:/etc/frr/daemons
[root@R1 ~]# cat > /etc/frr/daemons
zebra=yes
ospfd=yes
[root@R1 ~]#
@R2:/etc/frr/daemons
[root@R2 ~]# cat > /etc/frr/daemons
zebra=yes
ospfd=yes
[root@R2 ~]#
@R3:/etc/frr/daemons
[root@R3 ~]# cat > /etc/frr/daemons
zebra=yes
ospfd=yes
[root@R3 ~]#
ℹ Демон ospfd отвечает за работу протокола OSPF, демон zebra отвечает за работу ядра по обработке таблиц маршрутизации.
📍 4. С помощью команды systemctl start frr.service запустите FRRouting на каждом из устройств
ℹ C помощью утилиты vtysh можно посмотреть параметры работы демона.
📍 5. С помощью команды vtysh -c 'show ip route ospf' посмотрите список OSPF-данных, передаваемых FRRouting
@R1
[root@R1 ~]# systemctl start frr.service
<Wait some time...>
[root@R1 ~]# vtysh -c 'show ip route ospf'
Codes: K - kernel route, C - connected, L - local, S - static,
R - RIP, O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,
T - Table, v - VNC, V - VNC-Direct, A - Babel, F - PBR,
f - OpenFabric, t - Table-Direct,
> - selected route, * - FIB route, q - queued, r - rejected, b - backup
t - trapped, o - offload failure
IPv4 unicast VRF default:
O 10.0.1.0/24 [110/10] is directly connected, lo0, weight 1, 00:15:48
O>* 10.0.2.0/24 [110/110] via 10.0.12.2, eth1, weight 1, 00:15:00
O>* 10.0.3.0/24 [110/110] via 10.0.13.3, eth2, weight 1, 00:07:03
O 10.0.12.0/24 [110/100] is directly connected, eth1, weight 1, 00:15:48
O 10.0.13.0/24 [110/100] is directly connected, eth2, weight 1, 00:07:13
O>* 172.16.0.0/24 [110/110] via 10.0.13.3, eth2, weight 1, 00:07:03
[root@R1 ~]#
ℹ В таблице маршрутизации после запуска должны появиться новые записи о доступных маршрутах с указанием proto ospf , означающим, что маршрут получен с помощью OSPF-демона FRRouting (поскольку маршруты не приходят мгновенно, может потребоваться время на получение всех данных).
📍 6. С помощью команды управления таблицами маршрутизации убедитесь, что таблицы маршрутизации на устройствах изменились в соответствии с данными от FRRouting
@R1
[root@R1 ~]# ip route
10.0.1.0/24 dev lo0 proto kernel scope link src 10.0.1.1
10.0.2.0/24 nhid 13 via 10.0.12.2 dev eth1 proto ospf metric 20
10.0.3.0/24 nhid 11 via 10.0.13.3 dev eth2 proto ospf metric 20
10.0.12.0/24 dev eth1 proto kernel scope link src 10.0.12.1
10.0.13.0/24 dev eth2 proto kernel scope link src 10.0.13.1
172.16.0.0/24 nhid 11 via 10.0.13.3 dev eth2 proto ospf metric 20
[root@R1 ~]#
@R2
[root@R2 ~]# ip route
10.0.1.0/24 nhid 8 via 10.0.12.1 dev eth1 proto ospf metric 20
10.0.2.0/24 dev lo0 proto kernel scope link src 10.0.2.2
10.0.3.0/24 nhid 8 via 10.0.12.1 dev eth1 proto ospf metric 20
10.0.12.0/24 dev eth1 proto kernel scope link src 10.0.12.2
10.0.13.0/24 nhid 8 via 10.0.12.1 dev eth1 proto ospf metric 20
[root@R2 ~]#
@R3
[root@R3 ~]# ip route
10.0.1.0/24 nhid 11 via 10.0.13.1 dev eth1 proto ospf metric 20
10.0.2.0/24 nhid 11 via 10.0.13.1 dev eth1 proto ospf metric 20
10.0.3.0/24 dev lo0 proto kernel scope link src 10.0.3.3
10.0.12.0/24 nhid 11 via 10.0.13.1 dev eth1 proto ospf metric 20
10.0.13.0/24 dev eth1 proto kernel scope link src 10.0.13.3
172.16.0.0/24 dev lo2 proto kernel scope link src 172.16.0.1
[root@R3 ~]#
ℹ Заметьте, что сеть 172.16.0.0/24 не вышла за пределы зоны 1 и не достигла R2.
📍 7. С помощью команды ping -c3 <dstIP> проверьте достижимость отдельных сетей с разных устройств
@R1
[root@R1 ~]# ping -c3 10.0.2.2
PING 10.0.2.2 (10.0.2.2) 56(84) bytes of data.
64 bytes from 10.0.2.2: icmp_seq=1 ttl=64 time=0.388 ms
64 bytes from 10.0.2.2: icmp_seq=2 ttl=64 time=1.05 ms
64 bytes from 10.0.2.2: icmp_seq=3 ttl=64 time=0.562 ms
--- 10.0.2.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 0.388/0.667/1.053/0.281 ms
[root@R1 ~]# ping -c3 172.16.0.1
PING 172.16.0.1 (172.16.0.1) 56(84) bytes of data.
64 bytes from 172.16.0.1: icmp_seq=1 ttl=64 time=0.336 ms
64 bytes from 172.16.0.1: icmp_seq=2 ttl=64 time=0.410 ms
64 bytes from 172.16.0.1: icmp_seq=3 ttl=64 time=0.996 ms
--- 172.16.0.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 0.336/0.580/0.996/0.295 ms
[root@R1 ~]#
@R2
[root@R2 ~]# ping -c3 10.0.3.3
PING 10.0.3.3 (10.0.3.3) 56(84) bytes of data.
64 bytes from 10.0.3.3: icmp_seq=1 ttl=63 time=0.936 ms
64 bytes from 10.0.3.3: icmp_seq=2 ttl=63 time=2.00 ms
64 bytes from 10.0.3.3: icmp_seq=3 ttl=63 time=1.46 ms
--- 10.0.3.3 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 0.936/1.467/2.001/0.434 ms
[root@R2 ~]# ping -c3 172.16.0.1
ping: connect: Network is unreachable
[root@R2 ~]#
Самостоятельная работа

Для работы необходимо 5 клонов согласно топологии сети. Для создания соединений между машинами необходимо в VirtualBox настроить сетевые интерфейсы (описание настройки подключения находится в разделе настройки сетевых подключений):
R1:- Adapter2 — net111
- Adapter3 — net30
- Adapter4 — net50
R2:- Adapter2 — net30
- Adapter3 — net40
R3:- Adapter2— net222
- Adapter3— net40
- Adapter4 — net50
- PC1:
- Adapter2— net111
- PC2:
- Adapter2— net222
Варианты заданий
| Группа | Задание |
|---|---|
| 1 | 1. Создать топологию, указанную на рисунке 2. Убедиться, что PC2 не пингуется с PC13. Настроить OSPF между R1 и R34. Убедиться, что PC2 пингуется с PC1 и наоборот5. Выполнить traceroute с PC1 на PC2 |
| 2 | 1. Создать топологию, указанную на рисунке 2. Убедиться, что PC2 не пингуется с PC13. Настроить OSPF так, чтобы PC2 не мог бы пинговать R2, а PC1 мог бы4. Выполнить traceroute с PC1 и PC2 на R2 |
| 3 | 1. Создать топологию, указанную на рисунке 2. Убедиться, что PC2 не пингуется с PC13. Настроить OSPF так, чтобы PC1 не мог бы пинговать R2, а PC2 мог бы4. Выполнить traceroute с PC1 и PC2 наR2 |
| 4 | 1. Создать топологию, указанную на рисунке 2. Убедиться, что PC2 не пингуется с PC13. Настроить OSPF так, чтобы PC1 не мог бы пинговать R2, но мог бы пинговать R34. Выполнить traceroute с PC1 на R2 и R3 |
| 5 | 1. Создать топологию, указанную на рисунке 2. Убедиться, что PC2 не пингуется с PC13. Настроить OSPF так, чтобы PC2 не мог бы пинговать R2 , но мог бы пинговать R14. Выполнить traceroute с PC2 на R2 и R1 |
| 6 | 1. Создать топологию, указанную на рисунке 2. Убедиться, что PC2 не пингуется с PC13. Настроить OSPF так, чтобы PC1 не мог бы пинговать R2 , но мог бы пинговать PC24. Выполнить traceroute с PC1 на PC2 и R2 |
| 7 | 1. Создать топологию, указанную на рисунке 2. Убедиться, что PC2 не пингуется с PC13. Настроить OSPF так, чтобы PC2 не мог бы пинговать R2 , но мог бы пинговать PC14. Выполнить traceroute с PC2 на PC1 и R2 |
| 8 | 1. Создать топологию, указанную на рисунке 2. Убедиться, что PC2 не пингуется с PC13. Настроить OSPF так, чтобы R2 мог бы пинговать PC2 и PC14. Выполнить traceroute с R2 на PC2 и PC1 |
| 9 | 1. Создать топологию, указанную на рисунке 2. Убедиться, что PC2 не пингуется с PC13. Настроить OSPF так, чтобы R2 мог бы пинговать PC2 , но не мог бы пинговать PC14. Выполнить traceroute с R2 на PC2 и PC1 |
| 10 | 1. Создать топологию, указанную на рисунке 2. Убедиться, что PC2 не пингуется с PC13. Настроить OSPF так, чтобы R2 мог бы пинговать PC1, но не мог бы пинговать PC24. Выполнить traceroute с R2 на PC2 и PC1 |
📍 Запустить отчёты на каждой машине и выполнить соответствующие команды:
report 9 pc1- ip a show eth1
- ip route
- cat /etc/frr/frr.conf
- ping -fc3 10.0.50.1
- ping -fc3 10.0.30.2
- ping -fc3 10.0.40.3
- ping -fc3 10.0.222.22
- traceroute 10.0.222.22
- traceroute 10.0.40.2
report 9 pc2- ip a show eth1
- ip route
- cat /etc/frr/frr.conf
- ping -fc3 10.0.50.1
- ping -fc3 10.0.30.2
- ping -fc3 10.0.40.3
- ping -fc3 10.0.111.11
- traceroute 10.0.111.11
- traceroute 10.0.40.2
report 9 r1- ip a show
- ip route
- cat /etc/frr/frr.conf
- ping -fc3 10.0.30.2
- ping -fc3 10.0.40.3
- ping -fc3 10.0.111.11
- ping -fc3 10.0.222.22
- traceroute 10.0.222.22
- traceroute 10.0.111.11
report 9 r2- ip a show
- ip route
- cat /etc/frr/frr.conf
- ping -fc3 10.0.50.1
- ping -fc3 10.0.40.3
- ping -fc3 10.0.111.11
- ping -fc3 10.0.222.22
- traceroute 10.0.222.22
- traceroute 10.0.111.11
report 9 r3- ip a show
- ip route
- cat /etc/frr/frr.conf
- ping -fc3 10.0.30.2
- ping -fc3 10.0.50.1
- ping -fc3 10.0.111.11
- ping -fc3 10.0.222.22
- traceroute 10.0.222.22
- traceroute 10.0.111.11
📍 Полученные отчёты report.09.pc1, report.09.pc2, report.09.r1, report.09.r2, report.09.r3 перенести из виртуальной машины и прислать преподавателю с подписью выполненного варианта.