# 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. Склонируйте репозиторий: ```bash git clone cd domain-routing-bird ``` 2. Скопируйте примеры конфигурационных файлов: ```bash cp config.example.yaml config.yaml cp domains.example.txt domains.txt ``` 3. Настройте `config.yaml` и `domains.txt` под ваши нужды ## Использование ### Базовый запуск: ```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.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`-директиву для подключения сгенерированных маршрутов: ```bash # В /etc/bird/bird.conf добавьте строку: include "routes.conf"; ``` 3. Создайте файл `routes.conf` (или укажите другой путь в config.yaml) 4. Запустите скрипт для генерации маршрутов: ```bash python3 domain_routing.py ``` 5. Примените изменения в BIRD: ```bash sudo birdc configure ``` Или перезапустите BIRD: ```bash sudo systemctl restart bird ``` ## Примеры использования ### Пример 1: Базовая настройка 1. Создайте `config.yaml` и `domains.txt` из примеров 2. Добавьте в `/etc/bird/bird.conf` строку: ``` include "routes.conf"; ``` 3. Запустите скрипт: ```bash python3 domain_routing.py ``` 4. Примените изменения: ```bash sudo birdc configure ``` ### Пример 2: Кастомные параметры 1. Отредактируйте `config.yaml`: ```yaml domains_file: my_domains.txt routes_file: /etc/bird/routes.conf ``` 2. Создайте `my_domains.txt` со своими доменами 3. Добавьте в `/etc/bird/bird.conf`: ``` include "/etc/bird/routes.conf"; ``` 4. Запустите скрипт: ```bash python3 domain_routing.py -c config.yaml ``` ### Пример 3: Интеграция с существующей конфигурацией 1. Отредактируйте `config.yaml`: ```yaml routes_file: /etc/bird/domain-routes.conf ``` 2. Добавьте в `/etc/bird/bird.conf` (в нужное место): ``` include "/etc/bird/domain-routes.conf"; ``` 3. Запустите скрипт: ```bash python3 domain_routing.py ``` ## Troubleshooting ### Проблема: \"Файл не найден\" **Решение**: Убедитесь, что пути к конфигурационным файлам указаны правильно ### Проблема: \"Не удалось разрешить домен\" **Решение**: Проверьте сетевое соединение и DNS-серверы ### Проблема: \"Ошибка записи файла\" **Решение**: Убедитесь, что у пользователя есть права на запись в целевой файл ### Проблема: \"Конфигурация не применяется\" **Решение**: - Проверьте синтаксис сгенерированного файла с маршрутами - Убедитесь, что `include`-директива добавлена в `/etc/bird/bird.conf` - Убедитесь, что BIRD запущен - Проверьте права доступа к файлам конфигурации ## Безопасность - Убедитесь, что список доменов содержит только доверенные домены - Рассмотрите использование DNSSEC для защиты от DNS spoofing - Ограничьте права доступа к конфигурационным файлам - Используйте не-стандартные пути к файлам в продакшене ## Лицензия Этот проект создан для domain-routing-bird репозитория. ## Автор GigaCode - Sber AI Assistant