From 3c5740784b0f774f29df0b9b0842ca35e8ac0635 Mon Sep 17 00:00:00 2001 From: Denis Shatskiy Date: Fri, 11 Jul 2025 17:58:56 +0700 Subject: [PATCH] Update Docker_RUN.md and load_prefixes.py for improved BGP configuration and logging. Adjusted IP addresses in Docker_RUN.md for consistency and clarity. Enhanced load_prefixes.py with error logging and refined JSON message handling for better robustness during ExaBGP operations. --- DOCKER_RUN.md | 98 ++++++---------------------------------- scripts/load_prefixes.py | 30 +++++++----- 2 files changed, 33 insertions(+), 95 deletions(-) diff --git a/DOCKER_RUN.md b/DOCKER_RUN.md index d2446d9..5c4eac8 100644 --- a/DOCKER_RUN.md +++ b/DOCKER_RUN.md @@ -270,74 +270,23 @@ docker stats bgp-server | Параметр | Описание | Ваше значение | |----------|----------|---------------| | `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 контейнера | +| `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 -# Создание BGP экземпляра -/routing/bgp/instance -add name=bgp-server as=65001 router-id=192.168.1.1 +### Настройка RouterOS 7.14 (рабочая конфигурация) -# Настройка 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 -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 -``` - -### Старый синтаксис RouterOS (для версий до 7.14) - -**Вариант 1: Использование template и connection (рекомендуется)** +**Использование 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 +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 @@ -345,34 +294,35 @@ 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;" +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.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 +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.1.1` - ваш Router ID (обычно внешний IP) +- `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.1.100` - установка next-hop на IP BGP сервера +- `set gw 192.168.100.99` - установка 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 сервера +- `local.address=192.168.0.254` - ваш локальный IP +- `remote.address=192.168.100.99/32` - IP BGP сервера - `remote.as=65000` - AS номер BGP сервера - `templates=bgp-server` - использование созданного шаблона @@ -397,26 +347,6 @@ add connect=yes disabled=no input.filter=bgp-server-in listen=yes local.address= /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 -``` - ## Устранение неполадок ### Проблема: Контейнер не запускается diff --git a/scripts/load_prefixes.py b/scripts/load_prefixes.py index 05a0eae..a9b3c46 100644 --- a/scripts/load_prefixes.py +++ b/scripts/load_prefixes.py @@ -32,6 +32,10 @@ def log_message(message: str): # Если не можем записать в файл, просто выводим в stderr print(f"Warning: Could not write to log file: {e}", file=sys.stderr, flush=True) +def log_error(message: str): + """Запись ошибки в лог""" + log_message(f"ERROR: {message}") + def validate_prefix(prefix: str) -> bool: """Валидация IP префикса""" try: @@ -88,13 +92,10 @@ def announce_prefixes(prefixes: Set[str]): router_id = os.environ.get('BGP_ROUTER_ID', '192.168.1.100') for prefix in sorted(prefixes): - # Формат команды для ExaBGP + # Формат команды для ExaBGP (упрощенный) command = { "command": "announce route", - "neighbor": { - "ip": neighbor_ip, - "description": "RouterOS peer" - }, + "neighbor": neighbor_ip, "attribute": { "origin": "igp", "as-path": [local_as], @@ -115,10 +116,7 @@ def withdraw_prefixes(prefixes: Set[str]): for prefix in sorted(prefixes): command = { "command": "withdraw route", - "neighbor": { - "ip": neighbor_ip, - "description": "RouterOS peer" - }, + "neighbor": neighbor_ip, "nlri": prefix } @@ -161,12 +159,22 @@ def main(): if not line: break + line = line.strip() + if not line: # Пропуск пустых строк + continue + # Обработка команд от ExaBGP try: - data = json.loads(line.strip()) + data = json.loads(line) log_message(f"Received command: {data}") except json.JSONDecodeError: - log_message(f"Invalid JSON received: {line.strip()}") + # Не все сообщения от ExaBGP являются JSON + # Это может быть обычное текстовое сообщение + if line.startswith('[') and line.endswith(']'): + # Это может быть лог сообщение от ExaBGP + log_message(f"Received log message: {line}") + else: + log_message(f"Received non-JSON message: {line}") except KeyboardInterrupt: log_message("Received interrupt signal")