Статическая маршрутизация в 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 с гибким масштабированием ресурсов.