Verity-Freedom / Tor-Portable

The portable Tor based on Tor Expert Bundle and Antizapret proxy.
MIT License
81 stars 1 forks source link

Тор как служба #2

Closed KainXVIII closed 1 month ago

KainXVIII commented 1 month ago

Т.е. чтобы "запустил и забыл".

Verity-Freedom commented 1 month ago

Т.е. чтобы "запустил и забыл".

Думаю авторы Тора о подобном не позаботились. Там есть прописывание Тора в службы, но оно менее удобно чем автозапуск в трее, конечно. Да они много о чём не позаботились, иначе мне не пришлось бы создавать этот репозиторий, чтобы всё работало в стиле "запустил и забыл". Мы это всё обсуждали ещё полгода назад, и тогда коллективно пришли именно к такому варианту, что сейчас. Я со своей стороны не знаю, могу ли что сделать.

KainXVIII commented 1 month ago

Т.е. чтобы "запустил и забыл".

Думаю авторы Тора о подобном не позаботились. Там есть прописывание Тора в службы, но оно менее удобно чем автозапуск в трее, конечно. Да они много о чём не позаботились, иначе мне не пришлось бы создавать этот репозиторий, чтобы всё работало в стиле "запустил и забыл". Мы это всё обсуждали ещё полгода назад, и тогда коллективно пришли именно к такому варианту, что сейчас. Я со своей стороны не знаю, могу ли что сделать.

Ну мне и так сойдёт, в принципе, а вот кому-нибудь менее сведущему поставить будет проблематичнее.

Verity-Freedom commented 1 month ago

В интернете есть программы которые позволяют что угодно в трей сворачивать. Если прямо желание есть чтобы оно в трее было. Но это требует наличия такой программы. А вот так чтобы взять Тор, который изначально в трей сворачиваться никак не умел, и заставить его делать это - я не смогу.

Verity-Freedom commented 1 month ago

По своей сути Тор - это стандартная консоль cmd, соответственно, если есть способ свернуть в трей любую консоль cmd, к Тору оно будет применимо, но я не уверен, что такой способ есть.

69gamerxd commented 1 month ago

Можно ли запустить его как сервис?

@ECHO OFF
PUSHD "%~dp0"
set _arch=x86
IF "%PROCESSOR_ARCHITECTURE%"=="AMD64" (set _arch=x86_64)
IF DEFINED PROCESSOR_ARCHITEW6432 (set _arch=x86_64)

echo This script should be run with administrator privileges.
echo Right click - run as administrator.
echo Press any key if you're running it as administrator.
pause
sc stop "GoodbyeDPI"
sc delete "GoodbyeDPI"
sc create "GoodbyeDPI" binPath= "\"%CD%\%_arch%\goodbyedpi.exe\" -1 --blacklist \"%CD%\russia-blacklist.txt\" --blacklist \"%CD%\russia-youtube.txt\"" start= "auto"
sc description "GoodbyeDPI" "Passive Deep Packet Inspection blocker and Active DPI circumvention utility"
sc start "GoodbyeDPI"

POPD

у GoodByeDpi оно сделано так,можно ли сделать также с тором?

Verity-Freedom commented 1 month ago

Можно ли запустить его как сервис?

@ECHO OFF
PUSHD "%~dp0"
set _arch=x86
IF "%PROCESSOR_ARCHITECTURE%"=="AMD64" (set _arch=x86_64)
IF DEFINED PROCESSOR_ARCHITEW6432 (set _arch=x86_64)

echo This script should be run with administrator privileges.
echo Right click - run as administrator.
echo Press any key if you're running it as administrator.
pause
sc stop "GoodbyeDPI"
sc delete "GoodbyeDPI"
sc create "GoodbyeDPI" binPath= "\"%CD%\%_arch%\goodbyedpi.exe\" -1 --blacklist \"%CD%\russia-blacklist.txt\" --blacklist \"%CD%\russia-youtube.txt\"" start= "auto"
sc description "GoodbyeDPI" "Passive Deep Packet Inspection blocker and Active DPI circumvention utility"
sc start "GoodbyeDPI"

POPD

у GoodByeDpi оно сделано так,можно ли сделать также с тором?

Это точно можно, если поколдовать. Есть инструкции.

--service install [--options command-line options] --service remove|start|stop

Вот это из мануала.

C:\AntiTor\tor\tor.exe --service install -options -f "C:\AntiTor\torrc.txt" - вот это примерно как оно будет выглядеть на практике в нашем случае. Это я со своей стороны могу сделать точно.

Verity-Freedom commented 1 month ago

На самом деле не считаю удобными все эти вещи - вот сейчас сам набросал, и у меня ничего не работает. Это точно возможно, но для этого надо спрашивать тех, у кого оно уже было в виде службы. Когда-то гайд располагался по адресу https://www.torproject.org/docs/faq.html.en#NTService, сейчас там ничего нет. Ещё был вот такой хороший гайд, там про службы тоже написано https://github.com/anticensority/runet-censorship-bypass/issues/224#issuecomment-2025676123.

То есть мне самому в этом тоже надо почти с нуля разбираться. У меня никогда Тора не было в виде службы.

Verity-Freedom commented 1 month ago

Например Павершелл ошибками засыпает, адрес файла конфигурации не меняет. image

69gamerxd commented 1 month ago

У меня тоже при попытке запустить через службу открывается окно к сожалению,я пробовал через .cmd потом переписал все и вообще не работает

@ECHO OFF
PUSHD "%~dp0"
set _arch=x86
IF "%PROCESSOR_ARCHITECTURE%"=="AMD64" (set _arch=x86_64)
IF DEFINED PROCESSOR_ARCHITEW6432 (set _arch=x86_64)

echo This script should be run with administrator privileges.
echo Right click - run as administrator.
echo Press any key if you're running it as administrator.
pause
sc stop "Tor"
sc delete "Tor"
sc create "Tor" binPath= "D:\Obxodruneta\antitor\AntiTor.exe" install -options -f "D:\Obxodruneta\antitor\torrc.txt" type=own start=auto
sc description "Tor" "Tor_ebet"
sc start "Tor"
pause
POPD
Verity-Freedom commented 1 month ago

У меня тоже при попытке запустить через службу открывается окно к сожалению,я пробовал через .cmd потом переписал все и вообще не работает

@ECHO OFF
PUSHD "%~dp0"
set _arch=x86
IF "%PROCESSOR_ARCHITECTURE%"=="AMD64" (set _arch=x86_64)
IF DEFINED PROCESSOR_ARCHITEW6432 (set _arch=x86_64)

echo This script should be run with administrator privileges.
echo Right click - run as administrator.
echo Press any key if you're running it as administrator.
pause
sc stop "Tor"
sc delete "Tor"
sc create "Tor" binPath= "D:\Obxodruneta\antitor\AntiTor.exe" install -options -f "D:\Obxodruneta\antitor\torrc.txt" type=own start=auto
sc description "Tor" "Tor_ebet"
sc start "Tor"
pause
POPD

Вот мануальчик к нему. Может сможете разобраться. Если сможете и отпишитесь сюда, возможно появятся батники в архиве, один из которых создаёт и запускает службу, второй - останавливает. Служба должна запускать Тор и подхватывать torrc.txt, собственно то, что делает Антитор.exe. Но единственное для чего это нужно - чтобы у вас в панели задач он не висел, если вам это неудобно. Некоторых сам этот факт раздражает как я вижу, но подавляющему большинству всё равно. Мне так даже удобнее. Вы же не знаете, но раньше там постоянно откисали мосты - можно было посмотреть в окно командной строки и увидеть, всё ли хорошо. Совсем недавно появились эти Вебтуннели - они видимо не откисают, может и будет полезна служба. https://2019.www.torproject.org/docs/tor-manual.html.en

69gamerxd commented 1 month ago

Благодарю,если получится то обязательно скину .bat или .cmd файлик

Verity-Freedom commented 1 month ago

Благодарю,если получится то обязательно скину .bat или .cmd файлик

Как-то так это всё предлагалось сделать при помощи планировщика полгода назад, но я пошёл иным путём, как раз потому что уже тогда мы всё это посчитали неудобным. image

Verity-Freedom commented 1 month ago

Ещё спросил совета на форуме ntc по поводу службы. Может что ответят.

DesuIsALie commented 1 month ago

Сделял тяп-ляп на коленке батник для сервиса:

  1. Т.к. судя по всему tor не имеет входного параметра для working directory, а добавлять переменную в env не хочется, то:

    • Переименовываем torrc.txt в torrc_template.txt
    • Заменяем

      CacheDirectory ..\data
      ClientOnionAuthDir ..\data\onion-auth
      DataDirectory ..\data
      GeoIPFile ..\data\geoip
      GeoIPv6File ..\data\geoip6

      на

      CacheDirectory "TEMPLATE_WD\\data"
      ClientOnionAuthDir "TEMPLATE_WD\\data\\onion-auth"
      DataDirectory "TEMPLATE_WD\\data"
      GeoIPFile "TEMPLATE_WD\\data\\geoip"
      GeoIPv6File "TEMPLATE_WD\\data\\geoip6"
  2. Создаём 'service_install_antitor.cmd', в него пишем:

        @ECHO OFF
        PUSHD "%~dp0"
    
        echo This script should be run with administrator privileges.
        echo Right click - run as administrator.
        echo Press any key if you're running it as administrator.
        pause
        powershell -Command "(gc '%CD%\torrc_template.txt') -replace 'TEMPLATE_WD', ('%CD%' -replace '\\','\\') | Out-File -encoding ASCII '%CD%\torrc.txt'"
        start "" "%CD%\tor\tor.exe" --service stop
        start "" "%CD%\tor\tor.exe" --service remove
        start "" "%CD%\tor\tor.exe" --service install -options -f "%CD%\torrc.txt"
        start "" "%CD%\tor\tor.exe" --service start
    
        POPD
  3. Запускаем от администратора, теперь tor работает как сервис (Tor Win32 Service).
Verity-Freedom commented 1 month ago

3. теперь tor работает как сервис

Но вы учитывайте, что с переименованием torrc экзешник Антитора работать не будет, ибо он уже привязан к названию.

Verity-Freedom commented 1 month ago

Ну да оно работает.

Verity-Freedom commented 1 month ago

@DesuIsALie желательно бы то же самое, но без torrc_template.txt. У него один файл конфигурации должен быть, ибо подразумевается, что каждый может легко отредактировать его под себя. С двумя даже непонятно, что и делать. Сможете?

DesuIsALie commented 1 month ago

@DesuIsALie желательно бы то же самое, но без torrc_template.txt. У него один файл конфигурации должен быть, ибо подразумевается, что каждый может легко отредактировать его под себя. С двумя даже непонятно, что и делать. Сможете?

@ECHO OFF
PUSHD "%~dp0"

echo This script should be run with administrator privileges.
echo Right click - run as administrator.
echo Press any key if you're running it as administrator.
pause
powershell -Command "(gc '%CD%\torrc.txt') "^
  "-replace '^CacheDirectory.*$', ('CacheDirectory \"%CD%\data\"' -replace '\\','\\') "^
  "-replace '^ClientOnionAuthDir.*$', ('ClientOnionAuthDir \"%CD%\data\onion-auth\"' -replace '\\','\\') "^
  "-replace '^DataDirectory.*$', ('DataDirectory \"%CD%\data\"' -replace '\\','\\') "^
  "-replace '^GeoIPFile.*$', ('GeoIPFile \"%CD%\data\geoip\"' -replace '\\','\\') "^
  "-replace '^GeoIPv6File.*$', ('GeoIPv6File \"%CD%\data\geoip6\"' -replace '\\','\\') "^
  "| Out-File -encoding ASCII '%CD%\torrc.txt'"
start /wait "" "%CD%\tor\tor.exe" --service stop
start /wait "" "%CD%\tor\tor.exe" --service remove
start /wait "" "%CD%\tor\tor.exe" --service install -options -f "%CD%\torrc.txt"
start /wait "" "%CD%\tor\tor.exe" --service start

POPD
Verity-Freedom commented 1 month ago

@DesuIsALie работает, но теперь он не удаляет службу при повторном запуске. В прошлой версии он при повторном открытии от администратора сносил службу начисто, что тоже гораздо более предпочтительно.

Verity-Freedom commented 1 month ago

Если справитесь, то как минимум ваше имя можно будет указать в readme (при желании), может какую-нибудь небольшую финансовую благодарочку пришлю. Ну и разумеется файл будет в релизе.

Verity-Freedom commented 1 month ago

Надо ещё смотреть, запустится ли служба автоматически при перезапуске Винды. Если нет, то очередная проблема. Но пока надо исправить то, что вижу.

Оно чуть ли не сложнее чем то, что уже сделано, на самом деле, но для конечного пользователя оно должно быть таким же однокнопочным, как и запустить через экзешник.

DesuIsALie commented 1 month ago

@DesuIsALie работает, но теперь он не удаляет службу при повторном запуске. В прошлой версии он при повторном открытии от администратора сносил службу начисто, что тоже гораздо более предпочтительно.

Это был косяк скрипта, т.к. я забыл /wait - оно не ждало завершения команд, а --remove выполнялся дольше остальных.

В любом случае, можно просто разнести команды по отдельным (улучшенным) скриптам:

Надо ещё смотреть, запустится ли служба автоматически при перезапуске Винды.

tor создаёт службу с авто-запуском, всё работает при перезагрузке

Verity-Freedom commented 1 month ago

Это был косяк скрипта, т.к. я забыл /wait

Выглядело так будто и должно так работать.

Verity-Freedom commented 1 month ago

@DesuIsALie в текущем виде более-менее неплохо, но окно "выполните с правами администратора" больше не появляется. Ещё мне понравилась идея использовать всего один файл и для того чтобы удалить службу, и для того чтобы поставить её - работало хорошо. Явно не 4 файла там будет на всё это дело - никак нет.

DesuIsALie commented 1 month ago

Скрипт проверяет наличие прав администратора, если они есть - выполняется, если нет - выводит сообщение и завершается.

service_reinstall_antitor.cmd можно удалить, он тут для 'однокнопочности'. Остальные 3 скрипта - полная аналогия запуска goodbyedpi (не сервис, установка сервиса, удаление сервиса).

Verity-Freedom commented 1 month ago

если нет - выводит сообщение и завершается.

У меня не выводит.

Verity-Freedom commented 1 month ago

Просто файл не запустился.

Verity-Freedom commented 1 month ago

Остальные 3 скрипта - полная аналогия запуска goodbyedpi

Мне не очень нравится как обычный Гудбай сделан в плане юзабилити - всем всегда говорю, у него очень хорошее ГУИ, пользуйтесь ГУИ. А ГУИ это совсем иной уровень. То что он одним файлом делает и то и другое - мне это прям нравится, хоть и случайно вышло, но стабильность есть в этом плане. Дальше действительно можно поработать над чеком админ-прав в консоли. У меня вторая версия консоли не даёт, а первая даёт в обеих случаях (спрашивает про админ-права даже когда они есть).

@ECHO OFF
PUSHD "%~dp0"

echo This script should be run with administrator privileges.
echo Right click - run as administrator.
echo Press any key if you're running it as administrator.
pause
powershell -Command "(gc '%CD%\torrc.txt') "^
  "-replace '^CacheDirectory.*$', ('CacheDirectory \"%CD%\data\"' -replace '\\','\\') "^
  "-replace '^ClientOnionAuthDir.*$', ('ClientOnionAuthDir \"%CD%\data\onion-auth\"' -replace '\\','\\') "^
  "-replace '^DataDirectory.*$', ('DataDirectory \"%CD%\data\"' -replace '\\','\\') "^
  "-replace '^GeoIPFile.*$', ('GeoIPFile \"%CD%\data\geoip\"' -replace '\\','\\') "^
  "-replace '^GeoIPv6File.*$', ('GeoIPv6File \"%CD%\data\geoip6\"' -replace '\\','\\') "^
  "| Out-File -encoding ASCII '%CD%\torrc.txt'"
start "" "%CD%\tor\tor.exe" --service stop
start "" "%CD%\tor\tor.exe" --service remove
start "" "%CD%\tor\tor.exe" --service install -options -f "%CD%\torrc.txt"
start "" "%CD%\tor\tor.exe" --service start

POPD

Будет хорошо сделать нормальный чек на админ-права. А итоговый файл назвать install-and-delete или что-то вроде того - по сути обычная логика любого инсталлятора, который умеет и удалить, и установить в равной степени. Это у Гудбая в этом плане не совсем по-человечески сделано.

DesuIsALie commented 1 month ago

Просто файл не запустился.

Файл запустился, просто без терминала он сразу закрылся (мой недочёт). Добавьте pause в двух скриптах:

if %errorLevel% NEQ 0 (
    echo This script should be run with administrator privileges.
    echo Right click - run as administrator.
    pause
    exit /b -1
)

у него очень хорошее ГУИ, пользуйтесь ГУИ Это у Гудбая в этом плане не совсем по-человечески сделано.

У нас разные понятия о юзабилити :)

и удалить, и установить

AIO скрипт:

@ECHO OFF
PUSHD "%~dp0"

net session >nul 2>&1
if %errorLevel% NEQ 0 (
    echo This script should be run with administrator privileges.
    echo Right click - run as administrator.
    pause
    exit /b -1
)

call "%CD%\tor\tor.exe" --service remove
if %errorLevel% NEQ 0 (
    powershell -Command "(gc '%CD%\torrc.txt') "^
      "-replace '^CacheDirectory.*$', ('CacheDirectory \"%CD%\data\"' -replace '\\','\\') "^
      "-replace '^ClientOnionAuthDir.*$', ('ClientOnionAuthDir \"%CD%\data\onion-auth\"' -replace '\\','\\') "^
      "-replace '^DataDirectory.*$', ('DataDirectory \"%CD%\data\"' -replace '\\','\\') "^
      "-replace '^GeoIPFile.*$', ('GeoIPFile \"%CD%\data\geoip\"' -replace '\\','\\') "^
      "-replace '^GeoIPv6File.*$', ('GeoIPv6File \"%CD%\data\geoip6\"' -replace '\\','\\') "^
      "| Out-File -encoding ASCII '%CD%\torrc.txt'"
    call "%CD%\tor\tor.exe" --service install -options -f "%CD%\torrc.txt"
)

pause

POPD
Verity-Freedom commented 1 month ago

@DesuIsALie то что нужно, огромное спасибо за помощь. Файл появится в релизе. Стоит ли как-то отблагодарить?

69gamerxd commented 1 month ago

@DesuIsALie Спасибо

DesuIsALie commented 1 month ago

@DesuIsALie то что нужно, огромное спасибо за помощь. Файл появится в релизе. Стоит ли как-то отблагодарить?

Не надо, спасибо Вам за сборку самого tor для ленивых, вроде меня :)

Verity-Freedom commented 1 month ago

Добавлена новая версия 1.3, в которой появился файл службы и обновлены мосты.

Verity-Freedom commented 1 month ago

@DesuIsALie выявлен баг: файл службы редактирует файл Torrc, заменяя относительные пути на абсолютные. Это делает программу эффективно нерабочей. Требуется срочный фикс, а пока удаляю файл службы отсюда.

Verity-Freedom commented 1 month ago

@DesuIsALie пути должны сохранить вид:

CacheDirectory ..\data ClientOnionAuthDir ..\data\onion-auth DataDirectory ..\data GeoIPFile ..\data\geoip GeoIPv6File ..\data\geoip6

DesuIsALie commented 1 month ago

А в чём баг?

tor как сервис не может работать с относительными путями (и впринципе он ругается на них), т.к. working directory любого сервиса - system32. env vars он тоже не поддерживает.

При каждой установке сервиса скрипт заменяет пути на абсолютные. Т.е. можно спокойно перемещать папку и запускать скрипт, чтобы удалить и установить сервис заново.

Verity-Freedom commented 1 month ago

А в чём баг?

В том, что абсолютные пути попали в релиз. А так ни в чём.

DesuIsALie commented 1 month ago

Скрипт заменяет строки целиком, в релизе там хоть кракозябры вместо пути могут быть (главное, что названия параметров правильные).

Verity-Freedom commented 1 month ago

Скрипт заменяет строки целиком, в релизе там хоть кракозябры вместо пути могут быть (главное, что названия параметров правильные).

1) Потом нельзя переместить папку в другое место - Антитор.exe не будет запускаться. 2) Из рабочего стола служба не запускается - пишет отказано в доступе. Запускается когда находится в корне диска C, например.

Это всё очень неудобно. Что-то можно сделать с этим? Иначе похоже придётся убирать службу.

Verity-Freedom commented 1 month ago

@DesuIsALie предлагаю всё же делать два torrc, один torrc-service.txt (чтобы понятно было для чего он) с абсолютными путями, второй - torrc.txt с относительными путями для стабильной работы Антитора, если более элегантного решения вы не придумали. Ну и да, если оно всё находится на рабочем столе, то служба в принципе не запускается (access denied).

DesuIsALie commented 1 month ago

exe можно заменить скриптом из прошлых ответов:

@ECHO OFF
PUSHD "%~dp0"

powershell -Command "(gc '%CD%\torrc.txt') "^
  "-replace '^CacheDirectory.*$', ('CacheDirectory \"%CD%\data\"' -replace '\\','\\') "^
  "-replace '^ClientOnionAuthDir.*$', ('ClientOnionAuthDir \"%CD%\data\onion-auth\"' -replace '\\','\\') "^
  "-replace '^DataDirectory.*$', ('DataDirectory \"%CD%\data\"' -replace '\\','\\') "^
  "-replace '^GeoIPFile.*$', ('GeoIPFile \"%CD%\data\geoip\"' -replace '\\','\\') "^
  "-replace '^GeoIPv6File.*$', ('GeoIPv6File \"%CD%\data\geoip6\"' -replace '\\','\\') "^
  "| Out-File -encoding ASCII '%CD%\torrc.txt'"
call "%CD%\tor\tor.exe" -f "%CD%\torrc.txt"

POPD

tor через параметр создавал службу на аккаунте Local Service (мало привилегий). Поменял на sc, который создаёт на Local System (как goodbyedpi):

@ECHO OFF
PUSHD "%~dp0"

net session >nul 2>&1
if %errorLevel% NEQ 0 (
    echo This script should be run with administrator privileges.
    echo Right click - run as administrator.
    pause
    exit /b -1
)

sc stop "Tor Win32 Service"
sc delete "Tor Win32 Service"
if %errorLevel% NEQ 0 (
    powershell -Command "(gc '%CD%\torrc.txt') "^
      "-replace '^CacheDirectory.*$', ('CacheDirectory \"%CD%\data\"' -replace '\\','\\') "^
      "-replace '^ClientOnionAuthDir.*$', ('ClientOnionAuthDir \"%CD%\data\onion-auth\"' -replace '\\','\\') "^
      "-replace '^DataDirectory.*$', ('DataDirectory \"%CD%\data\"' -replace '\\','\\') "^
      "-replace '^GeoIPFile.*$', ('GeoIPFile \"%CD%\data\geoip\"' -replace '\\','\\') "^
      "-replace '^GeoIPv6File.*$', ('GeoIPv6File \"%CD%\data\geoip6\"' -replace '\\','\\') "^
      "| Out-File -encoding ASCII '%CD%\torrc.txt'"
    sc create "Tor Win32 Service" binPath= "\"%CD%\tor\tor.exe\" --nt-service -f \"%CD%\torrc.txt\"" start= "auto"
    sc description "Tor Win32 Service" "Provides an anonymous Internet communication system"
    sc start "Tor Win32 Service"
)

pause

POPD
Verity-Freedom commented 1 month ago

как сервис

Как сервис не знаю, но как приложение он вполне распознаёт их...

DesuIsALie commented 1 month ago

Как сервис не знаю, но как приложение он вполне распознаёт их...

working directory любого сервиса - system32

Пути будут относительно system32

Verity-Freedom commented 1 month ago

Да, я проверил, всё так.

Ну я это учту.

Verity-Freedom commented 1 month ago

@DesuIsALie всё сделано.

cornkid commented 1 month ago

Здравстрвуйте, не работает портабл :(

cornkid commented 1 month ago

запускается и сразу выключается

Verity-Freedom commented 1 month ago

Здравстрвуйте, не работает портабл :(

Перекачайте.

Verity-Freedom commented 1 month ago

@cornkid сегодня патчи большие вносились, последний - минут 10 назад. Нужно было переписать логику программы, чтобы сделать возможным создание системной службы. Мы это сделали. Перекачайте релиз. У меня работает всё.

cornkid commented 1 month ago

я скачала минут 5 назад, но скачаю ещё раз