Remove obsolete files and scripts related to the BGP server setup, including .gitignore, Dockerfile, and various documentation files. Update docker-compose.yml to streamline the configuration for the FRRouting BGP server. This cleanup enhances project maintainability and focuses on the current implementation.

This commit is contained in:
2025-07-11 18:41:15 +07:00
parent 58f1405fef
commit af197d8953
27 changed files with 443 additions and 3471 deletions
+152 -306
View File
@@ -1,359 +1,205 @@
# BGP Server для раздачи префиксов (FRR)
# BGP Server с FRRouting
Этот проект представляет собой BGP сервер на базе FRR (Free Range Routing), который раздает префиксы из текстовых файлов. Сервер работает в Docker контейнере и предназначен для интеграции с RouterOS 7.14+.
Этот проект предоставляет готовое решение для запуска BGP сервера с использованием контейнера FRRouting, который анонсирует префиксы всем подключенным клиентам с разделением по community.
## Архитектура решения
## Требования
- **BGP Server**: FRR (Free Range Routing) в Docker контейнере
- **Источник данных**: Текстовые файлы с префиксами
- **Клиент**: RouterOS 7.14+ для получения префиксов
- **Протокол**: BGP (только исходящие анонсы)
## Преимущества FRR
- **Стабильность**: Производственный уровень надежности
- **Производительность**: Оптимизирован для высоких нагрузок
- **Функциональность**: Полная поддержка BGP функций
- **Мониторинг**: Встроенные инструменты диагностики
- **Сообщество**: Активная поддержка и развитие
- Docker Desktop для Windows
- Docker Compose
- PowerShell
## Структура проекта
```
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 # Эта инструкция
├── docker-compose.yml # Конфигурация Docker контейнера
├── frr.conf # Конфигурация FRRouting
├── prefixes.txt # Файл с префиксами и community
├── start-bgp-server.ps1 # Скрипт запуска для PowerShell
└── README.md # Эта инструкция
```
## Быстрый старт
## Быстрый запуск
### 1. Подготовка файлов с префиксами
1. **Запустите Docker Desktop**
Создайте файл `data/prefixes.txt` с префиксами в формате:
```
192.168.1.0/24
10.0.0.0/8
172.16.0.0/12
```
2. **Запустите BGP сервер:**
```powershell
.\start-bgp-server.ps1
```
### 2. Запуск сервера
## Ручной запуск
Если вы предпочитаете запускать вручную:
```powershell
# Клонирование репозитория (если нужно)
git clone <repository-url>
cd bgp-server
# Остановить существующие контейнеры
docker-compose down
# Запуск с 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
# Запуск сервера
# Запустить BGP сервер
docker-compose up -d
# Проверить статус
docker ps
# Посмотреть логи
docker-compose logs bgp-server
```
## Конфигурация
### Префиксы (prefixes.txt)
Файл содержит префиксы в формате:
```
prefix community1:community2:community3
```
Пример:
```
192.168.1.0/24 65000:100:65000:200
10.0.0.0/8 65000:101:65000:201
```
### BGP настройки (frr.conf)
- **ASN**: 65000
- **Router ID**: 192.168.1.1
- **Порт BGP**: 179
- **Порт vtysh**: 2601
## Управление сервером
### Подключение к vtysh (консоль управления)
```powershell
docker exec -it bgp-server vtysh
```
### Полезные команды vtysh
```bash
# Показать статус BGP
show ip bgp summary
# Показать анонсированные префиксы
show ip bgp
# Показать community
show ip bgp community
# Показать соседей
show ip bgp neighbors
# Показать IPv6 информацию
show ipv6 bgp summary
```
### Просмотр логов
```powershell
# Просмотр логов в реальном времени
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"
# Просмотр последних логов
docker-compose logs bgp-server
```
## Управление и мониторинг
### Команды 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
docker-compose down
```
### Мониторинг через скрипты
## Подключение клиентов
### Настройка BGP клиента
Клиенты могут подключаться к BGP серверу по адресу:
- **IP**: IP адрес хоста, где запущен контейнер
- **Порт**: 179
- **ASN**: 65000 (внешний ASN)
### Пример конфигурации клиента (Cisco)
```
router bgp 65001
neighbor 192.168.1.1 remote-as 65000
neighbor 192.168.1.1 send-community
network 192.168.2.0/24
```
### Пример конфигурации клиента (Juniper)
```
protocols {
bgp {
group external {
type external;
peer-as 65000;
neighbor 192.168.1.1 {
send-community;
}
}
}
}
```
## Мониторинг
### Проверка статуса контейнера
```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
docker ps --filter "name=bgp-server"
```
### Логи
### Проверка сетевых портов
```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
netstat -an | findstr :179
netstat -an | findstr :2601
```
## Диагностика
### Проверка статуса FRR
### Проверка логов FRRouting
```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"
docker exec bgp-server cat /var/log/frr/frr.log
```
### Проверка BGP сессии
## Troubleshooting
```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"
```
1. Проверьте, что Docker Desktop запущен
2. Проверьте логи: `docker-compose logs bgp-server`
3. Убедитесь, что порты 179 и 2601 не заняты
### Проверка маршрутов
### Проблема: BGP сессии не устанавливаются
```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. Проверьте настройки firewall
2. Убедитесь, что клиент правильно настроен
3. Проверьте логи BGP: `docker exec -it bgp-server vtysh -c "show ip bgp summary"`
### Проблема: Префиксы не анонсируются
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"
```
1. Проверьте конфигурацию в `frr.conf`
2. Убедитесь, что префиксы правильно прописаны
3. Проверьте community настройки
## Безопасность
- FRR работает в привилегированном контейнере для доступа к сетевым интерфейсам
- Используйте route-maps для фильтрации трафика
- Ограничьте доступ к vtysh CLI
- Регулярно обновляйте образ Docker
⚠️ **Важно**: Этот BGP сервер настроен для тестирования и разработки. Для продакшена:
## Производительность
- FRR оптимизирован для обработки большого количества маршрутов
- Поддерживает до 1 миллиона маршрутов
- Эффективное использование памяти
- Быстрое время сходимости
1. Измените пароли по умолчанию
2. Настройте firewall правила
3. Используйте более строгие настройки безопасности
4. Ограничьте доступ к vtysh
## Поддержка
- Документация FRR: https://frrouting.org/
- GitHub проекта: https://github.com/FRRouting/frr
- Сообщество: https://lists.frrouting.org/
При возникновении проблем:
1. Проверьте логи контейнера
2. Убедитесь в правильности конфигурации
3. Проверьте сетевые настройки
4. Обратитесь к документации FRRouting: https://frrouting.org/