Статическая маршрутизация
Как посмотреть таблицу маршрутизации, добавить временный или постоянный IP-маршрут в ОС сервера, где работает Application Delivery Controller.
Что это
Статическая маршрутизация — тип маршрутизации, при котором IP-маршруты задаются вручную в таблице маршрутизации.
Зачем нужна
У сервера, где работает Application Delivery Controller, обычно несколько сетевых интерфейсов: один для клиентского трафика, один для управления, один или несколько для связи с бэкендами и внутренней инфраструктурой.
Чтобы каждый пакет уходил по нужному интерфейсу, ядру нужно знать:
-
какая сеть находится за каким интерфейсом;
-
через какой шлюз идти в удалённые сети;
-
куда отправлять трафик, для которого нет более точного маршрута (default route);
-
какие интерфейсы не должны брать на себя default route.
Как настроить
Маршруты можно задать двумя инструментами: ip route и nmcli. В таблице ниже — их сравнение по основным критериям.
ip route |
nmcli |
|
|---|---|---|
Назначение |
Инструмент для просмотра и изменения таблицы маршрутизации |
Консольный клиент NetworkManager для просмотра, создания, изменения, активации и деактивации сетевых подключений |
Что меняет |
Текущую таблицу маршрутизации в ядре ОС |
Профиль NetworkManager на диске. NetworkManager сам выкладывает маршруты из профиля в таблицу ядра при активации профиля |
Когда использовать |
|
|
Тип настройки |
Временная. Маршруты сбрасываются после перезагрузки сервера, перезапуска NetworkManager или переактивации сетевого подключения |
Постоянная. Маршруты сохраняются на диске и применяются заново после перезагрузки сервера, перезапуска NetworkManager, переактивации интерфейса или восстановления сетевого подключения |
Скорость активации |
Мгновенно после ввода команды |
Требует переактивации профиля командой |
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
Разбор первой строки:
| Часть | Что значит |
|---|---|
|
Маршрут по умолчанию. Используется, если нет более точного маршрута |
|
Шлюз следующего перехода |
|
Интерфейс, через который отправляется трафик |
|
Маршрут добавлен как статический |
|
Метрика маршрута. Чем меньше — тем выше приоритет |
Просмотр маршрута до конкретного 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
Разбор вывода:
| Часть | Что значит |
|---|---|
|
Адрес назначения |
|
Шлюз, через который пойдёт трафик |
|
Интерфейс отправки |
|
Исходный IP-адрес, который ядро выберет для пакета |
|
Идентификатор пользователя, от имени которого выполнена проверка |
Добавление маршрута
Общий синтаксис:
sudo ip route add <сеть_назначения>/<префикс> via <шлюз> dev <интерфейс>
Шлюз должен быть доступен через указанный интерфейс, иначе маршрут не добавится или трафик пойдёт не туда.
Пример:
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 сработает в любом случае: если маршрут есть — заменит, если нет — создаст. Удобно для скриптов и автоматизации.
nmcli
|
В 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
Разбор:
| Поле | Что значит |
|---|---|
|
Имя профиля NetworkManager |
|
Уникальный идентификатор профиля |
|
Тип подключения: ethernet, vlan, bond и тд |
|
Интерфейс, к которому применён профиль |
Просмотр всех подключений
Покажет все подключения — активные и неактивные:
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 --
Разбор полей:
| Поле | Что значит |
|---|---|
|
Имя интерфейса |
|
Тип устройства |
|
Состояние устройства |
|
Активный профиль подключения. |
Просмотр параметров профиля
Используйте команду:
nmcli connection show mgmtint
Для задач маршрутизации удобнее ограничить вывод нужными полями:
nmcli -f
ipv4.method,ipv4.addresses,ipv4.gateway,ipv4.routes,ipv4.never-default,ipv4.route-metric
connection show mgmtint
Разбор полей:
| Поле | Что значит |
|---|---|
|
Способ настройки IPv4: |
|
Статические IPv4-адреса профиля |
|
Шлюз по умолчанию для профиля |
|
Статические маршруты, привязанные к профилю |
|
Запрещает профилю устанавливать маршрут по умолчанию |
|
Метрика, которую профиль применяет ко всем своим маршрутам |
Добавление маршрута
Общий синтаксис:
sudo nmcli connection modify <profile> +ipv4.routes "<network>/<prefix> <gateway>"
|
Шлюз должен быть доступен через выбранный профиль. |
|
Знак перед ipv4.routes имеет значение:
|
Пример:
sudo nmcli connection modify interint-contrl +ipv4.routes "10.20.30.0/24 10.254.1.1"
Разбор команды:
| Часть | Что значит |
|---|---|
|
Нужны права администратора |
|
Изменить профиль подключения |
|
Имя профиля NetworkManager |
|
Добавить маршрут к существующему списку маршрутов профиля |
|
Сеть назначения и шлюз через пробел в одной строке |
После изменения профиль нужно переактивировать:
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 нужно назначать осознанно — один интерфейс берёт внешний трафик, другой используется только для сети управления. Например:
|
Настройка приоритета интерфейсов через метрику
Метрика на уровне профиля применяется ко всем его маршрутам, включая 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 userintNetworkManager может кратковременно переактивировать сетевое подключение. -
ip route get <IP>показывает, как ядро реально отправит пакет в текущей конфигурации. Запускайте его перед изменением маршрутов, чтобы понять стартовое состояние, и после — чтобы убедиться, что правка дала ожидаемый результат. -
+ipv4.routesдобавляет маршрут к существующему списку, аipv4.routesбез префикса заменяет весь список. Если в профиле уже есть маршруты, использование формы без+сотрёт всё, что было. -
Удалять маршрут через
nmcli connection modify -ipv4.routesнужно с теми же параметрами, с которыми он добавлялся. Если маршрут был добавлен с метрикой, метрику нужно указать и при удалении.