# BGP Server для раздачи префиксов Этот проект представляет собой BGP сервер, который раздает префиксы из текстовых файлов. Сервер работает в Docker контейнере и предназначен для интеграции с RouterOS 7.14+. ## Архитектура решения - **BGP Server**: ExaBGP в Docker контейнере - **Источник данных**: Текстовые файлы с префиксами - **Клиент**: RouterOS 7.14+ для получения префиксов - **Протокол**: BGP (только исходящие анонсы) ## Структура проекта ``` bgp-server/ ├── docker-compose.yml # Конфигурация Docker ├── Dockerfile # Образ Docker ├── exabgp.conf # Конфигурация ExaBGP ├── scripts/ │ ├── start.sh # Скрипт запуска │ └── load_prefixes.py # Загрузка префиксов из файлов ├── data/ │ ├── prefixes.txt # Основной файл с префиксами │ └── additional_prefixes.txt # Дополнительные префиксы ├── logs/ # Логи ExaBGP └── 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 ``` ## Подробная настройка ### Требования - 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 сервера Отредактируйте `exabgp.conf`: ```ini # Основная конфигурация process load-prefixes { run /app/scripts/load_prefixes.py; encoder json; } # Настройки BGP neighbor 192.168.1.1 { router-id 192.168.1.100; local-address 192.168.1.100; local-as 65000; peer-as 65001; # Только исходящие анонсы capability { graceful-restart; } # Настройки сессии hold-time 90; keepalive 30; # Логирование api { processes [load-prefixes]; neighbor-changes; receive { parsed; update; } send { parsed; update; } } } ``` ### Шаг 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 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 exabgpcli show neighbor ``` ## Мониторинг и логирование ### Просмотр логов ```powershell # Все логи docker-compose logs bgp-server # Логи в реальном времени docker-compose logs -f bgp-server # Логи за последние 100 строк docker-compose logs --tail=100 bgp-server ``` ### Проверка статуса ```powershell # Статус контейнера docker-compose ps # Проверка BGP сессии docker exec bgp-server exabgpcli show neighbor # Проверка загруженных префиксов docker exec bgp-server cat /app/logs/prefixes.log ``` ## Обновление префиксов ### Автоматическое обновление Сервер автоматически перезагружает префиксы при изменении файлов в папке `data/`. ### Ручное обновление ```powershell # Перезапуск сервера docker-compose restart bgp-server # Или перезагрузка только процесса загрузки префиксов docker exec bgp-server pkill -f load_prefixes.py ``` ## Устранение неполадок ### Проблема: BGP сессия не устанавливается 1. Проверьте сетевое подключение: ```powershell docker exec bgp-server ping 192.168.1.1 ``` 2. Проверьте конфигурацию: ```powershell docker exec bgp-server cat /app/exabgp.conf ``` 3. Проверьте логи: ```powershell docker-compose logs bgp-server ``` ### Проблема: Префиксы не анонсируются 1. Проверьте файлы с префиксами: ```powershell docker exec bgp-server cat /app/data/prefixes.txt ``` 2. Проверьте логи процесса загрузки: ```powershell docker exec bgp-server cat /app/logs/prefixes.log ``` ### Проблема: Docker контейнер не запускается 1. Проверьте порты: ```powershell netstat -an | findstr :179 ``` 2. Проверьте Docker логи: ```powershell docker-compose logs ``` ## Безопасность ### Рекомендации по безопасности 1. **Ограничение доступа**: Настройте firewall для ограничения доступа к порту 179 2. **Аутентификация**: Используйте MD5 аутентификацию в BGP 3. **Логирование**: Включите детальное логирование для аудита 4. **Обновления**: Регулярно обновляйте Docker образы ### Настройка MD5 аутентификации В `exabgp.conf` добавьте: ```ini neighbor 192.168.1.1 { # ... существующие настройки ... md5-password "your-secure-password"; } ``` В RouterOS: ```routeros /routing bgp peer set bgp-server password="your-secure-password" ``` ## Производительность ### Оптимизация для больших объемов префиксов 1. **Кэширование**: Используйте Redis для кэширования префиксов 2. **База данных**: Для больших объемов используйте PostgreSQL 3. **Мониторинг**: Настройте метрики производительности ### Мониторинг ресурсов ```powershell # Использование ресурсов контейнера docker stats bgp-server # Проверка дискового пространства docker system df ``` ## Альтернативные решения ### 1. Bird BGP Daemon Если ExaBGP не подходит, можно использовать Bird: ```dockerfile FROM ubuntu:20.04 RUN apt-get update && apt-get install -y bird COPY bird.conf /etc/bird/bird.conf CMD ["bird", "-f", "-d"] ``` ### 2. FRRouting (FRR) Другой популярный вариант: ```dockerfile FROM ubuntu:20.04 RUN apt-get update && apt-get install -y frr COPY frr.conf /etc/frr/frr.conf CMD ["/usr/lib/frr/frrinit", "start"] ``` ### 3. GoBGP Для более современного подхода: ```dockerfile FROM golang:1.19-alpine RUN go install github.com/osrg/gobgp/cmd/gobgpd@latest COPY gobgpd.conf /etc/gobgpd.conf CMD ["gobgpd", "-f", "/etc/gobgpd.conf"] ``` ## Заключение Этот BGP сервер предоставляет простое и эффективное решение для раздачи префиксов из текстовых файлов. Docker контейнеризация обеспечивает легкое развертывание и управление, а интеграция с RouterOS позволяет быстро настроить клиентскую сторону. Для продакшн использования рекомендуется: - Настроить мониторинг и алертинг - Добавить резервное копирование конфигурации - Реализовать автоматическое восстановление после сбоев - Настроить централизованное логирование