+338
@@ -0,0 +1,338 @@
|
||||
# Тестирование 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 сервер готов к продакшн использованию. Регулярно выполняйте тестирование для обеспечения стабильной работы.
|
||||
Reference in New Issue
Block a user