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