359 lines
10 KiB
Markdown
359 lines
10 KiB
Markdown
# BGP Server для раздачи префиксов (FRR)
|
||
|
||
Этот проект представляет собой BGP сервер на базе FRR (Free Range Routing), который раздает префиксы из текстовых файлов. Сервер работает в Docker контейнере и предназначен для интеграции с RouterOS 7.14+.
|
||
|
||
## Архитектура решения
|
||
|
||
- **BGP Server**: FRR (Free Range Routing) в Docker контейнере
|
||
- **Источник данных**: Текстовые файлы с префиксами
|
||
- **Клиент**: RouterOS 7.14+ для получения префиксов
|
||
- **Протокол**: BGP (только исходящие анонсы)
|
||
|
||
## Преимущества FRR
|
||
|
||
- **Стабильность**: Производственный уровень надежности
|
||
- **Производительность**: Оптимизирован для высоких нагрузок
|
||
- **Функциональность**: Полная поддержка BGP функций
|
||
- **Мониторинг**: Встроенные инструменты диагностики
|
||
- **Сообщество**: Активная поддержка и развитие
|
||
|
||
## Структура проекта
|
||
|
||
```
|
||
bgp-server/
|
||
├── docker-compose.yml # Конфигурация Docker
|
||
├── Dockerfile # Образ Docker с FRR
|
||
├── frr.conf # Конфигурация FRR
|
||
├── scripts/
|
||
│ ├── start.sh # Скрипт запуска FRR
|
||
│ ├── load_prefixes.py # Загрузка префиксов в FRR
|
||
│ ├── generate_config.py # Генерация конфигурации FRR
|
||
│ └── monitor.py # Мониторинг FRR
|
||
├── data/
|
||
│ ├── prefixes.txt # Основной файл с префиксами
|
||
│ └── additional_prefixes.txt # Дополнительные префиксы
|
||
├── logs/ # Логи FRR
|
||
└── README.md # Эта инструкция
|
||
```
|
||
|
||
## Быстрый старт
|
||
|
||
### 1. Подготовка файлов с префиксами
|
||
|
||
Создайте файл `data/prefixes.txt` с префиксами в формате:
|
||
```
|
||
192.168.1.0/24
|
||
10.0.0.0/8
|
||
172.16.0.0/12
|
||
```
|
||
|
||
### 2. Запуск сервера
|
||
|
||
```powershell
|
||
# Клонирование репозитория (если нужно)
|
||
git clone <repository-url>
|
||
cd bgp-server
|
||
|
||
# Запуск с Docker Compose
|
||
docker-compose up -d
|
||
```
|
||
|
||
### 3. Проверка работы
|
||
|
||
```powershell
|
||
# Просмотр логов
|
||
docker-compose logs -f bgp-server
|
||
|
||
# Проверка статуса контейнера
|
||
docker-compose ps
|
||
|
||
# Проверка BGP сессии через vtysh
|
||
docker exec bgp-server vtysh -c "show ip bgp summary"
|
||
```
|
||
|
||
## Подробная настройка
|
||
|
||
### Требования
|
||
|
||
- Docker Desktop для Windows
|
||
- PowerShell
|
||
- RouterOS 7.14+ на стороне клиента
|
||
|
||
### Шаг 1: Настройка файлов с префиксами
|
||
|
||
Создайте файлы с префиксами в папке `data/`:
|
||
|
||
**data/prefixes.txt:**
|
||
```
|
||
# Основные префиксы
|
||
192.168.1.0/24
|
||
192.168.2.0/24
|
||
10.0.0.0/8
|
||
172.16.0.0/12
|
||
|
||
# Комментарии начинаются с #
|
||
# Пустые строки игнорируются
|
||
```
|
||
|
||
**data/additional_prefixes.txt:**
|
||
```
|
||
# Дополнительные префиксы
|
||
203.0.113.0/24
|
||
198.51.100.0/24
|
||
```
|
||
|
||
### Шаг 2: Конфигурация BGP сервера
|
||
|
||
Конфигурация FRR генерируется автоматически из переменных окружения в `docker-compose.yml`:
|
||
|
||
```yaml
|
||
environment:
|
||
- BGP_LOCAL_AS=65000
|
||
- BGP_ROUTER_ID=192.168.1.100
|
||
- BGP_NEIGHBOR_IP=192.168.1.1
|
||
- BGP_NEIGHBOR_AS=65001
|
||
- BGP_HOLD_TIME=90
|
||
- BGP_KEEPALIVE=30
|
||
- BGP_LOG_LEVEL=info
|
||
```
|
||
|
||
### Шаг 3: Настройка Docker
|
||
|
||
**docker-compose.yml:**
|
||
```yaml
|
||
version: '3.8'
|
||
|
||
services:
|
||
bgp-server:
|
||
build: .
|
||
container_name: bgp-server
|
||
restart: unless-stopped
|
||
ports:
|
||
- "179:179" # BGP порт
|
||
volumes:
|
||
- ./data:/app/data:ro
|
||
- ./logs:/app/logs
|
||
environment:
|
||
- BGP_LOCAL_AS=65000
|
||
- BGP_ROUTER_ID=192.168.100.99
|
||
- BGP_NEIGHBOR_IP=192.168.0.254
|
||
- BGP_NEIGHBOR_AS=65001
|
||
networks:
|
||
- bgp-network
|
||
cap_add:
|
||
- NET_ADMIN
|
||
privileged: true
|
||
|
||
networks:
|
||
bgp-network:
|
||
driver: bridge
|
||
ipam:
|
||
config:
|
||
- subnet: 192.168.100.0/24
|
||
```
|
||
|
||
### Шаг 4: Настройка RouterOS
|
||
|
||
На стороне RouterOS 7.14+ выполните следующие команды:
|
||
|
||
```routeros
|
||
# Создание BGP экземпляра
|
||
/routing bgp instance
|
||
add name=bgp-server as=65001 router-id=192.168.0.254
|
||
|
||
# Настройка BGP сети
|
||
/routing bgp network
|
||
add network=192.168.0.0/24
|
||
|
||
# Настройка BGP пира
|
||
/routing bgp peer
|
||
add name=bgp-server remote-address=192.168.100.99 remote-as=65000 instance=bgp-server
|
||
|
||
# Включение BGP
|
||
/routing bgp instance set bgp-server disabled=no
|
||
```
|
||
|
||
### Шаг 5: Запуск и мониторинг
|
||
|
||
```powershell
|
||
# Запуск сервера
|
||
docker-compose up -d
|
||
|
||
# Просмотр логов в реальном времени
|
||
docker-compose logs -f bgp-server
|
||
|
||
# Проверка статуса BGP сессии
|
||
docker exec bgp-server vtysh -c "show ip bgp summary"
|
||
|
||
# Проверка анонсированных маршрутов
|
||
docker exec bgp-server vtysh -c "show ip bgp"
|
||
```
|
||
|
||
## Управление и мониторинг
|
||
|
||
### Команды vtysh
|
||
|
||
```powershell
|
||
# Подключение к FRR CLI
|
||
docker exec -it bgp-server vtysh
|
||
|
||
# Просмотр BGP соседей
|
||
show ip bgp neighbors
|
||
|
||
# Просмотр BGP маршрутов
|
||
show ip bgp
|
||
|
||
# Просмотр статических маршрутов
|
||
show ip route
|
||
|
||
# Просмотр конфигурации
|
||
show running-config
|
||
```
|
||
|
||
### Мониторинг через скрипты
|
||
|
||
```powershell
|
||
# Запуск мониторинга
|
||
docker exec bgp-server python3 /app/scripts/monitor.py
|
||
|
||
# Просмотр статуса
|
||
docker exec bgp-server cat /app/logs/status.json
|
||
|
||
# Перезагрузка префиксов
|
||
docker exec bgp-server python3 /app/scripts/load_prefixes.py --test
|
||
```
|
||
|
||
### Логи
|
||
|
||
```powershell
|
||
# Логи 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
|
||
```
|
||
|
||
## Диагностика
|
||
|
||
### Проверка статуса FRR
|
||
|
||
```powershell
|
||
# Проверка процессов
|
||
docker exec bgp-server ps aux | grep -E "(zebra|bgpd)"
|
||
|
||
# Проверка версии FRR
|
||
docker exec bgp-server vtysh -c "show version"
|
||
|
||
# Проверка сетевых интерфейсов
|
||
docker exec bgp-server vtysh -c "show interface"
|
||
```
|
||
|
||
### Проверка BGP сессии
|
||
|
||
```powershell
|
||
# Статус BGP соседей
|
||
docker exec bgp-server vtysh -c "show ip bgp summary"
|
||
|
||
# Детальная информация о соседе
|
||
docker exec bgp-server vtysh -c "show ip bgp neighbors 192.168.0.254"
|
||
```
|
||
|
||
### Проверка маршрутов
|
||
|
||
```powershell
|
||
# Все BGP маршруты
|
||
docker exec bgp-server vtysh -c "show ip bgp"
|
||
|
||
# Статические маршруты
|
||
docker exec bgp-server vtysh -c "show ip route static"
|
||
|
||
# Таблица маршрутизации
|
||
docker exec bgp-server vtysh -c "show ip route"
|
||
```
|
||
|
||
## Обновление префиксов
|
||
|
||
### Автоматическое обновление
|
||
|
||
Скрипт `load_prefixes.py` автоматически отслеживает изменения в файлах префиксов и обновляет маршруты в FRR.
|
||
|
||
### Ручное обновление
|
||
|
||
```powershell
|
||
# Перезагрузка всех префиксов
|
||
docker exec bgp-server python3 /app/scripts/load_prefixes.py
|
||
|
||
# Тестирование загрузки префиксов
|
||
docker exec bgp-server python3 /app/scripts/load_prefixes.py --test
|
||
```
|
||
|
||
## Устранение неполадок
|
||
|
||
### Проблема: BGP сессия не устанавливается
|
||
|
||
1. Проверьте сетевую связность:
|
||
```powershell
|
||
docker exec bgp-server ping 192.168.0.254
|
||
```
|
||
|
||
2. Проверьте конфигурацию BGP:
|
||
```powershell
|
||
docker exec bgp-server vtysh -c "show running-config"
|
||
```
|
||
|
||
3. Проверьте логи FRR:
|
||
```powershell
|
||
docker exec bgp-server tail -f /app/logs/frr.log
|
||
```
|
||
|
||
### Проблема: Префиксы не анонсируются
|
||
|
||
1. Проверьте файлы с префиксами:
|
||
```powershell
|
||
docker exec bgp-server cat /app/data/prefixes.txt
|
||
```
|
||
|
||
2. Проверьте логи загрузки префиксов:
|
||
```powershell
|
||
docker exec bgp-server tail -f /app/logs/prefixes.log
|
||
```
|
||
|
||
3. Проверьте статические маршруты:
|
||
```powershell
|
||
docker exec bgp-server vtysh -c "show ip route static"
|
||
```
|
||
|
||
### Проблема: Высокое потребление ресурсов
|
||
|
||
1. Проверьте использование памяти:
|
||
```powershell
|
||
docker exec bgp-server free -h
|
||
```
|
||
|
||
2. Проверьте количество маршрутов:
|
||
```powershell
|
||
docker exec bgp-server vtysh -c "show ip bgp summary"
|
||
```
|
||
|
||
## Безопасность
|
||
|
||
- FRR работает в привилегированном контейнере для доступа к сетевым интерфейсам
|
||
- Используйте route-maps для фильтрации трафика
|
||
- Ограничьте доступ к vtysh CLI
|
||
- Регулярно обновляйте образ Docker
|
||
|
||
## Производительность
|
||
|
||
- FRR оптимизирован для обработки большого количества маршрутов
|
||
- Поддерживает до 1 миллиона маршрутов
|
||
- Эффективное использование памяти
|
||
- Быстрое время сходимости
|
||
|
||
## Поддержка
|
||
|
||
- Документация FRR: https://frrouting.org/
|
||
- GitHub проекта: https://github.com/FRRouting/frr
|
||
- Сообщество: https://lists.frrouting.org/ |