Русский - little-brother/ds-search-plugin GitHub Wiki

Суть проблемы

При поисковом запросе в Download Station плагин поиска обращается на сервер трекера как браузер. В ответ плагин получает html-страницу, которую парсит и выводит результаты в Download Station, где каждая строка содержит ссылку на скачивание torrent-файла. Некоторые трекер-серверы требуют авторизацию не только для поиска, но и для скачивания, как напр. rutracker. Однако, при клике по строке в результатах поиска, Download Station пытается скачать данные по указанной ссылке, не передавая при этом данных авторизации. Плагин не может изменить данное поведение, т.к. его функционал ограничивается только предоставлением списка результатов, поэтому предлагается следующее решение: плагин вместо прямой ссылки на сервер-трекера отдает специально подготовленную ссылку на прокси lbgetproxy на порт 54321, который в свою очередь уже может отправлять запросы любого типа и при необходимости прикладывать к ним куки на основании GET-параметра q ссылки, который содержит закодированные в base64 параметры реального запроса на сервер трекера, включая данные форм, куки и прочее.

Если трекер-сервер не доступен напрямую с устройства, то у контейнера lbgetproxy есть возможность использовать tor-proxy-контейнер, выполняющий проксирование запросов через сеть Tor.

Установка

Помимо установки самого плагина rutracker.dlm в Download Station требуется запуск двух контейнеров Docker - lbgetproxy для обработки данных от Download Station и при необходимости lbtorproxy для проксирования запросов через сеть Tor.

Шаги по установке на DSM 6.x

  1. В Центре пакетов установить Docker.
  2. Скачать файлы из Releases.
  3. Установить GET-прокси lbgetproxy: в Docker на вкладке Образ > Добавить > Добавить из файла выбрать lbgetproxyи запустить контейнер с Расширенными настройками: на вкладке Настройки портов указать порт 54321 для 80, а на вкладке Защита окружающей среды задать переменные PROXY_IP равный ip-адресу вашего устройства и PROXY_PORT = 9050. Если параметры не заданы, то контейнер не будет использовать прокси.
  4. Установить Tor-прокси lbtorproxy (опционально): в Docker на вкладке Образ > Добавить > Добавить из файла выбрать lbtorproxy. Далее надо расположить файл torrc в одной из папок NAS и отредактировать его, пропиписав мосты Tor, которые можно получить запросом у бота https://t.me/GetBridgesBot. Далее запустить контейнер с Расширенными настройками: на вкладке Настройки портов указать порт 9050 для 9050, а на вкладке Том добавить файл torrc с путем подключения /etc/tor/torrc. Когда мосты потеряют актуальность, надо получить новые у бота, отредактировать torrc и перезапустить контейнер. Проверить работоспособность контейнера можно командой curl -L --socks5-hostname ip-NAS:9050 https://rutracker.org.
  5. В Download Station в настройках на вкладке Поиск BT > Добавить > rutracker.dlm. После чего нажать Редактировать и задать логин и пароль (их проверка не работает).

Если все сделано правильно, но поиск не возвращает результаты, то еще раз проверьте, что Tor удалось установить соединение.

Перезапуск Tor-контейнера

При простое более часа Tor сбрасывает соединение. Самое простое - опрашивать curl какой-либо заблокированный ресурс раз в час и при его недоступности перезапустить контейнер. Скрипт надо добавить в планировщик DSM.

#!/bin/bash

status_code=$(curl --write-out %{http_code} --silent --connect-timeout 5 --output /dev/null --fail --socks5-hostname 127.0.0.1:9050 -I -L 'https://rutacker.org/')

if [ "$status_code" -ne 200 ](/little-brother/ds-search-plugin/wiki/-"$status_code"--ne-200-) ; then
  synowebapi --exec api=SYNO.Docker.Container version=1 method=restart name="lbtorproxy1"
  exit 0
fi 

:warning: Если располагать скрипт в файле, а в планировщике запускать этот файл, то переносы в скрипте должны быть Unix, т.е. \n.

Сборка

rutracker.dlm

rutracker.dlm - это .tar.gz архив двух файлов из папки bt-rutracker. Для получения архива требуется наличие соответствующего упаковщика, напр. 7z.

echo off
del /Q rutracker
del /Q rutracker.dlm

7z a -ttar -r -sae rutracker ./bt-rutracker/*
7z a -tgzip -r -sae rutracker.dlm rutracker

lbgetproxy и lbtorproxy

lbgetproxy и lbtorproxy - это Docker образы. Для их сборок из dockerfile-ов требуется наличие установленного Docker в системе.

su root
cd get-proxy
docker build -t lb/get-proxy:v1 .
docker save --output lbgetproxy lb/get-proxy:v1
chmod 777 lbgetproxy

При сборке контейнера для ARM возможна проблема с его некорректной работой. Требуется добавить curl в пакеты dockerfile. lbtorproxy собирается аналогично.