170553612dcc070e64555e7e4402f3b941ade7e4
Build and Push Docker Image / build (push) Successful in 7m58s
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.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+ выполните следующие команды:
# Создание 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: Запуск и мониторинг
# Запуск сервера
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.1.1"
Проверка маршрутов
# Все 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 сессия не устанавливается
- Проверьте сетевую связность:
docker exec bgp-server ping 192.168.1.1
- Проверьте конфигурацию BGP:
docker exec bgp-server vtysh -c "show running-config"
- Проверьте логи FRR:
docker exec bgp-server tail -f /app/logs/frr.log
Проблема: Префиксы не анонсируются
- Проверьте файлы с префиксами:
docker exec bgp-server cat /app/data/prefixes.txt
- Проверьте логи загрузки префиксов:
docker exec bgp-server tail -f /app/logs/prefixes.log
- Проверьте статические маршруты:
docker exec bgp-server vtysh -c "show ip route static"
Проблема: Высокое потребление ресурсов
- Проверьте использование памяти:
docker exec bgp-server free -h
- Проверьте количество маршрутов:
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/
Languages
Python
57.8%
PowerShell
24.6%
Shell
14.4%
Dockerfile
3.2%