# Domain-based Routing для BIRD BGP Этот проект содержит скрипт для автоматической генерации BGP-конфигурации на основе списка доменов для BIRD BGP маршрутизатора. ## Возможности - Читает список доменов из текстового файла (по одному домену на строку) - Разрешает домены в IPv4-адреса через DNS - Генерирует файл с IP-адресами в формате `route 185.76.151.0/24 reject;` - Генерирует конфигурацию для BIRD BGP с загруженными маршрутами - Поддерживает настраиваемые параметры BGP - Логирование процессов с различными уровнями детализации ## Требования - 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 # Путь к выходному конфигурационному файлу BIRD output_file: /etc/bird/bird.conf # Путь к файлу с маршрутами (выходной файл с route statements) routes_file: routes.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.txt) ``` # Список доменов для domain-based routing # Каждый домен будет разрешен в IPv4-адреса и добавлен в BGP-конфигурацию # Основные домены 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 (bird.conf) Объединяет основную конфигурацию BIRD с загруженными маршрутами: ``` # 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; route 185.76.151.0/24 reject; route 192.168.1.0/24 reject; } ``` ## Интеграция с BIRD BGP После генерации конфигурации: 1. Проверьте сгенерированные файлы (`routes.conf` и `/etc/bird/bird.conf`) 2. Для применения изменений выполните: ```bash sudo birdc configure ``` Или перезапустите BIRD: ```bash sudo systemctl restart bird ``` ## Примеры использования ### Пример 1: Базовая настройка 1. Создайте `config.yaml` и `domains.txt` из примеров 2. Запустите скрипт: ```bash python3 domain_routing.py ``` 3. Проверьте сгенерированные файлы: - `routes.conf` - файл с маршрутами - `/etc/bird/bird.conf` - конфигурация BIRD 4. Примените изменения: ```bash sudo birdc configure ``` ### Пример 2: Кастомные параметры 1. Отредактируйте `config.yaml`: ```yaml domains_file: my_domains.txt output_file: /etc/bird/bird.conf routes_file: my_routes.conf neighbor_ip: 10.0.0.1 neighbor_as: 65100 protocol_name: custom_routing ``` 2. Создайте `my_domains.txt` со своими доменами 3. Запустите скрипт: ```bash python3 domain_routing.py -c config.yaml ``` ### Пример 3: Кастомный файл с маршрутами 1. Отредактируйте `config.yaml`: ```yaml routes_file: /etc/bird/routes.conf ``` 2. Запустите скрипт: ```bash python3 domain_routing.py ``` Скрипт создаст файл `/etc/bird/routes.conf` с маршрутами и обновит основную конфигурацию BIRD. ## Troubleshooting ### Проблема: "Файл не найден" **Решение**: Убедитесь, что пути к конфигурационным файлам указаны правильно ### Проблема: "Не удалось разрешить домен" **Решение**: Проверьте сетевое соединение и DNS-серверы ### Проблема: "Ошибка записи файла" **Решение**: Убедитесь, что у пользователя есть права на запись в целевой файл ### Проблема: "Конфигурация не применяется" **Решение**: - Проверьте синтаксис сгенерированной конфигурации - Убедитесь, что BIRD запущен - Проверьте права доступа к `/etc/bird/` ## Безопасность - Убедитесь, что список доменов содержит только доверенные домены - Рассмотрите использование DNSSEC для защиты от DNS spoofing - Ограничьте права доступа к конфигурационным файлам - Используйте не-стандартные BGP-параметры в продакшене ## Лицензия Этот проект создан для domain-routing-bird репозитория. ## Автор GigaCode - Sber AI Assistant