Сетевой уровень: адресация и маршрутизация (IPv6)

Задачи

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

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

IPv6

rfc8200

Структура адреса

IPv6_address, rfc4291.

LLA

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

Можно, конечно, назначить и вручную.

Свойства

Специальные адреса и сети

rfc5156

Протоколы сетевого уровня

Протоколы сетевого/интерфейсного уровня

Настройка IP в Linux и табличная маршрутизация

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

Три скринкаста к проводимым ниже настройкам: router, client, clone.

Настройка подсети

Сетевая маска: количество старших разрядов в двоичном представлении адреса, соответствующих «адресу сети». Оставшиеся младшие биты — IID в этой сети:

При ручной настройке IP на сетевом интерфейсе Linux указывается размер префикса. При этом Linux по умолчанию вносит в таблицу маршрутизации запись вида: «такая-то IP-подсеть находится непосредственно за этим сетевым интерфейсом», предполагая, что адреса в этом префиксе доступны напрямую по локальной среде.

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

На второй машине (она будет называться router, потому что в дальнейшем послужит маршрутизатором) — практически то же самое, но назначим внутрисегментный адрес:

Как работает Neighbour Discovery

TODO: вместо примера из жизни вставить пример из лабораторного окружения на наших виртуалках.

  1. Зачистим таблицу соседей на клиенте:
       1 [root@teacher ~]# ip -6 n flush all && ip -6 n
       2 [root@teacher ~]# 
       3 
    
  2. Запустим tcpdump -xx -n icmp6 на клиенте (но лучше на роутере);

  3. Запустим ping -6 -c2 cmc.msu.net на клиенте:

       1 [root@teacher ~]# ping -6c2 cmc.msu.net && ip -6 n
       2 PING cmc.msu.net(cmc.msu.net (2a00:f480::3)) 56 data bytes
       3 64 bytes from cmc.msu.net (2a00:f480::3): icmp_seq=1 ttl=64 time=0.621 ms
       4 64 bytes from cmc.msu.net (2a00:f480::3): icmp_seq=2 ttl=64 time=0.510 ms
       5 
       6 --- cmc.msu.net ping statistics ---
       7 2 packets transmitted, 2 received, 0% packet loss, time 1001ms
       8 rtt min/avg/max/mdev = 0.510/0.565/0.621/0.055 ms
       9 fe80::1 dev eno1 lladdr 00:15:c7:60:ac:00 router REACHABLE 
      10 
    

Вывод tcpdump:

NDP поддерживается ядром Linux.

Маршрутизация между двумя сетями

Подключим ко второму интерфейсу маршрутизатора ещё одну машину.

Надо сделать ещё два действия:

Простая табличная маршрутизация:

  1. Получаем пакет
  2. Просматриваем все записи в таблице, из них выбираем те, для которых адрес сети совпадает с адресом сети получателя пакета (если к нему применить соответствующую маску)
    • Если настроен маршрут по умолчанию (с сетевой маской длины 0), он всегда подходит
  3. Среди подходящих записей выбирается та, что имеет самую длинную сетевую маску (т. е. в которой меньше абонентов)
  4. Если это запись вида «сеть dev интерфейс», обращаемся за адресом к ND-таблице соседей, если «сеть via адрес» — используем этот адрес
  5. Пересылаем пакет на найденный адрес

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

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

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

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

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

Заготовка:

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

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

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

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

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

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

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

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

Правила в ip rule

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

Д/З (потребует адаптации)

Задание 4

  1. Суть: объединить четыре компьютера тремя сетями по простой линейной схеме:
    • clone ←сеть3→ router2 ←сеть2→ router1 ←сеть1→ base

    • На машинах clone и base — по одному интерфейсу

    • На машинах router2 и router1 — два, там настроить маршрутизацию

    • Обеспечить доступность между clone и base

  2. Отчёт (выполнятся с нуля на ненастроенных машинах):
    1. report 4 clone

      • Настройка/поднятие интерфейса
      • Дополнительные настройки маршрутизации (если нужны)
      • tcpdump -c4 (должен показать пинги) IPv6 note: как лучше избегать захвата лишних пакетов? ввести фильтр (icmp6 and 'ip6[40] = X')?

    2. report 4 router2

      • Настройка/поднятие двух интерфейсов
      • Дополнительные настройки маршрутизации (если нужны)
    3. report 4 router1

      • Настройка/поднятие двух интерфейсов
      • Дополнительные настройки маршрутизации (если нужны)
    4. report 4 base (выполняется последним)

      • Настройка/поднятие интерфейса
      • Дополнительные настройки маршрутизации (если нужны)
      • ping -c4 адрес_clone (должен проходить)

  3. Четыре отчёта (названия сохранить(должно быть: report.04.base, report.04.clone, report.04.router1, report.04.router2)) переслать одним письмом в качестве приложений на uneexlectures@cs.msu.ru

LecturesCMC/LinuxNetwork2023/Six/04_AddressRoute (последним исправлял пользователь ArsenyMaslennikov 2023-06-02 00:33:44)