Создание программного маршрутизатора на базе стандартного сервера 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 оптимально для конкретных задач:
- Учебный стенд. Идеальная платформа для отработки настройки BGP, OSPF и политик маршрутизации без затрат на дорогое коммерческое железо.
- Бюджетный маршрутизатор для филиала. Замена устаревшего оборудования на cost-эффективный сервер с динамической маршрутизацией и встроенными сервисами (DHCP, DNS, VPN).
- Резервный шлюз в ЦОД. Развертывание в качестве резервного маршрутизатора для критичных сегментов сети, обеспечивающего отказоустойчивость. Для настройки высокой доступности можно использовать решения вроде VRRP, как описано в нашем руководстве по отказоустойчивой сети.
- Платформа для запуска дополнительных сервисов. Функция маршрутизатора совмещается с 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 сервера
Выполните базовый чек-лист:
- Обновление системы:
apt update && apt upgrade -y. - Настройка SSH: В
/etc/ssh/sshd_configустановитеPermitRootLogin no,PasswordAuthentication no,Protocol 2. - Удаление ненужных пакетов:
apt purge --auto-remove avahi-daemon cups*. - Установка fail2ban:
apt install fail2ban. Настройте защиту SSH в/etc/fail2ban/jail.local. - Автоматические обновления безопасности:
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, который может упростить интеграцию различных сервисов мониторинга и управления через единый протокол.