Динамическая адресация и связность сети

Задачи (повторение):

  1. Глобальная идентификация (адресация)
    1. Структура адреса
    2. Механизм раздачи

  2. Алгоритм доставки (маршрутизация)
    1. Известный маршрут и маршрут по умолчанию внутри крупной сети
    2. Связность крупных сетей (карта достижимости / стоимость)

Автоматическая раздача адресов

Повторение: На каждом интерфейсе, на котором включен IP, автоматически генерируется link-local адрес:

Конкретное поведение и способ генерации IID определяет ряд стандартных алгоритмов

ICMP Router Advertisement

Стандартный механизм динамической настройки конечных узлов основан на сообщениях ICMP, протокола сетевого уровня:

RA содержит:

Серверы:

Как узлы автоматически назначают себе адреса?

/!\ Администратор IP-сети не может явно запретить узлам назначать себе адреса и отвечать на Neighbour Solicitation. Однако, на практике он часто может заставить локальную среду не передавать RA с интерфейсов узлов, не являющихся маршрутизаторами ("RA Guard"), или же подключать узлы к среде в индивидуальном, разрешительном порядке.

При ручной настройке IP-адресов на интерфейсе сразу создаётся и маршрут к адресам из подсети.

При автоматической настройке IP на интерфейсе по объявлению от маршрутизатора (флаг A в RA-опции о префиксе) такая запись в таблицу маршрутов может не вноситься (в Linux включается опция-флаг noprefixroute)

Настройка маршрутизатора BIRD

Добавим в bird.conf, например, на машине router следующее:

protocol device {
        scan time 10;           # Scan interfaces every 10 seconds
} # нужен, чтобы BIRD собирал данные с интерфейсов: up/down, назначенные адреса
protocol radv downstream {
        interface "eth1" {
                prefix 2001:db8:1:cc::/64;
        };
        prefix 2001:db8:1:cc::/64 {
        };
}

/!\ Нужно не забыть настроить router-id!

router id 198.51.100.2;

BIRD без этого отказывается работать; когда будем обсуждать OSPF, будет понятно, почему.

Назначим адреc в нужном префиксе на eth1 командой ip:

% ip -6 a add 2001:db8:1:cc::2/64 dev eth1

BIRD будет анонсировать этот префикс на eth1.

После запуска bird на srv ядро Linux на машине client настроит маршрут по умолчанию и префикс (TODO):

Запустить tcpdump на client и увидеть пакет при старте BIRD и отменяющий пакет при останове.

Динамическое распространение таблиц маршрутизации

⇒ Сложно каждый раз руками делать ip route add

ICMP RA плохо подходит для настройки роутеров как таковых и не подходит для распространения таблиц маршрутизации ⇒ новый протокол.

OSPF версии 3

ПО: zebra, quagga, bird, frr

Настройка OSPF в BIRD

TODO: verify this configuration. Площадка:

Настроить, запустить; посмотреть, как приезжают маршруты!

Кстати! BIRD умеет записывать результаты не в основную, а в целевую таблицу маршрутизации (параметр kernel table №; в секции protocol kernel).

Обеспечение глобальной связности

Проблема глобальной связности: табличная эскалация и дескалация, а что между?

https://img-fotki.yandex.ru/get/5637/83739833.27/0_b9007_9151d107_XL.png

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

(ещё раз упомяну Сети для самых маленьких с замечанием, что по этой теме они точно не про Linux)

Д/З

Новое в образе: обновление системы и bird.

Задание 5

  1. Суть: объединить policy routing и OSPF в следующей топологии
    • ../../../LinuxNetwork2022/05_IProuteRule/PortRouting.svg

    • Верхний сервер srv: «выход в интернет» + доступность машины client

    • Нижний сервер web: «выход в интернет» + доступность машины client

    • Маршрутизатор router:

      • TCP-соединения на 80-й и 443-й порты идут через web; весь остальной трафик (например, ping или traceroute) — через srv

    • Клиент client — «просто работает»

    • Дополнительное условие: никаких заранее заданных статических маршрутов (в т. ч. по умолчанию) в основной таблице маршрутизации, используйте OSPF (в srv и web они приедут по DHCP)

      • Единственная загвоздка: как не принимать от web маршрут по умолчанию в основную таблицу маршрутизации на router

      • Допустимо использовать статические маршруты в целевых таблицах маршрутизации (в идеале они тоже должны заполняться OSPF, но я сам пока не пробовал)

  2. <!> ВНИМАНИЕ! Предварительная настройка в отчёт не входит! Отчёт делается по уже работоспособной сети.

  3. Отчёт (конфигурацию bird надо показывать, даже если вы его на данном хосте не использовали):

    1. report 5 srv и report 5 web (они, по идее, идентичны?):

      • ip addr

      • ip route

      • grep "^[^#]" /etc/bird.conf

      • birdc show route

      • ping -c3 <client>

        • <client> — это IP-адрес клиента

      • tcpdump -i eth0 -c 2 tcp

    2. report 5 router

      • ip addr

      • ip route

      • ip rule

      • ip route list table <номер>

        • <номер> — это номер целевой таблицы маршрутизации для web

        • Если в вашем решении используется несколько целевых таблиц, команда выполняется для каждой
      • grep "^[^#]" /etc/bird.conf

      • birdc show route

    3. client

      • ip addr

      • ip route

      • grep "^[^#]" /etc/bird.conf

      • birdc show route

      • dig +tcp @1.1.1.1 ya.ru

      • echo -e "GET / HTTP/1.1\nHOST: ya.ru\n" | netcat 77.88.55.242 80

  4. Четыре отчёта с названиями report.05.router, report.05.srv, report.05.web, report.05.client переслать одним письмом в качестве приложений на uneexlectures@cs.msu.ru

    • В теме письма должно встречаться слово LinuxNetwork2023

LecturesCMC/LinuxNetwork2023/Six/05_RAdvOSPF (последним исправлял пользователь ArsenyMaslennikov 2023-12-04 02:06:16)