← Назад к вопросам

Как бы ты настраивал статическую маршрутизацию в Linux

1.8 Middle🔥 91 комментариев
#Linux и администрирование#Сети и протоколы

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Настройка статической маршрутизации в 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.50
    
  • traceroute или tracepath — трассировка пути.
  • netstat -rn — устаревший, но работающий аналог ip r.
  • ss -tunap или netstat -tunap — проверка активных соединений с учетом маршрутов.

Практические рекомендации для DevOps

  1. Идемпотентность: В инфраструктуре как коде (Ansible, Terraform) настройка маршрутов должна быть идемпотентной. Используйте модули ansible.posix.route или провайдеры сетевых ресурсов в Terraform.

  2. Мониторинг: Отслеживайте исчезновение критических маршрутов через Prometheus (node_network_routes из node-exporter) или Nagios/Icinga.

  3. Изоляция сред: В Kubernetes или Docker часто требуется настройка маршрутов до Pod/Service сетей на физических хостах.

  4. Резервирование: Для критических маршрутов настройте мониторинг и автоматическое восстановление через системы типа Keepalived или custom health-check скрипты.

  5. Безопасность: Статические маршруты могут быть целью атак (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, метаданные облака) или переход к динамическим протоколам для сложных инфраструктур.