Статическая маршрутизация в Linux: настройка и примеры конфигураций | AdminWiki

Статическая маршрутизация в Linux: настройка и примеры конфигураций

13 августа 2026 7 мин. чтения

Статическая маршрутизация в Linux настраивается тремя основными способами: через команду ip route для временных изменений, через файлы .network для systemd-networkd и через YAML-конфигурации Netplan для постоянной маршрутизации. Каждый метод решает задачу связности между сегментами сети без динамических протоколов.

В этой статье разобраны рабочие примеры добавления, удаления и изменения маршрутов, настройка шлюза по умолчанию, организация Linux-роутера между подсетями и диагностика ошибок с помощью ip route и traceroute. Материал ориентирован на системных администраторов, которым нужно быстро настроить связность и сохранить конфигурацию после перезагрузки.

Если нужен более широкий обзор маршрутизации с динамическими протоколами и политиками, смотрите полное руководство по настройке маршрутизации в Linux на 2026 год.

Что такое статическая маршрутизация и когда её использовать

Статическая маршрутизация - это ручное задание путей передачи пакетов. Администратор явно указывает, через какой шлюз и какой интерфейс отправлять трафик до конкретной сети или хоста. Ядро Linux использует таблицу маршрутизации для выбора пути на основе префикса назначения и метрики.

Статические маршруты предсказуемы и не требуют запуска демонов динамической маршрутизации вроде OSPF или BGP. Это упрощает отладку и снижает нагрузку на сервер. Ограничение очевидно: при изменении топологии сети маршруты нужно обновлять вручную. Для небольших сетей, шлюзов и специфических маршрутов это приемлемо. Для крупных динамических инфраструктур чаще применяют динамические протоколы.

Типичные сценарии использования статической маршрутизации:

  • связь между двумя или тремя подсетями через Linux-сервер;
  • маршрут по умолчанию для выхода в интернет;
  • доступ к удалённой сети через промежуточный маршрутизатор;
  • маршруты до VPN-туннелей или point-to-point-интерфейсов.

Управление маршрутами с помощью команды ip route

Команда ip route входит в пакет iproute2 и заменяет устаревшую route. Она работает во всех современных дистрибутивах: Ubuntu, Debian, RHEL, Rocky Linux, AlmaLinux. Изменения, внесённые через ip route, действуют немедленно, но исчезают после перезагрузки или перезапуска сетевой службы.

Просмотр текущей таблицы маршрутизации

Перед изменениями проверьте текущую таблицу:

ip route show

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

default via 192.168.1.1 dev eth0 proto static
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.10 metric 100
10.0.0.0/24 via 192.168.1.254 dev eth0 proto static

Каждая строка содержит назначение, шлюз или интерфейс, протокол и метрику. Запись default означает маршрут по умолчанию. Значение proto kernel указывает на маршрут, созданный ядром автоматически при назначении IP-адреса интерфейсу. Метрика определяет приоритет: чем ниже значение, тем предпочтительнее маршрут.

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

Базовый синтаксис:

ip route add <network> via <gateway> dev <interface>

Добавление маршрута к подсети 192.168.2.0/24 через шлюз 192.168.1.1:

ip route add 192.168.2.0/24 via 192.168.1.1 dev eth0

Маршрут к конкретному хосту задаётся с маской /32:

ip route add 10.10.10.5/32 via 192.168.1.1 dev eth0

Для point-to-point-интерфейсов шлюз не указывается, только устройство:

ip route add 10.8.0.0/24 dev tun0

Параметр dev можно опустить, если ядро однозначно определяет интерфейс по шлюзу. Однако явное указание снижает вероятность ошибки при наличии нескольких интерфейсов в одной подсети.

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

Удаление маршрута выполняется командой ip route del. Параметры должны совпадать с добавленными:

ip route del 192.168.2.0/24 via 192.168.1.1 dev eth0

Если маршрут добавлен без указания шлюза, удаляйте его так же:

ip route del 10.8.0.0/24 dev tun0

Изменение существующего маршрута выполняется через ip route change. Например, смена шлюза для сети 10.0.0.0/24:

ip route change 10.0.0.0/24 via 192.168.1.253 dev eth0

Команда change заменяет параметры маршрута без необходимости его удалять. Если маршрут не существует, команда завершится с ошибкой.

Настройка маршрута по умолчанию

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

Добавление default gateway:

ip route add default via 192.168.1.1 dev eth0

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

ip route change default via 192.168.1.254 dev eth0

Удаление маршрута по умолчанию:

ip route del default

После удаления сервер потеряет доступ к внешним сетям, пока не будет задан новый маршрут. Проверяйте наличие default-записи через ip route show | grep default.

Постоянная маршрутизация через systemd-networkd

systemd-networkd - это встроенная служба управления сетью в systemd. Она настраивает интерфейсы и маршруты на основе файлов в каталоге /etc/systemd/network/. Конфигурация применяется при загрузке и сохраняется после перезагрузки.

Для работы службы включите её:

systemctl enable --now systemd-networkd

Файлы маршрутизации имеют расширение .network. Имя файла может быть любым, но порядок обработки зависит от лексикографической сортировки. Для одного интерфейса создаётся один файл с секциями [Match], [Network] и [Route].

Пример конфигурации .network с маршрутом

Файл /etc/systemd/network/10-eth0.network:

[Match]
Name=eth0

[Network]
Address=192.168.1.10/24
Gateway=192.168.1.1

[Route]
Destination=10.0.0.0/24
Gateway=192.168.1.254

Секция [Match] определяет интерфейс по имени. [Network] задаёт IP-адрес и шлюз по умолчанию. Секция [Route] добавляет статический маршрут до сети 10.0.0.0/24 через шлюз 192.168.1.254. Для нескольких маршрутов добавьте несколько секций [Route].

После создания файла перезапустите службу:

systemctl restart systemd-networkd

Проверьте статус и маршруты:

systemctl status systemd-networkd
ip route show

Дополнительные параметры секции [Route]: Metric для приоритета, Source для указания исходного адреса, Table для маршрутизации в отдельной таблице.

Настройка маршрутов в Netplan (Ubuntu)

Netplan - система конфигурации сети в Ubuntu, начиная с версии 17.10. Она использует YAML-файлы в каталоге /etc/netplan/. Netplan генерирует конфигурации для systemd-networkd или NetworkManager в зависимости от настройки рендерера.

Файлы конфигурации имеют расширение .yaml. Стандартное имя - 50-cloud-init.yaml или 01-netcfg.yaml. Перед редактированием создайте резервную копию.

Пример YAML с маршрутами

Файл /etc/netplan/01-netcfg.yaml:

network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      addresses:
        - 192.168.1.10/24
      routes:
        - to: default
          via: 192.168.1.1
        - to: 10.0.0.0/24
          via: 192.168.1.254
        - to: 192.168.2.0/24
          via: 192.168.1.253
          metric: 200

Блок routes содержит список маршрутов. Поле to задаёт назначение: default для шлюза по умолчанию или префикс сети. Поле via указывает шлюз. Параметр metric опционален и задаёт приоритет.

Применение конфигурации:

netplan apply

Проверка без применения:

netplan try

Команда netplan try применяет конфигурацию с таймаутом. Если администратор не подтвердит изменения, Netplan откатит их автоматически. Это снижает риск потери доступа к серверу при ошибке в YAML.

Типовые сценарии настройки

Организация шлюза между подсетями

Linux-сервер с двумя интерфейсами может работать как роутер между подсетями. Пример: eth0 подключён к сети 192.168.1.0/24, eth1 - к сети 10.0.0.0/24.

Назначьте IP-адреса на интерфейсы:

ip addr add 192.168.1.10/24 dev eth0
ip addr add 10.0.0.1/24 dev eth1

Включите пересылку пакетов:

sysctl -w net.ipv4.ip_forward=1

Для сохранения после перезагрузки добавьте строку в /etc/sysctl.conf:

net.ipv4.ip_forward=1

Маршруты к подключённым подсетям ядро создаст автоматически. Хостам в сети 192.168.1.0/24 нужно указать шлюз 192.168.1.10, а хостам в сети 10.0.0.0/24 - шлюз 10.0.0.1. На самом Linux-сервере дополнительные маршруты не требуются, если обе сети подключены напрямую.

Для постоянной настройки используйте systemd-networkd или Netplan. Пример для systemd-networkd с двумя интерфейсами и IP forwarding:

# /etc/systemd/network/10-eth0.network
[Match]
Name=eth0

[Network]
Address=192.168.1.10/24

# /etc/systemd/network/20-eth1.network
[Match]
Name=eth1

[Network]
Address=10.0.0.1/24

# /etc/systemd/network/30-forwarding.network
[Network]
IPForward=yes

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

Локальная сеть 192.168.1.0/24, удалённая сеть 10.0.0.0/24 доступна через маршрутизатор 192.168.1.254. На сервере в локальной сети добавьте маршрут:

ip route add 10.0.0.0/24 via 192.168.1.254

Проверьте доступность:

ping 10.0.0.1

Если ping не проходит, проверьте, что маршрутизатор 192.168.1.254 знает обратный путь к сети 192.168.1.0/24. Отсутствие обратного маршрута - частая причина недоступности при односторонней настройке.

Настройка маршрута по умолчанию для выхода в интернет

Сервер с IP 192.168.1.10/24 должен выходить в интернет через провайдерский шлюз 192.168.1.1:

ip route add default via 192.168.1.1 dev eth0

Для постоянной настройки в Netplan:

network:
  version: 2
  ethernets:
    eth0:
      addresses:
        - 192.168.1.10/24
      routes:
        - to: default
          via: 192.168.1.1

После применения проверьте доступность внешнего ресурса:

ping 8.8.8.8

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

Проверка маршрута с помощью traceroute

Команда traceroute показывает путь пакета до целевого хоста. Она помогает определить, на каком узле пакет останавливается или зацикливается.

Пример трассировки до хоста 10.0.0.5:

traceroute 10.0.0.5

Вывод:

traceroute to 10.0.0.5 (10.0.0.5), 30 hops max, 60 byte packets
 1  192.168.1.254 (192.168.1.254)  0.512 ms  0.489 ms  0.475 ms
 2  10.0.0.1 (10.0.0.1)  1.203 ms  1.187 ms  1.176 ms
 3  10.0.0.5 (10.0.0.5)  1.456 ms  1.441 ms  1.430 ms

Если трассировка останавливается на первом хопе, проблема на промежуточном маршрутизаторе: отсутствует обратный маршрут или настроен firewall. Если пакет не покидает сервер, проверьте таблицу маршрутизации и IP forwarding.

Распространённые ошибки и их решение

Ошибка: маршрут не добавлен из-за неверного синтаксиса. Команда ip route add возвращает ошибку Error: Nexthop has invalid gateway, если шлюз не находится в подключённой сети. Проверьте IP-адрес интерфейса и шлюза.

Ошибка: маршрут добавлен, но нет связи. Причина - отключён IP forwarding на промежуточном Linux-сервере. Проверьте:

sysctl net.ipv4.ip_forward

Значение 0 означает, что пересылка выключена. Включите её и проверьте связь повторно.

Ошибка: маршрут не сохраняется после перезагрузки. Команды ip route вносят временные изменения. Для постоянной маршрутизации используйте systemd-networkd или Netplan, как описано выше.

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

ip route get 10.0.0.5

Вывод покажет выбранный маршрут, шлюз и интерфейс. Это быстрее, чем полный просмотр таблицы.

Заключение

Статическая маршрутизация в Linux решает задачу связности между подсетями без динамических протоколов. Команда ip route подходит для быстрых временных изменений. systemd-networkd и Netplan обеспечивают сохранение конфигурации после перезагрузки.

Порядок действий при настройке: проверьте текущую таблицу через ip route show, добавьте маршруты, проверьте связь через ping и traceroute, затем перенесите конфигурацию в постоянный файл. Перед применением Netplan используйте netplan try для безопасного тестирования.

Дополнительные материалы по теме: пошаговое руководство по статическим маршрутам и управление таблицами маршрутизации и метриками. Для настройки сети на серверах подойдёт облачная инфраструктура Timeweb Cloud с гибким масштабированием ресурсов.

Поделиться:
Сохранить гайд? В закладки браузера