10 KiB
10 KiB
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 сессия не устанавливается
- Проверьте сетевую связность:
docker exec bgp-server ping 192.168.0.254
- Проверьте конфигурацию 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/