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

Как посмотреть таблицу маршрутизации, добавить временный или постоянный IP-маршрут в ОС сервера, где работает Application Delivery Controller.

Что это

Статическая маршрутизация — тип маршрутизации, при котором IP-маршруты задаются вручную в таблице маршрутизации.

Зачем нужна

У сервера, где работает Application Delivery Controller, обычно несколько сетевых интерфейсов: один для клиентского трафика, один для управления, один или несколько для связи с бэкендами и внутренней инфраструктурой.

Чтобы каждый пакет уходил по нужному интерфейсу, ядру нужно знать:

  • какая сеть находится за каким интерфейсом;

  • через какой шлюз идти в удалённые сети;

  • куда отправлять трафик, для которого нет более точного маршрута (default route);

  • какие интерфейсы не должны брать на себя default route.

Как настроить

Маршруты можно задать двумя инструментами: ip route и nmcli. В таблице ниже — их сравнение по основным критериям.

ip route nmcli

Назначение

Инструмент для просмотра и изменения таблицы маршрутизации

Консольный клиент NetworkManager для просмотра, создания, изменения, активации и деактивации сетевых подключений

Что меняет

Текущую таблицу маршрутизации в ядре ОС

Профиль NetworkManager на диске. NetworkManager сам выкладывает маршруты из профиля в таблицу ядра при активации профиля

Когда использовать

  • Просмотр текущих маршрутов

  • Диагностика пути до конкретного IP

  • Временное добавление маршрута для проверки

  • Удаление временных маршрутов

  • Проверка default route

  • Отладка проблем с доступностью сетей

  • Постоянная настройка маршрутов

  • Настройка default gateway для интерфейсов

  • Настройка приоритетов интерфейсов через метрики

  • Запрет default route на конкретном интерфейсе

Тип настройки

Временная. Маршруты сбрасываются после перезагрузки сервера, перезапуска NetworkManager или переактивации сетевого подключения

Постоянная. Маршруты сохраняются на диске и применяются заново после перезагрузки сервера, перезапуска NetworkManager, переактивации интерфейса или восстановления сетевого подключения

Скорость активации

Мгновенно после ввода команды

Требует переактивации профиля командой nmcli connection up <profile>

ip route

Просмотр всех маршрутов

Чтобы посмотреть текущую таблицу маршрутизации целиком, используйте команду:

ip route

Или только IPv4:

ip -4 route

Пример вывода:

default via 185.66.86.238 dev userint proto static metric 100
10.25.78.0/24 dev mgmtint proto kernel scope link src 10.25.78.35
10.254.1.0/24 dev interint-contrl proto kernel scope link src 10.254.1.151
10.253.1.0/24 dev interint-log proto kernel scope link src 10.253.1.161

Разбор первой строки:

Часть Что значит

default

Маршрут по умолчанию. Используется, если нет более точного маршрута

via 185.66.86.238

Шлюз следующего перехода

dev userint

Интерфейс, через который отправляется трафик

proto static

Маршрут добавлен как статический

metric 100

Метрика маршрута. Чем меньше — тем выше приоритет

Просмотр маршрута до конкретного IP

Команда показывает, как ядро отправит пакет на указанный адрес в текущей конфигурации. Полезно запускать перед изменением маршрутов.

ip route get 10.20.30.10

Пример вывода:

10.20.30.10 via 10.254.1.1 dev interint-contrl src 10.254.1.151 uid 1000

Разбор вывода:

Часть Что значит

10.20.30.10

Адрес назначения

via 10.254.1.1

Шлюз, через который пойдёт трафик

dev interint-contrl

Интерфейс отправки

src 10.254.1.151

Исходный IP-адрес, который ядро выберет для пакета

uid 1000

Идентификатор пользователя, от имени которого выполнена проверка

Добавление маршрута

Общий синтаксис:

sudo ip route add <сеть_назначения>/<префикс> via <шлюз> dev <интерфейс>

Шлюз должен быть доступен через указанный интерфейс, иначе маршрут не добавится или трафик пойдёт не туда.

Пример:

sudo ip route add 10.20.30.0/24 via 10.254.1.1 dev interint-contrl

Разбор команды:

Часть Что значит

sudo

Нужны права администратора

ip route add

Добавить маршрут

10.20.30.0/24

Сеть назначения

via 10.254.1.1

Шлюз, через который доступна сеть

dev interint-contrl

Интерфейс, через который доступен шлюз

После добавления проверяем:

ip route get 10.20.30.10

Ожидаемый результат:

10.20.30.10 via 10.254.1.1 dev interint-contrl

Добавление маршрута с метрикой

Метрика нужна, когда до одной сети есть несколько маршрутов. Чем меньше метрика — тем выше приоритет.

sudo ip route add 10.20.30.0/24 via 10.254.1.1 dev interint-contrl metric 100

Например, есть два маршрута:

10.20.30.0/24 via 10.254.1.1 dev interint-contrl metric 100
10.20.30.0/24 via 10.25.78.1 dev mgmtint metric 500

В этом случае ядро выберет путь через interint-contrl — у него метрика меньше.

Добавление маршрута без шлюза

Если сеть напрямую подключена к интерфейсу, шлюз указывать не нужно:

sudo ip route add 10.30.40.0/24 dev interint-contrl

Сеть 10.30.40.0/24 достижима через интерфейс interint-contrl напрямую.

Добавление default route

Default route — маршрут по умолчанию. Задаётся ключевым словом default:

sudo ip route add default via 185.66.86.238 dev userint

Весь трафик, для которого нет более точного маршрута, пойдёт через шлюз 185.66.86.238 и интерфейс userint.

Default route с метрикой:

sudo ip route add default via 185.66.86.238 dev userint metric 100

Замена маршрута

Если маршрут уже есть, ip route add вернёт ошибку:

RTNETLINK answers: File exists

Чтобы заменить — используйте replace:

sudo ip route replace 10.20.30.0/24 via 10.254.1.1 dev interint-contrl

replace сработает в любом случае: если маршрут есть — заменит, если нет — создаст. Удобно для скриптов и автоматизации.

Удаление маршрута

Полная форма команды:

sudo ip route del 10.20.30.0/24 via 10.254.1.1 dev interint-contrl

Короткая форма:

sudo ip route del 10.20.30.0/24

Короткая форма работает, но если в таблице есть несколько маршрутов до одной сети — лучше указать шлюз и интерфейс. Так ядро удалит нужный.

nmcli

В NetworkManager есть два разных объекта:

  • device — физический или логический интерфейс в системе (ethernet, vlan, bond и тд);

  • connection — профиль подключения NetworkManager, который ссылается на устройство и хранит параметры.

Имя профиля не всегда совпадает с именем интерфейса. Перед настройкой маршрутов проверьте, какой профиль применён к нужному устройству.

Просмотр активных подключений

Полная форма команды:

nmcli connection show --active

Короткая форма:

nmcli con show --active

Пример вывода:

NAME              UUID                                  TYPE      DEVICE

mgmtint           11111111-2222-3333-4444-555555555555  ethernet  mgmtint
userint           22222222-3333-4444-5555-666666666666  ethernet  userint
interint-contrl   33333333-4444-5555-6666-777777777777  vlan      interint-contrl

Разбор:

Поле Что значит

NAME

Имя профиля NetworkManager

UUID

Уникальный идентификатор профиля

TYPE

Тип подключения: ethernet, vlan, bond и тд

DEVICE

Интерфейс, к которому применён профиль

Просмотр всех подключений

Покажет все подключения — активные и неактивные:

nmcli connection show

С фильтром по полям:

nmcli -f NAME,UUID,TYPE,DEVICE connection show

Вариант с -f показывает только нужные колонки — удобнее для документации и диагностики.

Просмотр состояния интерфейсов

nmcli device status

Пример вывода:

DEVICE           TYPE      STATE      CONNECTION

mgmtint          ethernet  connected  mgmtint
userint          ethernet  connected  userint
interint-contrl  vlan      connected  interint-contrl
ens5f1           ethernet  unavailable --

Разбор полей:

Поле Что значит

DEVICE

Имя интерфейса

TYPE

Тип устройства

STATE

Состояние устройства

CONNECTION

Активный профиль подключения. -- означает, что профиль к устройству не привязан

Просмотр параметров профиля

Используйте команду:

nmcli connection show mgmtint

Для задач маршрутизации удобнее ограничить вывод нужными полями:

nmcli -f
    ipv4.method,ipv4.addresses,ipv4.gateway,ipv4.routes,ipv4.never-default,ipv4.route-metric
    connection show mgmtint

Разбор полей:

Поле Что значит

ipv4.method

Способ настройки IPv4: manual, auto, disabled

ipv4.addresses

Статические IPv4-адреса профиля

ipv4.gateway

Шлюз по умолчанию для профиля

ipv4.routes

Статические маршруты, привязанные к профилю

ipv4.never-default

Запрещает профилю устанавливать маршрут по умолчанию

ipv4.route-metric

Метрика, которую профиль применяет ко всем своим маршрутам

Добавление маршрута

Общий синтаксис:

sudo nmcli connection modify <profile> +ipv4.routes "<network>/<prefix> <gateway>"

Шлюз должен быть доступен через выбранный профиль.

Знак перед ipv4.routes имеет значение:

  • +ipv4.routes — добавит маршрут к уже существующим;

  • ipv4.routes без знака — заменит весь список маршрутов;

  • -ipv4.routes — удалит указанный маршрут.

Пример:

sudo nmcli connection modify interint-contrl +ipv4.routes "10.20.30.0/24 10.254.1.1"

Разбор команды:

Часть Что значит

sudo

Нужны права администратора

nmcli connection modify

Изменить профиль подключения

interint-contrl

Имя профиля NetworkManager

\+ipv4.routes

Добавить маршрут к существующему списку маршрутов профиля

"10.20.30.0/24 10.254.1.1"

Сеть назначения и шлюз через пробел в одной строке

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

sudo nmcli connection up interint-contrl

Проверка:

ip route get 10.20.30.10

Добавление маршрута с метрикой

Метрика указывается третьим значением в строке маршрута:

sudo nmcli connection modify interint-contrl +ipv4.routes "10.20.30.0/24 10.254.1.1 100"

Здесь 10.20.30.0/24 — сеть назначения, 10.254.1.1 — шлюз, 100 — метрика.

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

sudo nmcli connection up interint-contrl

Проверка:

ip route | grep -F '10.20.30.0'

Должно вернуть:

10.20.30.0/24 via 10.254.1.1 dev interint-contrl metric 100

Добавление нескольких маршрутов

Маршруты перечисляются через запятую внутри одной строки:

sudo nmcli connection modify interint-contrl \
  +ipv4.routes "10.20.30.0/24 10.254.1.1, 10.20.40.0/24 10.254.1.1"

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

sudo nmcli connection up interint-contrl

В таблице ядра появятся оба маршрута. Проверка:

ip route | grep -F '10.20.'

Настройка default gateway

Используйте команду:

sudo nmcli connection modify userint ipv4.gateway 185.66.86.238

Затем:

sudo nmcli connection up userint

Команда задаёт шлюз по умолчанию для профиля userint. После переактивации профиль устанавливает в таблицу ядра маршрут default via 185.66.86.238 dev userint.

default route нужно назначать осознанно — один интерфейс берёт внешний трафик, другой используется только для сети управления. Например:

  • userint — default route для внешнего трафика;

  • mgmtint — только сеть управления, без default route.

Настройка приоритета интерфейсов через метрику

Метрика на уровне профиля применяется ко всем его маршрутам, включая default route. Чем меньше метрика — тем выше приоритет маршрута.

Выполните:

sudo nmcli connection modify userint ipv4.route-metric 100
sudo nmcli connection modify mgmtint ipv4.route-metric 500

Затем:

sudo nmcli connection up userint
sudo nmcli connection up mgmtint

В этом примере userint с метрикой 100 — основной путь для исходящего трафика, mgmtint с метрикой 500 — резервный.

Замена всех маршрутов в профиле

Важно! ipv4.routes без знака + полностью перезаписывает список маршрутов профиля. Если в профиле были другие маршруты, они исчезнут.

sudo nmcli connection modify interint-contrl ipv4.routes "10.20.30.0/24 10.254.1.1"

Безопаснее для добавления использовать:

sudo nmcli connection modify interint-contrl +ipv4.routes "10.20.30.0/24 10.254.1.1"

Запрет default route на интерфейсе

Если на нескольких профилях задан шлюз, ядро может выбрать default route не через тот интерфейс, который нужен. Чтобы профиль не претендовал на default route — например, для интерфейса управления, выполните:

sudo nmcli connection modify mgmtint ipv4.never-default yes

Затем:

sudo nmcli connection up mgmtint

После этого профиль mgmtint не устанавливает маршрут по умолчанию — он остаётся только для сети управления, а внешний трафик идёт через другой профиль с заданным шлюзом (например, userint).

Проверка:

ip route | grep default

Удаление маршрута

Маршрут удаляется через -ipv4.routes:

sudo nmcli connection modify interint-contrl -ipv4.routes "10.20.30.0/24 10.254.1.1"

sudo nmcli connection up interint-contrl

Для удаления маршрута, который был добавлен с метрикой, используйте:

sudo nmcli connection modify interint-contrl -ipv4.routes "10.20.30.0/24 10.254.1.1 100"

Проверка:

ip route | grep -F '10.20.30.0'

Если команда ничего не вывела, маршрут удалён.

Что важно учесть

  • ip route — для временных правок и диагностики. Если маршрут должен пережить перезагрузку, добавляйте его через nmcli.

  • При выполнении sudo nmcli connection up mgmtint или sudo nmcli connection up userint NetworkManager может кратковременно переактивировать сетевое подключение.

  • ip route get <IP> показывает, как ядро реально отправит пакет в текущей конфигурации. Запускайте его перед изменением маршрутов, чтобы понять стартовое состояние, и после — чтобы убедиться, что правка дала ожидаемый результат.

  • +ipv4.routes добавляет маршрут к существующему списку, а ipv4.routes без префикса заменяет весь список. Если в профиле уже есть маршруты, использование формы без + сотрёт всё, что было.

  • Удалять маршрут через nmcli connection modify -ipv4.routes нужно с теми же параметрами, с которыми он добавлялся. Если маршрут был добавлен с метрикой, метрику нужно указать и при удалении.