# FlareSolverr на Тайге + обход блокировок индексеров > ✅ **СОСТОЯНИЕ 2026-09-28: FlareSolverr РАЗВЁРНУТ и работает end-to-end.** > Контейнер `flaresolverr` (v3.5.2), порт `8191`, сеть `media_net`, `shm_size: 1gb`, > `LOG_LEVEL=warning`, **`PROXY_URL=socks5://vless-proxy:1080`**. > Compose — `/mnt/RED_2TB/docker/arr/docker-compose.yml` (6-й сервис). > Бэкап: `~truenas_admin/docker-compose.yml.bak-20260928-flaresolverr`. > Связка: [[personal/plans/lidarr-taiga-and-indexer-unblock]], [[family/projects/media-toolbox-taiga]], > [[personal/tech/prowlarr-flaresolverr-cloudflare]], [[family/how-to/arr-stack-kraken]]. ## 🔑 ГЛАВНОЕ ОТЛИЧИЕ ОТ КРА́КЕНА: FlareSolverr сам идёт через прокси На Кра́кене два механизма независимы: Cloudflare лечится FlareSolverr, DNS-блока нет. **На Тайге блоков ДВА (DNS + Cloudflare), и FlareSolverr обязан ходить через `vless-proxy`** — иначе он сам получит NXDOMAIN и не поможет. **Решение:** глобальная env-переменная FlareSolverr **`PROXY_URL=socks5://vless-proxy:1080`**. > ⚠️ Имя переменной — **`PROXY_URL`**, НЕ `HTTP_PROXY`/`HTTPS_PROXY` (проверено по DeepWiki > FlareSolverr §4.2). Формат **со схемой обязателен** (`socks5://host:port`); без схемы — > `urllib.parse` не разберёт. Приоритет: request > session > global. **Почему срабатывает именно global:** Prowlarr обращается к FS с параметром `session`, а при наличии сессии request-прокси **игнорируется** → применяется global (`PROXY_URL`). Схема совпала случайно-удачно: если бы Prowlarr слал request-прокси, он бы его перебил. ## ⚠️ ПИТФОЛЛ: `requestTimeout` = 60 с МАЛО, нужно 120 Дефолтный `requestTimeout` прокси-элемента FlareSolverr в Prowlarr = **60 с**. Решение CF-челленджа на `/forum/login.php` RuTracker занимает **больше 60 с** → `Error solving the challenge. Timeout after 60.0 seconds` в логе FS, Prowlarr отдаёт `500 InternalServerError [POST] at http://flaresolverr:8191/v1`, а в UI — «blocked by CloudFlare». **Фикс:** `requestTimeout` = **120** (PUT `/api/v1/indexerproxy/2`). Проверка: `docker logs flaresolverr` → `Challenge solved!`, а не `Timeout`. ## ⚠️ ПИТФОЛЛ: параллельный `testall` устраивает гонку за Chrome Prowlarr тестирует все индексеры **одновременно**, а у FlareSolverr **один** Chrome. При `testall` челленджи сыпятся таймаутами; если тестировать **по одному** (sequential) — проходят. Диагноз: вручную одиночный `request.get` проходит за секунды, а `testall` даёт `Timeout`. **Не верить результату параллельного `testall`** — гонять по одному. ## ⚠️ ПИТФОЛЛ: тег нужен И на прокси, И на индексере — и на ОБА прокси Индексерам за DNS-блоком нужны **два** прокси-элемента и **два** тега: | Прокси | id | Тег | Назначение | |---|---|---|---| | `vless-socks5` | 1 | `proxy` (id=1) | обход **DNS-блока** провайдера | | `flaresolverr` | 2 | `flaresolverr` (id=2) | обход **Cloudflare** | Значит на индексер вешаются **оба** тега: `tags=[1,2]`. Один прокси не закрывает оба блока. ## ⚠️ ПИТФОЛЛ: PUT `/api/v1/indexer/N` → 400, нужен `?forceSave=true` Prowlarr при PUT **сразу тестирует** индексер. Если FS в этот момент не прошёл (таймаут/гонка) — `HTTP 400` с `validationFailures`. Именно так «потерялись» теги после первого PUT: теги откатились к `[1]`. **Рабочий путь:** `PUT /api/v1/indexer/N?forceSave=true` → **202** (сохраняет, тест пропускает). Тест гонять отдельно, по одному. ## Практические замечания - **Логи FS пусты при `LOG_LEVEL=warning`** — это правильно: на `info` он пишет `login_password` трекеров в plaintext. Не поднимать уровень ради «посмотреть». - `sessions.create` → `ok`, `version 3.5.2` — быстрый smoke-тест живости FS. - Прямая проверка FS из prowlarr: ```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\":130000}"' # ожидается: {"status":"ok","message":"Challenge solved!", ...} ``` - `sleep 35` после старта контейнера — Chrome поднимается ~30 с; раньше этого `:8191` может не отвечать. - `shm_size` и `sysctls` — **в блок сервиса** compose, не в `environment`. ## Состояние индексеров после деплоя (2026-09-28) | id | Индексер | Теги | Статус | |---|---|---|---| | 1 | RuTracker | `[1,2]` | ✅ **valid** (был красный с 2026-05-20) | | 2 | RuTor | `[1]` | ✅ valid (DNS-блок обходится одним прокси) | | 3 | Byrutor | `[1]` | ✅ valid (резолвится без прокси) | | 4 | NoNaMe Club | `[1,2]` | ✅ **valid** | | 5 | Kinozal | `[1,2]` | ⏳ CF-челлендж решается 80-100 с, Prowlarr обрывает | | 6 | Kinozal (M) | `[1,2]` | ⏳ то же | ## 🔴 ОТКРЫТАЯ ПРОБЛЕМА: Kinozal — челлендж дольше таймаута Prowlarr **Факты (замерено):** - Прямой socks5 к `kinozal.me/browse.php` → **403 Just a moment** за **0.9 с**. - FS `request.get` kinozal → `Challenge solved! 200`. Время: **78 с** (холодный), **20 с** (прогретый). - FS `request.post` kinozal/takelogin.php → `Challenge solved! 200`, **97 с**. - HTTP 500 от FS в логе Prowlarr: `[POST] at http://flaresolverr:8191/v1`. - Вердикт Prowlarr: `blocked by CloudFlare Protection` (НЕ таймаут — явная ошибка). **Механика Prowlarr (из debug-лога) — два прокси применяются ПОСЛЕДОВАТЕЛЬНО:** ``` Socks5|Applying Socks5 Proxy Socks5 to request https://kinozal.me/... FlareSolverr|Cloudflare Detected, Applying FlareSolverr Proxy ... ``` Сначала идёт socks5-прокси, Prowlarr видит CF, **потом** пробует FS. Это НЕ двойной хоп (FS сам ходит через прокси через `PROXY_URL`) — это retry-цепочка. **Что исключено:** - Ресурсы FS в норме: 710 MB / 21 GB, shm 1 GB, 6 chrome-процессов, CPU 0.68%. - Канал прокси нормальный: kinozal через socks5 **0.6 с**, 908 KB/s. - `requestTimeout` поднят 60 → 120 → **180** — эффекта нет (Prowlarr обрывает по своему внутреннему таймауту HTTP-клиента, не настраивается через config.xml). **Вывод:** челлендж CF на kinozal через прокси в другом регионе решается 80-100 с — это свойство CF, не баг. Prowlarr ждёт меньше. **Гипотезы для следующего захода (не проверены):** 1. **Прогрев FS** — CF clearance привязан к IP прокси; после прогрева 20 с (проверено). Прогреть kinozal ×3 → снять карантин → тест. 2. Снизить `BROWSER_TIMEOUT` не поможет; можно поднять **`shm_size` до 2gb** (не проверено). 3. Разобрать внутренний таймаут Prowlarr (в бинарнике; в `config.xml` его нет). 4. Отказаться от FS для Kinozal и оставить `[1]` — но тогда 403 CF (проверено). 5. **Проверить `preferMagnetUrl`** у Kinozal (сейчас `False`) — на CF не влияет, но полезно. **Итог по задаче Alex:** прокси-обход (DNS) + FlareSolverr (CF) **работают**. 4 из 6 индексаров зелёные, включая RuTracker (впервые с 2026-05-20). Kinozal/Kinozal M — упираются в скорость CF-челленджа, не в конфиг. ## История - **2026-09-26** — разведка под Lidarr. Найдено: DNS-блок провайдера (NXDOMAIN на 4 трекера), `vless-proxy` не в `media_net`. Прокси-маршрут для Prowlarr починен в тот же день (3/6 индексеров). Остаток — Cloudflare на RuTracker/Kinozal. [[personal/plans/lidarr-taiga-and-indexer-unblock]] - **2026-09-28** — **FlareSolverr развёрнут** по задаче Alex «ставь как на Кра́кене + прокси-контейнер». Ключевое: FS сам ходит через `vless-proxy` (`PROXY_URL`) — двойной обход DNS+CF. RuTracker впервые стал `valid` за всё время существования стека (с 2026-05-20). Питфоллы: `requestTimeout` 60→120, `?forceSave=true`, гонка параллельного `testall`. ## Открытые пункты - Прогнать финальный **sequential** тест всех 6 → зафиксировать результат. - Kinozal (5): подтвердить `valid` вне гонки (вручную челлендж решается). - Проверить, что RuTracker реально **логинится** (не только челлендж на login.php) — тестовый поиск с авторизацией. - Lidarr: метаданные `api.lidarr.audio` → 403 CF прямым, 200 через `vless-proxy`. Ранее заготовлен `/tmp/add_proxy_env.py` (HTTP_PROXY/HTTPS_PROXY) — **не применён**; теперь у FlareSolverr есть `PROXY_URL`, но Lidarr ходит в SkyHook сам, не через FS. Разбирать отдельно — [[family/plans/lidarr-taiga-deploy]].