FRRouting превращает обычный Linux-сервер в полноценный маршрутизатор. Ниже — рабочая схема пограничного узла: OSPF с несколькими зонами внутри площадки и BGP с явной фильтрацией префиксов наружу. Такой набор типичен для офиса, небольшого провайдера или лаборатории с несколькими аплинками.
Где FRR заменяет аппаратный маршрутизатор
FRR умеет OSPF, BGP, IS-IS, RIP и PIM, а управление идёт через vtysh с синтаксисом, знакомым сетевым администраторам. Пакеты пересылает ядро Linux, а не демон: FRR лишь вычисляет маршруты и передаёт их в таблицу. Поэтому forwarding включается отдельно, иначе маршруты появятся, а трафик не пойдёт.
Для домашнего шлюза с NAT обычно достаточно статических маршрутов. Динамическая маршрутизация нужна, когда сегментов несколько, есть резервный канал или стенд для отработки отказов. FRR даёт предсказуемое переключение и диагностику через show-команды.
Установка, демоны и forwarding
В Debian и Ubuntu FRR есть в штатном репозитории. Включите нужные демоны в /etc/frr/daemons: для этой схемы нужны ospfd, bgpd и bfdd. Файл принадлежит пользователю frr, поэтому правьте его через sudo.
sudo apt update
sudo apt install frr frr-pythontools
sudo sed -i 's/^ospfd=no/ospfd=yes/' /etc/frr/daemons
sudo sed -i 's/^bgpd=no/bgpd=yes/' /etc/frr/daemons
sudo systemctl restart frr
vtysh -c "show daemons"
Затем включите пересылку и проверьте, что она применилась. Для IPv6 нужен отдельный параметр, даже если сейчас используется только IPv4.
sudo tee /etc/sysctl.d/99-router.conf <<'EOF'
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
EOF
sudo sysctl --system
sysctl net.ipv4.ip_forward
OSPF: зоны, пассивные интерфейсы и стоимость
Внутри площадки разделите сеть на backbone-зону и зону пользовательского сегмента. Пассивные интерфейсы не отправляют hello, но их префиксы попадают в OSPF. Стоимость задавайте явно, иначе выбор пути будет зависеть от пропускной способности, которую Linux может определить неверно.
interface eth0
ip address 198.51.100.2/30
ip ospf area 0.0.0.0
!
interface eth1
ip address 10.10.10.1/24
ip ospf area 0.0.0.10
ip ospf cost 100
!
router ospf
ospf router-id 198.51.100.2
passive-interface default
no passive-interface eth0
area 0.0.0.10 stub
auto-cost reference-bandwidth 10000
Зона 0.0.0.10 объявлена stub: внешние маршруты в неё не передаются, а по умолчанию используется выход через граничный маршрутизатор. Если выходов два, stub не подходит — берите normal или NSSA.
BGP: peer-group, prefix-list и route-map
Наружу анонсируйте только свои префиксы и принимайте только разрешённое политикой. В современных версиях FRR eBGP по умолчанию требует явной политики: конфигурация без фильтров опасна. Peer-group сокращает повторение, а maximum-prefix защищает от flood.
router bgp 65010
bgp router-id 198.51.100.2
neighbor TRANSIT peer-group
neighbor TRANSIT remote-as 64500
neighbor TRANSIT description uplink
neighbor 198.51.100.1 peer-group TRANSIT
neighbor 198.51.100.1 bfd
address-family ipv4 unicast
network 10.10.10.0/24
neighbor TRANSIT activate
neighbor TRANSIT route-map TRANSIT-IN in
neighbor TRANSIT route-map TRANSIT-OUT out
neighbor TRANSIT maximum-prefix 100 80
exit-address-family
!
ip prefix-list PL-DEFAULT seq 10 permit 0.0.0.0/0
ip prefix-list PL-OURS seq 10 permit 10.10.10.0/24
!
route-map TRANSIT-IN permit 10
match ip address prefix-list PL-DEFAULT
route-map TRANSIT-OUT permit 10
match ip address prefix-list PL-OURS
Такой inbound-фильтр принимает только default route от провайдера. Если нужен полный префикс, замените список на явный набор сетей или IRR-фильтры, но не открывайте приём «всего интернета» без лимита маршрутов. Outbound-политика не даёт анонсировать чужие сети и приватные диапазоны.
BFD: обнаружение отказа за доли секунды
BFD ускоряет реакцию на обрыв, не дожидаясь таймеров BGP. Профиль с интервалом 300 мс и множителем 3 даёт обнаружение примерно за секунду, но подходит только для выделенного канала. На нестабильном интернете разумнее 1000 мс и множитель 3.
bfd
profile FAST
transmit-interval 300
receive-interval 300
detect-multiplier 3
exit
!
interface eth0
ip ospf bfd
!
router bgp 65010
neighbor 198.51.100.1 bfd profile FAST
Проверьте, что BFD-сессия поднялась и привязана к соседу. Если нет, чаще всего мешает firewall: для BFD нужны UDP-порты 3784 и 3785, для BGP — TCP 179.
Проверка таблиц и поиск асимметрии
Смотрите не только на наличие маршрута, но и на источник, административную дистанцию и next-hop. Команда ip route get показывает путь, который выберет ядро для конкретного адреса.
vtysh -c "show ip ospf neighbor"
vtysh -c "show ip ospf database"
vtysh -c "show bgp ipv4 unicast summary"
vtysh -c "show bgp ipv4 unicast 10.10.10.0/24"
vtysh -c "show bfd peers"
ip route get 10.10.10.20
Для BGP полезны show bgp neighbor 198.51.100.1 advertised-routes и received-routes. Второй требует soft-reconfiguration inbound, иначе маршруты до политики не сохраняются. Отладку всех обновлений на production без нужды не включайте: она забивает журнал.
Типичные ошибки
- OSPF застревает в ExStart или Exchange: обычно несовпадение MTU. Проверьте
ip linkиshow ip ospf interface;ip ospf mtu-ignore— только временная мера. - Соседство не поднимается: разные area ID, разные пароли или несовпадение флага stub/NSSA.
- BGP в Idle или Active: закрыт TCP 179, неверный
remote-as, нет маршрута до peer или забытupdate-sourceдля iBGP. - Префикс не анонсируется:
networkтребует точного совпадения с записью в RIB, а не просто наличия подсети на интерфейсе. - Маршрут есть, трафика нет: проверьте обратный путь и асимметрию через
ip route getна обоих концах. - После смены политики ничего не изменилось: не выполнен soft reset или политика применена не в той address-family.
Чек-лист
- Forwarding включён и проверен после перезагрузки.
- Для OSPF явно заданы router-id, зоны и стоимости.
- BGP-сессии ограничены prefix-list и maximum-prefix с двух сторон.
- BFD-таймеры соответствуют качеству канала.
- TCP 179, IP-протокол 89 и UDP 3784-3785 открыты только для доверенных соседей.
- Конфигурация хранится в git, а
show running-configсверяется после каждого изменения.
Итог
FRR даёт Linux-серверу маршрутизаторную функциональность без проприетарных лицензий. Рабочая схема строится вокруг трёх вещей: корректного forwarding, OSPF с явными зонами и BGP с фильтрацией на входе и выходе. BFD добавляет быстрое обнаружение отказов, но требует аккуратных таймеров. Начинайте с лабораторного стенда, проверяйте асимметрию через ip route get и только потом выводите конфигурацию в рабочую сеть.