Связность сети и целевая маршрутизация

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

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

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

Автоматическая настройка «выхода в интернет» (быстрый старт)

Можно посмотреть /etc/resolv.conf и ip route show (оно же ip r).

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

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

OSPF

ПО: zebra, quagga, bird, frr

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

Площадка:

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

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

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

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

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

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

Целевая маршрутизация

Destination-based принцип табличной маршрутизации: «сеть получателя ⇒ маршрут».

Задача source-based маршрутизации: «свойства пакета отправителя ⇒ маршрут».

Linux: просто заведём несколько таблиц маршрутизации (разных), и будем обрабатывать пакет по правилам одной из них сообразно его свойствам:

Команда ip rule (немного документации)

Заготовка:

  1. Два компьютера с выходом в интернет у каждого

  2. Маршрутизатор, подключённый к этим двум машинам по отдельным интерфейсам и третьей сетью для внутренних клиентов

Пример 1: подключаем два клиента ко внутренней сети, настраиваем source routing: с одного адреса пакеты в одну сторону, с другого — в другую

# ip route add default второй_сервер table какой-то-номер
# ip rule add from «IP_B» table какой-то-номер

Пример 2: подключаем один клиент, перекидываем трафик по 80/443 портам в другую сторону

# ip route add default второй_сервер table какой-то-номер
# ip rule add dport 80 table какой-то-номер

Получаем такую настройку:

   1 [root@router ~]# ip rule list
   2 0:      from all lookup local
   3 32765:  from all dport 80 lookup какой-то-номер
   4 32766:  from all lookup main
   5 32767:  from all lookup default
   6 [root@router ~]# ip route list         
   7 default via Сервер1 dev eth1 
   8 
   9 [root@router ~]# ip route list table какой-то-номер
  10 default via Сервер2 dev eth2
  11 

Правила в ip rule

Разумеется, в обоих примерах на серверах надо дополнительно настраивать маршрут в клиентскую сеть через центральный маршрутизатор.

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

Д/З

Новое в образе: обновление системы и 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).

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

    • Подсказка. Есть три варианта настройки web;

      1. Я делал так:
        • на srv вписал в 0.0.0.0 зону export all; (чтобы пропихивать маршрут по умолчанию), а на web — нет;

        • этот маршрут приехал на web (а зря, у него свой) поэтому я в протокол kernel вписал priority 200 (записи в таблице ядра стали более приоритетны, чем в таблице OSPF; по умолчанию — наоборот).

      2. Можно использовать на web в зоне 0.0.0.0 фильтр:

        import filter { if (net = 10.3.3.0/24 ) then accept; reject; };
      3. (не рекомендуется: это абъюз условия, хотя формально всё верно) Поскольку статические маршруты в целевых таблицах маршрутизации разрешены, можно на web вообще не запускать bird, а создать целевую таблицу маршрутизации на client и соответствующее правило.

  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

TODO вставить это в основное задание Некоторые провайдеры, например, «Акадо», блокируют DNS-запросы на сторонние сервера. Если вам не повезло с таким провайдером, посмотрите в файл /etc/resolv.conf на машине srv после настройки по DHCP. Там будет IP-адрес «ближайшего» DNS-сервера, который надо использовать вместо 1.1.1.1

LecturesCMC/LinuxNetwork2023/05_OSPFRule (последним исправлял пользователь FrBrGeorge 2023-03-30 19:06:54)