Files

10 KiB
Raw Permalink Blame History

BGP Server для раздачи префиксов (FRR)

Этот проект представляет собой BGP сервер на базе FRR (Free Range Routing), который раздает префиксы из текстовых файлов. Сервер работает в Docker контейнере и предназначен для интеграции с RouterOS 7.14+.

Архитектура решения

  • BGP Server: FRR (Free Range Routing) в Docker контейнере
  • Источник данных: Текстовые файлы с префиксами
  • Клиент: RouterOS 7.14+ для получения префиксов
  • Протокол: BGP (только исходящие анонсы)

Преимущества FRR

  • Стабильность: Производственный уровень надежности
  • Производительность: Оптимизирован для высоких нагрузок
  • Функциональность: Полная поддержка BGP функций
  • Мониторинг: Встроенные инструменты диагностики
  • Сообщество: Активная поддержка и развитие

Структура проекта

bgp-server/
├── docker-compose.yml          # Конфигурация Docker
├── Dockerfile                  # Образ Docker с FRR
├── frr.conf                    # Конфигурация FRR
├── scripts/
│   ├── start.sh               # Скрипт запуска FRR
│   ├── load_prefixes.py       # Загрузка префиксов в FRR
│   ├── generate_config.py     # Генерация конфигурации FRR
│   └── monitor.py             # Мониторинг FRR
├── data/
│   ├── prefixes.txt           # Основной файл с префиксами
│   └── additional_prefixes.txt # Дополнительные префиксы
├── logs/                      # Логи FRR
└── README.md                  # Эта инструкция

Быстрый старт

1. Подготовка файлов с префиксами

Создайте файл data/prefixes.txt с префиксами в формате:

192.168.1.0/24
10.0.0.0/8
172.16.0.0/12

2. Запуск сервера

# Клонирование репозитория (если нужно)
git clone <repository-url>
cd bgp-server

# Запуск с Docker Compose
docker-compose up -d

3. Проверка работы

# Просмотр логов
docker-compose logs -f bgp-server

# Проверка статуса контейнера
docker-compose ps

# Проверка BGP сессии через vtysh
docker exec bgp-server vtysh -c "show ip bgp summary"

Подробная настройка

Требования

  • Docker Desktop для Windows
  • PowerShell
  • RouterOS 7.14+ на стороне клиента

Шаг 1: Настройка файлов с префиксами

Создайте файлы с префиксами в папке data/:

data/prefixes.txt:

# Основные префиксы
192.168.1.0/24
192.168.2.0/24
10.0.0.0/8
172.16.0.0/12

# Комментарии начинаются с #
# Пустые строки игнорируются

data/additional_prefixes.txt:

# Дополнительные префиксы
203.0.113.0/24
198.51.100.0/24

Шаг 2: Конфигурация BGP сервера

Конфигурация FRR генерируется автоматически из переменных окружения в docker-compose.yml:

environment:
  - BGP_LOCAL_AS=65000
  - BGP_ROUTER_ID=192.168.1.100
  - BGP_NEIGHBOR_IP=192.168.1.1
  - BGP_NEIGHBOR_AS=65001
  - BGP_HOLD_TIME=90
  - BGP_KEEPALIVE=30
  - BGP_LOG_LEVEL=info

Шаг 3: Настройка Docker

docker-compose.yml:

version: '3.8'

services:
  bgp-server:
    build: .
    container_name: bgp-server
    restart: unless-stopped
    ports:
      - "179:179"  # BGP порт
    volumes:
      - ./data:/app/data:ro
      - ./logs:/app/logs
    environment:
      - BGP_LOCAL_AS=65000
      - BGP_ROUTER_ID=192.168.100.99
      - BGP_NEIGHBOR_IP=192.168.0.254
      - BGP_NEIGHBOR_AS=65001
    networks:
      - bgp-network
    cap_add:
      - NET_ADMIN
    privileged: true

networks:
  bgp-network:
    driver: bridge
    ipam:
      config:
        - subnet: 192.168.100.0/24

Шаг 4: Настройка RouterOS

На стороне RouterOS 7.14+ выполните следующие команды:

# Создание BGP экземпляра
/routing bgp instance
add name=bgp-server as=65001 router-id=192.168.0.254

# Настройка BGP сети
/routing bgp network
add network=192.168.0.0/24

# Настройка BGP пира
/routing bgp peer
add name=bgp-server remote-address=192.168.100.99 remote-as=65000 instance=bgp-server

# Включение BGP
/routing bgp instance set bgp-server disabled=no

Шаг 5: Запуск и мониторинг

# Запуск сервера
docker-compose up -d

# Просмотр логов в реальном времени
docker-compose logs -f bgp-server

# Проверка статуса BGP сессии
docker exec bgp-server vtysh -c "show ip bgp summary"

# Проверка анонсированных маршрутов
docker exec bgp-server vtysh -c "show ip bgp"

Управление и мониторинг

Команды vtysh

# Подключение к FRR CLI
docker exec -it bgp-server vtysh

# Просмотр BGP соседей
show ip bgp neighbors

# Просмотр BGP маршрутов
show ip bgp

# Просмотр статических маршрутов
show ip route

# Просмотр конфигурации
show running-config

Мониторинг через скрипты

# Запуск мониторинга
docker exec bgp-server python3 /app/scripts/monitor.py

# Просмотр статуса
docker exec bgp-server cat /app/logs/status.json

# Перезагрузка префиксов
docker exec bgp-server python3 /app/scripts/load_prefixes.py --test

Логи

# Логи FRR
docker exec bgp-server tail -f /app/logs/frr.log

# Логи загрузки префиксов
docker exec bgp-server tail -f /app/logs/prefixes.log

# Логи мониторинга
docker exec bgp-server tail -f /app/logs/monitor.log

Диагностика

Проверка статуса FRR

# Проверка процессов
docker exec bgp-server ps aux | grep -E "(zebra|bgpd)"

# Проверка версии FRR
docker exec bgp-server vtysh -c "show version"

# Проверка сетевых интерфейсов
docker exec bgp-server vtysh -c "show interface"

Проверка BGP сессии

# Статус BGP соседей
docker exec bgp-server vtysh -c "show ip bgp summary"

# Детальная информация о соседе
docker exec bgp-server vtysh -c "show ip bgp neighbors 192.168.0.254"

Проверка маршрутов

# Все BGP маршруты
docker exec bgp-server vtysh -c "show ip bgp"

# Статические маршруты
docker exec bgp-server vtysh -c "show ip route static"

# Таблица маршрутизации
docker exec bgp-server vtysh -c "show ip route"

Обновление префиксов

Автоматическое обновление

Скрипт load_prefixes.py автоматически отслеживает изменения в файлах префиксов и обновляет маршруты в FRR.

Ручное обновление

# Перезагрузка всех префиксов
docker exec bgp-server python3 /app/scripts/load_prefixes.py

# Тестирование загрузки префиксов
docker exec bgp-server python3 /app/scripts/load_prefixes.py --test

Устранение неполадок

Проблема: BGP сессия не устанавливается

  1. Проверьте сетевую связность:
docker exec bgp-server ping 192.168.0.254
  1. Проверьте конфигурацию BGP:
docker exec bgp-server vtysh -c "show running-config"
  1. Проверьте логи FRR:
docker exec bgp-server tail -f /app/logs/frr.log

Проблема: Префиксы не анонсируются

  1. Проверьте файлы с префиксами:
docker exec bgp-server cat /app/data/prefixes.txt
  1. Проверьте логи загрузки префиксов:
docker exec bgp-server tail -f /app/logs/prefixes.log
  1. Проверьте статические маршруты:
docker exec bgp-server vtysh -c "show ip route static"

Проблема: Высокое потребление ресурсов

  1. Проверьте использование памяти:
docker exec bgp-server free -h
  1. Проверьте количество маршрутов:
docker exec bgp-server vtysh -c "show ip bgp summary"

Безопасность

  • FRR работает в привилегированном контейнере для доступа к сетевым интерфейсам
  • Используйте route-maps для фильтрации трафика
  • Ограничьте доступ к vtysh CLI
  • Регулярно обновляйте образ Docker

Производительность

  • FRR оптимизирован для обработки большого количества маршрутов
  • Поддерживает до 1 миллиона маршрутов
  • Эффективное использование памяти
  • Быстрое время сходимости

Поддержка