10 KiB
10 KiB
Тестирование 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 сервер готов к продакшн использованию. Регулярно выполняйте тестирование для обеспечения стабильной работы.