domain-routing-bird/README.md
a.kazantsev 70d5b4f73b update
2026-07-03 17:33:29 +03:00

219 lines
6.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 <repository-url>
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