373 lines
10 KiB
Markdown
373 lines
10 KiB
Markdown
# 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 позволяет быстро настроить клиентскую сторону.
|
||
|
||
Для продакшн использования рекомендуется:
|
||
- Настроить мониторинг и алертинг
|
||
- Добавить резервное копирование конфигурации
|
||
- Реализовать автоматическое восстановление после сбоев
|
||
- Настроить централизованное логирование |