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:
@@ -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/
|
||||
Reference in New Issue
Block a user