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