# 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. Запуск сервера ```powershell # Клонирование репозитория (если нужно) git clone cd bgp-server # Запуск с Docker Compose docker-compose up -d ``` ### 3. Проверка работы ```powershell # Просмотр логов 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`: ```yaml 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:** ```yaml 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.1.100 - BGP_NEIGHBOR_IP=192.168.1.1 - BGP_NEIGHBOR_AS=65001 networks: - bgp-network cap_add: - NET_ADMIN privileged: true networks: bgp-network: driver: bridge ipam: config: - subnet: 192.168.1.0/24 ``` ### Шаг 4: Настройка RouterOS На стороне RouterOS 7.14+ выполните следующие команды: ```routeros # Создание BGP экземпляра /routing bgp instance add name=bgp-server as=65001 router-id=192.168.1.1 # Настройка BGP сети /routing bgp network add network=192.168.1.0/24 # Настройка BGP пира /routing bgp peer add name=bgp-server remote-address=192.168.1.100 remote-as=65000 instance=bgp-server # Включение BGP /routing bgp instance set bgp-server disabled=no ``` ### Шаг 5: Запуск и мониторинг ```powershell # Запуск сервера 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 ```powershell # Подключение к FRR CLI docker exec -it bgp-server vtysh # Просмотр BGP соседей show ip bgp neighbors # Просмотр BGP маршрутов show ip bgp # Просмотр статических маршрутов show ip route # Просмотр конфигурации show running-config ``` ### Мониторинг через скрипты ```powershell # Запуск мониторинга 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 ``` ### Логи ```powershell # Логи 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 ```powershell # Проверка процессов 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 сессии ```powershell # Статус BGP соседей docker exec bgp-server vtysh -c "show ip bgp summary" # Детальная информация о соседе docker exec bgp-server vtysh -c "show ip bgp neighbors 192.168.1.1" ``` ### Проверка маршрутов ```powershell # Все 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. ### Ручное обновление ```powershell # Перезагрузка всех префиксов docker exec bgp-server python3 /app/scripts/load_prefixes.py # Тестирование загрузки префиксов docker exec bgp-server python3 /app/scripts/load_prefixes.py --test ``` ## Устранение неполадок ### Проблема: BGP сессия не устанавливается 1. Проверьте сетевую связность: ```powershell docker exec bgp-server ping 192.168.1.1 ``` 2. Проверьте конфигурацию BGP: ```powershell docker exec bgp-server vtysh -c "show running-config" ``` 3. Проверьте логи FRR: ```powershell docker exec bgp-server tail -f /app/logs/frr.log ``` ### Проблема: Префиксы не анонсируются 1. Проверьте файлы с префиксами: ```powershell docker exec bgp-server cat /app/data/prefixes.txt ``` 2. Проверьте логи загрузки префиксов: ```powershell docker exec bgp-server tail -f /app/logs/prefixes.log ``` 3. Проверьте статические маршруты: ```powershell docker exec bgp-server vtysh -c "show ip route static" ``` ### Проблема: Высокое потребление ресурсов 1. Проверьте использование памяти: ```powershell docker exec bgp-server free -h ``` 2. Проверьте количество маршрутов: ```powershell docker exec bgp-server vtysh -c "show ip bgp summary" ``` ## Безопасность - FRR работает в привилегированном контейнере для доступа к сетевым интерфейсам - Используйте route-maps для фильтрации трафика - Ограничьте доступ к vtysh CLI - Регулярно обновляйте образ Docker ## Производительность - FRR оптимизирован для обработки большого количества маршрутов - Поддерживает до 1 миллиона маршрутов - Эффективное использование памяти - Быстрое время сходимости ## Поддержка - Документация FRR: https://frrouting.org/ - GitHub проекта: https://github.com/FRRouting/frr - Сообщество: https://lists.frrouting.org/