FRRouting, или сокращённо FRR, — это набор демонов маршрутизации с открытым исходным кодом, который превращает обычный Linux-сервер в полноценный маршрутизатор. Поддерживаются OSPF, BGP, IS-IS, RIP, PIM и другие протоколы, а управление идёт через единый интерфейс vtysh с синтаксисом, знакомым администраторам Cisco. Ниже — практический сценарий: машина с двумя сетевыми картами становится шлюзом между домашней сетью и лабораторным сегментом, поднимает OSPF с соседом и анонсирует свой префикс через BGP.

Когда FRR действительно нужен

Для простого шлюза с NAT достаточно статических маршрутов и netfilter. Динамическая маршрутизация оправдана, когда сегментов несколько, появился второй провайдер, есть виртуальные машины с собственными сетями или стенд для подготовки к экзаменам. FRR удобен тем, что работает в обычном Linux, внутри сетевого namespace и в контейнере с флагом NET_ADMIN. Важно понимать: FRR только вычисляет маршруты и передаёт их ядру через zebra. Саму пересылку пакетов выполняет ядро, поэтому forwarding нужно включить отдельно.

Установка и включение демонов

В Debian, Ubuntu и производных FRR есть в штатном репозитории. Пакет frr-pythontools пригодится для служебных скриптов, включая проверку конфигурации перед перезагрузкой.

sudo apt update
sudo apt install frr frr-pythontools
sudo systemctl enable --now frr
vtysh -c "show version"

В Fedora пакет ставится через dnf.

sudo dnf install frr
sudo systemctl enable --now frr
systemctl status frr --no-pager

Список демонов находится в /etc/frr/daemons. Включите ospfd и bgpd, заменив no на yes, затем перезапустите службу. Команда show daemons покажет, что реально работает.

sudo sed -i 's/^ospfd=no/ospfd=yes/' /etc/frr/daemons
sudo sed -i 's/^bgpd=no/bgpd=yes/' /etc/frr/daemons
sudo chown frr:frr /etc/frr/daemons
sudo systemctl restart frr
vtysh -c "show daemons"

Теперь включите пересылку пакетов. Без этого маршруты в таблице появятся, но трафик между сетями не пойдёт — типичная ошибка при первом запуске.

sudo tee /etc/sysctl.d/99-router.conf <<'EOF'
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
EOF
sudo sysctl --system

Интерфейсы и интегрированная конфигурация

Современный FRR хранит настройки всех демонов в одном файле /etc/frr/frr.conf. Директива service integrated-vtysh-config включает этот режим, а права доступа должны быть строгими: владелец frr, группа frr, режим 640. Конфигурацию удобно править через vtysh в режиме configure terminal, но для версионирования лучше держать её в git и применять целиком.

sudo chown frr:frr /etc/frr/frr.conf
sudo chmod 640 /etc/frr/frr.conf
sudo vtysh -c "write memory"
sudo systemctl reload frr

Пример конфигурации шлюза: uplink смотрит в сторону провайдера или лабораторного ядра, LAN-интерфейс обслуживает домашнюю сеть. Пассивный интерфейс не отправляет hello-пакеты, что корректно для сети, где нет других OSPF-маршрутизаторов.

frr defaults traditional
hostname gw-home
log syslog informational
service integrated-vtysh-config
!
interface enp1s0
 description UPLINK
 ip address 203.0.113.2/30
!
interface enp2s0
 description LAN
 ip address 192.168.10.1/24
!
ip route 0.0.0.0/0 203.0.113.1
!
router ospf
 ospf router-id 192.168.10.1
 network 192.168.10.0/24 area 0
 passive-interface enp2s0
!

OSPF между двумя маршрутизаторами

На втором устройстве настройте ту же область и сеть, которая соединяет соседей. Router ID должен быть уникальным и обычно совпадает с адресом loopback или LAN-интерфейса. Если адреса находятся в разных подсетях, OSPF-соседство не поднимется, поэтому проверьте маски и связность до настройки протокола.

router ospf
 ospf router-id 192.168.20.1
 network 192.168.20.0/24 area 0
 network 10.0.0.0/30 area 0
!

После применения конфигурации соседство устанавливается за несколько секунд. Метрика по умолчанию зависит от пропускной способности интерфейса, а стоимость можно задать вручную директивой ip ospf cost. Для защиты от случайных анонсов используйте аутентификацию и ограничение списка сетей.

vtysh -c "show ip ospf neighbor"
vtysh -c "show ip ospf route"
vtysh -c "show ip route ospf"

Если соседство застряло в состоянии Init или ExStart, ищите проблему в MTU, ACL или несовпадении area.

BGP: аккуратный анонс префикса

BGP нужен, когда требуется обмен маршрутами с провайдером или другим автономным сегментом. Номер AS в лаборатории берите из диапазона 64512–65534. Директива no bgp ebgp-requires-policy отключает обязательную фильтрацию, но только для тестового стенда: в реальной сети входящие и исходящие анонсы должны проходить через prefix-list и route-map.

router bgp 65001
 bgp router-id 192.168.10.1
 no bgp ebgp-requires-policy
 neighbor 203.0.113.1 remote-as 64500
 neighbor 203.0.113.1 password CHANGE_ME
 address-family ipv4 unicast
  network 192.168.10.0/24
  neighbor 203.0.113.1 activate
 exit-address-family
!

Анонсируемый префикс должен присутствовать в таблице маршрутизации, иначе BGP его не отправит. Проверьте, что сеть видна в show ip route, а затем смотрите состояние сессии: для established нужен open, keepalive и корректный TCP-порт 179.

Диагностика и типичные сбои

Начинайте с ядра, затем переходите к демонам. Команда ip route показывает, установил ли zebra маршруты; vtysh показывает точку зрения FRR. Если маршрут есть в FRR, но отсутствует в ядре, проверьте права и сообщения zebra в journalctl.

vtysh -c "show ip route summary"
vtysh -c "show bgp ipv4 unicast summary"
vtysh -c "show ip ospf interface enp2s0"
sudo tcpdump -ni enp1s0 tcp port 179 -c 20

Частые причины проблем: выключен forwarding, неверная маска на линке, firewall блокирует OSPF (протокол 89) или BGP, конфликт router-id, отсутствие префикса для анонса.

Сохранение, проверка и безопасность

Команда write memory сохраняет рабочий конфиг в frr.conf. Перед перезагрузкой полезно прогнать проверку синтаксиса: frr-reload.py с ключом —test сравнивает текущую и новую конфигурацию и показывает diff, не применяя изменения. Путь к скрипту зависит от дистрибутива, поэтому сначала найдите его через пакетный менеджер.

sudo vtysh -c "write memory"
sudo systemctl reload frr
sudo python3 /usr/lib/frr/frr-reload.py --test /etc/frr/frr.conf
sudo journalctl -u frr -b --no-pager | tail -n 50

Ограничьте доступ к vtysh локальной консолью и не публикуйте BGP-сессию в интернет без пароля и фильтров. Отключите неиспользуемые демоны, включите логирование в syslog и настройте мониторинг состояния соседей.

Чек-лист перед вводом в эксплуатацию:

  • forwarding включён и сохранён в sysctl.d;
  • на интерфейсах нет ошибок и дублирующихся адресов;
  • router-id уникальны, области OSPF совпадают;
  • анонсы BGP подтверждены и отфильтрованы;
  • конфигурация лежит в git и проверяется перед reload;

Итог

FRRouting даёт Linux-машине возможности полноценного маршрутизатора без проприетарного оборудования. Ключевые шаги — включить forwarding, активировать только необходимые демоны, держать единый frr.conf под контролем версий и проверять результат на двух уровнях: в vtysh и в ядре. Начните с OSPF в лаборатории, затем добавьте BGP с жёсткими фильтрами.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Поделиться: Telegram ВКонтакте