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