This commit is contained in:
@@ -0,0 +1,110 @@
|
||||
# Антифильтр - автоматическая генерация BGP routes
|
||||
|
||||
Проект для автоматической генерации и распространения BGP routes.
|
||||
|
||||
## Структура проекта
|
||||
|
||||
```
|
||||
.
|
||||
├── bin/
|
||||
│ └── resolve.py # Скрипт генерации routes
|
||||
├── src/
|
||||
│ ├── {community}.{name}.list # Исходные данные
|
||||
│ └── ...
|
||||
├── resolve/
|
||||
│ ├── {community}.{name}.routes # Сгенерированные routes
|
||||
│ └── ...
|
||||
└── .gitea/
|
||||
└── workflows/
|
||||
└── build.yml # Gitea Actions workflow
|
||||
```
|
||||
|
||||
## Как это работает
|
||||
|
||||
1. **Исходные данные** хранятся в файлах `src/{community}.{name}.list`
|
||||
2. **Community** извлекается из имени файла (первая часть до точки)
|
||||
3. При коммите в master запускается Gitea Actions workflow
|
||||
4. Скрипт `bin/resolve.py` обрабатывает каждый `.list` файл:
|
||||
- Читает записи построчно
|
||||
- Определяет тип записи (AS, домен, URL, IP, CIDR)
|
||||
- Резолвит записи в CIDR блоки
|
||||
- Формирует routes в формате BIRD
|
||||
5. Сгенерированные `.routes` файлы выгружаются по FTP
|
||||
|
||||
## Формат файлов src/*.list
|
||||
|
||||
Каждый файл может содержать записи пяти типов (вперемешку):
|
||||
|
||||
```text
|
||||
# Автономная система (AS)
|
||||
AS1234
|
||||
AS-TELEGRAM
|
||||
|
||||
# Домен
|
||||
t.me
|
||||
ya.ru
|
||||
|
||||
# Ссылка (должна возвращать список CIDR, по одному в строке)
|
||||
https://www.cloudflare.com/ips-v4/
|
||||
|
||||
# IP-адрес
|
||||
1.2.3.4
|
||||
|
||||
# CIDR
|
||||
1.2.3.4/32
|
||||
10.0.0.0/8
|
||||
```
|
||||
|
||||
Пустые строки и комментарии (начинающиеся с `#`) игнорируются.
|
||||
|
||||
## Текущие community
|
||||
|
||||
| Community | Описание |
|
||||
|-----------|----------|
|
||||
| 64888:101 | WhatsApp |
|
||||
| 64888:102 | YouTube |
|
||||
| 64888:103 | Сайты для работы |
|
||||
| 64888:104 | Разные сайты, добавленные вручную |
|
||||
| 64888:105 | DeepSeek |
|
||||
| 64888:106 | Cloudflare |
|
||||
| 64888:107 | Hetzner |
|
||||
| 64888:108 | Telegram |
|
||||
| 64888:109 | Habr |
|
||||
| 64888:110 | Facebook/Instagram |
|
||||
| 64888:111 | Twitter |
|
||||
| 64888:112 | Discord |
|
||||
| 64888:113 | Akamai CDN (AS-AKAMAI) |
|
||||
| 64888:114 | Amazon CloudFront (AS16509) |
|
||||
|
||||
## Как добавить свои записи
|
||||
|
||||
1. Создайте новый файл в `src/` с именем `{community}.{name}.list`
|
||||
- Если community уже существует, используйте его номер
|
||||
- Если нужен новый community, согласуйте номер с администратором
|
||||
- `name` - любое понятное имя (латиница, цифры, подчеркивания)
|
||||
|
||||
2. Добавьте записи нужных типов (AS, домены, URL, IP, CIDR)
|
||||
|
||||
3. Сделайте коммит в master
|
||||
|
||||
4. Дождитесь завершения Gitea Actions workflow
|
||||
|
||||
5. Новые routes автоматически применятся на BIRD
|
||||
|
||||
## Требования к серверу с BIRD
|
||||
|
||||
- Python 3
|
||||
- bgpq4
|
||||
- dnsutils (для dig)
|
||||
- curl
|
||||
- inotify-tools (для автоматического обновления)
|
||||
|
||||
## Ручной запуск
|
||||
|
||||
Для локальной генерации без коммита:
|
||||
|
||||
```bash
|
||||
python3 bin/resolve.py
|
||||
```
|
||||
|
||||
Сгенерированные файлы появятся в директории `resolve/`.
|
||||
Reference in New Issue
Block a user