Переписан BGP сервер на FRR
This commit is contained in:
+241
-145
@@ -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/
|
||||
Reference in New Issue
Block a user