Программный маршрутизатор на Linux: пошаговое руководство для корпоративной сети на Debian/Ubuntu (2026) | AdminWiki
Timeweb Cloud — сервера, Kubernetes, S3, Terraform. Лучшие цены IaaS.
Попробовать

Программный маршрутизатор на Linux: пошаговое руководство для корпоративной сети на Debian/Ubuntu (2026)

05 июня 2026 10 мин. чтения
Содержание статьи

Создание программного маршрутизатора на базе стандартного сервера Linux - это проверенный способ получить гибкую, мощную и экономичную сетевую платформу для корпоративных задач. Это руководство проведет вас через каждый этап: от выбора железа и настройки ядра до развертывания динамической маршрутизации с FRRouting (BGP, OSPF) и сопутствующих сервисов (DHCP, DNS). Каждый шаг сопровождается конкретными командами и проверкой, что минимизирует риски в production-среде. Вы получите готовые, оптимизированные конфигурационные файлы, которые можно адаптировать под свою сеть, и инструменты для мониторинга, сравнимые с коммерческими решениями.

Зачем строить маршрутизатор на Linux? Анализ перед развертыванием

Решение построить маршрутизатор на Linux должно быть взвешенным. Оно идеально подходит для сценариев, где критичны гибкость, контроль над конфигурацией и стоимость владения, но может уступать специализированным ASIC в задачах с экстремально высокой пропускной способностью и низкой задержкой.

Плюсы и минусы против Cisco/Juniper: цифры и опыт

Сравнение строится на трех ключевых параметрах: стоимость, гибкость и производительность на стандартном x86-железе.

Параметр Linux на сервере (x86) Коммерческий маршрутизатор (Cisco/Juniper)
Стоимость владения (CAPEX/OPEX) Низкая. Затраты только на серверное железо (например, на базе Intel Xeon или AMD EPYC). Отсутствие лицензий на ПО и обновления. Высокая. Стоимость оборудования включает премию бренда, обязательные лицензии на ПО и поддержку (SmartNet).
Гибкость конфигурации Максимальная. Полный доступ к ОС, возможность запуска любых приложений (VPN, балансировщики, мониторинг) на одном узле. Ограниченная. Конфигурация в рамках проприетарной ОС (IOS, Junos). Интеграция сторонних сервисов сложна.
Производительность Зависит от CPU и NIC. На процессоре с 8+ ядрами и картах Intel 82599/XL710 можно обрабатывать трафик в 10-40 Gbps. Задержки выше при сложной фильтрации (ACL, PBR). Высокая и предсказуемая. Специализированные ASIC обеспечивают line-rate на всех портах с минимальной задержкой независимо от сложности правил.
Независимость от вендора Полная. Нет привязки к одному поставщику оборудования или ПО. Высокая. Замена вендора влечет полную перестройку сети и переобучение персонала.

Практический референс: сервер с двумя процессорами Intel Xeon Silver 4214 (12 ядер) и парой карт Mellanox ConnectX-5 (25 Gbps) стабильно обрабатывает BGP-таблицу полного интернета (~900k префиксов) и транзитный трафик до 20 Gbps.

Сценарии применения: от лаборатории до edge-сети

Решение на базе Linux оптимально для конкретных задач:

  1. Учебный стенд. Идеальная платформа для отработки настройки BGP, OSPF и политик маршрутизации без затрат на дорогое коммерческое железо.
  2. Бюджетный маршрутизатор для филиала. Замена устаревшего оборудования на cost-эффективный сервер с динамической маршрутизацией и встроенными сервисами (DHCP, DNS, VPN).
  3. Резервный шлюз в ЦОД. Развертывание в качестве резервного маршрутизатора для критичных сегментов сети, обеспечивающего отказоустойчивость. Для настройки высокой доступности можно использовать решения вроде VRRP, как описано в нашем руководстве по отказоустойчивой сети.
  4. Платформа для запуска дополнительных сервисов. Функция маршрутизатора совмещается с WireGuard VPN, Nginx для балансировки нагрузки или системой мониторинга.

Подготовка сервера: железо, ОС и базовая настройка сети

Успех проекта начинается с правильного выбора и подготовки оборудования. Основное внимание - сетевым интерфейсам.

Выбор сетевых интерфейсов и проверка их работы

Для production-среды избегайте дешевых карт на чипах Realtek. Выбирайте Intel (X520, X710), Mellanox (ConnectX-4/5) или аналогичные с поддержкой драйверов в ядре Linux. После установки карт в слоты PCIe выполните диагностику.

# Определите модель и состояние сетевых карт
lspci | grep -i ethernet
# Проверьте драйвер и текущие настройки для интерфейса (например, enp3s0f0)
ethtool -i enp3s0f0
ethtool enp3s0f0
# Для проверки линка и трафика используйте tcpdump (кратко)
tcpdump -i enp3s0f0 -c 5 -n

Рекомендуется отключить аппаратные ускорения (gro, lro) на этапе тестирования для чистоты измерений: ethtool -K enp3s0f0 gro off lro off.

Установка и начальная конфигурация Debian/Ubuntu

Используйте актуальные стабильные версии: Debian 12 (Bookworm) или Ubuntu Server 22.04 LTS / 24.04 LTS. При установке выберите только базовую систему и SSH-сервер.

Настройка сети в Ubuntu (Netplan):

# /etc/netplan/01-netcfg.yaml
network:
  version: 2
  ethernets:
    enp3s0f0:
      addresses:
        - 192.168.1.1/24
      routes:
        - to: default
          via: 192.168.1.254
      nameservers:
        addresses: [8.8.8.8, 1.1.1.1]

Настройка сети в Debian (interfaces):

# /etc/network/interfaces
auto enp3s0f0
iface enp3s0f0 inet static
    address 192.168.1.1/24
    gateway 192.168.1.254

Примените настройки (netplan apply или systemctl restart networking) и проверьте: ip addr show, ping -c 3 8.8.8.8.

Ядро Linux как маршрутизатор: включаем и оптимизируем forwarding

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

Ключевые параметры sysctl для высокой пропускной способности

Создайте файл /etc/sysctl.d/99-network-optimization.conf со следующим содержанием:

# Включение форвардинга
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1

# Оптимизация для большого числа соединений
net.core.rmem_max = 134217728
net.core.wmem_max = 134217728
net.ipv4.tcp_rmem = 4096 87380 134217728
net.ipv4.tcp_wmem = 4096 65536 134217728
net.core.netdev_max_backlog = 30000

# Ускорение переиспользования сокетов
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 15

# Защита от spoofing (включить, если интерфейсы доверенные)
# net.ipv4.conf.all.rp_filter = 1
# net.ipv4.conf.default.rp_filter = 1

# Отключение ICMP-редиректов
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0

Примените настройки: sysctl -p /etc/sysctl.d/99-network-optimization.conf.

Проверка: команды для тестирования базовой маршрутизации

Убедитесь, что форвардинг активен:

sysctl net.ipv4.ip_forward
# Должно вернуть: net.ipv4.ip_forward = 1
cat /proc/sys/net/ipv4/ip_forward
# Должно вернуть: 1

Для практической проверки подключите два клиента к разным интерфейсам сервера (например, в сети 192.168.1.0/24 и 10.0.0.0/24). С сервера запустите tcpdump -i any icmp. Затем с одного клиента выполните ping до адреса второго клиента. Если вы видите прохождение пакетов через интерфейсы сервера - базовая маршрутизация работает.

Динамическая маршрутизация с FRRouting: BGP и OSPF в работе

FRRouting (FRR) - это полнофункциональный стек протоколов динамической маршрутизации для Linux. Установите последнюю стабильную версию (8.x): apt install frr. Включите нужные демоны в /etc/frr/daemons (например, ospfd=yes, bgpd=yes).

Пример конфигурации OSPF для нескольких зон

Основная конфигурация находится в /etc/frr/frr.conf. Пример для сети с тремя интерфейсами:

! /etc/frr/frr.conf
frr version 8.5.2
hostname linux-router
log syslog informational
!
! OSPF конфигурация
router ospf
  ospf router-id 192.168.1.1
  network 192.168.1.0/24 area 0.0.0.0
  network 10.0.10.0/24 area 0.0.0.10
  network 10.0.20.0/24 area 0.0.0.20
  ! Оптимизация таймеров для быстрой сети
  timers throttle spf 50 100 500
  timers throttle lsa 50 100 500
  passive-interface default
  no passive-interface enp3s0f0
  no passive-interface enp3s0f1
!
line vty
!

Этот конфиг объявляет сети в backbone area (0) и двух non-backbone areas.

Настройка BGP сессии с провайдером (eBGP)

Пример настройки eBGP для получения default-route от провайдера (AS 65000):

! /etc/frr/frr.conf (дополнение)
router bgp 65100
  bgp router-id 192.168.1.1
  neighbor 203.0.113.1 remote-as 65000
  neighbor 203.0.113.1 password MySecureBGPPassword
  neighbor 203.0.113.1 description UPLINK-Provider
  ! Фильтрация: принимаем только default route
  ip prefix-list PL_DEFAULT seq 5 permit 0.0.0.0/0
  route-map RM_IN permit 10
    match ip address prefix-list PL_DEFAULT
  ! Применяем фильтр на входящие маршруты
  neighbor 203.0.113.1 route-map RM_IN in
  ! Экспортируем только наши внутренние сети
  network 192.168.1.0/24
  network 10.0.10.0/24
!

Мониторинг и отладка работы FRRouting

Используйте интерактивную оболочку vtysh для диагностики:

# Показать соседей OSPF
show ip ospf neighbor
# Показать статус BGP сессий
show ip bgp summary
# Показать полученные BGP маршруты
show ip bgp
# Просмотреть логи FRR
tail -f /var/log/frr/frr.log

Типичная проблема: статус BGP Active вместо Established. Проверьте физическую связность, ACL на удаленной стороне и правильность указания AS и password. Для глубокой диагностики проблем маршрутизации обратитесь к нашему руководству по диагностике динамической маршрутизации.

Сервисы сети: развертывание DHCP и DNS для клиентов

Чтобы маршрутизатор стал полноценным сетевым узлом, добавьте базовые службы.

Готовый dhcpd.conf с резервированием адресов и опциями

Установите isc-dhcp-server. Пример /etc/dhcp/dhcpd.conf для сети 10.0.10.0/24:

# Глобальные настройки
authoritative;
ddns-update-style none;
default-lease-time 3600;
max-lease-time 7200;
log-facility local7;

# Объявление подсети
subnet 10.0.10.0 netmask 255.255.255.0 {
  range 10.0.10.100 10.0.10.200;
  option routers 10.0.10.1;
  option domain-name-servers 10.0.10.1, 8.8.8.8;
  option domain-name "internal.lan";
  option subnet-mask 255.255.255.0;
  option broadcast-address 10.0.10.255;
}

# Резервирование адреса для сервера по MAC
host server01 {
  hardware ethernet aa:bb:cc:dd:ee:ff;
  fixed-address 10.0.10.10;
}

Укажите интерфейс в /etc/default/isc-dhcp-server (INTERFACESv4="enp3s0f1") и запустите службу.

Кэширующий DNS-резолвер BIND9 с блокировкой рекламы

Установите bind9. Настройте /etc/bind/named.conf.options для рекурсивного кэширующего резолвера:

options {
    directory "/var/cache/bind";
    recursion yes;
    allow-recursion { 10.0.10.0/24; 127.0.0.1; };
    allow-query { 10.0.10.0/24; 127.0.0.1; };
    forwarders { 8.8.8.8; 1.1.1.1; };
    dnssec-validation auto;
    listen-on { 10.0.10.1; 127.0.0.1; };
    listen-on-v6 { none; };

    // Response Policy Zone для блокировки рекламы
    response-policy { zone "rpz"; };
};

// Определение RPZ зоны
zone "rpz" {
    type master;
    file "/etc/bind/db.rpz";
    allow-query { none; };
};

Создайте файл зоны /etc/bind/db.rpz с записями вида *.doubleclick.net CNAME . для блокировки. Проверьте: dig @10.0.10.1 google.com.

Безопасность и контроль: брандмауэр, hardening и логирование

Защита маршрутизатора - критически важный этап. Начните с настройки брандмауэра nftables.

Базовые правила nftables для маршрутизатора

Пример конфигурации /etc/nftables.conf, разрешающей служебные протоколы и SSH:

#!/usr/sbin/nft -f
flush ruleset

table inet filter {
    chain input {
        type filter hook input priority 0; policy drop;
        # Разрешить established/related
        ct state established,related accept
        # Разрешить loopback
        iif lo accept
        # Разрешить ICMP для диагностики
        ip protocol icmp accept
        # Разрешить SSH (с ограничением по частоте)
        tcp dport 22 accept
        # Разрешить OSPF (IP proto 89) и BGP (tcp 179)
        ip protocol ospf accept
        tcp dport 179 accept
        # Логирование отклоненных пакетов (опционально)
        log flags all counter prefix "nftables-input-drop: "
    }
    chain forward {
        type filter hook forward priority 0; policy drop;
        ct state established,related accept
        # Разрешить форвардинг между внутренними интерфейсами
        iif enp3s0f1 oif enp3s0f2 accept
        iif enp3s0f2 oif enp3s0f1 accept
        log flags all counter prefix "nftables-forward-drop: "
    }
    chain output {
        type filter hook output priority 0; policy accept;
    }
}

Примените правила: nft -f /etc/nftables.conf. Для комплексного аудита безопасности системы используйте методы из нашего отдельного руководства по безопасности Linux-сервера.

Шаги по hardening Debian/Ubuntu сервера

Выполните базовый чек-лист:

  1. Обновление системы: apt update && apt upgrade -y.
  2. Настройка SSH: В /etc/ssh/sshd_config установите PermitRootLogin no, PasswordAuthentication no, Protocol 2.
  3. Удаление ненужных пакетов: apt purge --auto-remove avahi-daemon cups*.
  4. Установка fail2ban: apt install fail2ban. Настройте защиту SSH в /etc/fail2ban/jail.local.
  5. Автоматические обновления безопасности: apt install unattended-upgrades; настройте в /etc/apt/apt.conf.d/50unattended-upgrades.

Мониторинг production-системы: Prometheus, Grafana и SNMP

Для контроля состояния маршрутизатора в реальном времени настройте сбор метрик.

Дашборд Grafana для сетевого инженера: ключевые виджеты

Установите node_exporter для сбора системных метрик и frr_exporter для метрик FRR. Настройте Prometheus на их сбор. В Grafana создайте дашборд, включающий:

  • График трафика по интерфейсам (метрика node_network_receive_bytes_total).
  • Количество BGP префиксов (метрика frr_bgp_prefixes_total).
  • Статус OSPF соседей (1 - Full, 0 - иначе).
  • Использование CPU и памяти.
  • Количество отброшенных пакетов на интерфейсах.

Пример PromQL для трафика: rate(node_network_receive_bytes_total{device="enp3s0f0"}[5m]) * 8 (бит/с).

Настройка SNMP для интеграции с корпоративными системами

Для интеграции с Zabbix или LibreNMS установите snmpd. Настройте /etc/snmp/snmpd.conf:

# Разрешить чтение с определенного адреса
rocommunity MyComplexROCommunity 10.0.10.50
# Ограничить доступ к системной информации
view   systemonly  included   .1.3.6.1.2.1.1
view   systemonly  included   .1.3.6.1.2.1.25.1
# Интерфейсы
view   systemonly  included   .1.3.6.1.2.1.2
view   systemonly  included   .1.3.6.1.2.1.31.1

Перезапустите службу. Полезные OID: .1.3.6.1.2.1.2.2.1.10 (входящие октеты на интерфейсе), .1.3.6.1.2.1.1.3.0 (uptime системы).

Резервное копирование конфигураций и план аварийного восстановления

Автоматизируйте резервное копирование ключевых конфигураций. Простой скрипт для cron:

#!/bin/bash
BACKUP_DIR="/backup/router-configs"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR/$DATE
# Копируем конфиги
cp -r /etc/frr $BACKUP_DIR/$DATE/
cp -r /etc/bind $BACKUP_DIR/$DATE/
cp /etc/dhcp/dhcpd.conf $BACKUP_DIR/$DATE/
cp /etc/nftables.conf $BACKUP_DIR/$DATE/
cp /etc/netplan/*.yaml $BACKUP_DIR/$DATE/ 2>/dev/null || true
# Архивируем
tar -czf $BACKUP_DIR/router_backup_$DATE.tar.gz -C $BACKUP_DIR/$DATE .
# Удаляем временную папку
rm -rf $BACKUP_DIR/$DATE
# Опционально: отправляем на удаленный сервер
# scp $BACKUP_DIR/router_backup_$DATE.tar.gz user@backup-server:/backups/

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

Для автоматизации и управления сложными сетевыми средами рассмотрите использование единых интерфейсов, таких как агрегатор API AiTunnel, который может упростить интеграцию различных сервисов мониторинга и управления через единый протокол.

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