# Тестирование 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: Подготовка окружения ```powershell # Клонирование репозитория git clone 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 сервера ```powershell # Запуск с автоматической сборкой .\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: Проверка логов сервера ```powershell # Просмотр логов 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: Проверка загрузки префиксов ```powershell # Проверка логов загрузки префиксов 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: ```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: ```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: ```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: Тестирование обновления префиксов ```powershell # Добавление нового префикса echo "192.168.300.0/24" >> data/prefixes.txt # Перезагрузка префиксов docker exec bgp-server python3 /app/scripts/reload_prefixes.py ``` Проверьте в RouterOS: ```routeros /routing bgp routes print ``` Должен появиться новый маршрут `192.168.300.0/24`. ### Шаг 10: Тестирование отзыва префиксов ```powershell # Удаление префикса из файла # Отредактируйте data/prefixes.txt и удалите одну строку # Перезагрузка префиксов docker exec bgp-server python3 /app/scripts/reload_prefixes.py ``` Проверьте в RouterOS: ```routeros /routing bgp routes print ``` Удаленный префикс должен исчезнуть из таблицы маршрутов. ## Автоматизированное тестирование ### Скрипт тестирования Создайте файл `test-bgp.ps1`: ```powershell # Скрипт автоматизированного тестирования 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 ``` ### Запуск тестирования ```powershell .\test-bgp.ps1 ``` ## Тестирование производительности ### Тест с большим количеством префиксов ```powershell # Создание файла с большим количеством префиксов $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 ``` ### Мониторинг производительности ```powershell # Мониторинг ресурсов docker stats bgp-server # Проверка времени загрузки Measure-Command { docker exec bgp-server python3 /app/scripts/load_prefixes.py } ``` ## Тестирование отказоустойчивости ### Тест перезапуска контейнера ```powershell # Перезапуск контейнера docker-compose restart # Ожидание восстановления Start-Sleep -Seconds 30 # Проверка статуса docker-compose ps ``` ### Тест сетевых сбоев ```powershell # Симуляция сетевого сбоя (требует настройки) # Отключение сетевого интерфейса на RouterOS # Проверка восстановления # Включение сетевого интерфейса # Проверка BGP сессии docker exec bgp-server exabgpcli show neighbor ``` ## Очистка после тестирования ```powershell # Остановка сервера .\scripts\stop-server.ps1 # Удаление контейнера docker-compose down # Очистка образов (опционально) docker system prune -f ``` ## Заключение После успешного прохождения всех тестов BGP сервер готов к продакшн использованию. Регулярно выполняйте тестирование для обеспечения стабильной работы.