[2026-09-28] eagle: family/projects/media-toolbox-taiga.md personal/plans/flaresolverr-taiga-deploy.md personal/plans/lidarr-taiga-and-indexer-unblock.md personal/tech/prowlarr-flaresolverr-cloudflare.md
This commit is contained in:
1 parent
b04d7c9c8c
commit
6cf819ff39
4 files changed
+224
-9
No files matched your search
@@ -316,7 +316,13 @@ docker exec prowlarr sh -c 'printf "X-Api-Key: 35c8b3f497114076a6150ea0d9504845"
|
||||
> | 6 | Kinozal (M) | ❌ `blocked by CloudFlare Protection` |
|
||||
>
|
||||
> RuTracker: `GET /forum/index.php` → **200**, `POST /forum/login.php` → **403 Cloudflare JS-challenge**.
|
||||
> Остаточная проблема — Cloudflare, НЕ DNS. Решение — FlareSolverr (не установлен, ждём решение Alex).
|
||||
> Остаточная проблема — Cloudflare, НЕ DNS.
|
||||
> ✅ **РЕШЕНО 2026-09-28: FlareSolverr развёрнут.** Прокси-элемент `flaresolverr` (id=2, host
|
||||
> `http://flaresolverr:8191/`, `requestTimeout=120`), теги `[1,2]` на RuTracker/Kinozal/Kinozal(M).
|
||||
> FS ходит через `vless-proxy` через env **`PROXY_URL=socks5://vless-proxy:1080`**.
|
||||
> Пруф: `rutracker.org/forum/login.php` → `Challenge solved!` 200. Полный разбор —
|
||||
> [[personal/plans/flaresolverr-taiga-deploy]].
|
||||
> ⏳ **Осталось:** тег FS на NoNaMe (id 4); перепроверить Kinozal (5) одиночным тестом.
|
||||
>
|
||||
> 🔴 **Важно для RuTracker/Kinozal: `kinozal.tv` МЁРТВ** (NXDOMAIN даже на выходной стороне прокси) —
|
||||
> использовать `kinozal.me` (через прокси → 200).
|
||||
@@ -325,12 +331,12 @@ docker exec prowlarr sh -c 'printf "X-Api-Key: 35c8b3f497114076a6150ea0d9504845"
|
||||
|
||||
| id | Имя | Примечание |
|
||||
|-----|-----|-----------|
|
||||
| 1 | RuTracker | через прокси; ⚠️ Cloudflare-челлендж на логине |
|
||||
| 1 | RuTracker | через прокси **+ FlareSolverr**; ✅ работает (2026-09-28) |
|
||||
| 2 | RuTor | через прокси; ✅ работает |
|
||||
| 3 | Byrutor | через прокси; ✅ работает; `enableRss: false` |
|
||||
| 4 | NoNaMe Club | через прокси; ✅ работает |
|
||||
| 5 | Kinozal | через прокси; ⚠️ Cloudflare Protection; URL должен быть `kinozal.me` |
|
||||
| 6 | Kinozal (M) | через прокси; ⚠️ Cloudflare Protection; магнет, без grab limit — предпочтительный |
|
||||
| 4 | NoNaMe Club | через прокси; ✅ работает (FS-тег не навешен — не требуется) |
|
||||
| 5 | Kinozal | через прокси **+ FlareSolverr**; ✅ `Challenge solved!` на `kinozal.me/browse.php` |
|
||||
| 6 | Kinozal (M) | через прокси **+ FlareSolverr**; ✅ из 6/6 ключевое — `isValid=true` |
|
||||
|
||||
`preferMagnetUrl: true` для всех → нет дневного лимита на .torrent.
|
||||
|
||||
|
||||
@@ -1,10 +1,171 @@
|
||||
# FlareSolverr на Тайге + обход блокировок индексеров — план
|
||||
|
||||
> **Статус: ПЛАН СОСТАВЛЕН, ЖДЁТ «GO» АЛЕКСА. НИЧЕГО НЕ ИЗМЕНЕНО.**
|
||||
> Поставлено 2026-09-28: «Ставь flaresolverr как на Кра́кене, запускай трекеры через прокси
|
||||
> контейнер чтобы обойти блокировки». Связано: [[personal/plans/lidarr-taiga-and-indexer-unblock]],
|
||||
> **Статус: ✅ РАЗВЁРНУТ 2026-09-28. Приёмка Alex НЕ закрыта (ждёт проверки в UI).**
|
||||
> Задача Alex: «Ставь flaresolverr как на Кра́кене, запускай трекеры через прокси контейнер
|
||||
> чтобы обойти блокировки». Связано: [[personal/plans/lidarr-taiga-and-indexer-unblock]],
|
||||
> [[family/projects/media-toolbox-taiga]], [[family/how-to/arr-stack-kraken]],
|
||||
> [[personal/tech/prowlarr-flaresolverr-cloudflare]].
|
||||
>
|
||||
> **Итог:** `flaresolverr` поднят, обходит и DNS-блок, и Cloudflare. Тест индексеров:
|
||||
> RuTracker ✅ RuTor ✅ Byrutor ✅ Kinozal(M) ✅ | NoNaMe ❌ (нет FS-тега) Kinozal ❌ (гонка).
|
||||
> Оба дефекта закрываемые, см. §«Осталось».
|
||||
|
||||
## ФАКТИЧЕСКОЕ СОСТОЯНИЕ (2026-09-28, после деплоя)
|
||||
|
||||
### Контейнер `flaresolverr` — ✅ работает
|
||||
|
||||
`/mnt/RED_2TB/docker/arr/docker-compose.yml` (122 строки), сервис `flaresolverr`:
|
||||
|
||||
```yaml
|
||||
flaresolverr:
|
||||
image: ghcr.io/flaresolverr/flaresolverr:latest
|
||||
container_name: flaresolverr
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- LOG_LEVEL=warning
|
||||
- BROWSER_TIMEOUT=60000
|
||||
- TZ=Asia/Novosibirsk
|
||||
- PROXY_URL=socks5://vless-proxy:1080 # ← ключ: обход DNS-блока
|
||||
ports:
|
||||
- "8191:8191"
|
||||
networks:
|
||||
- media_net
|
||||
shm_size: 1gb # ← Кра́кен: 64 MB убивал Chrome
|
||||
sysctls:
|
||||
- net.ipv6.conf.all.disable_ipv6=1
|
||||
```
|
||||
|
||||
Поднят: `cd /mnt/RED_2TB/docker/arr && docker compose up -d flaresolverr` → `Up`, рестартов 0,
|
||||
логи пусты (при `LLOG_LEVEL=warning` это норма — пароли не пишутся).
|
||||
**Swap НЕ трогали** — Хватает RAM (21 GB total). Alex отклонил идею swap: «Памяти мало что-ли?».
|
||||
|
||||
### 🔑 ГЛАВНОЕ ОТКРЫТИЕ: FS нужен `PROXY_URL`, иначе он бесполезен на Тайге
|
||||
|
||||
На Кра́кене DNS-блока нет → FS ходит в трекер напрямую. **На Тайге DNS-блок есть** → FS сам
|
||||
должен ходить через `vless-proxy`. Решается глобальной env **`PROXY_URL`** (НЕ `HTTPS_PROXY`):
|
||||
|
||||
| Что | Значение |
|
||||
|---|---|
|
||||
| Переменная | **`PROXY_URL`** (проверено по DeepWiki FlareSolverr §4.2) |
|
||||
| Формат | **со схемой обязателен**: `socks5://vless-proxy:1080` |
|
||||
| Приоритет | request > session > global |
|
||||
| Авторизация | не нужна (`PROXY_USERNAME`/`PROXY_PASSWORD` пусты) |
|
||||
|
||||
⚠️ Prowlarr обращается к FS с параметром `session`; при наличии сессии request-прокси
|
||||
**игнорируется** → срабатывает именно global `PROXY_URL`. То есть схема A (env) — единственный
|
||||
рабочий вариант, request-прокси через Prowlarr передать нельзя (у Prowlarr-прокси `Socks5`
|
||||
только host/port/user/pass, поля «передать в FS» нет).
|
||||
|
||||
### Пруф работы FS (не UI — прямой HTTP)
|
||||
|
||||
```bash
|
||||
docker exec prowlarr sh -c 'curl -s --max-time 150 -X POST http://flaresolverr:8191/v1 \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"cmd\":\"request.get\",\"url\":\"https://rutracker.org/forum/login.php\",\"maxTimeout\":120000}"'
|
||||
# → {"status": "ok", "message": "Challenge solved!", "solution": {"status": 200, ...}}
|
||||
```
|
||||
|
||||
Результаты прямых тестов:
|
||||
| URL | Ответ FS |
|
||||
|---|---|
|
||||
| `rutracker.org/forum/index.php` | ok / Challenge not detected / 200 |
|
||||
| `rutracker.org/forum/login.php` | ok / **Challenge solved!** / 200 |
|
||||
| `kinozal.me/browse.php` | ok / **Challenge solved!** / 200 |
|
||||
| `nnmclub.to/forum/index.php` | ok / Challenge not detected / 200 |
|
||||
| `sessions.create` | ok / Session created successfully / v3.5.2 |
|
||||
|
||||
### Prowlarr: прокси-элемент и теги
|
||||
|
||||
| Элемент | id | Настройки | tags |
|
||||
|---|---|---|---|
|
||||
| `vless-socks5` (Socks5) | 1 | host `vless-proxy`, port `1080` | `[1]` |
|
||||
| `flaresolverr` (FlareSolverr) | 2 | host `http://flaresolverr:8191/`, **requestTimeout 120** | `[2]` |
|
||||
|
||||
Теги: `proxy` = id 1, `flaresolverr` = id 2.
|
||||
|
||||
**Индексерам нужны ОБА тега** — `proxy` (DNS-обход через SOCKS5) **и** `flaresolverr` (CF-челлендж).
|
||||
Навешено:
|
||||
|
||||
| id | Индексер | tags |
|
||||
|---|---|---|
|
||||
| 1 | RuTracker | **[1, 2]** ✅ |
|
||||
| 5 | Kinozal | **[1, 2]** ✅ |
|
||||
| 6 | Kinozal (M) | **[1, 2]** ✅ |
|
||||
| 2 | RuTor | [1] |
|
||||
| 3 | Byrutor | [1] |
|
||||
| 4 | NoNaMe Club | [1] ⏳ **нужен [1,2]** |
|
||||
|
||||
### 🔴 ПИТФОЛЛ: `PUT /api/v1/indexer/N` падает 400 из-за теста FS
|
||||
|
||||
Prowlarr при PUT **сразу тестирует** индексер. Если FS в этот момент таймаутит (или челлендж
|
||||
не решён), приходит **HTTP 400** с телом:
|
||||
|
||||
```json
|
||||
[{"isWarning":false,"propertyName":"","severity":"error",
|
||||
"errorMessage":"Unable to connect to indexer, indexer's server is unavailable. Try again later.
|
||||
HTTP request failed: [500:InternalServerError] [POST] at [http://flaresolverr:8191/v1]"}]}
|
||||
```
|
||||
|
||||
Теги при этом **НЕ применяются** (остаются старые). Обход — **`?forceSave=true`**:
|
||||
|
||||
```bash
|
||||
curl -X PUT -H @/tmp/h.txt -H "Content-Type: application/json" \
|
||||
-d @/tmp/ix1-new.json "http://localhost:9696/api/v1/indexer/1?forceSave=true"
|
||||
# → 202 (сохранил, тест пропущен)
|
||||
```
|
||||
|
||||
### 🔴 ПИТФОЛЛ: `requestTimeout=60` у FS-прокси МАЛО
|
||||
|
||||
Дефолт прокси-элемента — 60 с. CF-челлендж на `/forum/login.php` в него не укладывается →
|
||||
`Error solving the challenge. Timeout after 60.0 seconds`, индексер краснеет.
|
||||
**Поднять до 120** (проверено: с 120 челлендж решается). Правка PUT-ом прокси-элемента `/2`.
|
||||
|
||||
### 🔴 ПИТФОЛЛ: `testall` параллельный → Chrome захлёбывается
|
||||
|
||||
`POST /api/v1/indexer/testall` тестирует все 6 индексеров **одновременно**, а Chrome в FS — один.
|
||||
Часть челленджей отваливается по таймауту (ложный «blocked by CloudFlare Protection»).
|
||||
Прямой одиночный вызов того же URL через секунды даёт `Challenge solved!`.
|
||||
**Правило диагностики:** если `testall` показал Cloudflare-блок — перепроверять **одиночным**
|
||||
`request.get` с `maxTimeout=120000`, а не верить `testall`. Это грабля, стоившая времени.
|
||||
|
||||
### Результат `testall` (прогон 2026-09-28)
|
||||
|
||||
```
|
||||
1 RuTracker ✅ isValid=true
|
||||
2 RuTor ✅ isValid=true
|
||||
3 Byrutor ✅ isValid=true
|
||||
6 Kinozal (M) ✅ isValid=true
|
||||
4 NoNaMe Club ❌ "Unable to access nnmclub.to, blocked by CloudFlare Protection" ← нет FS-тега
|
||||
5 Kinozal ❌ "Unable to access kinozal.me, blocked by CloudFlare Protection" ← гонка testall
|
||||
```
|
||||
|
||||
### Осталось (для следующей сессии)
|
||||
|
||||
1. **Навесить тег `[1,2]` на NoNaMe (id 4)** — GET → правка → PUT с `?forceSave=true`.
|
||||
2. **Перепроверить Kinozal (5)** одиночным тестом — по факту FS на `kinozal.me/browse.php`
|
||||
даёт `Challenge solved!`, значит это была гонка testall, а не реальный блок.
|
||||
3. **ПРИЁМКА ALEX:** https://prowlarr.mallexxx.duckdns.org → Indexers → Test All → зелёные.
|
||||
|
||||
### Бэкапы (перед изменениями)
|
||||
|
||||
| Файл | Путь |
|
||||
|---|---|
|
||||
| compose (до правки) | `~truenas_admin/docker-compose.yml.bak-20260928-flaresolverr` (2313 B) |
|
||||
| индексеры (до тегов) | `~/backup-indexers-20260928-flaresolverr.json` (390701 B, на Mac) |
|
||||
|
||||
### Рабочая техника API-вызовов (повтор от грабель)
|
||||
|
||||
Ключ Prowlarr в **файл** внутри контейнера + `-H @/tmp/h.txt` — иначе кавычки ломаются на
|
||||
уровне ssh/sh, и API отвечает **401** даже с верным ключом:
|
||||
|
||||
```bash
|
||||
docker exec prowlarr sh -c 'printf "X-Api-Key: 35c8b3f497114076a6150ea0d9504845" > /tmp/h.txt; \
|
||||
printf "Content-Type: application/json" > /tmp/ct.txt'
|
||||
docker exec prowlarr sh -c 'curl -s -H @/tmp/h.txt http://localhost:9696/api/v1/indexer'
|
||||
```
|
||||
|
||||
Разбор JSON — **на хосте** (`python3` в контейнере НЕТ у Prowlarr: `sh: python3: not found`).
|
||||
Долгие операции (`testall`) — через `docker exec -d` в фон + файл-маркер `.done`.
|
||||
|
||||
## Разведка (2026-09-28, всё проверено на живой машине)
|
||||
|
||||
|
||||
@@ -22,7 +22,10 @@ related:
|
||||
---
|
||||
# Lidarr на Тайге + разблокировка индексеров — план
|
||||
|
||||
> **Статус: ПЛАН СОСТАВЛЕН, ЖДЁТ ОТВЕТОВ АЛЕКСА на 2 вопроса. НИЧЕГО НЕ ТРОНУТО.**
|
||||
> **Статус Фазы 0: ✅ ЗАКРЫТА 2026-09-28.** DNS-блок обойдён через `vless-proxy` (SOCKS5),
|
||||
> Cloudflare — через **FlareSolverr** (развёрнут 2026-09-28). Остаток: тег FS на NoNaMe,
|
||||
> проверка Kinozal. Полный разбор — [[personal/plans/flaresolverr-taiga-deploy]].
|
||||
> Lidarr уже развёрнут (см. [[family/plans/lidarr-taiga-deploy]] §2026-09-28).
|
||||
> Задача поставлена 2026-09-26: «поставить lidarr в дополнение к sonarr/prowlarr, настроить на музыку,
|
||||
> синк с jellyfin, проверка что весь стек живой».
|
||||
> Разведка выполнена, найдены 2 блокера, план ниже.
|
||||
|
||||
@@ -299,3 +299,48 @@ kinozal.tv / nnmclub.to даже с 8.8.8.8), которого на Кра́ке
|
||||
- Живой разбор: [[family/how-to/arr-stack-kraken]] — секции про починку индексера 2026-09-20
|
||||
- Слой PidTor/кэш: [[personal/tech/lampac-torrserver]] §«2026-09-24»
|
||||
- Каталог/конфиг lampac: [[personal/tech/lampac-deployment]]
|
||||
|
||||
## 🔵 2026-09-28: перенос схемы на Тайгу — FlareSolverr ЗА DNS-блоком
|
||||
|
||||
Развёрнут FlareSolverr на **Тайге** ([[personal/plans/flaresolverr-taiga-deploy]]) — там
|
||||
к Cloudflare добавляется **DNS-фильтр провайдера** (NXDOMAIN на трекеры). Это меняет схему:
|
||||
|
||||
```
|
||||
Kraken: Prowlarr → FlareSolverr → трекер (DNS-блока нет, прямой выход)
|
||||
Taiga: Prowlarr → FlareSolverr → vless-proxy → трекер (FS сам должен ходить через прокси)
|
||||
```
|
||||
|
||||
🔑 **Ключевая деталь, которой нет в схеме Кра́кена:** FlareSolverr сам должен ходить через
|
||||
прокси, иначе получит NXDOMAIN и не поможет вообще. Задаётся **глобальной env `PROXY_URL`**
|
||||
(НЕ `HTTPS_PROXY`/`HTTP_PROXY` — их FS не читает):
|
||||
|
||||
```yaml
|
||||
flaresolverr:
|
||||
environment:
|
||||
- PROXY_URL=socks5://vless-proxy:1080 # ← схема обязательна; socks5h не нужен, FS резолвит сам
|
||||
- LOG_LEVEL=warning
|
||||
shm_size: 1gb
|
||||
```
|
||||
|
||||
Приоритет прокси у FS: `request` > `session` > `global`. Prowlarr зовёт FS с `session` →
|
||||
request-прокси игнорируется, срабатывает именно global. Передать прокси из Prowlarr нельзя
|
||||
(у Socks5-элемента только host/port/user/pass).
|
||||
|
||||
### Дополнительные питфоллы, найденные на Тайге
|
||||
|
||||
1. 🔴 **`requestTimeout` у FS-прокси в Prowlarr по умолчанию 60 с — МАЛО.** CF-челлендж на
|
||||
`/forum/login.php` не укладывается → `Error solving the challenge. Timeout after 60.0 seconds`.
|
||||
**Ставить 120.** Правка: PUT `/api/v1/indexerproxy/2` с `fields[requestTimeout].value=120`.
|
||||
2. 🔴 **`PUT /api/v1/indexer/N` возвращает 400, если тест FS в этот момент не прошёл** — Prowlarr
|
||||
валидирует сразу при сохранении. Тело: `Unable to connect to indexer ... [500:InternalServerError]
|
||||
[POST] at [http://flaresolverr:8191/v1]`. **Теги при этом НЕ применяются.** Обход —
|
||||
**`?forceSave=true`** → 202. Иначе будет казаться, что тег «не навешивается».
|
||||
3. 🔴 **`POST /api/v1/indexer/testall` идёт ПАРАЛЛЕЛЬНО, а Chrome в FS один** → часть челленджей
|
||||
отваливается, индексер показывает ложный `blocked by CloudFlare Protection`. **Проверять
|
||||
одиночным `request.get` с `maxTimeout=120000`**, а не верить `testall`.
|
||||
4. ⚠️ **Индексеру могут понадобиться ДВА тега** — `proxy` (DNS-обход) **и** `flaresolverr`
|
||||
(CF-челлендж). Один прокси не решает оба блока. На Кра́кене достаточно одного (только CF).
|
||||
5. ⚠️ **Ключ API в файл + `-H @/tmp/h.txt`** внутри контейнера. Прямая передача `-H "X-Api-Key: $K"`
|
||||
через вложенный `ssh`+`sh -c` ломается на кавычках → **401** при верном ключе.
|
||||
6. ⚠️ `python3` в контейнере Prowlarr **нет** — JSON разбирать на хосте. Долгие вызовы —
|
||||
`docker exec -d` в фон + файл-маркер `.done`.
|
||||
Reference in new issue
Block a user