Переписан BGP сервер на FRR

This commit is contained in:
2025-07-11 18:06:07 +07:00
parent 3c5740784b
commit e197dae9f7
14 changed files with 1222 additions and 812 deletions
+241 -145
View File
@@ -1,228 +1,324 @@
# Быстрый старт BGP сервера
# Быстрый старт BGP Server (FRR)
## Минимальные требования
Этот документ поможет вам быстро запустить BGP сервер на базе FRR для раздачи префиксов.
## Предварительные требования
- Docker Desktop для Windows
- PowerShell
- RouterOS 7.14+ (на стороне клиента)
- RouterOS 7.14+ (для клиентской стороны)
## Быстрый запуск (5 минут)
## Шаг 1: Подготовка файлов
### 1. Клонирование и подготовка
### Создание файла с префиксами
```powershell
# Клонирование репозитория (если нужно)
git clone <repository-url>
cd bgp-server
# Создание необходимых директорий
mkdir logs
```
### 2. Настройка префиксов
Отредактируйте файл `data/prefixes.txt`:
Создайте файл `data/prefixes.txt` с вашими префиксами:
```
# Основные префиксы
192.168.1.0/24
192.168.2.0/24
10.0.0.0/8
172.16.0.0/12
# Дополнительные префиксы
203.0.113.0/24
198.51.100.0/24
```
### 3. Запуск сервера
### Создание дополнительного файла (опционально)
Создайте файл `data/additional_prefixes.txt` для дополнительных префиксов:
```
# Дополнительные префиксы
192.168.100.0/24
192.168.200.0/24
```
## Шаг 2: Запуск сервера
### Вариант A: Использование PowerShell скрипта (рекомендуется)
```powershell
# Запуск с автоматической сборкой
# Запуск с автоматической сборкой образа
.\scripts\start-server.ps1 -Build
# Или вручную
docker-compose up -d --build
# Или запуск без пересборки
.\scripts\start-server.ps1
```
### 4. Проверка работы
### Вариант B: Использование Docker Compose
```powershell
# Проверка статуса
docker-compose ps
# Сборка и запуск
docker-compose up -d --build
# Просмотр логов
docker-compose logs -f bgp-server
# Мониторинг
docker exec bgp-server python3 /app/scripts/monitor.py
# Или только запуск
docker-compose up -d
```
### 5. Настройка RouterOS
### Вариант C: Ручной запуск
Выполните в RouterOS:
```powershell
# Сборка образа
docker build -t bgp-server-frr .
# Запуск контейнера
docker run -d \
--name bgp-server \
--restart unless-stopped \
-p 179:179 \
-v ${PWD}/data:/app/data:ro \
-v ${PWD}/logs:/app/logs \
--cap-add NET_ADMIN \
--privileged \
bgp-server-frr
```
## Шаг 3: Проверка работы
### Проверка статуса контейнера
```powershell
# Статус контейнера
docker ps
# Логи контейнера
docker logs bgp-server
```
### Проверка FRR
```powershell
# Версия FRR
docker exec bgp-server vtysh -c "show version"
# Статус BGP
docker exec bgp-server vtysh -c "show ip bgp summary"
# Анонсированные маршруты
docker exec bgp-server vtysh -c "show ip bgp"
```
### Проверка загруженных префиксов
```powershell
# Логи загрузки префиксов
docker exec bgp-server tail -f /app/logs/prefixes.log
# Тестирование загрузки
docker exec bgp-server python3 /app/scripts/load_prefixes.py --test
```
## Шаг 4: Настройка RouterOS
### Базовая настройка BGP
```routeros
/routing bgp instance add name=bgp-server as=65001 router-id=192.168.1.1
/routing bgp network add network=192.168.1.0/24
/routing bgp peer add name=bgp-server remote-address=192.168.1.100 remote-as=65000 instance=bgp-server
# Создание 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
```
### 6. Проверка BGP сессии
### Проверка BGP сессии
В RouterOS:
```routeros
# Статус BGP
/routing bgp peer print
# Полученные маршруты
/routing bgp route print
```
Ожидаемый результат:
```
Flags: X - disabled, I - invalid, D - dynamic, E - established
0 name="bgp-server" ... state=established uptime=1m30s prefix-count=8
```
## Шаг 5: Мониторинг
## Полезные команды
### Управление сервером
### Просмотр логов
```powershell
# Запуск
.\scripts\start-server.ps1
# Логи FRR
docker exec bgp-server tail -f /app/logs/frr.log
# Остановка
# Логи загрузки префиксов
docker exec bgp-server tail -f /app/logs/prefixes.log
# Логи мониторинга
docker exec bgp-server tail -f /app/logs/monitor.log
```
### Статус системы
```powershell
# Статус в JSON формате
docker exec bgp-server cat /app/logs/status.json
# Запуск мониторинга
docker exec bgp-server python3 /app/scripts/monitor.py
```
### Команды vtysh
```powershell
# Подключение к FRR CLI
docker exec -it bgp-server vtysh
# Полезные команды внутри vtysh:
show ip bgp summary # Сводка BGP
show ip bgp # Все BGP маршруты
show ip route # Таблица маршрутизации
show interface # Интерфейсы
show running-config # Конфигурация
```
## Управление
### Остановка сервера
```powershell
# Остановка с сохранением контейнера
.\scripts\stop-server.ps1
# Перезапуск
docker-compose restart
# Просмотр логов
docker-compose logs -f bgp-server
# Остановка с удалением контейнера
.\scripts\stop-server.ps1 -Force
```
### Мониторинг
### Перезагрузка префиксов
```powershell
# Проверка статуса
docker-compose ps
# Мониторинг ресурсов
docker stats bgp-server
# Проверка BGP сессии
docker exec bgp-server exabgpcli show neighbor
```
### Обновление префиксов
```powershell
# Перезагрузка префиксов без перезапуска
# Перезагрузка без перезапуска сервера
docker exec bgp-server python3 /app/scripts/reload_prefixes.py
# Или перезапуск сервера
docker-compose restart
```
## Устранение неполадок
### Обновление контейнера
```powershell
# Обновление с пересборкой
.\scripts\update-container.ps1 -Force
```
## Диагностика
### Проблема: Контейнер не запускается
```powershell
# Проверка логов
docker-compose logs bgp-server
docker logs bgp-server
# Проверка портов
netstat -an | findstr :179
# Пересборка образа
docker-compose build --no-cache
# Проверка Docker
docker system info
```
### Проблема: BGP сессия не устанавливается
```powershell
# Проверка сетевого подключения
# Проверка сетевой связности
docker exec bgp-server ping 192.168.1.1
# Проверка конфигурации
docker exec bgp-server cat /app/exabgp.conf
# Проверка конфигурации FRR
docker exec bgp-server vtysh -c "show running-config"
# Проверка логов
docker-compose logs bgp-server
# Проверка статуса BGP
docker exec bgp-server vtysh -c "show ip bgp summary"
```
### Проблема: Префиксы не анонсируются
```powershell
# Проверка файлов с префиксами
# Проверка файлов префиксов
docker exec bgp-server cat /app/data/prefixes.txt
# Проверка логов загрузки префиксов
docker exec bgp-server cat /app/logs/prefixes.log
# Проверка логов загрузки
docker exec bgp-server tail -f /app/logs/prefixes.log
# Перезагрузка префиксов
docker exec bgp-server python3 /app/scripts/reload_prefixes.py
# Проверка статических маршрутов
docker exec bgp-server vtysh -c "show ip route static"
```
## Настройка сети
## Настройка переменных окружения
### Изменение IP адресов
Отредактируйте `docker-compose.yml`:
```yaml
environment:
- BGP_ROUTER_ID=192.168.1.100 # IP сервера
- BGP_NEIGHBOR_IP=192.168.1.1 # IP RouterOS
```
И `exabgp.conf`:
```ini
neighbor 192.168.1.1 { # IP RouterOS
router-id 192.168.1.100; # IP сервера
local-address 192.168.1.100; # IP сервера
# ...
}
```
### Изменение AS номеров
В `docker-compose.yml`:
```yaml
environment:
- BGP_LOCAL_AS=65000 # AS сервера
- BGP_NEIGHBOR_AS=65001 # AS RouterOS
```
В `exabgp.conf`:
```ini
neighbor 192.168.1.1 {
local-as 65000; # AS сервера
peer-as 65001; # AS RouterOS
}
```
## Безопасность
### MD5 аутентификация
В `exabgp.conf`:
```ini
neighbor 192.168.1.1 {
# ... существующие настройки ...
md5-password "your-secure-password";
}
```
В RouterOS:
```routeros
/routing bgp peer set bgp-server tcp-md5-key="your-secure-password"
```
### Firewall
Вы можете настроить BGP параметры через переменные окружения:
```powershell
# Windows Firewall (PowerShell)
New-NetFirewallRule -DisplayName "BGP Server" -Direction Inbound -Protocol TCP -LocalPort 179 -Action Allow
# Запуск с кастомными настройками
docker run -d \
--name bgp-server \
-p 179:179 \
-v ${PWD}/data:/app/data:ro \
-v ${PWD}/logs:/app/logs \
-e BGP_LOCAL_AS=65000 \
-e BGP_ROUTER_ID=192.168.1.100 \
-e BGP_NEIGHBOR_IP=192.168.1.1 \
-e BGP_NEIGHBOR_AS=65001 \
-e BGP_HOLD_TIME=90 \
-e BGP_KEEPALIVE=30 \
--cap-add NET_ADMIN \
--privileged \
bgp-server-frr
```
## Готово!
## Полезные команды
После выполнения всех шагов у вас должен работать BGP сервер, который раздает префиксы из текстовых файлов в RouterOS.
### Мониторинг в реальном времени
Для получения дополнительной информации см. основной файл `README.md`.
```powershell
# Логи в реальном времени
docker logs -f bgp-server
# Статус BGP каждые 5 секунд
while ($true) {
docker exec bgp-server vtysh -c "show ip bgp summary"
Start-Sleep 5
Clear-Host
}
```
### Резервное копирование
```powershell
# Копирование файлов префиксов
Copy-Item data/prefixes.txt data/prefixes.txt.backup
# Экспорт конфигурации FRR
docker exec bgp-server vtysh -c "show running-config" > frr-config.backup
```
### Очистка
```powershell
# Остановка и удаление контейнера
docker stop bgp-server
docker rm bgp-server
# Удаление образа
docker rmi bgp-server-frr
# Очистка логов
Remove-Item logs/* -Recurse -Force
```
## Следующие шаги
1. **Настройка мониторинга**: Настройте алерты для критических событий
2. **Резервное копирование**: Настройте автоматическое резервное копирование конфигурации
3. **Безопасность**: Настройте firewall и аутентификацию BGP
4. **Масштабирование**: Рассмотрите использование нескольких экземпляров для высокой доступности
## Поддержка
- Документация FRR: https://frrouting.org/
- GitHub проекта: https://github.com/FRRouting/frr
- Сообщество: https://lists.frrouting.org/