domain-routing-bird/README.md
a.kazantsev 70d5b4f73b update
2026-07-03 17:33:29 +03:00

6.8 KiB
Raw Permalink Blame History

Domain-based Routing для BIRD BGP

Этот проект содержит скрипт для автоматической генерации BGP-маршрутов на основе списка доменов для BIRD BGP маршрутизатора.

Возможности

  • Читает список доменов из текстового файла (по одному домену на строку)
  • Разрешает домены в IPv4-адреса через DNS
  • Генерирует файл с маршрутами в формате route 185.76.151.0/24 reject;
  • Поддерживает настраиваемый файл с маршрутами
  • Логирование процессов с различными уровнями детализации
  • НЕ изменяет основной конфигурационный файл /etc/bird/bird.conf

Требования

  • Python 3.9+
  • BIRD BGP (установлен на целевой системе)

Установка

  1. Склонируйте репозиторий:
git clone <repository-url>
cd domain-routing-bird
  1. Скопируйте примеры конфигурационных файлов:
cp config.example.yaml config.yaml
cp domains.example.txt domains.txt
  1. Настройте config.yaml и domains.txt под ваши нужды

Использование

Базовый запуск:

python3 domain_routing.py

С указанием конфигурационного файла:

python3 domain_routing.py -c /path/to/config.yaml

С подробным выводом (DEBUG уровень):

python3 domain_routing.py -c config.yaml -v

Помощь:

python3 domain_routing.py --help

Настройка

Конфигурационный файл (config.yaml)

# Путь к файлу со списком доменов (текстовый файл, по одному домену на строку)
domains_file: domains.txt

# Путь к файлу с маршрутами (выходной файл с route statements)
routes_file: routes.conf

# DNS-сервер для разрешения доменов (опционально)
# dns_server: 8.8.8.8

# Уровень логирования: DEBUG, INFO, WARNING, ERROR
log_level: INFO

Список доменов (domains.txt)

# Список доменов для domain-based routing
# Каждый домен будет разрешен в IPv4-адреса и добавлен в файл с маршрутами

# Основные домены
example.com
test.com

# Домены с комментариями (комментарии начинаются с #)
# corporate.example.com  # Корпоративный домен
# api.example.com        # API домен

Формат выходных файлов

Файл с маршрутами (routes.conf)

Скрипт генерирует файл с маршрутами в следующем формате:

# Generated by domain-routing-bird
# Generated at: 2026-07-03T12:00:00.000000

route 185.76.151.0/24 reject;
route 192.168.1.0/24 reject;

Интеграция с BIRD BGP

Настройка BIRD

  1. Убедитесь, что у вас есть основной конфигурационный файл BIRD (/etc/bird/bird.conf)

  2. Добавьте include-директиву для подключения сгенерированных маршрутов:

# В /etc/bird/bird.conf добавьте строку:
include "routes.conf";
  1. Создайте файл routes.conf (или укажите другой путь в config.yaml)

  2. Запустите скрипт для генерации маршрутов:

python3 domain_routing.py
  1. Примените изменения в BIRD:
sudo birdc configure

Или перезапустите BIRD:

sudo systemctl restart bird

Примеры использования

Пример 1: Базовая настройка

  1. Создайте config.yaml и domains.txt из примеров
  2. Добавьте в /etc/bird/bird.conf строку:
    include "routes.conf";
    
  3. Запустите скрипт:
python3 domain_routing.py
  1. Примените изменения:
sudo birdc configure

Пример 2: Кастомные параметры

  1. Отредактируйте config.yaml:
domains_file: my_domains.txt
routes_file: /etc/bird/routes.conf
  1. Создайте my_domains.txt со своими доменами
  2. Добавьте в /etc/bird/bird.conf:
    include "/etc/bird/routes.conf";
    
  3. Запустите скрипт:
python3 domain_routing.py -c config.yaml

Пример 3: Интеграция с существующей конфигурацией

  1. Отредактируйте config.yaml:
routes_file: /etc/bird/domain-routes.conf
  1. Добавьте в /etc/bird/bird.conf (в нужное место):

    include "/etc/bird/domain-routes.conf";
    
  2. Запустите скрипт:

python3 domain_routing.py

Troubleshooting

Проблема: "Файл не найден"

Решение: Убедитесь, что пути к конфигурационным файлам указаны правильно

Проблема: "Не удалось разрешить домен"

Решение: Проверьте сетевое соединение и DNS-серверы

Проблема: "Ошибка записи файла"

Решение: Убедитесь, что у пользователя есть права на запись в целевой файл

Проблема: "Конфигурация не применяется"

Решение:

  • Проверьте синтаксис сгенерированного файла с маршрутами
  • Убедитесь, что include-директива добавлена в /etc/bird/bird.conf
  • Убедитесь, что BIRD запущен
  • Проверьте права доступа к файлам конфигурации

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

  • Убедитесь, что список доменов содержит только доверенные домены
  • Рассмотрите использование DNSSEC для защиты от DNS spoofing
  • Ограничьте права доступа к конфигурационным файлам
  • Используйте не-стандартные пути к файлам в продакшене

Лицензия

Этот проект создан для domain-routing-bird репозитория.

Автор

GigaCode - Sber AI Assistant