# Domain-based Routing для BIRD BGP Этот проект содержит скрипт для автоматической генерации BGP-конфигурации на основе списка доменов для BIRD BGP маршрутизатора. ## Возможности - Читает список доменов из YAML-файла - Разрешает домены в IPv4-адреса через DNS - Генерирует конфигурацию для BIRD BGP с network statements в формате `/24 reject` - Поддерживает настраиваемые параметры BGP - Логирование процессов с различными уровнями детализации ## Требования - Python 3.9+ - Модуль `pyyaml` (`pip install pyyaml`) - BIRD BGP (установлен на целевой системе) ## Установка 1. Склонируйте репозиторий: ```bash git clone cd domain-routing-bird ``` 2. Установите зависимости: ```bash pip install pyyaml ``` 3. Скопируйте примеры конфигурационных файлов: ```bash cp config.example.yaml config.yaml cp domains.example.yaml domains.yaml ``` 4. Настройте `config.yaml` и `domains.yaml` под ваши нужды ## Использование ### Базовый запуск: ```bash python3 domain_routing.py ``` ### С указанием конфигурационного файла: ```bash python3 domain_routing.py -c /path/to/config.yaml ``` ### С подробным выводом (DEBUG уровень): ```bash python3 domain_routing.py -c config.yaml -v ``` ### Помощь: ```bash python3 domain_routing.py --help ``` ## Настройка ### Конфигурационный файл (config.yaml) ```yaml # Путь к файлу со списком доменов domains_file: domains.yaml # Путь к выходному конфигурационному файлу BIRD output_file: /etc/bird/bird.conf # DNS-сервер для разрешения доменов (опционально) # dns_server: 8.8.8.8 # Уровень логирования: DEBUG, INFO, WARNING, ERROR log_level: INFO # Параметры BGP (опционально) # neighbor_ip: 192.168.1.1 # neighbor_as: 65000 # protocol_name: domain_routing ``` ### Список доменов (domains.yaml) ```yaml # Список доменов для domain-based routing # Каждый домен будет разрешен в IPv4-адреса и добавлен в BGP-конфигурацию # Основные домены - example.com - test.com # Домены с комментариями # - corporate.example.com # Корпоративный домен # - api.example.com # API домен ``` ## Формат выходной конфигурации Скрипт генерирует конфигурацию в следующем формате: ``` # Generated by domain-routing-bird # Generated at: 2026-07-03T12:00:00.000000 protocol bgp domain_routing { import all; export all; neighbor 192.168.1.1 as 65000; network 1.2.3.0/24 reject; network 4.5.6.0/24 reject; } ``` ## Интеграция с BIRD BGP После генерации конфигурации: 1. Проверьте сгенерированный файл (по умолчанию `/etc/bird/bird.conf`) 2. Для применения изменений выполните: ```bash sudo birdc configure ``` Или перезапустите BIRD: ```bash sudo systemctl restart bird ``` ## Примеры использования ### Пример 1: Базовая настройка 1. Создайте `config.yaml` и `domains.yaml` из примеров 2. Запустите скрипт: ```bash python3 domain_routing.py ``` 3. Проверьте сгенерированный файл `/etc/bird/bird.conf` 4. Примените изменения: ```bash sudo birdc configure ``` ### Пример 2: Кастомные параметры 1. Отредактируйте `config.yaml`: ```yaml domains_file: my_domains.yaml output_file: /etc/bird/bird.conf neighbor_ip: 10.0.0.1 neighbor_as: 65100 protocol_name: custom_routing ``` 2. Создайте `my_domains.yaml` со своими доменами 3. Запустите скрипт: ```bash python3 domain_routing.py -c config.yaml ``` ## Troubleshooting ### Проблема: "Файл не найден" **Решение**: Убедитесь, что пути к конфигурационным файлам указаны правильно ### Проблема: "Не удалось разрешить домен" **Решение**: Проверьте сетевое соединение и DNS-серверы ### Проблема: "Ошибка записи файла" **Решение**: Убедитесь, что у пользователя есть права на запись в целевой файл ### Проблема: "Конфигурация не применяется" **Решение**: - Проверьте синтаксис сгенерированной конфигурации - Убедитесь, что BIRD запущен - Проверьте права доступа к `/etc/bird/` ## Безопасность - Убедитесь, что список доменов содержит только доверенные домены - Рассмотрите использование DNSSEC для защиты от DNS spoofing - Ограничьте права доступа к конфигурационным файлам - Используйте非-стандартные BGP-параметры в продакшене ## Лицензия Этот проект создан для domain-routing-bird репозитория. ## Автор GigaCode - Sber AI Assistant