Files
bgp-server/DOCKER_RUN.md
T

16 KiB
Raw Blame History

Инструкция по запуску 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 - ваш локальный IP
  • remote.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

Безопасность

Рекомендации

  1. Ограничение доступа: Настройте firewall для ограничения доступа к порту 179
  2. Аутентификация: Используйте MD5 аутентификацию в BGP
  3. Логирование: Включите детальное логирование для аудита
  4. Обновления: Регулярно обновляйте 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"