# Инструкция по запуску BGP Server из Docker Registry ## Быстрый старт ### 1. Создание файлов с префиксами Создайте папку `data` и файл с префиксами: ```powershell # Создание папки для данных mkdir data # Создание файла с префиксами @" # Основные префиксы 192.168.1.0/24 192.168.2.0/24 10.0.0.0/8 172.16.0.0/12 # Дополнительные префиксы 203.0.113.0/24 198.51.100.0/24 "@ | Out-File -FilePath "data/prefixes.txt" -Encoding UTF8 # Проверка создания файла Get-Content data/prefixes.txt ``` ### 2. Запуск контейнера из registry ```powershell # Запуск BGP сервера из registry с переменными окружения docker run -d ` --name bgp-server ` --restart unless-stopped ` -p 179:179 ` -v ${PWD}/data:/app/data:ro ` -v ${PWD}/logs:/app/logs ` -e BGP_LOCAL_AS=65000 ` -e BGP_ROUTER_ID=192.168.1.100 ` -e BGP_NEIGHBOR_IP=192.168.1.1 ` -e BGP_NEIGHBOR_AS=65001 ` -e BGP_HOLD_TIME=90 ` -e BGP_KEEPALIVE=30 ` git.shts.su/infra/bgp-server:latest # Простой запуск с настройками по умолчанию docker run -d ` --name bgp-server ` --restart unless-stopped ` -p 179:179 ` -v ${PWD}/data:/app/data:ro ` -v ${PWD}/logs:/app/logs ` git.shts.su/infra/bgp-server:latest # Пример с кастомными настройками docker run -d ` --name bgp-server-custom ` --restart unless-stopped ` -p 179:179 ` -v ${PWD}/data:/app/data:ro ` -v ${PWD}/logs:/app/logs ` -e BGP_LOCAL_AS=65000 ` -e BGP_ROUTER_ID=10.0.0.100 ` -e BGP_NEIGHBOR_IP=10.0.0.1 ` -e BGP_NEIGHBOR_AS=65001 ` -e BGP_HOLD_TIME=180 ` -e BGP_LOG_LEVEL=DEBUG ` -e BGP_MD5_PASSWORD="your-secure-password" ` git.shts.su/infra/bgp-server:latest ``` ### 3. Проверка работы ```powershell # Просмотр логов docker logs -f bgp-server # Проверка статуса контейнера docker ps # Проверка BGP сессии docker exec bgp-server exabgpcli show neighbor ``` ## Подробная настройка ### Структура файлов ``` your-project/ ├── data/ │ ├── prefixes.txt # Основные префиксы │ └── additional_prefixes.txt # Дополнительные префиксы ├── logs/ # Логи (создается автоматически) └── DOCKER_RUN.md # Эта инструкция ``` ### Формат файла с префиксами **data/prefixes.txt:** ``` # Основные префиксы 192.168.1.0/24 192.168.2.0/24 10.0.0.0/8 172.16.0.0/12 # Комментарии начинаются с # # Пустые строки игнорируются # Можно добавлять дополнительные префиксы 203.0.113.0/24 198.51.100.0/24 ``` **data/additional_prefixes.txt:** ``` # Дополнительные префиксы 172.20.0.0/16 172.21.0.0/16 ``` ### Полная команда запуска с настройками ```powershell docker run -d ` --name bgp-server ` --restart unless-stopped ` -p 179:179 ` -v ${PWD}/data:/app/data:ro ` -v ${PWD}/logs:/app/logs ` -e BGP_LOCAL_AS=65000 ` -e BGP_ROUTER_ID=192.168.1.100 ` -e BGP_NEIGHBOR_IP=192.168.1.1 ` -e BGP_NEIGHBOR_AS=65001 ` -e BGP_HOLD_TIME=90 ` -e BGP_KEEPALIVE=30 ` git.shts.su/infra/bgp-server:latest ``` ### Переменные окружения | Переменная | Описание | По умолчанию | |------------|----------|--------------| | `BGP_LOCAL_AS` | AS номер сервера | 65000 | | `BGP_ROUTER_ID` | Router ID сервера | 192.168.1.100 | | `BGP_NEIGHBOR_IP` | IP адрес BGP пира | 192.168.1.1 | | `BGP_NEIGHBOR_AS` | AS номер пира | 65001 | | `BGP_HOLD_TIME` | Hold time в секундах | 90 | | `BGP_KEEPALIVE` | Keepalive в секундах | 30 | | `BGP_MD5_PASSWORD` | MD5 пароль для аутентификации | (не используется) | | `BGP_LOG_LEVEL` | Уровень логирования (DEBUG, INFO, WARNING, ERROR) | INFO | ### Просмотр сгенерированной конфигурации ```powershell # Просмотр текущей конфигурации ExaBGP docker exec bgp-server cat /app/exabgp.conf # Просмотр переменных окружения docker exec bgp-server env | findstr BGP_ ``` ## Управление контейнером ### Основные команды ```powershell # Запуск контейнера docker start bgp-server # Остановка контейнера docker stop bgp-server # Перезапуск контейнера docker restart bgp-server # Удаление контейнера docker rm -f bgp-server # Просмотр логов docker logs bgp-server # Логи в реальном времени docker logs -f bgp-server ``` ### Обновление контейнера ```powershell # Безопасное обновление (рекомендуется) docker stop bgp-server docker rm bgp-server docker pull git.shts.su/infra/bgp-server:latest docker run -d ` --name bgp-server ` --restart unless-stopped ` -p 179:179 ` -v ${PWD}/data:/app/data:ro ` -v ${PWD}/logs:/app/logs ` git.shts.su/infra/bgp-server:latest # Быстрое обновление (если настройки не изменились) docker pull git.shts.su/infra/bgp-server:latest docker restart bgp-server # Использование скрипта обновления .\scripts\update-container.ps1 # Принудительное обновление без подтверждения .\scripts\update-container.ps1 -Force ``` ### Обновление префиксов ```powershell # 1. Отредактируйте файл prefixes.txt notepad data/prefixes.txt # 2. Перезапустите контейнер docker restart bgp-server # 3. Проверьте логи docker logs bgp-server ``` ### Проверка работы ```powershell # Статус контейнера docker ps # Проверка BGP сессии docker exec bgp-server exabgpcli show neighbor # Проверка загруженных префиксов docker exec bgp-server cat /app/logs/prefixes.log # Проверка содержимого файлов docker exec bgp-server cat /app/data/prefixes.txt # Использование ресурсов docker stats bgp-server ``` ## Настройка RouterOS (клиент) ### Определение версии RouterOS Сначала определите, какой синтаксис поддерживает ваша версия RouterOS: ```routeros # Проверка версии RouterOS /system resource print # Проверка доступных команд BGP /routing/bgp/print /routing bgp print ``` **Если команда `/routing/bgp/print` работает** - используйте новый синтаксис (RouterOS 7.14+) **Если команда `/routing bgp print` работает** - используйте старый синтаксис ### Адаптация конфигурации под ваши настройки Замените следующие параметры в командах на ваши значения: | Параметр | Описание | Ваше значение | |----------|----------|---------------| | `as=65001` | Ваш AS номер | Ваш AS номер | | `router-id=192.168.0.254` | Ваш Router ID | IP адрес вашего роутера | | `local.address=192.168.0.254` | Ваш локальный IP | IP адрес вашего роутера | | `remote.address=192.168.100.99` | IP BGP сервера | IP адрес Docker контейнера | | `remote.as=65000` | AS BGP сервера | AS номер BGP сервера (по умолчанию 65000) | ### Команды для RouterOS 7.14+ **Используйте рабочую конфигурацию с template и connection (см. ниже)** ### Настройка RouterOS 7.14 (рабочая конфигурация) **Использование template и connection:** ```routeros # Создать шаблон BGP с вашим AS и router-id /routing bgp template add as=65001 disabled=no name=bgp-server output.network=bgp-networks .no-client-to-client-reflection=yes router-id=192.168.0.254 routing-table=main # Фильтр на запрет экспорта маршрутов (подстраховка) /routing filter rule add chain=discard disabled=no rule="reject;" # Фильтр на импорт маршрутов с изменением next-hop /routing filter rule add chain=bgp-server-in disabled=no rule="set gw 192.168.100.99; accept;" # Настройка BGP пира /routing bgp connection add connect=yes disabled=no input.filter=bgp-server-in listen=yes local.address=192.168.0.254 .role=ebgp multihop=yes name=bgp-server.network output.filter-chain=discard remote.address=192.168.100.99/32 .as=65000 .port=179 routing-table=main templates=bgp-server # Проверка статуса /routing bgp connection print /routing bgp route print ``` ### Объяснение параметров конфигурации **BGP Template:** - `as=65001` - ваш AS номер - `router-id=192.168.0.254` - ваш Router ID (IP адрес роутера) - `output.network=bgp-networks` - сеть для экспорта (создается автоматически) - `.no-client-to-client-reflection=yes` - отключение отражения между клиентами **Routing Filter Rules:** - `chain=discard` - цепочка для отклонения экспортируемых маршрутов - `chain=bgp-server-in` - цепочка для обработки входящих маршрутов - `set gw 192.168.100.99` - установка next-hop на IP BGP сервера **BGP Connection:** - `connect=yes` - активное подключение - `listen=yes` - ожидание входящих подключений - `local.address=192.168.0.254` - ваш локальный IP - `remote.address=192.168.100.99/32` - IP BGP сервера - `remote.as=65000` - AS номер BGP сервера - `templates=bgp-server` - использование созданного шаблона ### Команды для удаления конфигурации Если нужно удалить конфигурацию и начать заново: ```routeros # Удаление BGP connection /routing bgp connection remove bgp-server.network # Удаление фильтров /routing filter rule remove [find chain=bgp-server-in] /routing filter rule remove [find chain=discard] # Удаление BGP template /routing bgp template remove bgp-server # Проверка удаления /routing bgp connection print /routing filter rule print /routing bgp template print ``` ## Устранение неполадок ### Проблема: Контейнер не запускается ```powershell # Проверьте логи docker logs bgp-server # Проверьте, не занят ли порт 179 netstat -an | findstr :179 # Проверьте права доступа к папкам ls -la data/ ls -la logs/ ``` ### Проблема: BGP сессия не устанавливается ```powershell # Проверьте сетевое подключение docker exec bgp-server ping 192.168.1.1 # Проверьте конфигурацию docker exec bgp-server cat /app/exabgp.conf # Проверьте логи BGP docker logs bgp-server | findstr "BGP" ``` ### Проблема: Префиксы не анонсируются ```powershell # Проверьте файлы с префиксами docker exec bgp-server cat /app/data/prefixes.txt # Проверьте логи процесса загрузки docker exec bgp-server cat /app/logs/prefixes.log # Проверьте статус процесса docker exec bgp-server ps aux | findstr load_prefixes ``` ### Проблема: Ошибки ExaBGP конфигурации ```powershell # Проверьте конфигурацию ExaBGP docker exec bgp-server cat /app/exabgp.conf # Валидация конфигурации docker exec bgp-server exabgp --validate /app/exabgp.conf # Проверьте named pipes docker exec bgp-server ls -la /run/exabgp/ docker exec bgp-server ls -la /var/run/exabgp/ # Проверьте логи ExaBGP docker exec bgp-server cat /app/logs/exabgp.log # Проверьте переменные окружения docker exec bgp-server env | findstr BGP_ ``` ### Проблема: Файл prefixes.txt не найден ```powershell # Проверьте монтирование volume docker exec bgp-server ls -la /app/data/ # Создайте файл вручную docker exec bgp-server bash -c "echo '192.168.1.0/24' > /app/data/prefixes.txt" # Перезапустите контейнер docker restart bgp-server ``` ### Проблема: BGP сессия не устанавливается в RouterOS ```routeros # Проверьте доступные команды BGP /routing/bgp/print # Проверьте экземпляры BGP /routing/bgp/instance/print # Проверьте пиры /routing/bgp/peer/print # Проверьте маршруты /routing/bgp/route/print # Проверьте логи BGP /log print where topics~"bgp" ``` ### Проблема: Неправильный синтаксис команд RouterOS Если команды `/routing/bgp/` не работают, попробуйте старый синтаксис: ```routeros # Старый синтаксис RouterOS /routing bgp instance add name=bgp-server as=65001 router-id=192.168.1.1 /routing bgp peer add name=bgp-server remote-address=192.168.1.100 remote-as=65000 instance=bgp-server /routing bgp instance set bgp-server disabled=no ``` ### Диагностика версии RouterOS ```routeros # Проверка версии RouterOS /system resource print # Проверка доступных команд BGP /routing/bgp/print /routing bgp print # Проверка доступных подкоманд /routing/bgp/instance/print /routing bgp instance print # Если команды не найдены, используйте старый синтаксис ``` ## Примеры использования ### Пример 1: Простой запуск ```powershell # Создание файла с префиксами "192.168.1.0/24`n10.0.0.0/8" | Out-File -FilePath "data/prefixes.txt" -Encoding UTF8 # Запуск контейнера docker run -d --name bgp-server -p 179:179 -v ${PWD}/data:/app/data:ro git.shts.su/infra/bgp-server:latest ``` ### Пример 2: Запуск с кастомными настройками ```powershell docker run -d ` --name bgp-server ` -p 179:179 ` -v ${PWD}/data:/app/data:ro ` -v ${PWD}/logs:/app/logs ` -e BGP_LOCAL_AS=65000 ` -e BGP_ROUTER_ID=10.0.0.100 ` -e BGP_NEIGHBOR_IP=10.0.0.1 ` -e BGP_NEIGHBOR_AS=65001 ` git.shts.su/infra/bgp-server:latest ``` ### Пример 3: Запуск с несколькими файлами префиксов ```powershell # Создание нескольких файлов "192.168.1.0/24`n192.168.2.0/24" | Out-File -FilePath "data/prefixes.txt" -Encoding UTF8 "10.0.0.0/8`n172.16.0.0/12" | Out-File -FilePath "data/additional_prefixes.txt" -Encoding UTF8 # Запуск контейнера docker run -d --name bgp-server -p 179:179 -v ${PWD}/data:/app/data:ro git.shts.su/infra/bgp-server:latest ``` ## Безопасность ### Рекомендации 1. **Ограничение доступа**: Настройте firewall для ограничения доступа к порту 179 2. **Аутентификация**: Используйте MD5 аутентификацию в BGP 3. **Логирование**: Включите детальное логирование для аудита 4. **Обновления**: Регулярно обновляйте Docker образы ### Настройка MD5 аутентификации Добавьте переменную окружения: ```powershell -e BGP_MD5_PASSWORD="your-secure-password" ``` В RouterOS: ```routeros # Для RouterOS 7.14+ (новый синтаксис) /routing/bgp/peer set bgp-server password="your-secure-password" # Для старых версий RouterOS /routing bgp peer set bgp-server password="your-secure-password" ```