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

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

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!