Update Dockerfile to include procps package and enhance start.sh with additional ExaBGP process checks. The script now verifies the ExaBGP process status after startup and checks for the prefix loader process, improving monitoring and troubleshooting capabilities.
Build and Push Docker Image / build (push) Successful in 3m46s

This commit is contained in:
2025-07-11 17:37:00 +07:00
parent 5feedd9a39
commit 063c85e4c1
2 changed files with 259 additions and 2 deletions
+198
View File
@@ -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"
```
+61 -2
View File
@@ -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