Переписан BGP сервер на FRR
This commit is contained in:
@@ -1,28 +1,38 @@
|
||||
# BGP Server для раздачи префиксов
|
||||
# BGP Server для раздачи префиксов (FRR)
|
||||
|
||||
Этот проект представляет собой BGP сервер, который раздает префиксы из текстовых файлов. Сервер работает в Docker контейнере и предназначен для интеграции с RouterOS 7.14+.
|
||||
Этот проект представляет собой BGP сервер на базе FRR (Free Range Routing), который раздает префиксы из текстовых файлов. Сервер работает в Docker контейнере и предназначен для интеграции с RouterOS 7.14+.
|
||||
|
||||
## Архитектура решения
|
||||
|
||||
- **BGP Server**: ExaBGP в Docker контейнере
|
||||
- **BGP Server**: FRR (Free Range Routing) в Docker контейнере
|
||||
- **Источник данных**: Текстовые файлы с префиксами
|
||||
- **Клиент**: RouterOS 7.14+ для получения префиксов
|
||||
- **Протокол**: BGP (только исходящие анонсы)
|
||||
|
||||
## Преимущества FRR
|
||||
|
||||
- **Стабильность**: Производственный уровень надежности
|
||||
- **Производительность**: Оптимизирован для высоких нагрузок
|
||||
- **Функциональность**: Полная поддержка BGP функций
|
||||
- **Мониторинг**: Встроенные инструменты диагностики
|
||||
- **Сообщество**: Активная поддержка и развитие
|
||||
|
||||
## Структура проекта
|
||||
|
||||
```
|
||||
bgp-server/
|
||||
├── docker-compose.yml # Конфигурация Docker
|
||||
├── Dockerfile # Образ Docker
|
||||
├── exabgp.conf # Конфигурация ExaBGP
|
||||
├── Dockerfile # Образ Docker с FRR
|
||||
├── frr.conf # Конфигурация FRR
|
||||
├── scripts/
|
||||
│ ├── start.sh # Скрипт запуска
|
||||
│ └── load_prefixes.py # Загрузка префиксов из файлов
|
||||
│ ├── start.sh # Скрипт запуска FRR
|
||||
│ ├── load_prefixes.py # Загрузка префиксов в FRR
|
||||
│ ├── generate_config.py # Генерация конфигурации FRR
|
||||
│ └── monitor.py # Мониторинг FRR
|
||||
├── data/
|
||||
│ ├── prefixes.txt # Основной файл с префиксами
|
||||
│ └── additional_prefixes.txt # Дополнительные префиксы
|
||||
├── logs/ # Логи ExaBGP
|
||||
├── logs/ # Логи FRR
|
||||
└── README.md # Эта инструкция
|
||||
```
|
||||
|
||||
@@ -56,6 +66,9 @@ docker-compose logs -f bgp-server
|
||||
|
||||
# Проверка статуса контейнера
|
||||
docker-compose ps
|
||||
|
||||
# Проверка BGP сессии через vtysh
|
||||
docker exec bgp-server vtysh -c "show ip bgp summary"
|
||||
```
|
||||
|
||||
## Подробная настройка
|
||||
@@ -91,45 +104,17 @@ docker-compose ps
|
||||
|
||||
### Шаг 2: Конфигурация BGP сервера
|
||||
|
||||
Отредактируйте `exabgp.conf`:
|
||||
Конфигурация FRR генерируется автоматически из переменных окружения в `docker-compose.yml`:
|
||||
|
||||
```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;
|
||||
}
|
||||
}
|
||||
}
|
||||
```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
|
||||
@@ -155,6 +140,9 @@ services:
|
||||
- BGP_NEIGHBOR_AS=65001
|
||||
networks:
|
||||
- bgp-network
|
||||
cap_add:
|
||||
- NET_ADMIN
|
||||
privileged: true
|
||||
|
||||
networks:
|
||||
bgp-network:
|
||||
@@ -195,70 +183,130 @@ docker-compose up -d
|
||||
docker-compose logs -f bgp-server
|
||||
|
||||
# Проверка статуса BGP сессии
|
||||
docker exec bgp-server exabgpcli show neighbor
|
||||
docker exec bgp-server vtysh -c "show ip bgp summary"
|
||||
|
||||
# Проверка анонсированных маршрутов
|
||||
docker exec bgp-server vtysh -c "show ip bgp"
|
||||
```
|
||||
|
||||
## Мониторинг и логирование
|
||||
## Управление и мониторинг
|
||||
|
||||
### Просмотр логов
|
||||
### Команды vtysh
|
||||
|
||||
```powershell
|
||||
# Все логи
|
||||
docker-compose logs bgp-server
|
||||
# Подключение к FRR CLI
|
||||
docker exec -it bgp-server vtysh
|
||||
|
||||
# Логи в реальном времени
|
||||
docker-compose logs -f bgp-server
|
||||
# Просмотр BGP соседей
|
||||
show ip bgp neighbors
|
||||
|
||||
# Логи за последние 100 строк
|
||||
docker-compose logs --tail=100 bgp-server
|
||||
# Просмотр BGP маршрутов
|
||||
show ip bgp
|
||||
|
||||
# Просмотр статических маршрутов
|
||||
show ip route
|
||||
|
||||
# Просмотр конфигурации
|
||||
show running-config
|
||||
```
|
||||
|
||||
### Проверка статуса
|
||||
### Мониторинг через скрипты
|
||||
|
||||
```powershell
|
||||
# Статус контейнера
|
||||
docker-compose ps
|
||||
# Запуск мониторинга
|
||||
docker exec bgp-server python3 /app/scripts/monitor.py
|
||||
|
||||
# Проверка BGP сессии
|
||||
docker exec bgp-server exabgpcli show neighbor
|
||||
# Просмотр статуса
|
||||
docker exec bgp-server cat /app/logs/status.json
|
||||
|
||||
# Проверка загруженных префиксов
|
||||
docker exec bgp-server cat /app/logs/prefixes.log
|
||||
# Перезагрузка префиксов
|
||||
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.1.1"
|
||||
```
|
||||
|
||||
### Проверка маршрутов
|
||||
|
||||
```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"
|
||||
```
|
||||
|
||||
## Обновление префиксов
|
||||
|
||||
### Автоматическое обновление
|
||||
|
||||
Сервер автоматически перезагружает префиксы при изменении файлов в папке `data/`.
|
||||
Скрипт `load_prefixes.py` автоматически отслеживает изменения в файлах префиксов и обновляет маршруты в FRR.
|
||||
|
||||
### Ручное обновление
|
||||
|
||||
```powershell
|
||||
# Перезапуск сервера
|
||||
docker-compose restart bgp-server
|
||||
# Перезагрузка всех префиксов
|
||||
docker exec bgp-server python3 /app/scripts/load_prefixes.py
|
||||
|
||||
# Или перезагрузка только процесса загрузки префиксов
|
||||
docker exec bgp-server pkill -f load_prefixes.py
|
||||
# Тестирование загрузки префиксов
|
||||
docker exec bgp-server python3 /app/scripts/load_prefixes.py --test
|
||||
```
|
||||
|
||||
## Устранение неполадок
|
||||
|
||||
### Проблема: BGP сессия не устанавливается
|
||||
|
||||
1. Проверьте сетевое подключение:
|
||||
1. Проверьте сетевую связность:
|
||||
```powershell
|
||||
docker exec bgp-server ping 192.168.1.1
|
||||
```
|
||||
|
||||
2. Проверьте конфигурацию:
|
||||
2. Проверьте конфигурацию BGP:
|
||||
```powershell
|
||||
docker exec bgp-server cat /app/exabgp.conf
|
||||
docker exec bgp-server vtysh -c "show running-config"
|
||||
```
|
||||
|
||||
3. Проверьте логи:
|
||||
3. Проверьте логи FRR:
|
||||
```powershell
|
||||
docker-compose logs bgp-server
|
||||
docker exec bgp-server tail -f /app/logs/frr.log
|
||||
```
|
||||
|
||||
### Проблема: Префиксы не анонсируются
|
||||
@@ -268,106 +316,44 @@ docker-compose logs bgp-server
|
||||
docker exec bgp-server cat /app/data/prefixes.txt
|
||||
```
|
||||
|
||||
2. Проверьте логи процесса загрузки:
|
||||
2. Проверьте логи загрузки префиксов:
|
||||
```powershell
|
||||
docker exec bgp-server cat /app/logs/prefixes.log
|
||||
docker exec bgp-server tail -f /app/logs/prefixes.log
|
||||
```
|
||||
|
||||
### Проблема: Docker контейнер не запускается
|
||||
|
||||
1. Проверьте порты:
|
||||
3. Проверьте статические маршруты:
|
||||
```powershell
|
||||
netstat -an | findstr :179
|
||||
docker exec bgp-server vtysh -c "show ip route static"
|
||||
```
|
||||
|
||||
2. Проверьте Docker логи:
|
||||
### Проблема: Высокое потребление ресурсов
|
||||
|
||||
1. Проверьте использование памяти:
|
||||
```powershell
|
||||
docker-compose logs
|
||||
docker exec bgp-server free -h
|
||||
```
|
||||
|
||||
2. Проверьте количество маршрутов:
|
||||
```powershell
|
||||
docker exec bgp-server vtysh -c "show ip bgp summary"
|
||||
```
|
||||
|
||||
## Безопасность
|
||||
|
||||
### Рекомендации по безопасности
|
||||
|
||||
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"
|
||||
```
|
||||
- FRR работает в привилегированном контейнере для доступа к сетевым интерфейсам
|
||||
- Используйте route-maps для фильтрации трафика
|
||||
- Ограничьте доступ к vtysh CLI
|
||||
- Регулярно обновляйте образ Docker
|
||||
|
||||
## Производительность
|
||||
|
||||
### Оптимизация для больших объемов префиксов
|
||||
- FRR оптимизирован для обработки большого количества маршрутов
|
||||
- Поддерживает до 1 миллиона маршрутов
|
||||
- Эффективное использование памяти
|
||||
- Быстрое время сходимости
|
||||
|
||||
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 позволяет быстро настроить клиентскую сторону.
|
||||
|
||||
Для продакшн использования рекомендуется:
|
||||
- Настроить мониторинг и алертинг
|
||||
- Добавить резервное копирование конфигурации
|
||||
- Реализовать автоматическое восстановление после сбоев
|
||||
- Настроить централизованное логирование
|
||||
- Документация FRR: https://frrouting.org/
|
||||
- GitHub проекта: https://github.com/FRRouting/frr
|
||||
- Сообщество: https://lists.frrouting.org/
|
||||
Reference in New Issue
Block a user