Files
bgp-server/TESTING.md
T
denozord 5d4d24b49f
Build and Push Docker Image / build (push) Has been cancelled
Sure! Pl
2025-07-11 13:23:21 +07:00

10 KiB
Raw Blame History

Тестирование BGP сервера

Подготовка к тестированию

Требования для тестирования

  • Docker Desktop для Windows
  • PowerShell
  • RouterOS 7.14+ (физический или виртуальный)
  • Сетевое подключение между сервером и RouterOS

Схема тестирования

[Windows Host] ←→ [RouterOS Device]
    192.168.1.100        192.168.1.1
    AS: 65000            AS: 65001

Пошаговое тестирование

Шаг 1: Подготовка окружения

# Клонирование репозитория
git clone <repository-url>
cd bgp-server

# Создание директорий
mkdir logs

# Проверка файлов
Get-ChildItem -Recurse

Шаг 2: Настройка тестовых префиксов

Отредактируйте data/prefixes.txt:

# Тестовые префиксы
192.168.100.0/24
192.168.200.0/24
10.10.10.0/24
172.16.100.0/24

Шаг 3: Запуск BGP сервера

# Запуск с автоматической сборкой
.\scripts\start-server.ps1 -Build

# Проверка статуса
docker-compose ps

Ожидаемый результат:

Name         Command       State           Ports
bgp-server   /app/script   Up      0.0.0.0:179->179/tcp

Шаг 4: Проверка логов сервера

# Просмотр логов
docker-compose logs bgp-server

# Проверка логов в реальном времени
docker-compose logs -f bgp-server

Ожидаемые сообщения:

Starting BGP Server...
Validating ExaBGP configuration...
Starting ExaBGP...
ExaBGP started successfully with PID: XXX

Шаг 5: Проверка загрузки префиксов

# Проверка логов загрузки префиксов
docker exec bgp-server cat /app/logs/prefixes.log

Ожидаемый результат:

[2024-01-01 12:00:00] Starting prefix loader...
[2024-01-01 12:00:00] Loaded 4 prefixes from prefixes.txt
[2024-01-01 12:00:00] Total prefixes loaded: 4
[2024-01-01 12:00:00] Announced prefix: 10.10.10.0/24
[2024-01-01 12:00:00] Announced prefix: 172.16.100.0/24
[2024-01-01 12:00:00] Announced prefix: 192.168.100.0/24
[2024-01-01 12:00:00] Announced prefix: 192.168.200.0/24
[2024-01-01 12:00:00] All prefixes announced successfully

Шаг 6: Настройка RouterOS

Выполните в 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

Шаг 7: Проверка BGP сессии

В RouterOS:

# Проверка статуса BGP пира
/routing bgp peer print

Ожидаемый результат:

Flags: X - disabled, I - invalid, D - dynamic, E - established
 0   name="bgp-server" instance=bgp-server remote-address=192.168.1.100 remote-as=65000 
     state=established uptime=1m30s prefix-count=4 updates-sent=4 updates-received=0 
     withdrawn-sent=0 withdrawn-received=0

Шаг 8: Проверка полученных маршрутов

В RouterOS:

# Просмотр полученных BGP маршрутов
/routing bgp routes print

Ожидаемый результат:

Flags: * - best, b - backup
 0 * dst-address=10.10.10.0/24 gateway=192.168.1.100 immediate-gw=192.168.1.100 
     bgp-local-pref=100 bgp-origin=igp bgp-as-path="" bgp-community="" bgp-ext-community="" 
     bgp-large-community="" bgp-med="" bgp-prepend="" bgp-atomic-aggregate=no bgp-aggregator-as="" 
     bgp-aggregator-id="" bgp-nexthop=192.168.1.100 bgp-identifier=192.168.1.100 
     bgp-cluster-list="" bgp-dampening=no bgp-peer=bgp-server

 1 * dst-address=172.16.100.0/24 gateway=192.168.1.100 immediate-gw=192.168.1.100 
     bgp-local-pref=100 bgp-origin=igp bgp-as-path="" bgp-community="" bgp-ext-community="" 
     bgp-large-community="" bgp-med="" bgp-prepend="" bgp-atomic-aggregate=no bgp-aggregator-as="" 
     bgp-aggregator-id="" bgp-nexthop=192.168.1.100 bgp-identifier=192.168.1.100 
     bgp-cluster-list="" bgp-dampening=no bgp-peer=bgp-server

 2 * dst-address=192.168.100.0/24 gateway=192.168.1.100 immediate-gw=192.168.1.100 
     bgp-local-pref=100 bgp-origin=igp bgp-as-path="" bgp-community="" bgp-ext-community="" 
     bgp-large-community="" bgp-med="" bgp-prepend="" bgp-atomic-aggregate=no bgp-aggregator-as="" 
     bgp-aggregator-id="" bgp-nexthop=192.168.1.100 bgp-identifier=192.168.1.100 
     bgp-cluster-list="" bgp-dampening=no bgp-peer=bgp-server

 3 * dst-address=192.168.200.0/24 gateway=192.168.1.100 immediate-gw=192.168.1.100 
     bgp-local-pref=100 bgp-origin=igp bgp-as-path="" bgp-community="" bgp-ext-community="" 
     bgp-large-community="" bgp-med="" bgp-prepend="" bgp-atomic-aggregate=no bgp-aggregator-as="" 
     bgp-aggregator-id="" bgp-nexthop=192.168.1.100 bgp-identifier=192.168.1.100 
     bgp-cluster-list="" bgp-dampening=no bgp-peer=bgp-server

Шаг 9: Тестирование обновления префиксов

# Добавление нового префикса
echo "192.168.300.0/24" >> data/prefixes.txt

# Перезагрузка префиксов
docker exec bgp-server python3 /app/scripts/reload_prefixes.py

Проверьте в RouterOS:

/routing bgp routes print

Должен появиться новый маршрут 192.168.300.0/24.

Шаг 10: Тестирование отзыва префиксов

# Удаление префикса из файла
# Отредактируйте data/prefixes.txt и удалите одну строку

# Перезагрузка префиксов
docker exec bgp-server python3 /app/scripts/reload_prefixes.py

Проверьте в RouterOS:

/routing bgp routes print

Удаленный префикс должен исчезнуть из таблицы маршрутов.

Автоматизированное тестирование

Скрипт тестирования

Создайте файл test-bgp.ps1:

# Скрипт автоматизированного тестирования
Write-Host "=== BGP Server Testing ===" -ForegroundColor Green

# Проверка Docker
Write-Host "1. Checking Docker..." -ForegroundColor Yellow
try {
    docker --version | Out-Null
    Write-Host "✓ Docker is available" -ForegroundColor Green
} catch {
    Write-Host "✗ Docker is not available" -ForegroundColor Red
    exit 1
}

# Проверка контейнера
Write-Host "2. Checking container status..." -ForegroundColor Yellow
$containerStatus = docker ps --filter name=bgp-server --format "{{.Status}}"
if ($containerStatus) {
    Write-Host "✓ Container is running: $containerStatus" -ForegroundColor Green
} else {
    Write-Host "✗ Container is not running" -ForegroundColor Red
    exit 1
}

# Проверка BGP процесса
Write-Host "3. Checking BGP process..." -ForegroundColor Yellow
$bgpProcess = docker exec bgp-server pgrep -f exabgp
if ($bgpProcess) {
    Write-Host "✓ BGP process is running" -ForegroundColor Green
} else {
    Write-Host "✗ BGP process is not running" -ForegroundColor Red
}

# Проверка префиксов
Write-Host "4. Checking prefixes..." -ForegroundColor Yellow
$prefixCount = docker exec bgp-server cat /app/data/prefixes.txt | Select-String -Pattern "^\d" | Measure-Object | Select-Object -ExpandProperty Count
Write-Host "✓ Found $prefixCount prefixes" -ForegroundColor Green

# Проверка логов
Write-Host "5. Checking logs..." -ForegroundColor Yellow
$logEntries = docker exec bgp-server cat /app/logs/prefixes.log | Measure-Object -Line | Select-Object -ExpandProperty Lines
Write-Host "✓ Found $logEntries log entries" -ForegroundColor Green

Write-Host "=== Testing Complete ===" -ForegroundColor Green

Запуск тестирования

.\test-bgp.ps1

Тестирование производительности

Тест с большим количеством префиксов

# Создание файла с большим количеством префиксов
$prefixes = @()
for ($i = 1; $i -le 1000; $i++) {
    $prefixes += "192.168.$i.0/24"
}
$prefixes | Out-File -FilePath "data/large_prefixes.txt" -Encoding UTF8

# Замена основного файла
Move-Item "data/prefixes.txt" "data/prefixes_backup.txt"
Move-Item "data/large_prefixes.txt" "data/prefixes.txt"

# Перезагрузка префиксов
docker exec bgp-server python3 /app/scripts/reload_prefixes.py

Мониторинг производительности

# Мониторинг ресурсов
docker stats bgp-server

# Проверка времени загрузки
Measure-Command { docker exec bgp-server python3 /app/scripts/load_prefixes.py }

Тестирование отказоустойчивости

Тест перезапуска контейнера

# Перезапуск контейнера
docker-compose restart

# Ожидание восстановления
Start-Sleep -Seconds 30

# Проверка статуса
docker-compose ps

Тест сетевых сбоев

# Симуляция сетевого сбоя (требует настройки)
# Отключение сетевого интерфейса на RouterOS

# Проверка восстановления
# Включение сетевого интерфейса

# Проверка BGP сессии
docker exec bgp-server exabgpcli show neighbor

Очистка после тестирования

# Остановка сервера
.\scripts\stop-server.ps1

# Удаление контейнера
docker-compose down

# Очистка образов (опционально)
docker system prune -f

Заключение

После успешного прохождения всех тестов BGP сервер готов к продакшн использованию. Регулярно выполняйте тестирование для обеспечения стабильной работы.