Как бы ты настраивал статическую маршрутизацию в Linux
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Настройка статической маршрутизации в Linux
Настройка статической маршрутизации в Linux — фундаментальная задача для DevOps-инженера, особенно при работе с изолированными средами, VPN-туннелями, многосетевыми хостами или настройке шлюзов. В отличие от динамической маршрутизации (OSPF, BGP), статические маршруты задаются вручную и не адаптируются к изменениям топологии сети без вмешательства администратора.
Основные подходы и инструменты
Работа с маршрутизацией в Linux ведется через утилиту ip route (часть пакета iproute2) — современная замена устаревшим route и ifconfig. Для персистентной настройки используются конфигурационные файлы дистрибутива.
1. Временная настройка через ip route
Добавление статического маршрута в runtime (исчезнет после перезагрузки):
# Добавить маршрут до сети 192.168.100.0/24 через шлюз 10.0.0.1
sudo ip route add 192.168.100.0/24 via 10.0.0.1
# Маршрут через конкретный интерфейс (без явного шлюза, для P2P-линков)
sudo ip route add 172.16.0.0/16 dev eth0
# Маршрут по умолчанию (default gateway)
sudo ip route add default via 10.0.0.1 dev eth0
# Проверить таблицу маршрутизации
ip route show
# или
ip r
Пример вывода ip route show:
default via 10.0.0.1 dev eth0 proto static
10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.15
192.168.100.0/24 via 10.0.0.1 dev eth0 proto static
Удаление маршрута:
sudo ip route del 192.168.100.0/24 via 10.0.0.1
2. Персистентная настройка (зависит от дистрибутива)
Для разных дистрибутивов используются разные конфигурационные файлы.
Debian/Ubuntu (через /etc/network/interfaces):
# В файле /etc/network/interfaces
auto eth0
iface eth0 inet static
address 10.0.0.15/24
gateway 10.0.0.1
# Статические маршруты
up ip route add 192.168.100.0/24 via 10.0.0.2
down ip route del 192.168.100.0/24 via 10.0.0.2
Альтернативно, в современных версиях используется Netplan (YAML-конфигурация):
# /etc/netplan/01-netcfg.yaml
network:
version: 2
ethernets:
eth0:
addresses: [10.0.0.15/24]
routes:
- to: 192.168.100.0/24
via: 10.0.0.2
- to: 0.0.0.0/0
via: 10.0.0.1
nameservers:
addresses: [8.8.8.8]
RHEL/CentOS/Rocky/AlmaLinux (через NetworkManager или конфиги сети):
# В файле /etc/sysconfig/network-scripts/route-eth0 (устаревший метод)
192.168.100.0/24 via 10.0.0.2
# Через nmcli (актуальный метод)
sudo nmcli connection modify eth0 +ipv4.routes "192.168.100.0/24 10.0.0.2"
sudo nmcli connection up eth0
Для дистрибутивов с systemd-networkd (Arch, некоторые минимальные образы):
# /etc/systemd/network/50-static.network
[Match]
Name=eth0
[Network]
Address=10.0.0.15/24
Gateway=10.0.0.1
[Route]
Destination=192.168.100.0/24
Gateway=10.0.0.2
Расширенные сценарии
Несколько таблиц маршрутизации и политики
Linux поддерживает multiple routing tables и policy-based routing. Это критически важно для VPN, multi-WAN и сложных сетевых топологий.
# Создать новую таблицу маршрутизации (отредактировать /etc/iproute2/rt_tables)
echo "200 custom" >> /etc/iproute2/rt_tables
# Добавить маршрут в таблицу 200
ip route add default via 192.168.1.1 dev eth1 table custom
# Правило маршрутизации: весь трафик с меткой fwmark 1 использовать таблицу 200
ip rule add fwmark 1 table custom
Метрика маршрутов
При наличии нескольких равнозначных маршрутов метрика определяет приоритет (меньше = выше приоритет):
sudo ip route add default via 10.0.0.1 dev eth0 metric 100
sudo ip route add default via 10.0.0.2 dev eth1 metric 200
# Трафик пойдет через eth0 (метрика 100)
Проверка и диагностика
ip route show— основная таблица маршрутизации.ip route get <IP>— показать, какой маршрут будет выбран для конкретного адреса.ip route get 192.168.100.50tracerouteилиtracepath— трассировка пути.netstat -rn— устаревший, но работающий аналогip r.ss -tunapилиnetstat -tunap— проверка активных соединений с учетом маршрутов.
Практические рекомендации для DevOps
-
Идемпотентность: В инфраструктуре как коде (Ansible, Terraform) настройка маршрутов должна быть идемпотентной. Используйте модули
ansible.posix.routeили провайдеры сетевых ресурсов в Terraform. -
Мониторинг: Отслеживайте исчезновение критических маршрутов через Prometheus (
node_network_routesиз node-exporter) или Nagios/Icinga. -
Изоляция сред: В Kubernetes или Docker часто требуется настройка маршрутов до Pod/Service сетей на физических хостах.
-
Резервирование: Для критических маршрутов настройте мониторинг и автоматическое восстановление через системы типа Keepalived или custom health-check скрипты.
-
Безопасность: Статические маршруты могут быть целью атак (route injection). Ограничивайте возможность изменения таблиц маршрутизации через SELinux/AppArmor и контроль доступа.
Пример Ansible-плейбука для добавления маршрута:
- name: Add static route
ansible.posix.route:
dest: 192.168.100.0/24
gateway: 10.0.0.2
state: present
Статическая маршрутизация — простой и надежный механизм, но в динамических облачных средах часто требуется комбинация со скриптами динамического обновления (через DHCP, метаданные облака) или переход к динамическим протоколам для сложных инфраструктур.