PQ
PQ.Hosting

Валюта

Настройка маршрутизации в Linux: ip route, постоянные маршруты и диагностика

Автор
PQ
06 марта 2026
5 мин чтения
18 просмотров

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

Как Linux решает куда отправить пакет

Когда приложение отправляет пакет, ядро проверяет таблицу маршрутизации сверху вниз. Первое совпадение адреса назначения с записью в таблице — и пакет уходит через указанный интерфейс и шлюз. Если совпадений нет — используется маршрут по умолчанию (default). Нет и его — пакет теряется с ошибкой Network unreachable.

Таблица маршрутизации — это не какой-то экзотический инструмент. Она работает на каждом сервере и каждом ноутбуке, просто обычно её не трогают.

Посмотреть таблицу маршрутизации

Современный способ через ip:

ip route

Типичный вывод:

default via 192.168.1.1 dev enp2s0 proto static metric 100
192.168.1.0/24 dev enp2s0 proto kernel scope link src 192.168.1.50
10.0.0.0/8 via 10.0.0.1 dev eth1 proto static

Расшифровка полей:

  • default — маршрут по умолчанию, применяется когда ни один конкретный маршрут не подошёл
  • via 192.168.1.1 — через какой шлюз идёт трафик
  • dev enp2s0 — через какой сетевой интерфейс
  • proto static — маршрут добавлен администратором вручную; proto kernel — добавлен ядром автоматически при настройке интерфейса
  • metric 100 — приоритет: чем меньше число, тем выше приоритет

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

ip route show table all

Старая команда route тоже работает — показывает таблицу с именами хостов:

route

Если нужны числовые IP вместо имён хостов — добавить флаг -n:

route -n

Подробная таблица через routel:

routel

Современный вариант через ip route:

ip route

Добавить временный маршрут

Маршрут по умолчанию — через какой шлюз уходит весь остальной трафик:

sudo ip route add default via 192.168.1.1

Маршрут до конкретного IP:

sudo ip route add 203.0.113.0/24 via 192.168.1.1

Маршрут через конкретный интерфейс (без указания шлюза):

sudo ip route add 10.0.0.0/8 dev eth1

Маршрут с приоритетом — если есть два пути до одной сети:

sudo ip route add 10.0.0.0/8 via 10.0.0.1 metric 50
sudo ip route add 10.0.0.0/8 via 10.0.0.2 metric 100

Трафик пойдёт через 10.0.0.1 (metric 50 — выше приоритет). При недоступности — автоматически переключится на 10.0.0.2.

Временные маршруты живут до перезагрузки. После reboot — исчезают.

Удалить маршрут

sudo ip route del default via 192.168.1.1
sudo ip route del 10.0.0.0/8

Постоянные маршруты: Ubuntu и Debian (Netplan)

На Ubuntu 18.04+ и современных Debian конфигурация сети хранится в Netplan — YAML-файлы в /etc/netplan/.

Посмотреть текущий файл:

ls /etc/netplan/
cat /etc/netplan/01-netcfg.yaml

Добавить постоянный маршрут:

network:
  version: 2
  ethernets:
    enp2s0:
      dhcp4: true
      routes:
        - to: 10.0.0.0/8
          via: 192.168.1.1
        - to: 172.16.0.0/12
          via: 192.168.1.1

Применить изменения без перезагрузки:

sudo netplan apply

Постоянные маршруты: Debian старый способ (/etc/network/interfaces)

На системах без Netplan маршруты прописываются в /etc/network/interfaces:

sudo nano /etc/network/interfaces

Добавить строку в секцию нужного интерфейса:

iface enp2s0 inet dhcp
    up ip route add 10.0.0.0/8 via 192.168.1.1
    up ip route add 172.16.0.0/12 via 192.168.1.1

up означает: выполнить команду при поднятии интерфейса.

Постоянные маршруты: CentOS / RHEL / Rocky Linux

На системах семейства Red Hat маршруты для каждого интерфейса хранятся в отдельных файлах /etc/sysconfig/network-scripts/route-INTERFACE:

sudo nano /etc/sysconfig/network-scripts/route-eth0

Содержимое в формате ip route:

10.0.0.0/8 via 192.168.1.1
172.16.0.0/12 via 192.168.1.1

Или в старом формате:

ADDRESS0=10.0.0.0
NETMASK0=255.0.0.0
GATEWAY0=192.168.1.1

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

sudo nmcli connection reload
sudo nmcli connection up eth0

Два интернет-провайдера: policy routing

Если на сервере два провайдера и нужно чтобы трафик с разных IP-адресов уходил через разные шлюзы — стандартной таблицы маршрутизации недостаточно. Нужен policy routing: отдельные таблицы маршрутов для каждого интерфейса.

Создать дополнительные таблицы в /etc/iproute2/rt_tables:

echo "200 isp1" >> /etc/iproute2/rt_tables
echo "201 isp2" >> /etc/iproute2/rt_tables

Добавить маршруты и правила:

sudo ip route add default via 192.168.1.1 table isp1
sudo ip route add default via 10.0.0.1 table isp2

sudo ip rule add from 192.168.1.50 table isp1
sudo ip rule add from 10.0.0.50 table isp2

Теперь трафик с 192.168.1.50 пойдёт через первого провайдера, с 10.0.0.50 — через второго.

Диагностика: куда уходит пакет

Проверить через какой шлюз уйдёт пакет до конкретного адреса:

ip route get 8.8.8.8
8.8.8.8 via 192.168.1.1 dev enp2s0 src 192.168.1.50

Трассировка маршрута с задержками на каждом хопе:

traceroute 8.8.8.8

На системах где traceroute не установлен:

sudo apt-get install traceroute

Или через встроенный mtr — живая трассировка с обновлением в реальном времени:

mtr 8.8.8.8

Шпаргалка

Задача Команда
Посмотреть таблицу маршрутизации ip route
Подробный вывод ip route show table all
Добавить маршрут по умолчанию sudo ip route add default via 192.168.1.1
Маршрут до подсети sudo ip route add 10.0.0.0/8 via 192.168.1.1
Удалить маршрут sudo ip route del 10.0.0.0/8
Применить Netplan sudo netplan apply
Перезагрузить NM-конфиг sudo nmcli connection reload
Куда уйдёт пакет ip route get 8.8.8.8
Трассировка маршрута traceroute 8.8.8.8
Живая трассировка mtr 8.8.8.8

Поделиться статьей

Похожие статьи