219 lines
6.8 KiB
Markdown
219 lines
6.8 KiB
Markdown
# 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 |