@@ -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 позволяет быстро настроить клиентскую сторону.
|
||||
|
||||
Для продакшн использования рекомендуется:
|
||||
- Настроить мониторинг и алертинг
|
||||
- Добавить резервное копирование конфигурации
|
||||
- Реализовать автоматическое восстановление после сбоев
|
||||
- Настроить централизованное логирование
|
||||
Reference in New Issue
Block a user