16 KiB
16 KiB
Инструкция по запуску BGP Server из Docker Registry
Быстрый старт
1. Создание файлов с префиксами
Создайте папку data и файл с префиксами:
# Создание папки для данных
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
# Запуск 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. Проверка работы
# Просмотр логов
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
Полная команда запуска с настройками
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 |
Просмотр сгенерированной конфигурации
# Просмотр текущей конфигурации ExaBGP
docker exec bgp-server cat /app/exabgp.conf
# Просмотр переменных окружения
docker exec bgp-server env | findstr BGP_
Управление контейнером
Основные команды
# Запуск контейнера
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
Обновление контейнера
# Безопасное обновление (рекомендуется)
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
Обновление префиксов
# 1. Отредактируйте файл prefixes.txt
notepad data/prefixes.txt
# 2. Перезапустите контейнер
docker restart bgp-server
# 3. Проверьте логи
docker logs bgp-server
Проверка работы
# Статус контейнера
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
/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:
# Создать шаблон 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- ваш локальный IPremote.address=192.168.100.99/32- IP BGP сервераremote.as=65000- AS номер BGP сервераtemplates=bgp-server- использование созданного шаблона
Команды для удаления конфигурации
Если нужно удалить конфигурацию и начать заново:
# Удаление 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
Устранение неполадок
Проблема: Контейнер не запускается
# Проверьте логи
docker logs bgp-server
# Проверьте, не занят ли порт 179
netstat -an | findstr :179
# Проверьте права доступа к папкам
ls -la data/
ls -la logs/
Проблема: BGP сессия не устанавливается
# Проверьте сетевое подключение
docker exec bgp-server ping 192.168.1.1
# Проверьте конфигурацию
docker exec bgp-server cat /app/exabgp.conf
# Проверьте логи BGP
docker logs bgp-server | findstr "BGP"
Проблема: Префиксы не анонсируются
# Проверьте файлы с префиксами
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 конфигурации
# Проверьте конфигурацию 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 не найден
# Проверьте монтирование 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
# Проверьте доступные команды 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
/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
/system resource print
# Проверка доступных команд BGP
/routing/bgp/print
/routing bgp print
# Проверка доступных подкоманд
/routing/bgp/instance/print
/routing bgp instance print
# Если команды не найдены, используйте старый синтаксис
Примеры использования
Пример 1: Простой запуск
# Создание файла с префиксами
"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: Запуск с кастомными настройками
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: Запуск с несколькими файлами префиксов
# Создание нескольких файлов
"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
Безопасность
Рекомендации
- Ограничение доступа: Настройте firewall для ограничения доступа к порту 179
- Аутентификация: Используйте MD5 аутентификацию в BGP
- Логирование: Включите детальное логирование для аудита
- Обновления: Регулярно обновляйте Docker образы
Настройка MD5 аутентификации
Добавьте переменную окружения:
-e BGP_MD5_PASSWORD="your-secure-password"
В 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"