diff --git a/DOCKER_RUN.md b/DOCKER_RUN.md index 391ce4e..d2446d9 100644 --- a/DOCKER_RUN.md +++ b/DOCKER_RUN.md @@ -247,8 +247,68 @@ 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.1.1` | Ваш Router ID | Ваш внешний IP или внутренний IP | +| `local.address=192.168.1.1` | Ваш локальный IP | IP адрес вашего роутера | +| `remote.address=192.168.1.100` | IP BGP сервера | IP адрес Docker контейнера | +| `remote.as=65000` | AS BGP сервера | AS номер BGP сервера (по умолчанию 65000) | + ### Команды для RouterOS 7.14+ +**Попробуйте сначала новый синтаксис:** + +```routeros +# Создание BGP экземпляра +/routing/bgp/instance +add name=bgp-server as=65001 router-id=192.168.1.1 + +# Настройка BGP сети +/routing/bgp/network +add network=192.168.1.0/24 + +# Настройка BGP пира +/routing/bgp/peer +add name=bgp-server remote-address=192.168.1.100 remote-as=65000 instance=bgp-server + +# Включение BGP +/routing/bgp/instance set bgp-server disabled=no + +# Проверка статуса +/routing/bgp/peer print +/routing/bgp/route print + +# Проверка доступных команд (для диагностики) +/routing/bgp/print +/routing/bgp/instance/print +/routing/bgp/peer/print +``` + +**Если новый синтаксис не работает, используйте старый синтаксис:** + +### Альтернативный способ (если первый не работает) + ```routeros # Создание BGP экземпляра /routing bgp instance @@ -270,6 +330,93 @@ add name=bgp-server remote-address=192.168.1.100 remote-as=65000 instance=bgp-se /routing bgp route print ``` +### Старый синтаксис RouterOS (для версий до 7.14) + +**Вариант 1: Использование 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.1.1 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.1.100; accept;" + +# Настройка BGP пира +/routing bgp connection +add connect=yes disabled=no input.filter=bgp-server-in listen=yes local.address=192.168.1.1 .role=ebgp multihop=yes name=bgp-server.network output.filter-chain=discard remote.address=192.168.1.100/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.1.1` - ваш 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.1.100` - установка next-hop на IP BGP сервера + +**BGP Connection:** +- `connect=yes` - активное подключение +- `listen=yes` - ожидание входящих подключений +- `local.address=192.168.1.1` - ваш локальный IP +- `remote.address=192.168.1.100/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 +``` + +**Вариант 2: Использование instance и peer** + +```routeros +# Создание BGP экземпляра +/routing bgp instance add name=bgp-server as=65001 router-id=192.168.1.1 + +# Настройка BGP сети +/routing bgp network add network=192.168.1.0/24 + +# Настройка BGP пира +/routing bgp peer add name=bgp-server remote-address=192.168.1.100 remote-as=65000 instance=bgp-server + +# Включение BGP +/routing bgp instance set bgp-server disabled=no + +# Проверка статуса +/routing bgp peer print +/routing bgp route print +``` + ## Устранение неполадок ### Проблема: Контейнер не запускается @@ -345,6 +492,53 @@ 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: Простой запуск @@ -401,5 +595,9 @@ docker run -d --name bgp-server -p 179:179 -v ${PWD}/data:/app/data:ro git.shts. В 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" ``` \ No newline at end of file diff --git a/scripts/start.sh b/scripts/start.sh index 83300ed..6c7fac0 100644 --- a/scripts/start.sh +++ b/scripts/start.sh @@ -79,10 +79,69 @@ fi echo "Starting ExaBGP..." LOG_LEVEL=${BGP_LOG_LEVEL:-INFO} -# Запуск с подробным логированием -exabgp --log.level $LOG_LEVEL /app/exabgp.conf > /app/logs/exabgp.log 2>&1 & +# Дополнительная проверка конфигурационного файла +echo "Final config file check:" +ls -la /app/exabgp.conf +echo "Config file first few lines:" +head -10 /app/exabgp.conf +echo "---" + +# Проверка что ExaBGP может прочитать файл +echo "Testing ExaBGP config validation:" +if exabgp --validate /app/exabgp.conf; then + echo "Configuration validation passed" +else + echo "Configuration validation failed" + echo "Full config content:" + cat /app/exabgp.conf + exit 1 +fi +echo "---" + +# Проверка переменных окружения и путей +echo "Environment check:" +echo "PWD: $PWD" +echo "PATH: $PATH" +echo "PYTHONPATH: $PYTHONPATH" +echo "BGP_ variables:" +env | grep BGP_ || echo "No BGP_ variables found" +echo "---" + +# Запуск ExaBGP +echo "Starting ExaBGP with config: /app/exabgp.conf" + +# Проверяем что файл существует и читается +if [ ! -f "/app/exabgp.conf" ]; then + echo "ERROR: Configuration file /app/exabgp.conf not found!" + exit 1 +fi + +if [ ! -r "/app/exabgp.conf" ]; then + echo "ERROR: Configuration file /app/exabgp.conf is not readable!" + exit 1 +fi + +# Запуск ExaBGP с правильными параметрами +cd /app +if [ -n "$LOG_LEVEL" ]; then + exabgp --log.level $LOG_LEVEL /app/exabgp.conf > /app/logs/exabgp.log 2>&1 & +else + exabgp /app/exabgp.conf > /app/logs/exabgp.log 2>&1 & +fi EXABGP_PID=$! +# Проверяем что процесс запустился +sleep 3 +if ! kill -0 $EXABGP_PID 2>/dev/null; then + echo "Failed to start ExaBGP. Checking logs:" + cat /app/logs/exabgp.log + echo "Trying to run ExaBGP directly for diagnosis:" + exabgp --version + echo "---" + exabgp /app/exabgp.conf + exit 1 +fi + # Сохранение PID echo $EXABGP_PID > /app/logs/exabgp.pid