Целевая маршрутизация и «подключение к интернету»

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

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

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

Долги за прошлую лекцию

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

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

OSPF

ПО: zebra, quagga, bird, frr

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

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

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

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

Д/З

Новое в образе: dig и telnet на консоль, а ещё он стал меньше ☺

Задание 5

  1. Суть: объединить обе схемы из лекции: настроить «выход в интернет» на двух внутренних машинах так, чтобы
    • для Клиента-1 весь трафик, кроме TCP-соединений на 80-й порт, шёл через Сервер-1, а соединения на 80-й порт — через Сервер-2.
    • для Клиента-2 весь трафик, кроме TCP-соединений на 80-й порт, шёл через Сервер-2, а соединения на 80-й порт — через Сервер-1.
    • Подсказка: логических выражений в ip rule нет, зато есть приоритет (номер в начале ip rule list). Я сделал три правила:

      1. Соединения от Клиента-1 на порт 80 — альтернативная таблица (высокий приоритет, ближе к 0)
      2. Соединения на порт 80 (т. е. все остальные) — таблица main (приоритет поменьше)

      3. Соединения от Клиента-2 (т. е. кроме 80-порта) — альтернативная таблица (приоритет ещё меньше, ближе к 32767)
    • Обратите внимание: если не задавать приоритет вручную, он будет самым низким из доступных

      XSourceRouting.svg

  2. Настроить «выход в интернет» и маршрутизацию на внутреннюю сеть на Сервере1 и Сервере2 (в отчёт не входит)
  3. Отчёт:
    1. report 5 router

      • Поднять и настроить три интерфейса и маршрутизацию
      • Настроить policy routing по подсказке выше
      • Выполнить ip rule

      • Выполнить ip route

      • Выполнить ip route list table альтернативная_таблица (номер придумайте сами)

    2. report 5 client1

      • Поднять и настроить интерфейс и маршрутизацию
      • Выполнить ping -c1 87.250.250.242 (должен пройти)

      • Выполнить traceroute -Tnp 443 87.250.250.242 (должен проходить через Сервер1)

      • Выполнить traceroute -Tnp 80 87.250.250.242 (должен проходить через Сервер2)

    3. report 5 client2

      • Поднять и настроить интерфейс и маршрутизацию
      • Выполнить ping -c1 87.250.250.242 (должен пройти)

      • Выполнить traceroute -Tnp 443 87.250.250.242 (должен проходить через Сервер2)

      • Выполнить traceroute -Tnp 80 87.250.250.242 (должен проходить через Сервер1)

  4. Три отчёта(названия сохранить(должно быть: report.05.router, report.05.client1, report.05.client2)) переслать одним письмом в качестве приложений на uneexlectures@cs.msu.ru

LecturesCMC/LinuxNetwork2022/05_IProuteRule (последним исправлял пользователь Veniamin 2022-03-24 16:08:04)