Files

359 lines
10 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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/