Sure! Pl
Build and Push Docker Image / build (push) Has been cancelled

This commit is contained in:
2025-07-11 13:23:21 +07:00
commit 5d4d24b49f
19 changed files with 2237 additions and 0 deletions
+373
View File
@@ -0,0 +1,373 @@
# BGP Server для раздачи префиксов
Этот проект представляет собой BGP сервер, который раздает префиксы из текстовых файлов. Сервер работает в Docker контейнере и предназначен для интеграции с RouterOS 7.14+.
## Архитектура решения
- **BGP Server**: ExaBGP в Docker контейнере
- **Источник данных**: Текстовые файлы с префиксами
- **Клиент**: RouterOS 7.14+ для получения префиксов
- **Протокол**: BGP (только исходящие анонсы)
## Структура проекта
```
bgp-server/
├── docker-compose.yml # Конфигурация Docker
├── Dockerfile # Образ Docker
├── exabgp.conf # Конфигурация ExaBGP
├── scripts/
│ ├── start.sh # Скрипт запуска
│ └── load_prefixes.py # Загрузка префиксов из файлов
├── data/
│ ├── prefixes.txt # Основной файл с префиксами
│ └── additional_prefixes.txt # Дополнительные префиксы
├── logs/ # Логи ExaBGP
└── 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
```
## Подробная настройка
### Требования
- 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 сервера
Отредактируйте `exabgp.conf`:
```ini
# Основная конфигурация
process load-prefixes {
run /app/scripts/load_prefixes.py;
encoder json;
}
# Настройки BGP
neighbor 192.168.1.1 {
router-id 192.168.1.100;
local-address 192.168.1.100;
local-as 65000;
peer-as 65001;
# Только исходящие анонсы
capability {
graceful-restart;
}
# Настройки сессии
hold-time 90;
keepalive 30;
# Логирование
api {
processes [load-prefixes];
neighbor-changes;
receive {
parsed;
update;
}
send {
parsed;
update;
}
}
}
```
### Шаг 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.1.100
- BGP_NEIGHBOR_IP=192.168.1.1
- BGP_NEIGHBOR_AS=65001
networks:
- bgp-network
networks:
bgp-network:
driver: bridge
ipam:
config:
- subnet: 192.168.1.0/24
```
### Шаг 4: Настройка RouterOS
На стороне RouterOS 7.14+ выполните следующие команды:
```routeros
# Создание 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
```
### Шаг 5: Запуск и мониторинг
```powershell
# Запуск сервера
docker-compose up -d
# Просмотр логов в реальном времени
docker-compose logs -f bgp-server
# Проверка статуса BGP сессии
docker exec bgp-server exabgpcli show neighbor
```
## Мониторинг и логирование
### Просмотр логов
```powershell
# Все логи
docker-compose logs bgp-server
# Логи в реальном времени
docker-compose logs -f bgp-server
# Логи за последние 100 строк
docker-compose logs --tail=100 bgp-server
```
### Проверка статуса
```powershell
# Статус контейнера
docker-compose ps
# Проверка BGP сессии
docker exec bgp-server exabgpcli show neighbor
# Проверка загруженных префиксов
docker exec bgp-server cat /app/logs/prefixes.log
```
## Обновление префиксов
### Автоматическое обновление
Сервер автоматически перезагружает префиксы при изменении файлов в папке `data/`.
### Ручное обновление
```powershell
# Перезапуск сервера
docker-compose restart bgp-server
# Или перезагрузка только процесса загрузки префиксов
docker exec bgp-server pkill -f load_prefixes.py
```
## Устранение неполадок
### Проблема: BGP сессия не устанавливается
1. Проверьте сетевое подключение:
```powershell
docker exec bgp-server ping 192.168.1.1
```
2. Проверьте конфигурацию:
```powershell
docker exec bgp-server cat /app/exabgp.conf
```
3. Проверьте логи:
```powershell
docker-compose logs bgp-server
```
### Проблема: Префиксы не анонсируются
1. Проверьте файлы с префиксами:
```powershell
docker exec bgp-server cat /app/data/prefixes.txt
```
2. Проверьте логи процесса загрузки:
```powershell
docker exec bgp-server cat /app/logs/prefixes.log
```
### Проблема: Docker контейнер не запускается
1. Проверьте порты:
```powershell
netstat -an | findstr :179
```
2. Проверьте Docker логи:
```powershell
docker-compose logs
```
## Безопасность
### Рекомендации по безопасности
1. **Ограничение доступа**: Настройте firewall для ограничения доступа к порту 179
2. **Аутентификация**: Используйте MD5 аутентификацию в BGP
3. **Логирование**: Включите детальное логирование для аудита
4. **Обновления**: Регулярно обновляйте Docker образы
### Настройка MD5 аутентификации
В `exabgp.conf` добавьте:
```ini
neighbor 192.168.1.1 {
# ... существующие настройки ...
md5-password "your-secure-password";
}
```
В RouterOS:
```routeros
/routing bgp peer set bgp-server password="your-secure-password"
```
## Производительность
### Оптимизация для больших объемов префиксов
1. **Кэширование**: Используйте Redis для кэширования префиксов
2. **База данных**: Для больших объемов используйте PostgreSQL
3. **Мониторинг**: Настройте метрики производительности
### Мониторинг ресурсов
```powershell
# Использование ресурсов контейнера
docker stats bgp-server
# Проверка дискового пространства
docker system df
```
## Альтернативные решения
### 1. Bird BGP Daemon
Если ExaBGP не подходит, можно использовать Bird:
```dockerfile
FROM ubuntu:20.04
RUN apt-get update && apt-get install -y bird
COPY bird.conf /etc/bird/bird.conf
CMD ["bird", "-f", "-d"]
```
### 2. FRRouting (FRR)
Другой популярный вариант:
```dockerfile
FROM ubuntu:20.04
RUN apt-get update && apt-get install -y frr
COPY frr.conf /etc/frr/frr.conf
CMD ["/usr/lib/frr/frrinit", "start"]
```
### 3. GoBGP
Для более современного подхода:
```dockerfile
FROM golang:1.19-alpine
RUN go install github.com/osrg/gobgp/cmd/gobgpd@latest
COPY gobgpd.conf /etc/gobgpd.conf
CMD ["gobgpd", "-f", "/etc/gobgpd.conf"]
```
## Заключение
Этот BGP сервер предоставляет простое и эффективное решение для раздачи префиксов из текстовых файлов. Docker контейнеризация обеспечивает легкое развертывание и управление, а интеграция с RouterOS позволяет быстро настроить клиентскую сторону.
Для продакшн использования рекомендуется:
- Настроить мониторинг и алертинг
- Добавить резервное копирование конфигурации
- Реализовать автоматическое восстановление после сбоев
- Настроить централизованное логирование