# FlareSolverr на Тайге + обход блокировок индексеров
> 🔴🔴 **ОБНОВЛЕНИЕ 2026-09-29 (поздняя сессия): ДЕФЕКТ ЛОКАЛИЗОВАН — Chrome FS стартует БЕЗ `--proxy-server=`.**
> Прокси-контейнер `vless-proxy` **жив и работает** (логи: `tunneling request ... via vpn.mallexxx.duckdns.org:443`).
> `PROXY_URL=socks5://vless-proxy:1080` в env FS есть, но **к Chrome не применяется** — в командной строке
> Chrome флага `--proxy-server` нет вообще, и контрольный Chrome-запрос **не оставил следа в логе `vless-proxy`**.
> ⇒ Chrome ходит напрямую, выходит с домашнего `90.189.160.148`. Следствие: RuTracker `ERR_TIMED_OUT` → карантин.
> Диагностику начинать НЕ с карантина и НЕ с сессий, а с: `docker exec flaresolverr ps aux | grep chromium`.
> Подробности — раздел «КОРЕНЬ НАЙДЕН» в конце. VPS **нет**, версия про DuckDNS **отвергнута Alex**.
>
> 🟡 **СОСТОЯНИЕ 2026-09-29 (ранее, до находки): FS настроен верно, НО RuTracker снова упал в 0.**
> Поиск: `search?query=radiohead` → RuTracker **0** ❌, NoNaMe **47** ✅, RuTor **33** ✅.
> Причина падения найдена — **сломанная сессия `prowlarr`** (см. раздел «ДВЕ ЛОВУШКИ ДИАГНОСТИКИ»).
> `IndexerStatus` содержит RuTracker (`disabledTill 2026-09-28T15:47`).
> Health: Prowlarr 1 warning (RuTor), Radarr 1, Sonarr 2, Lidarr 2 — все про RuTracker/Kinozal/RuTor.
> Контейнер `flaresolverr` — штатный образ, `PROXY_URL=socks5://vless-proxy:1080`, порт `8191`, сеть `media_net`,
> `shm_size: 1gb`, `LOG_LEVEL=warning`. Compose: `/mnt/RED_2TB/docker/arr/docker-compose.yml`.
> Тайга: `192.168.2.197`, внешний IP дома `90.189.160.148`, DNS роутера `192.168.2.2`.
> Связка: [[family/projects/media-toolbox-taiga]], [[family/plans/lidarr-taiga-deploy]],
> [[personal/tech/prowlarr-flaresolverr-cloudflare]], [[family/how-to/arr-stack-kraken]].
## 🔴🔴 ДВЕ ЛОВУШКИ ДИАГНОСТИКИ (главное этой сессии)
Обе стоили часов и обе — про то, что **артефакт врёт**, если смотреть не то поле.
### Ловушка 1: `len≈250 KB` ≠ «залогинен». Это может быть Chrome-страница ОШИБКИ
Прошлый вывод «~250 KB = залогиненный форум» **опровергнут**. В сломанной сессии 251 792 байта —
это **встроенная страница ошибки Chromium**, а не форум:
```html
[^<]*" /mnt/RED_2TB/docker/arr/prowlarr/config.xml | cut -d">" -f2)
for I in 1 2 4 5 6; do
echo "idx$I=$(curl -s --max-time 200 "http://localhost:9696/api/v1/search?query=radiohead&type=search&indexerIds=$I" \
-H "X-Api-Key: $PK" | python3 -c 'import json,sys
try:
d=json.load(sys.stdin); print(len(d) if isinstance(d,list) else "ERR")
except: print("EMPTY")')"
done
```
## Прокси-элементы и теги (в Prowlarr)
| Прокси | id | Тег | Закрывает |
|---|---|---|---|
| `vless-socks5` | 1 | `proxy` (1) | DNS-блок провайдера |
| `flaresolverr` | 2 | `flaresolverr` (2) | Cloudflare |
CF-индексеры получают **оба** тега: `tags=[1,2]`. RuTor/Byrutor живут на одном (`[1]`).
`requestTimeout` прокси-элемента flareSolverr = **180** (дефолт 60 мало: челлендж занимает 80–100 с).
## ⚠️ ПИТФОЛЛЫ API
- **`PUT /api/v1/indexer/N` → 400**, нужен `?forceSave=true` → **202**. Без него теги откатываются:
Prowlarr при PUT сразу тестирует индексер, и при падении FS откатывает сохранение.
- **`POST /indexer/test` требует ПОЛНЫЙ объект**, не `{"id":N}` (иначе 400). `{}` + **200** = успех.
- **`testall` вреден:** один Chrome у FS → гонка за него, челленджи сыпятся таймаутами. Тестировать по одному.
- **`GET /indexerstatus` есть только в Prowlarr** — в Radarr/Sonarr → 404.
- **`429` на `/N/api?t=caps`** = карантин Prowlarr → каскад `429:TooManyRequests` во все arr.
Лечить снизу вверх: SQL-очистка в Prowlarr → `PUT ?forceSave=true` в arr → `docker restart` arr.
- **Ключ API в `-H` ломается экранированием** (ssh → docker → sh): `printf "X-Api-Key: KEY" > /tmp/h.txt`,
затем `curl -H @/tmp/h.txt`.
- **`python3` в контейнере prowlarr НЕТ** (на хосте Тайги есть; `curl` и `sqlite3` на хосте — нет).
## ⚠️ ПИТФОЛЛЫ FlareSolverr
- `sessions.create` → `{"status":"ok","version":"3.5.2"}` — быстрый smoke-тест живости.
- **`LOG_LEVEL=warning` (не info!)** — `info` пишет `login_password` трекеров в **plaintext** в лог.
- `sleep ~30` после старта контейнера: Chrome поднимается, до этого `:8191` может не отвечать.
- `sessions.destroy` несуществующей сессии → **HTTP 500**, не «ok/not found» (оборачивать в try).
- `shm_size`/`sysctls` — в блок сервиса compose, не в `environment`.
- Порт `8191` с Mac наружу **не проброшен** — скрипты запускать на хосте Тайги (`scp` + `ssh python3`).
## ⚠️ ПИТФОЛЛ: `Auth Failed` — порядок диагностики (обновлён 2026-09-29)
`RuTracker Auth Failed` / `Invalid Credentials` в Prowlarr имеет **три разные причины**, и
симптом у них одинаковый. Проверять **строго в этом порядке**:
| # | Проверка | Признак причины |
|---|---|---|
| 1 | `sessions.list` → есть ли сессия `prowlarr`, и что она отдаёт | сессия «отравлена» → **убить её** |
| 2 | `solution.cookies` после логина | нет **`bb_session`** → логин не прошёл |
| 3 | `SELECT Settings FROM Indexers WHERE Id=1` в `prowlarr.db` | пара логин/пароль не та, что в тесте |
| 4 | `IndexerStatus` в БД | есть запись → карантин (снимать SQL, не тестом) |
🔴 **НИКОГДА не судить о логине по длине HTML.** Ранее в этом доке было записано
«~250 KB = залогинен, ~13 KB = форма» — **это неверно** (см. «ДВЕ ЛОВУШКИ ДИАГНОСТИКИ»):
250 KB бывает страницей ошибки Chrome, а залогиненная свежая сессия даёт ~105 KB.
```bash
# Правильная проверка логина — по cookies
curl -s --max-time 220 -X POST http://localhost:8191/v1 -H "Content-Type: application/json" \
-d '{"cmd":"request.post","url":"https://rutracker.org/forum/login.php",
"session":"prowlarr",
"postData":"login_username=&login_password=&login=%D0%92%D1%85%D0%BE%D0%B4",
"maxTimeout":200000}' | jq -r '.solution.cookies[].name'
# видим bb_session → залогинен. Пусто → сессия сломана, убить и повторить.
```
## ⚠️ Кэш health в arr-сервисах
`RemotePathMappingCheck` и подобные **кэшируются**: создание каталогов ошибку не снимает,
`PUT` по API тоже не сбрасывает. Нужен `docker restart radarr sonarr lidarr`.
## Три механизма прокси на одном хосте — не путать
| Кто | Механизм | Ключ |
|---|---|---|
| Prowlarr (индексеры) | SOCKS5-прокси в Prowlarr + FlareSolverr | теги `[1,2]`, `PROXY_URL` у FS |
| FlareSolverr (Chrome) | глобальный прокси образа | env `PROXY_URL` (**НЕ** `HTTP_PROXY`) |
| Lidarr (SkyHook) | встроенный конфиг приложения | `config/host.proxyEnabled` (**env НЕ работает**) |
> ⚠️ **Не переносить рецепт одного сервиса на другой** — проверять фактическим запросом.
## Compose-сервис
```yaml
flaresolverr:
image: ghcr.io/flaresolverr/flaresolverr:latest
container_name: flaresolverr
restart: unless-stopped
environment:
- LOG_LEVEL=warning # НЕ info — пишет пароли в plaintext
- BROWSER_TIMEOUT=60000
- TZ=Asia/Novosibirsk
- PROXY_URL=socks5://vless-proxy:1080
ports:
- "8191:8191"
networks:
- media_net
shm_size: 1gb
sysctls:
- net.ipv6.conf.all.disable_ipv6=1
```
Деплой: правка **локально** (не sed) → `scp` → `cd /mnt/RED_2TB/docker/arr && docker compose up -d flaresolverr`.
⚠️ `docker compose up -d` **только из своего каталога**, иначе name-conflict.
> ⚠️ **Swap на Тайге = 0** — не мешает: RAM 21 GB, FS держит ~710 MB, CPU 0.68%. **Swap не трогать.**
> ⚠️ У FS **нет** persistent-профиля Chrome: он живёт в контейнере и умирает при пересоздании.
> Это **не проблема** — FS логинится в RuTracker при каждом старте без капчи.
## Состояние индексеров (2026-09-29, конец сессии)
| id | Индексер | Теги | Поиск |
|---|---|---|---|
| 1 | RuTracker | `[1,2]` | ❌ **0** — сессия `prowlarr` сломана, в карантине |
| 2 | RuTor | `[1]` | ✅ 33 |
| 3 | Byrutor | `[1]` | — |
| 4 | NoNaMe Club | `[1,2]` | ✅ 47 |
| 5 | Kinozal | `[1,2]` | ⚠️ CF, периодически в карантине |
| 6 | Kinozal (M) | `[1,2]` | ⚠️ зеркало Kinozal (5) |
**Health по сервисам (2026-09-29):**
```
Prowlarr 1 warning RuTor (no results in categories — дефект трекера)
Radarr 1 warning RuTracker unavailable > 6 hours
Sonarr 2 warning RuTracker + RuTor
Lidarr 2 warning RuTracker + Kinozal (M)
```
## 🔴 ЧЕКЛИСТ «не всё зелёное» (восстановление RuTracker)
Когда RuTracker даёт 0, а FS жив — выполнить **в этом порядке**:
```bash
# 1. Убить сессии FS (главный шаг — сессия переживает рестарт FS!)
for S in prowlarr cmp-fresh; do
curl -s --max-time 60 -X POST http://localhost:8191/v1 \
-H "Content-Type: application/json" \
-d "{\"cmd\":\"sessions.destroy\",\"session\":\"$S\"}" -o /dev/null
done
curl -s -X POST http://localhost:8191/v1 -H "Content-Type: application/json" \
-d '{"cmd":"sessions.list"}' # → sessions: [] (ждём пусто)
# 2. Снять карантин SQL (тест его ПРОДЛЕВАЕТ, не снимает)
DB=/mnt/RED_2TB/docker/arr/prowlarr/prowlarr.db
docker stop prowlarr
sqlite3 "$DB" "DELETE FROM IndexerStatus;"
docker start prowlarr && sleep 20
# 3. ПРИЁМКА — реальный поиск (НЕ caps, НЕ health)
PK=$(grep -o "[^<]*" /mnt/RED_2TB/docker/arr/prowlarr/config.xml | cut -d">" -f2)
curl -s --max-time 150 "http://localhost:9696/api/v1/search?query=radiohead&type=search&indexerIds=1" \
-H "X-Api-Key: $PK" | python3 -c "import json,sys; print(len(json.load(sys.stdin)))"
# ждём > 0
```
> ⚠️ **Переживёт ли reboot:** `IndexerStatus` и сломанная сессия **переживают** — без шагов 1–2
> после перезагрузки RuTracker останется в 0. Сессия живёт в памяти FS и **выдерживает
> `docker restart flaresolverr`**.
## 🔴 Чего НЕ делать (проверено, не работает)
| Идея | Почему нет |
|---|---|
| Капча-солвер (`CAPTCHA_SOLVER`) | **Официально non-functional** (DeepWiki FS, issue #1452 закрыт). Адаптеры удалены из образа. И по факту капча не нужна — см. главный раздел |
| Вписать cookies в Prowlarr вручную | Индексер принимает только `username`/`password`, поля для cookie нет |
| noVNC/свой образ FS для ручного входа | Строилось под ложную гипотезу «капча». **Снесено 2026-09-29.** Не воссоздавать |
| Браузер Alex через 3x-ui | `vless-proxy` — **клиент**, не сервер; `cf_clearance` привязан к IP+UA+fingerprint |
| Persistent-профиль Chrome у FS | Не решает ничего: FS логинится сам |
> 🔴 **Не строить план на посылке «на Кра́кене работает».** На 2026-09-29 у Кра́кена в БД
> тот же карантин `EscalationLevel=9` (RuTracker/Kinozal/Kinozal M, с 27 сен) и **нет** капча-солвера.
> «Как на Кра́кене» ≠ «починить».
## 📋 ЖУРНАЛ ОТКАТА (2026-09-29) — что снесено и как вернуть
Эксперимент «ручная капча через VNC» построен под ложную гипотезу и полностью откачен.
Записано, чтобы не воссоздавать и чтобы понимать, что удалено.
| Артефакт | Было | Стало |
|---|---|---|
| Compose `image:` | `flaresolverr-vnc:latest` (свой образ) | `ghcr.io/flaresolverr/flaresolverr:latest` |
| Compose порт | `8191:8191` + `6080:6080` | только `8191:8191` |
| Compose volume | `/mnt/RED_2TB/docker/arr/flaresolverr-config:/config` | убран |
| Каталог сборки | `/mnt/RED_2TB/docker/arr/fs-vnc/{Dockerfile,supervisord.conf,entrypoint-vnc.sh}` | удалён |
| Образ | `flaresolverr-vnc:latest` | удалён (`docker rmi`) |
| Отладочный контейнер | `fs-debug` | удалён (`docker rm -f`) |
| Caddyfile | блок `vnc.mallexxx.duckdns.org` (basic_auth + reverse_proxy) | блок убран, config валиден |
| Сеть Caddy | подключён к `media_net` | `docker network disconnect media_net caddy` |
| Каталог профиля | `/mnt/RED_2TB/docker/arr/flaresolverr-config/` | удалён |
### ⚠️ ПИТФОЛЛЫ отката (стоили времени)
1. **`docker compose up -d --force-recreate` падает**, если bind-source уже удалён:
`invalid mount config for type "bind": bind source path does not exist`.
Контейнер держит старый маунт в памяти → нужно **`docker rm -f flaresolverr`**, потом up.
2. **Каталог профиля от root не удаляется по ssh-пользователем** — `Operation not permitted`
(внутренний `chromium/` создан root'ом внутри контейнера). Обход:
```bash
docker run --rm -v /mnt/RED_2TB/docker/arr:/work alpine sh -c "rm -rf /work/flaresolverr-config"
```
3. **`docker rmi` конфликтует**, пока образ держит любой контейнер (`fs-debug` из отладки):
`conflict: unable to remove repository reference (must force) - container ... is using`.
Сначала `docker rm -f fs-debug`, потом `rmi`.
4. **Имя каталога бэкапа рядом с оригиналом** → `Permission denied` (каталог root) — бэкап класть в `~`.
(Здесь не применялось: Alex запретил лишние бэкапы.)
### Порядок отката, который сработал
```bash
# 1. Caddyfile — убрать блок vnc, залить, проверить, перезагрузить
scp Caddyfile.clean truenas_admin@...:/mnt/RED_2TB/docker/caddy/Caddyfile
docker exec caddy caddy validate --config /etc/caddy/Caddyfile # → Valid configuration
docker exec caddy caddy reload --config /etc/caddy/Caddyfile
docker network disconnect media_net caddy
# 2. compose — вернуть штатный образ, убрать порт 6080 и volume
# править ЛОКАЛЬНО → scp → docker compose config -q → up -d
# 3. снести образ/каталог/контейнеры (см. питфоллы выше)
# 4. ПРИЁМКА: логин + поиск (не caps!)
```
### ✅ Приёмка после отката (факты)
```
API FS: {"status":"ok","version":"3.5.2"}
indexerstatus: [] ← сразу после снятия карантина
search: idx1=50 idx2=33 idx4=47 idx5=EMPTY idx6=0 ← НА МОМЕНТ ОТКАТА
```
⚠️ Через ~2 часа `idx1` упал в **0** — сессия `prowlarr` сломалась. `len=251792` тогда был принят
за «залогиненный форум», но это **Chrome-страница ошибки**. См. «ДВЕ ЛОВУШКИ ДИАГНОСТИКИ».
**Вывод сессии:** откат выполнен верно (FS на штатном образе, `PROXY_URL`, noVNC/капча-солвер
снесены как ненужные). Но **логин RuTracker нестабилен**: сессия FS `prowlarr` периодически
«отравляется» и переживает рестарт FS — лечится `sessions.destroy` + снятие карантина SQL.
**Причина отравления не установлена** — открытый вопрос для следующей сессии.
---
# 🔴🔴 КОРЕНЬ НАЙДЕН (2026-09-29, поздняя сессия): DNS-запись `vpn.mallexxx.duckdns.org` указывает НА ДОМ
**Гипотеза «отравленная сессия FS» — СЛЕДСТВИЕ, а не причина.** Настоящая причина в том,
что **VLESS-туннель не работает вообще**, потому что VPN-хост резолвится в домашний IP.
## Доказательства (факты, не догадки)
```
vpn.mallexxx.duckdns.org @8.8.8.8 → 90.189.160.148 ❌ (домашний Ростелеком, Новосибирск)
vpn.mallexxx.duckdns.org @1.1.1.1 → 90.189.160.148 ❌
vpn.mallexxx.duckdns.org @локальный → 192.168.0.10 ❌ (роутер дома, DNS 192.168.2.2)
```
`90.189.160.148` = **внешний IP домашней сети Тайги** (Тайга сама `192.168.2.197`), Rostelecom
AS12389. Проверка: `ip-api.com/line/90.189.160.148` → Russia / Novosibirsk / Rostelecom.
**Куда уходит трафик при «рабочем» прокси:**
```
Chrome FS (PROXY_URL) → vless-proxy → dial vpn.mallexxx.duckdns.org:443 → 90.189.160.148 (ДОМ!)
→ выход через тот же Ростелеком → api.ipify.org отдаёт 90.189.160.148
```
То есть прокси-цепочка формально проходит, но **выходной узел = домашний IP** ⇒ обхода
блокировки НЕТ. Прокси не падает с ошибкой — он **молча не проксирует**.
```
docker logs vless-proxy:
accepted tcp:rutracker.org:443
tunneling request to tcp:rutracker.org:443 via vpn.mallexxx.duckdns.org:443
... failed to transfer response payload > websocket: close 1000 (normal) ← рвётся
```
## Как это выглядело в FS (ложный след)
| Тест | Результат | Правда |
|---|---|---|
| `curl --socks5-hostname vless-proxy:1080 rutracker` из FS | `http=200, 1.16s` | шёл **напрямую**, DNS на хосте, не через туннель |
| `curl --socks5-hostname ... api.ipify.org` из FS | **пусто** | VLESS-цепочка умирает на удалённом конце |
| Chrome FS `api.ipify.org` | `90.189.160.148` | **домашний IP** → туннеля нет |
| POST login RuTracker через FS | `len=254410, cookies=[]` | `ERR_TIMED_OUT` (не капча, не CF!) |
🔴 **`ERR_TIMED_OUT` в Chrome-странице ошибки = «сайт не ответил», а НЕ «блок Cloudflare» и НЕ «капча»:**
```bash
curl -s ... -d @/tmp/login.json | jq -r ".solution.response" \
| grep -oE "ERR_[A-Z_]+" | sort -u # → ERR_TIMED_OUT
```
🔴 **Признак «прокси реально работает» = внешний IP ОТЛИЧАЕТСЯ от домашнего.** Проверять
`api.ipify.org` через Chrome FS и сравнивать с `curl api.ipify.org` напрямую с хоста.
Домашний IP, вернувшийся через «прокси», ДОКАЗЫВАЕТ, что прокси не проксирует.
## ✅ Что сделано в этой сессии (факты)
1. `sessions.list` → `[]`, лишние сессии убиты (`sessions.destroy`); FS чист.
2. Бэкап БД: `/home/truenas_admin/prowlarr.db.bak-preclear-20260929` (618 496 B) — через `.backup`, не `cp`.
3. Снят карантин: `docker stop prowlarr` → `DELETE FROM IndexerStatus;` → **0 записей**, `PRAGMA quick_check` → `ok` → `docker start prowlarr` (ping 200).
4. Таблица `IndexerStatus` — колонка **`ProviderId`**, НЕ `IndexerId`. Записи были: id1 RuTracker Esc=1, id2 RuTor Esc=0, id4 NoNaMe Esc=1, id5/id6.
5. Очистка карантина **не лечит**: без рабочего туннеля RuTracker снова даст 0 и снова уйдёт в карантин.
## 🔴 ЧТО ЧИНИТЬ (уточнено Alex 2026-09-29: VPS НЕТ, есть прокси-КОНТЕЙНЕР)
⚠️ **Ошибочная версия (VPS + DuckDNS) отвергнута Alex.** Никакого VPS нет — есть контейнер
`vless-proxy` на самой Тайге. Логи это подтверждают: контейнер **жив** (`Up 2 days`), туннель
устанавливается (`tunneling request ... via vpn.mallexxx.duckdns.org:443`), SOCKS5-порты принимаются.
🔴 **НАСТОЯЩИЙ ДЕФЕКТ: Chrome FlareSolverr стартует БЕЗ `--proxy-server=` — `PROXY_URL` к Chrome НЕ применяется.**
Доказательство — командная строка живого процесса Chrome в контейнере FS:
```
/usr/lib/chromium/chromium ... --headless=new --window-size=1920,1080 --start-maximized ...
← флага --proxy-server= НЕТ ВООБЩЕ
```
И контрольный опыт: чистый Chrome-запрос через FS (`request.get api.ipify.org`) **не оставил
ни одной записи** в логе `vless-proxy` (лог до теста = лог после теста, оба кончались на `00:10:17`).
⇒ Chrome **не обращался к прокси**, ходил напрямую, вернул домашний `90.189.160.148`.
При этом в коде FS прокси подставляется (проверено грепом `/app/flaresolverr.py`):
```python
16: env_proxy_url = os.environ.get('PROXY_URL', None)
58: if (('proxy' not in data or not data.get('proxy')) and env_proxy_url is not None
and (env_proxy_username is None and env_proxy_password is None)):
59: logging.info('Using proxy URL ENV')
60: data['proxy'] = {"url": env_proxy_url}
```
🔴 **Ключ: env `PROXY_URL` подставляется ТОЛЬКО если в запросе нет своего поля `proxy`.**
Значит либо Prowlarr присылает свой (пустой) `proxy`, либо Chrome при старте получает прокси
не от env, а прокси должен передаваться **явным полем `proxy` в каждом запросе**.
## 🔴 СЛЕДУЮЩИЙ ШАГ (одно действие, не сделано — сессия прервана)
Для полного контейнера `vless-proxy` на Тайге:
```bash
# Тест: Chrome с ЯВНЫМ proxy в payload (обход условия «proxy not in data»)
cat > /tmp/ipt.json <<'EOF'
{"cmd":"request.get","url":"https://api.ipify.org","session":"iptestX",
"proxy":{"url":"socks5://vless-proxy:1080"},"maxTimeout":80000}
EOF
curl -s --max-time 90 -X POST http://localhost:8191/v1 \
-H "Content-Type: application/json" -d @/tmp/ipt.json | jq -r ".solution.response" \
| grep -oE "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+"
# ждём IP ≠ 90.189.160.148. Плюс сверить лог vless-proxy: появилась ли строка accepted tcp:api.ipify.org
```
- IP **отличается** от домашнего → прокси работает, дефект в способе передачи (`proxy` в payload);
фикс — прописать `proxy.url` в прокси-элементе Prowlarr / в запросах.
- IP **тот же** → прокси не проксирует на уровне туннеля, копать `vless-proxy` (куда dial).
⚠️ **Порядок диагностики «RuTracker = 0» ОБНОВЛЁН** (старый порядок — `sessions.list` первый — ведёт по ложному следу):
⚠️ **Порядок диагностики «RuTracker = 0» ОБНОВЛЁН** (старый порядок из раздела выше —
`sessions.list` первый — ведёт по ложному следу):
| # | Проверка | Признак |
|---|---|---|
| **0** | `docker exec flaresolverr ps aux \| grep chromium` → есть ли `--proxy-server=` | **НЕТ флага → Chrome идёт мимо прокси, это и есть причина** |
| 1 | IP через Chrome FS vs IP хоста напрямую | совпадают → прокси не проксирует |
| 2 | след Chrome-запроса в `docker logs vless-proxy` | пусто → Chrome к прокси не обращался |
| 3 | `ERR_[A-Z_]+` в Chrome-странице ошибки | `ERR_TIMED_OUT` ≠ капча ≠ CF |
| 4 | `sessions.list` + `bb_session` в cookies | только после 0–3 |
| 5 | `IndexerStatus` в БД | снимать SQL, тест ПРОДЛЕВАЕТ |
> 🔴 **Урок:** «прокси настроен (`PROXY_URL` в env)» ≠ «прокси работает». Конфиг верный,
> сеть `media_net` верная, FS живой — а трафика через туннель нет. Единственное доказательство
> работы прокси — **внешний IP на выходе**.