2025-07-11 13:23:21 +07:00
2025-07-11 13:23:21 +07:00
2025-07-11 13:23:21 +07:00
2025-07-11 13:23:21 +07:00
2025-07-11 13:23:21 +07:00
2025-07-11 13:23:21 +07:00
2025-07-11 13:23:21 +07:00
2025-07-11 13:23:21 +07:00
2025-07-11 13:23:21 +07:00

BGP Server для раздачи префиксов

Этот проект представляет собой BGP сервер, который раздает префиксы из текстовых файлов. Сервер работает в Docker контейнере и предназначен для интеграции с RouterOS 7.14+.

Архитектура решения

  • BGP Server: ExaBGP в Docker контейнере
  • Источник данных: Текстовые файлы с префиксами
  • Клиент: RouterOS 7.14+ для получения префиксов
  • Протокол: BGP (только исходящие анонсы)

Структура проекта

bgp-server/
├── docker-compose.yml          # Конфигурация Docker
├── Dockerfile                  # Образ Docker
├── exabgp.conf                 # Конфигурация ExaBGP
├── scripts/
│   ├── start.sh               # Скрипт запуска
│   └── load_prefixes.py       # Загрузка префиксов из файлов
├── data/
│   ├── prefixes.txt           # Основной файл с префиксами
│   └── additional_prefixes.txt # Дополнительные префиксы
├── logs/                      # Логи ExaBGP
└── README.md                  # Эта инструкция

Быстрый старт

1. Подготовка файлов с префиксами

Создайте файл data/prefixes.txt с префиксами в формате:

192.168.1.0/24
10.0.0.0/8
172.16.0.0/12

2. Запуск сервера

# Клонирование репозитория (если нужно)
git clone <repository-url>
cd bgp-server

# Запуск с Docker Compose
docker-compose up -d

3. Проверка работы

# Просмотр логов
docker-compose logs -f bgp-server

# Проверка статуса контейнера
docker-compose ps

Подробная настройка

Требования

  • Docker Desktop для Windows
  • PowerShell
  • RouterOS 7.14+ на стороне клиента

Шаг 1: Настройка файлов с префиксами

Создайте файлы с префиксами в папке data/:

data/prefixes.txt:

# Основные префиксы
192.168.1.0/24
192.168.2.0/24
10.0.0.0/8
172.16.0.0/12

# Комментарии начинаются с #
# Пустые строки игнорируются

data/additional_prefixes.txt:

# Дополнительные префиксы
203.0.113.0/24
198.51.100.0/24

Шаг 2: Конфигурация BGP сервера

Отредактируйте exabgp.conf:

# Основная конфигурация
process load-prefixes {
    run /app/scripts/load_prefixes.py;
    encoder json;
}

# Настройки BGP
neighbor 192.168.1.1 {
    router-id 192.168.1.100;
    local-address 192.168.1.100;
    local-as 65000;
    peer-as 65001;
    
    # Только исходящие анонсы
    capability {
        graceful-restart;
    }
    
    # Настройки сессии
    hold-time 90;
    keepalive 30;
    
    # Логирование
    api {
        processes [load-prefixes];
        neighbor-changes;
        receive {
            parsed;
            update;
        }
        send {
            parsed;
            update;
        }
    }
}

Шаг 3: Настройка Docker

docker-compose.yml:

version: '3.8'

services:
  bgp-server:
    build: .
    container_name: bgp-server
    restart: unless-stopped
    ports:
      - "179:179"  # BGP порт
    volumes:
      - ./data:/app/data:ro
      - ./logs:/app/logs
    environment:
      - BGP_LOCAL_AS=65000
      - BGP_ROUTER_ID=192.168.1.100
      - BGP_NEIGHBOR_IP=192.168.1.1
      - BGP_NEIGHBOR_AS=65001
    networks:
      - bgp-network

networks:
  bgp-network:
    driver: bridge
    ipam:
      config:
        - subnet: 192.168.1.0/24

Шаг 4: Настройка RouterOS

На стороне RouterOS 7.14+ выполните следующие команды:

# Создание 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

Шаг 5: Запуск и мониторинг

# Запуск сервера
docker-compose up -d

# Просмотр логов в реальном времени
docker-compose logs -f bgp-server

# Проверка статуса BGP сессии
docker exec bgp-server exabgpcli show neighbor

Мониторинг и логирование

Просмотр логов

# Все логи
docker-compose logs bgp-server

# Логи в реальном времени
docker-compose logs -f bgp-server

# Логи за последние 100 строк
docker-compose logs --tail=100 bgp-server

Проверка статуса

# Статус контейнера
docker-compose ps

# Проверка BGP сессии
docker exec bgp-server exabgpcli show neighbor

# Проверка загруженных префиксов
docker exec bgp-server cat /app/logs/prefixes.log

Обновление префиксов

Автоматическое обновление

Сервер автоматически перезагружает префиксы при изменении файлов в папке data/.

Ручное обновление

# Перезапуск сервера
docker-compose restart bgp-server

# Или перезагрузка только процесса загрузки префиксов
docker exec bgp-server pkill -f load_prefixes.py

Устранение неполадок

Проблема: BGP сессия не устанавливается

  1. Проверьте сетевое подключение:
docker exec bgp-server ping 192.168.1.1
  1. Проверьте конфигурацию:
docker exec bgp-server cat /app/exabgp.conf
  1. Проверьте логи:
docker-compose logs bgp-server

Проблема: Префиксы не анонсируются

  1. Проверьте файлы с префиксами:
docker exec bgp-server cat /app/data/prefixes.txt
  1. Проверьте логи процесса загрузки:
docker exec bgp-server cat /app/logs/prefixes.log

Проблема: Docker контейнер не запускается

  1. Проверьте порты:
netstat -an | findstr :179
  1. Проверьте Docker логи:
docker-compose logs

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

Рекомендации по безопасности

  1. Ограничение доступа: Настройте firewall для ограничения доступа к порту 179
  2. Аутентификация: Используйте MD5 аутентификацию в BGP
  3. Логирование: Включите детальное логирование для аудита
  4. Обновления: Регулярно обновляйте Docker образы

Настройка MD5 аутентификации

В exabgp.conf добавьте:

neighbor 192.168.1.1 {
    # ... существующие настройки ...
    md5-password "your-secure-password";
}

В RouterOS:

/routing bgp peer set bgp-server password="your-secure-password"

Производительность

Оптимизация для больших объемов префиксов

  1. Кэширование: Используйте Redis для кэширования префиксов
  2. База данных: Для больших объемов используйте PostgreSQL
  3. Мониторинг: Настройте метрики производительности

Мониторинг ресурсов

# Использование ресурсов контейнера
docker stats bgp-server

# Проверка дискового пространства
docker system df

Альтернативные решения

1. Bird BGP Daemon

Если ExaBGP не подходит, можно использовать Bird:

FROM ubuntu:20.04
RUN apt-get update && apt-get install -y bird
COPY bird.conf /etc/bird/bird.conf
CMD ["bird", "-f", "-d"]

2. FRRouting (FRR)

Другой популярный вариант:

FROM ubuntu:20.04
RUN apt-get update && apt-get install -y frr
COPY frr.conf /etc/frr/frr.conf
CMD ["/usr/lib/frr/frrinit", "start"]

3. GoBGP

Для более современного подхода:

FROM golang:1.19-alpine
RUN go install github.com/osrg/gobgp/cmd/gobgpd@latest
COPY gobgpd.conf /etc/gobgpd.conf
CMD ["gobgpd", "-f", "/etc/gobgpd.conf"]

Заключение

Этот BGP сервер предоставляет простое и эффективное решение для раздачи префиксов из текстовых файлов. Docker контейнеризация обеспечивает легкое развертывание и управление, а интеграция с RouterOS позволяет быстро настроить клиентскую сторону.

Для продакшн использования рекомендуется:

  • Настроить мониторинг и алертинг
  • Добавить резервное копирование конфигурации
  • Реализовать автоматическое восстановление после сбоев
  • Настроить централизованное логирование
S
Description
No description provided
Readme
239 KiB
Languages
Python 57.8%
PowerShell 24.6%
Shell 14.4%
Dockerfile 3.2%