Files
bgp-server/README.md
T

10 KiB
Raw 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.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 сессия не устанавливается

  1. Проверьте сетевую связность:
docker exec bgp-server ping 192.168.1.1
  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 миллиона маршрутов
  • Эффективное использование памяти
  • Быстрое время сходимости

Поддержка