Использование и примеры маршрутизации Linux

Одной из главнейших задач сетевого уровня модели OSI является маршрутизация. Устройства, которые связывают подсети между собой в единую составную сеть, называются маршрутизаторами. Внутри сети сегменты не разделяются маршрутизаторами, иначе это была бы не одна сеть, а несколько сетей. Маршрутизатор соединят несколько сетей в интерсеть (internetwork или internet).

Данные, которые поступают на сетевой уровень и которые необходимо передать через составную сеть, снабжаются заголовком сетевого уровня. Данные вместе с заголовком образуют пакет. Заголовок пакета сетевого уровня имеет унифицированный формат, не зависящий от форматов кадров канального уровня тех сетей, которые могут входить в объединенную сеть, и несет наряду с другой служебной информацией данные о номере сети, которой предназначается этот пакет. Явная нумерация сетей позволяет протоколам сетевого уровня составлять точную карту межсетевых связей и выбирать рациональные маршруты при любой их топологии, в том числе альтернативные маршруты, если они имеются, что никак не умеют делать мосты и коммутаторы.

Сетевой уровень определяет маршрут пути следования пакета и перемещает его между подсетями. При передаче пакета из одной подсети в другую пакет сетевого уровня, инкапсулированный в прибывший канальный кадр первой подсети, освобождается от заголовков этого кадра и окружается заголовками кадра канального уровня следующей подсети. Информацией, на основе которой делается эта замена, являются служебные поля пакета сетевого уровня.

Резюмируем.

  1. построение неоднородных сетей реализуют с помощью сетевого уровня.
  2. сетевой уровень использует собственную адресацию, которая обеспечивает каждому узлу подсети составной сети свой универсальный сетевой адрес, который состоит из номера сети и номера узла. Благодаря такой системе адресации сетевой уровень может пересылать информации к узлу получателю "не обращая внимания" на внутреннюю структуру подсетей, с другой стороны для непосредственного продвижения пакетов к адресату, он использует технологию передачи данных конкретной подсети, через которую следуют эти пакеты.
  3. поиск наилучшего пути следования пакетов в сети - маршрутизация - это основная задача сетевого уровня.
  4. сети соединяются между собой с помощью маршрутизаторов. Маршрутизаторы занимаются сбором информации о топологии межсетевых соединений, и на ее основании пересылают данные в пункт назначения.

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

Маршрутизация статическая

Статическая маршрутизация является одним из способов задания маршрута следования пакетов в сетях. При этом протоколы маршрутизации не используются, а необходимая информация заносится системным администратором вручную в соответствующие таблицы маршрутизации. К статическим маршрутам также относится маршрут по умолчанию (default route).

Создание собственных таблиц и правил маршрутизации это и есть Policy-Routing, он же PBR (Policy-based Routing). SBR (Source-based Routing) или Source-Routing в FAQ Linux является частным случаем Policy-Routing, в случае использования условия from в правиле маршрутизации.

iproute

iproute также известна как iproute2.

Пакет iproute состоит из нескольких утилит управления трафиком:

  • ip – управление собственно маршрутизацией;
  • tc – управление очередями маршрутизации;
  • ss — утилита для просмотра текущих соединений и открытых портов, аналог утилиты Как пользоваться командой netstat.
Доступ ко всем возможностям дает только ip, использование утилиты route устарело (вы не сможете настроить например политики маршрутизации и не увидите их существование в выводе команды просмотра, если они уже настроены в системе).
  • Увидеть IP и MAC -адрес, аналог Работа с ARP протоколом: очистка таблицы -a
    # ip neighbour show
  • Поиск маршрута для удаленного ip
    ip route get 192.168.35.55
    192.168.35.55 via 192.168.35.254 dev tun1  src 10.26.95.254 
        cache  ipid 0xf0ea
  • Для все MAC задает состояние failed, в дальнейшем ядро Ос удалит помеченные так MAC записи из arp таблицы.
    # ip neigh flush all
  • Вывести запись о маршруте по умолчанию:
    # ip r | grep default
  • Просмотр сетевых карт
    # ip link list
  • Сбросить кеш маршрутизатора
    # ip route flush cache
  • blackhole. Добавить «зануленный» маршрут (аналог «ip route … null0» в Cisco). Пакеты в сеть с таким маршрутом будут удалены с причиной «No route to host». Может быть полезно для подавление Что такое DoS (DDoS) -атака-атаки с хоста
    # ip route add blackhole 10.56.50.0/27
  • C помощью команды ip addr add можно установить на сетевом интерфейсе как основной IP адрес, так и несколько дополнительных адресов. Удалить IP адрес
    ip addr del 10.90.91.254 dev eth4
    или удалить все с интерфейса wlan1
    ip addr flush wlan1

Вывести таблицы маршрутизации. Ядро принимает решение о применении той или иной таблицы на основании адреса источника пакета. Эти таблицы применимы для всех пакетов.

# ip rule list
0:      from all lookup local 
32766:  from all lookup main 
32767:  from all lookup default

Вывести содержимое таблицы local.

# ip route show table local
  • Таблица local. Пакет при выборе пути к месту назначения проверяется правилом с наименьшим приоритетом. Правило 0 отправит поиск маршрута в таблицу "local".

Таблица local проверяет не адресован ли пакет локальной машине (широковещательный или сетевой адреса интерфейсов). Таблицу local автоматически заполняют команды конфигурации сетевых интерфейсов.

  • Таблица main - является основной и именно она используется, если в команде, связанной с маршрутизацией, не указано какую таблицу использовать. При поднятии интерфейсов в неё прописываются маршруты к подсетям интерфейсов, стартовые скрипты также заносят в эту таблицу значение шлюза по-умолчанию. Использование команды route add администратором также может дополнить таблицу маршрутами. В общем случае, таблица main всегда содержит подходящий для пакета маршрут (например шлюз по-умолчанию).
  • Таблица default изначально пуста.
  • Модификация таблицы маршрутизации:
    Добавление маршрута через шлюз: ip route add 172.16.10.0/24 via 192.168.1.1
    Добавление маршрута через интерфейс: ip route add 172.16.10.0/24 dev eth0
    Маршрут с метрикой: ip route add 172.16.10.0/24 dev eth0 metric 100

    Кроме add также поддерживаются и другие действия: del — удалить маршрут; replace — заменить маршрут другим; change — изменить параметры маршрута.

Policy-Routing. Маршрутизация для двух ISP

Пример 1. Создание таблицы для маршрутизации пакетов с определенного IP- адреса. Локальная сеть 10.26.95.0/24 имеет выход в Интернет с двух разных провайдеров – основной ISP1 (статика) и резервный ISP2 (Настройка DHCP сервера Linux, FreeBSD).

  • В файле /etc/iproute2/rt_tables для удобства задаются символьные имена таблиц, это не обязательно так как все таблицы имеют цифровые идентификаторы. Например
    echo '82 velton' >> /etc/iproute2/rt_tables
  • Маршрут по умолчанию для таблицы '82 velton'
    ip route add default via 82.117.232.1 table 82
  • Внесем правила маршрутизация для пользователя с IP 10.26.95.5, после чего эта таблица станет доступна в выводе команды ip rule list. Теперь все пользователи шлют пакеты через ISP1, кроме пользователя с IP 10.26.95.251
    ip rule add from 10.26.95.251/32 table 82
  • Очистить кеш маршрутизатора для вступления в силу сделанных изменений
    ip route flush cache

Пример 2. Создание таблицы для маршрутизации, когда часть сетей (AS) нужно маршрутизировать через резервного провайдер ISP2. Например, это может быть дешевая точка обменом трафика или ресурсы провайдера. whois - найти все IPs вашего провайдера

  • Создаем как в предыдущем примере маршрут по умолчанию для таблицы '82 velton'
    ip route add default via 82.117.232.1 table 82
  • Прописываем статические маршруты на сети ISP2
    ip route add 82.117.224.0/19 via 82.117.234.15
    ip route add 85.90.192.0/19 via 82.117.234.15
  • Добавим rule для всех сетей
    ip rule add to 82.117.224.0/19 table 82
    ip rule add to 85.90.192.0/19 table 82
  • Очистить кеш маршрутизатора для вступления в силу сделанных изменений
    ip route flush cache
PQ VPS сервера в 28+ странах.