View on GitHub

Network Technologies Labolatories

Practical materials for learning Network Technologies

Лабораторная работа №9 — Маршрутизация сетей с использованием OSPF


Быстрый поиск


Цель лабораторной — познакомить изучающего с основами протокола маршрутизации OSPF

Задачи лабораторной:


Протокол OSPF

Протокол OSPF (Open Shortest Path First) — Протокол маршрутизации по состоянию канала.

Глобально протокол можно разделить на два этапа — обмен данными и построение маршрутов. Данные этапы могут конвейерным образом сочетаться.

При обмене данными каждый узел передаёт своим соседям данные заголовков LSA (Link State Advertisement) интерфейсов из своей базы данных. При получении новых записей или обновления данных о каком-то канале узел запоминает эти данные и запрашивает полные данные LSA. На основании полных данных строится взвешенный ориентированный остовный граф всей сетевой топологии, веса рассчитываются согласно метрике стоимости канала (некоторой величины на базе информации о состоянии канала)

После получения полных данных, на этапе построения маршрутов, используется алгоритм Дейкстры для построения связного ориентированного остовного дерева маршрутов с минимальной стоимостью.


Пример настройки OSPF

Для изучения маршрутизации с помощью OSPF разберём топологию между тремя маршрутизаторами.

Для работы создайте 3 клона согласно топологии сети. Для создания соединений между машинами необходимо в VirtualBox настроить сетевые интерфейсы (описание настройки подключения находится в разделе настройки сетевых подключений):


Базовая настройка виртуальных машин

📍 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
!

ℹ Конфигурационный файл включает в себя:

📍 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 настроить сетевые интерфейсы (описание настройки подключения находится в разделе настройки сетевых подключений):


Варианты заданий

Группа Задание
1 1. Создать топологию, указанную на рисунке
2. Убедиться, что PC2 не пингуется с PC1
3. Настроить OSPF между R1 и R3
4. Убедиться, что PC2 пингуется с PC1 и наоборот
5. Выполнить traceroute с PC1 на PC2
2 1. Создать топологию, указанную на
рисунке
2. Убедиться, что PC2 не пингуется с PC1
3. Настроить OSPF так, чтобы PC2 не мог бы пинговать R2, а PC1 мог бы
4. Выполнить traceroute с PC1 и PC2 на R2
3 1. Создать топологию, указанную на рисунке
2. Убедиться, что PC2 не пингуется с PC1
3. Настроить OSPF так, чтобы PC1 не мог бы пинговать R2, а PC2 мог бы
4. Выполнить traceroute с PC1 и PC2 на
R2
4 1. Создать топологию, указанную на рисунке
2. Убедиться, что PC2 не пингуется с PC1
3. Настроить OSPF так, чтобы PC1 не мог бы пинговать R2, но мог бы пинговать R3
4. Выполнить traceroute с PC1 на R2 и R3
5 1. Создать топологию, указанную на рисунке
2. Убедиться, что PC2 не пингуется с PC1
3. Настроить OSPF так, чтобы PC2 не мог бы пинговать R2 , но мог бы пинговать R1
4. Выполнить traceroute с PC2 на R2 и R1
6 1. Создать топологию, указанную на рисунке
2. Убедиться, что PC2 не пингуется с PC1
3. Настроить OSPF так, чтобы PC1 не мог бы пинговать R2 , но мог бы пинговать PC2
4. Выполнить traceroute с PC1 на PC2 и R2
7 1. Создать топологию, указанную на рисунке
2. Убедиться, что PC2 не пингуется с PC1
3. Настроить OSPF так, чтобы PC2 не мог бы пинговать R2 , но мог бы пинговать PC1
4. Выполнить traceroute с PC2 на PC1 и R2
8 1. Создать топологию, указанную на рисунке
2. Убедиться, что PC2 не пингуется с PC1
3. Настроить OSPF так, чтобы R2 мог бы пинговать PC2 и PC1
4. Выполнить traceroute с R2 на PC2 и PC1
9 1. Создать топологию, указанную на рисунке
2. Убедиться, что PC2 не пингуется с PC1
3. Настроить OSPF так, чтобы R2 мог бы пинговать PC2 , но не мог бы пинговать PC1
4. Выполнить traceroute с R2 на PC2 и PC1
10 1. Создать топологию, указанную на рисунке
2. Убедиться, что PC2 не пингуется с PC1
3. Настроить OSPF так, чтобы R2 мог бы пинговать PC1, но не мог бы пинговать PC2
4. Выполнить traceroute с R2 на PC2 и PC1

📍 Запустить отчёты на каждой машине и выполнить соответствующие команды:

📍 Полученные отчёты report.09.pc1, report.09.pc2, report.09.r1, report.09.r2, report.09.r3 перенести из виртуальной машины и прислать преподавателю с подписью выполненного варианта.