No description
| .gigacode/plans | ||
| __pycache__ | ||
| config.example.yaml | ||
| config.yaml | ||
| domain_routing.py | ||
| domains.example.txt | ||
| domains.example.yaml | ||
| domains.txt | ||
| domains.yaml | ||
| README.md | ||
| routes.conf | ||
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 (установлен на целевой системе)
Установка
- Склонируйте репозиторий:
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
# Путь к выходному конфигурационному файлу 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
После генерации конфигурации:
- Проверьте сгенерированные файлы (
routes.confи/etc/bird/bird.conf) - Для применения изменений выполните:
sudo birdc configure
Или перезапустите BIRD:
sudo systemctl restart bird
Примеры использования
Пример 1: Базовая настройка
- Создайте
config.yamlиdomains.txtиз примеров - Запустите скрипт:
python3 domain_routing.py
-
Проверьте сгенерированные файлы:
routes.conf- файл с маршрутами/etc/bird/bird.conf- конфигурация BIRD
-
Примените изменения:
sudo birdc configure
Пример 2: Кастомные параметры
- Отредактируйте
config.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
- Создайте
my_domains.txtсо своими доменами - Запустите скрипт:
python3 domain_routing.py -c config.yaml
Пример 3: Кастомный файл с маршрутами
- Отредактируйте
config.yaml:
routes_file: /etc/bird/routes.conf
- Запустите скрипт:
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