Что такое маршрутизация?

Маршрутизация — процесс определения пути, по которому пакет данных должен пройти от источника к получателю через одну или несколько сетей. Устройство, выполняющее маршрутизацию, называется маршрутизатором (router).

Маршрутизатор работает на 3-м уровне модели OSI (Сетевой уровень) и оперирует IP-адресами. Когда пакет приходит на интерфейс маршрутизатора, тот просматривает таблицу маршрутизации, выбирает наилучший маршрут и пересылает пакет на следующий узел (next-hop).

Ключевые понятия:
  • Next-hop — IP-адрес следующего маршрутизатора на пути к цели.
  • Метрика — числовой показатель предпочтительности маршрута.
  • Administrative Distance (AD) — степень доверия к источнику маршрута.

Статическая vs Динамическая маршрутизация

Статическая маршрутизация

  • Маршруты задаются вручную администратором
  • Не меняется автоматически при изменении топологии
  • Нет протокольных накладных расходов
  • Полный контроль над путями
  • Подходит для небольших сетей, граничных маршрутизаторов
  • AD = 1 (Cisco)

Динамическая маршрутизация

  • Маршруты вычисляются протоколами автоматически
  • Адаптируется к изменениям топологии
  • Протоколы: OSPF, EIGRP, BGP, RIP
  • Требует ресурсов CPU и полосы пропускания
  • Подходит для крупных, сложных сетей
  • AD = 90–120 (зависит от протокола)
Критерий Статическая Динамическая
НастройкаВручнуюАвтоматически
МасштабируемостьНизкаяВысокая
Реакция на сбойНетАвтоматическая
БезопасностьВыше (нет анонсов)Требует защиты протокола
Нагрузка на сетьНулеваяЗависит от протокола
Типичное применениеStub-сети, last-resortКорпоративные WAN/LAN

IP-адресация и субнетинг (IPv4)

IPv4-адрес — 32-битное число, записываемое в виде четырёх октетов (0–255), разделённых точками. Например: 192.168.10.5. Вместе с маской подсети он определяет, к какой сети принадлежит хост.

Маска подсети и CIDR

Маска подсети указывает, сколько бит адреса относится к сети, а сколько — к хосту. CIDR-нотация записывает это как /N, где N — количество единичных битов маски.

CIDR Маска Хостов Пример сети Диапазон хостов
/8255.0.0.016,777,21410.0.0.0/810.0.0.1 – 10.255.255.254
/16255.255.0.065,534172.16.0.0/16172.16.0.1 – 172.16.255.254
/24255.255.255.0254192.168.1.0/24192.168.1.1 – 192.168.1.254
/25255.255.255.128126192.168.1.0/25192.168.1.1 – 192.168.1.126
/26255.255.255.19262192.168.1.0/26192.168.1.1 – 192.168.1.62
/30255.255.255.252210.0.0.0/3010.0.0.1 – 10.0.0.2

Вычисление адреса сети

Адрес сети = IP-адрес AND Маска подсети (побитовое И):

Вычисление подсети
# IP: 192.168.10.45 = 11000000.10101000.00001010.00101101 # Маска: 255.255.255.0 = 11111111.11111111.11111111.00000000 # AND: 192.168.10.0 = 11000000.10101000.00001010.00000000 Адрес сети: 192.168.10.0 Broadcast: 192.168.10.255 Первый хост: 192.168.10.1 Последний хост:192.168.10.254 Количество хостов: 254

Частные (RFC 1918) адресные пространства

ДиапазонCIDRКоличество адресовПрименение
10.0.0.0 – 10.255.255.255/8~16.7 млнКрупные корп. сети
172.16.0.0 – 172.31.255.255/12~1 млнСредние сети
192.168.0.0 – 192.168.255.255/16~65 тысДомашние/офисные сети

Таблица маршрутизации

Таблица маршрутизации (Routing Table / FIB — Forwarding Information Base) хранится в каждом маршрутизаторе и содержит список известных сетей с информацией о том, как до них добраться.

Каждая запись включает:

  • Сеть назначения — целевой IP-диапазон (prefix + mask)
  • Next-hop — адрес следующего маршрутизатора или
  • Интерфейс — исходящий сетевой интерфейс
  • Метрика — стоимость маршрута (меньше = лучше)
  • Administrative Distance — доверие к источнику
Linux — просмотр таблицы маршрутизации
$ ip route show default via 10.0.0.1 dev eth0 proto static metric 100 10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.5 metric 100 192.168.10.0/24 via 10.0.0.254 dev eth0 proto static metric 100 172.16.0.0/16 via 10.0.0.254 dev eth0 proto static metric 200 $ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Iface 0.0.0.0 10.0.0.1 0.0.0.0 UG 100 eth0 10.0.0.0 0.0.0.0 255.255.255.0 U 100 eth0 192.168.10.0 10.0.0.254 255.255.255.0 UG 100 eth0 172.16.0.0 10.0.0.254 255.255.0.0 UG 200 eth0
Cisco IOS — просмотр таблицы маршрутизации
Router# show ip route Codes: C - connected, S - static, R - RIP, O - OSPF, B - BGP, * - candidate default Gateway of last resort is 203.0.113.1 to network 0.0.0.0 S* 0.0.0.0/0 [1/0] via 203.0.113.1 C 10.0.0.0/24 is directly connected, GigabitEthernet0/0 S 192.168.10.0/24 [1/0] via 10.0.0.254 S 172.16.0.0/16 [1/0] via 10.0.0.254

Принятие решений о пересылке пакетов

Когда маршрутизатор получает пакет, он выполняет следующий алгоритм:

  1. Извлекает IP-адрес назначения из заголовка пакета.
  2. Ищет совпадение в таблице маршрутизации по принципу Longest Prefix Match (LPM) — выбирается наиболее конкретный (длинный) совпадающий префикс.
  3. Если найдено несколько маршрутов с одинаковой длиной префикса — выбирается маршрут с наименьшим Administrative Distance, затем с наименьшей метрикой.
  4. Если маршрут не найден — пакет отбрасывается (ICMP "Destination Unreachable" отправляется источнику).
  5. Маршрутизатор уменьшает TTL на 1. Если TTL = 0 — пакет отбрасывается (ICMP "Time Exceeded").
  6. Пересылает пакет на интерфейс или next-hop, найденный в таблице.

Longest Prefix Match — пример

Выбор маршрута для 192.168.1.55
# Таблица маршрутизации: 0.0.0.0/0 via 10.0.0.1 (маршрут по умолчанию, /0) 192.168.0.0/16 via 10.0.0.2 (совпадение /16) 192.168.1.0/24 via 10.0.0.3 (совпадение /24) ← ВЫБРАН (длиннее) 192.168.1.48/28 via 10.0.0.4 (совпадает? 192.168.1.48-63 → НЕТ для .55? ДА!) # 192.168.1.55 попадает в 192.168.1.48/28? # 192.168.1.48 = ...00110000, 192.168.1.55 = ...00110111 → ДА (/28 длиннее) # Победитель: 192.168.1.48/28 via 10.0.0.4

Лабораторная работа: Статические маршруты на Linux

Инструмент: команды ip route из пакета iproute2. Устаревшая альтернатива — route из net-tools.

Добавление маршрута

bash — ip route
# Синтаксис: ip route add <сеть/маска> via <next-hop> [dev <интерфейс>] [metric <N>] # Добавить маршрут к сети 10.20.0.0/24 через шлюз 192.168.1.1 $ sudo ip route add 10.20.0.0/24 via 192.168.1.1 # Добавить через конкретный интерфейс $ sudo ip route add 10.30.0.0/16 via 192.168.1.1 dev eth0 # Маршрут по умолчанию (шлюз по умолчанию) $ sudo ip route add default via 192.168.1.1 # Или: $ sudo ip route add 0.0.0.0/0 via 192.168.1.1 # Добавить маршрут с метрикой (предпочтение) $ sudo ip route add 10.40.0.0/8 via 192.168.1.1 metric 50 $ sudo ip route add 10.40.0.0/8 via 192.168.1.2 metric 100 # Первый маршрут будет основным, второй — резервным

Просмотр и удаление

bash — управление маршрутами
# Просмотр всей таблицы маршрутизации $ ip route show $ ip route list # Проверить, какой маршрут будет использован для конкретного IP $ ip route get 8.8.8.8 8.8.8.8 via 192.168.1.1 dev eth0 src 192.168.1.5 uid 1000 # Удалить маршрут $ sudo ip route del 10.20.0.0/24 via 192.168.1.1 $ sudo ip route del default # Заменить (обновить) существующий маршрут $ sudo ip route replace 10.20.0.0/24 via 192.168.1.254

Постоянные маршруты (сохранение после перезагрузки)

Ubuntu/Debian — Netplan (/etc/netplan/01-netcfg.yaml)
network: version: 2 ethernets: eth0: dhcp4: no addresses: - 192.168.1.5/24 gateway4: 192.168.1.1 routes: - to: 10.20.0.0/24 via: 192.168.1.1 - to: 172.16.0.0/16 via: 192.168.1.1 metric: 200
RHEL/CentOS — /etc/sysconfig/network-scripts/route-eth0
10.20.0.0/24 via 192.168.1.1 dev eth0 172.16.0.0/16 via 192.168.1.1 dev eth0 metric 200

Включение IP-форвардинга (превращение Linux в маршрутизатор)

bash — IP forwarding
# Временно включить $ sudo sysctl -w net.ipv4.ip_forward=1 net.ipv4.ip_forward = 1 # Постоянно — добавить в /etc/sysctl.conf $ echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf $ sudo sysctl -p # Проверить текущее состояние $ cat /proc/sys/net/ipv4/ip_forward 1

Лабораторная работа: Статические маршруты на Cisco IOS

Базовый синтаксис команды ip route

Cisco IOS
! Синтаксис: ip route <сеть> <маска> {<next-hop> | <интерфейс>} [<AD>] [permanent] ! Простой статический маршрут Router(config)# ip route 10.20.0.0 255.255.255.0 192.168.1.1 ! Маршрут через интерфейс (для Point-to-Point каналов) Router(config)# ip route 10.30.0.0 255.255.0.0 GigabitEthernet0/1 ! Плавающий статический маршрут (резервный, AD=200) Router(config)# ip route 10.20.0.0 255.255.255.0 192.168.1.1 100 Router(config)# ip route 10.20.0.0 255.255.255.0 10.0.0.1 200 ! Маршрут по умолчанию Router(config)# ip route 0.0.0.0 0.0.0.0 203.0.113.1 ! Постоянный маршрут (не удаляется при отключении интерфейса) Router(config)# ip route 10.40.0.0 255.255.0.0 10.0.0.1 permanent

Проверка и диагностика

Cisco IOS — диагностика маршрутизации
! Просмотр таблицы маршрутизации Router# show ip route Router# show ip route static Router# show ip route 10.20.0.0 ! Проверить, какой маршрут используется Router# show ip route 8.8.8.8 Routing entry for 0.0.0.0/0, supernet Known via "static", distance 1, metric 0, candidate default path Routing Descriptor Blocks: * 203.0.113.1 Route metric is 0, traffic share count is 1 ! Трассировка пути Router# traceroute 8.8.8.8 ! Удалить статический маршрут Router(config)# no ip route 10.20.0.0 255.255.255.0 192.168.1.1 ! Показать сводку всех интерфейсов и их статусов Router# show ip interface brief Interface IP-Address OK? Method Status Protocol GigabitEthernet0/0 192.168.1.1 YES manual up up GigabitEthernet0/1 10.0.0.1 YES manual up up Serial0/0/0 203.0.113.2 YES manual up up

Типовая конфигурация: три маршрутизатора

Cisco IOS — полная конфигурация R1
! Топология: LAN_A — R1 — R2 — R3 — LAN_B ! R1: LAN_A=192.168.10.0/24, линк к R2: 10.0.12.0/30 R1(config)# interface GigabitEthernet0/0 R1(config-if)# ip address 192.168.10.1 255.255.255.0 R1(config-if)# no shutdown R1(config-if)# exit R1(config)# interface GigabitEthernet0/1 R1(config-if)# ip address 10.0.12.1 255.255.255.252 R1(config-if)# no shutdown R1(config-if)# exit ! Маршрут к LAN_B через R2 R1(config)# ip route 192.168.20.0 255.255.255.0 10.0.12.2 ! Маршрут по умолчанию (интернет) R1(config)# ip route 0.0.0.0 0.0.0.0 10.0.12.2

Визуализация: путь пакета от источника к назначению

Рассмотрим путь пакета от хоста PC-A (192.168.10.5) к хосту PC-B (192.168.30.7) через три маршрутизатора.

PC-A
192.168.10.5
GW: .10.1
R1
192.168.10.1
10.0.12.1
10.0.12.2
R2
10.0.12.2
10.0.23.1
10.0.23.2
R3
10.0.23.2
192.168.30.1
GW: .30.1
PC-B
192.168.30.7

Пошаговый разбор

  1. PC-A → R1: PC-A определяет, что 192.168.30.7 не в его подсети (/24). Отправляет пакет шлюзу по умолчанию — R1 (192.168.10.1). На уровне L2 используется MAC-адрес R1 (ARP).
  2. R1 принимает решение: Ищет 192.168.30.7 в таблице маршрутизации. Находит маршрут 192.168.30.0/24 via 10.0.12.2. Уменьшает TTL. Пересылает на R2.
  3. R2 принимает решение: Находит маршрут 192.168.30.0/24 via 10.0.23.2. Уменьшает TTL. Пересылает на R3.
  4. R3 принимает решение: Находит сеть 192.168.30.0/24 как напрямую подключённую (connected) через интерфейс GE0/0. Пересылает в локальную сеть.
  5. R3 → PC-B: На уровне L2 R3 делает ARP-запрос для 192.168.30.7, получает MAC-адрес PC-B и доставляет пакет.

Проверка пути командами

Linux — трассировка маршрута
$ traceroute -n 192.168.30.7 traceroute to 192.168.30.7 (192.168.30.7), 30 hops max, 60 byte packets 1 192.168.10.1 0.432 ms 0.387 ms 0.361 ms ← R1 2 10.0.12.2 1.211 ms 1.198 ms 1.201 ms ← R2 3 10.0.23.2 2.045 ms 2.037 ms 2.019 ms ← R3 4 192.168.30.7 2.891 ms 2.876 ms 2.869 ms ← PC-B $ ping -c 4 192.168.30.7 PING 192.168.30.7 (192.168.30.7) 56(84) bytes of data. 64 bytes from 192.168.30.7: icmp_seq=1 ttl=61 time=2.89 ms 64 bytes from 192.168.30.7: icmp_seq=2 ttl=61 time=2.77 ms

Где захватывать трафик: точки перехвата

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

До маршрутизатора (входной интерфейс)

Видите трафик до применения ACL и маршрутизации. Полезно для анализа входящих атак.

tcpdump -i eth0 -n

После маршрутизатора (исходящий интерфейс)

Видите трафик после маршрутизации. Полезно для проверки правильности пересылки.

tcpdump -i eth1 -n

На интерфейсе между двумя сетями

Позволяет видеть весь межсетевой трафик и обнаруживать аномалии маршрутизации.

tcpdump -i eth0 net 10.0.0.0/8

Зеркалирование (SPAN/Mirror Port)

На коммутаторе настраивается SPAN-порт для копирования всего трафика на анализатор.

monitor session 1 source int Gi0/1
monitor session 1 destination int Gi0/24
Важно: В коммутируемых сетях (switched networks) хост видит только свой трафик и широковещательные кадры. Для полного захвата используйте SPAN-порт, TAP-устройство или ARP-spoofing (только в авторизованных тестах на проникновение).
Совет: Для захвата трафика маршрутизатора в Linux запускайте tcpdump на нескольких интерфейсах одновременно. Используйте флаг -i any для захвата со всех интерфейсов сразу (трафик будет помечен именем интерфейса).