11 KiB
Executable File
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:
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.getkinozal →Challenge solved! 200. Время: 78 с (холодный), 20 с (прогретый). - FS
request.postkinozal/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 ждёт меньше.
Гипотезы для следующего захода (не проверены):
- Прогрев FS — CF clearance привязан к IP прокси; после прогрева 20 с (проверено). Прогреть kinozal ×3 → снять карантин → тест.
- Снизить
BROWSER_TIMEOUTне поможет; можно поднятьshm_sizeдо 2gb (не проверено). - Разобрать внутренний таймаут Prowlarr (в бинарнике; в
config.xmlего нет). - Отказаться от FS для Kinozal и оставить
[1]— но тогда 403 CF (проверено). - Проверить
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). Питфоллы:requestTimeout60→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.