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