Статична маршрутизація на основі політик в linux, блог любителя експериментів

Статична маршрутизація на основі політик в linux, блог любителя експериментів
Доброго часу, шановні Новомосковсктелі і гості мого блогу. Сьогодні хочу поглибити наші і ваші знання в розумінні статичної маршрутизації в Linux. Упор в статті буде зроблений на роботу з iproute і на маршрутизації на основі політик (Policy Routing). Для розуміння того, про що піде мова необхідно в обов'язковому порядку прочитати статті "Основні поняття мереж", "Налаштування мережі в Linux" і "Налаштування мережі в Linux за допомогою iproute".

Пару вступних слів про маршрутизації

Маршрути в Linux можуть з'являтися у різний спосіб. По-перше, як я вже говорив, при піднятті мережевого інтерфейсу з'являється відповідний маршрут в локальну мережу, куди дивиться інтерфейс. По-друге . маршрути можуть додаватися в ручну. Це називається статична маршрутизація. По-третє . маршрути можуть формуватися динамічно. базуючись на інформації про топології і стан мережі, одержуваної за допомогою протоколу динамічної маршрутизації. Це називається динамічної маршрутизацією. Динамічної маршрутизацією в Linux завідує демон gated або routed. можливо ще якийсь про який я не знаю

Маршрутизація на основі політик (Policy Routing)

Routing Policy DataBase (RPDB)

Давайте розглянемо роботу Routing Policy в схемі і розберемо порядок роботи:

Статична маршрутизація на основі політик в linux, блог любителя експериментів

1. Правила (rules)

Дія. застосовується до пакету може повертати невдалий результат, коли маршрут в заданій таблиці не знайдено, в такому випадку пакет переходить до наступного правила. При створенні правила маршрутизації можна задати певну дію над пакетом (не тільки направити в задану таблицю). Дії підрозділяються на наступні типи:

Кожне правило має свій пріоритет від 0 до 32767, відповідно до якого ядро ​​переглядає дані правила. При старті системи за умовчанням створюються такі правила:

Правило з пріоритетом 32766 діє так само для всіх пакетів (from all) і направляє в таблицю main. Таблиця main - основна таблиця маршрутизації, що містить всі маршрути не мають політик (тобто працюють за класичним принципом - місця призначення пакета). Це правило може бути видалено або перевизначити в інших (вищих) правилах.

Правило з пріоритетом 32767 діє так само для всіх пакетів (from all) і направляє в таблицю default. Таблиця default - по-замовчуванню порожня і зарезервована для використання. Може застосовуватися для призначення маршрутів за замовчуванням для пакетів, які не спрямованих куди-небудь в попередніх правилах. Правило може бути видалено.

При додаванні правила в ручну. без вказівки пріоритету (параметр priority), нові правила будуть отримувати номер з 32765 до 1.

Дуже важливо розуміти різницю між правилом і таблицею маршрутизації. Правило маршрутизації вказує на таблицю. Кілька правил можуть відправляти пакет до однієї таблиці маршрутизації. При цьому, деякі таблиці маршрутизації можуть бути БЕЗ правила, що вказує на них (читай - можуть не використовуватися).

Управління правилами здійснюється за допомогою команди ip з ключем rule. Ось деякі приклади:

2. Таблиці маршрутизації

Отже, наступним кроком на шляху пакета з мережевої підсистеми ядра буде таблиця маршрутизації. в яку пакет буде направлений відповідним правилом. Ядро використовує кілька таблиць маршрутизації з номерами від 1 до 255. Зіставлення номерів таблиць до їх імен задається у файлі / etc / iproute2 / rt_tables. Фактично, задавати імена таблиць їх номерним ідентифікаторів немає необхідності (в правилах можна просто використовувати номери таблиць). За замовчуванням при створенні маршруту в Linux, якщо не задано ім'я таблиці. то використовується таблиця з ID 254 (main). Крім таблиці main в ядрі зарезервовані наступні імена:

3. Маршрути / правила

Управління правилами в таблиці маршрутизації здійснюється за допомогою команди ip з ключем route.

Маршрут за замовчуванням у даної системи - 192.168.56.1:

Однак, якщо додати альтернативний маршрут для мережі 192.168.3.0/24 через деякий шлюз 192.168.1.254:

Таблиця маршрутизації при цьому буде мати вигляд:

Додавання альтернативного маршруту для "обраних" хостів

Додати опис додаткової таблиці маршрутизації в файл / etc / iproute2 / rt_tables (ця дія не обов'язково, можна використовувати просто номер таблиці)

Додати новий маршрут за замовчуванням, що відправляє пакети на хост 12.13.14.100 в нову таблицю маршрутизації

З повагою, Mc.Sim!