domain-routing-bird/README.md
a.kazantsev baa3474d0f 2
2026-07-03 17:06:48 +03:00

227 lines
7 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
- Генерирует файл с IP-адресами в формате `route 185.76.151.0/24 reject;`
- Генерирует конфигурацию для BIRD BGP с загруженными маршрутами
- Поддерживает настраиваемые параметры BGP
- Логирование процессов с различными уровнями детализации
## Требования
- 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
# Путь к выходному конфигурационному файлу 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