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 и только потом выводите конфигурацию в рабочую сеть.

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

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

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

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

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