Целевая маршрутизация и «подключение к интернету»
Задачи (повторение):
- Глобальная идентификация (адресация)
- Структура адреса
Механизм раздачи
- Алгоритм доставки (маршрутизация)
- Известный маршрут и маршрут по умолчанию внутри крупной сети
- Связность крупных сетей (карта достижимости / стоимость)
Долги за прошлую лекцию
К. О. спешит на помощь! В поле «маршрутизатор» команды ip route add сеть via маршрутизатор надо писать адрес… маршрутизатора а не собственного интерфейса! А то были случаи…
- IPv6 — увы, пока пропускаем (тем более, что в виртуалках выключено)
Новое в виртуалках: доступ через последовательную консоль, TCP и telnet
telnet localhost 2323
Ctrl+] и mode c
Работа traceroute: эксплуатация TTL
Динамическое распространение таблиц маршрутизации
- Большая сеть в едином администрировании
- Непростая и/или динамическая топология
- …
⇒ Сложно каждый раз руками делать ip route add
- отслеживание общего статуса всей сети
- расчёт кратчайшего пути по Дейкстре
Обеспечение глобальной связности
Проблема глобальной связности: табличная эскалация и дескалация, а что между?
- Весь интернет в full view не запихаешь
⇒ укрупнение до «системы под единым администрированием» (внутри таких систем OSPF и ему подобные решают проблемы) — т. н. автономных систем
Выдаются IANA / локальными регистраторами
Сложный протокол BGP
- Анонс собственной доступности
- Вычисление доступности и стоимости других AS
- Вот из AS-ок можно соорудить Full View, но
- 400 000+ маршрутов
- Имеет смысл только если у вас несколько AS в доступе
и вы хотите пропускать транзитный трафик либо выгадывать на стоимости перенаправления трафиков
Так делать большинство крупных операторов
- Иначе — т. н. «Last resort» (он же default route)
Т. е. очередная дихотомия: задачу связности решать надо, анонсировать доступность надо, но вычислять топологию нужно только если от этого есть польза.
(ещё раз упомяну Сети для самых маленьких с замечанием, что по этой теме они точно не про Linux)
Бонус: настройка выхода в интернет
На Базовой машине:
- Маршрут по умолчанию (это понятно)
- Работа роутером (это понятно)
- Настройка NAT (а что вы хотели от Private use?)
iptables -t nat -A POSTROUTING -o интерфейс -j MASQUERADE
- стоит признаться, что внешний адрес у нас тоже private use. И следующий. Больше натов богу натов.
Везде:
- Настройка DNS
Целевая маршрутизация
Destination-based принцип табличной маршрутизации: «сеть получателя ⇒ маршрут».
Задача source-based маршрутизации: «свойства пакета отправителя ⇒ маршрут».
Linux: просто заведём несколько таблиц маршрутизации (разных), и будем обрабатывать пакет по правилам одной из них сообразно его свойствам:
- Адрес отправителя
- Порт получателя (или отправителя)
- Интерфейс, протокол и т. п. …
Команда ip rule (немного документации)
Заготовка:
Два компьютера с выходом в интернет у каждого
- Маршрутизатор, подключённый к этим двум машинам по отдельным интерфейсам и третьей сетью для внутренних клиентов
Пример 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
- Просматриваются в порядке повышения приоритета
Правило lookup приводит к поиску в соответствующей таблице
- Если этот поиск удачен, происходит маршрутизация
Например, правило с наивысшим приоритетом «0: from all lookup local» приводит к поиску в таблице local (посмотрите на неё), отражающей подключённые локальные сети. Если адрес не из локальной сети, lookup local ничего не находит,
Если правило lookup не нашло маршрута, поиск продолжается дальше
Приоритет правила можно задавать вручную, добавив в конце priority номер
Основная таблица — main, именно её показывает ip route (т. е. ip route list table main)
Разумеется, в обоих примерах на серверах надо дополнительно настраивать маршрут в клиентскую сеть через центральный маршрутизатор.
Д/З
Новое в образе: dig и telnet на консоль, а ещё он стал меньше ☺
Задание 5
- Суть: объединить обе схемы из лекции: настроить «выход в интернет» на двух внутренних машинах так, чтобы
- для Клиента-1 весь трафик, кроме TCP-соединений на 80-й порт, шёл через Сервер-1, а соединения на 80-й порт — через Сервер-2.
- для Клиента-2 весь трафик, кроме TCP-соединений на 80-й порт, шёл через Сервер-2, а соединения на 80-й порт — через Сервер-1.
Подсказка: логических выражений в ip rule нет, зато есть приоритет (номер в начале ip rule list). Я сделал три правила:
- Соединения от Клиента-1 на порт 80 — альтернативная таблица (высокий приоритет, ближе к 0)
Соединения на порт 80 (т. е. все остальные) — таблица main (приоритет поменьше)
- Соединения от Клиента-2 (т. е. кроме 80-порта) — альтернативная таблица (приоритет ещё меньше, ближе к 32767)
- Обратите внимание: если не задавать приоритет вручную, он будет самым низким из доступных
- Настроить «выход в интернет» и маршрутизацию на внутреннюю сеть на Сервере1 и Сервере2 (в отчёт не входит)
- Отчёт:
report 5 router
- Поднять и настроить три интерфейса и маршрутизацию
- Настроить policy routing по подсказке выше
Выполнить ip rule
Выполнить ip route
Выполнить ip route list table альтернативная_таблица (номер придумайте сами)
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)
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)
Три отчёта(названия сохранить(должно быть: report.05.router, report.05.client1, report.05.client2)) переслать одним письмом в качестве приложений на uneexlectures@cs.msu.ru