diff --git a/docs/windows.txt b/docs/windows.txt index c35755d..2094aa2 100644 --- a/docs/windows.txt +++ b/docs/windows.txt @@ -1,117 +1,117 @@ -tpws +tpws ---- - tpws Linux WSL. - Windows , epoll, windows . +Запуск tpws возможен только в Linux варианте под WSL. +Нативного варианта под Windows нет, поскольку он использует epoll, которого под windows не существует. -tpws socks - windows 10 windows server - WSL. , - WSL, . tpws - , . +tpws в режиме socks можно запускать под более-менее современными билдами windows 10 и windows server +с установленным WSL. Совсем не обязательно устанавливать дистрибутив убунту, как вам напишут почти в каждой +статье про WSL, которую вы найдете в сети. tpws - статический бинарик, ему дистрибутив не нужен. - WSL : dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all - binaries/x86_64/tpws_wsl.tgz. - : wsl --import tpws "%USERPROFILE%\tpws" tpws_wsl.tgz - : wsl -d tpws --exec /tpws --uid=1 --no-resolve --socks --bind-addr=127.0.0.1 --port=1080 <_> - socks 127.0.0.1:1080 . +Установить WSL : dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all +Скопировать на целевую систему binaries/x86_64/tpws_wsl.tgz. +Выполнить : wsl --import tpws "%USERPROFILE%\tpws" tpws_wsl.tgz +Запустить : wsl -d tpws --exec /tpws --uid=1 --no-resolve --socks --bind-addr=127.0.0.1 --port=1080 <параметры_дурения> +Прописать socks 127.0.0.1:1080 в броузер или другую программу. - : wsl --unregister tpws +Удаление : wsl --unregister tpws - windows 10 build 19041 (20.04). +Проверено на windows 10 build 19041 (20.04). - --oob --mss - WSL. ---disorder - tcp/ip windows. - RST autohostlist. -WSL splice, . --nosplice. +Не работают функции --oob и --mss из-за ограничений реализации WSL. +--disorder не работает из-за особенностей tcp/ip стека windows. +Может не срабатывать детект RST в autohostlist. +WSL может глючить со splice, приводя к зацикливанию процесса. Может потребоваться --nosplice. winws ----- - nfqws Windows, windivert. - , ipset . IP . - , "" , . - windivert . - unix , --uid, --user , . nfqws dvtws. +Это вариант пакетного фильтра nfqws для Windows, построенный на базе windivert. +Все функции работоспособны, однако функционал ipset отсутствует. Фильтры по большому количеству IP адресов невозможны. +Работа с проходящим трафиком, например в случае "расшаривания" соединения, не проверялась и не гарантируется. +Для работы с windivert требуются права администратора. +Специфические для unix параметры, такие как --uid, --user и тд, исключены. Все остальные параметры аналогичны nfqws и dvtws. - . - - user mode. - - . +Работа с пакетным фильтром основана на двух действиях. +Первое - выделение перенаправляемого трафика в режиме ядра и передача его пакетному фильтру в user mode. +Второе - собственно обработка перенаправленных пакетов в пакетном фильтре. - windows , iptables, nftables, pf ipfw. - windivert. , windows 7. -secure boot - . secureboot testsigning. - windows 7 . . - , GoodbyDPI. +В windows отсутствуют встроенные средства для перенаправления трафика, такие как iptables, nftables, pf или ipfw. +Поэтому используется сторонний драйвер ядра windivert. Он работает, начиная с windows 7. На системах с включенным +secure boot могут быть проблемы из-за подписи драйвера. В этом случае отключите secureboot или включите режим testsigning. +На windows 7 требуются обновления. На старых необновленных системах может быть ошибка проверки подписи драйвера. +Требования к патчам точно такие же, как и у GoodbyDPI. - iptables winws windivert. - windivert , wireshark. - windivert : https://reqrypt.org/windivert-doc.html#filter_language - , . +Задача iptables в winws решается внутренними средствами через фильтры windivert. +У windivert существует собственный язык фильтров, похожий на язык фильтров wireshark. +Документация по фильтрам windivert : https://reqrypt.org/windivert-doc.html#filter_language +Чтобы не писать сложные фильтры вручную, предусмотрены различные упрощенные варианты автоматического построения фильтров. - --wf-l3=ipv4|ipv6 ; L3 . ipv4 ipv6. - --wf-tcp=[~]port1[-port2] ; tcp. ~ - --wf-udp=[~]port1[-port2] ; udp. ~ - --wf-raw=|@ ; windivert . @. - --wf-save= ; windivert + --wf-l3=ipv4|ipv6 ; фильтр L3 протоколов. по умолчанию включены ipv4 и ipv6. + --wf-tcp=[~]port1[-port2] ; фильтр портов для tcp. ~ означает отрицание + --wf-udp=[~]port1[-port2] ; фильтр портов для udp. ~ означает отрицание + --wf-raw=|@ ; задать напрямую фильтр windivert из параметра или из файла. имени файла предшествует символ @. + --wf-save= ; сохранить сконструированный фильтр windivert в файл для последующей правки вручную - --wf-l3, --wf-tcp, --wf-udp . +Параметры --wf-l3, --wf-tcp, --wf-udp могут брать несколько значений через запятую. - tcp tcp synack tcp rst -autottl autohostlist. autohostlist http redirect 302 307. - - ipv4 ipv6. - . , - --wf-save. --wf-raw. - 8 Kb. +Конструктор фильтров автоматически включает входящие tcp пакеты с tcp synack и tcp rst для корректной работы функций +autottl и autohostlist. При включении autohostlist так же перенаправляются пакеты данных с http redirect с кодами 302 и 307. +Всегда добавляется фильтр на исключение не-интернет адресов ipv4 и ipv6. +Для сложных нестандартных сценариев могут потребоваться свои фильтры. Логично будет начать со стандартного шаблона, +сохраненного через --wf-save. Нужно править файл и подсовывать его в параметре --wf-raw. Максимальный размер фильтра - 8 Kb. - winws . , . +Можно запускать несколько процессов winws с разными стратегиями. Однако, не следует делать пересекающиеся фильтры. - , , windows, cygwin. -, /cygdrive/c/Users/vasya/zapret. - , winws cmd bat OEM. - 866. . +В параметрах, берущих пути к файлам, они прописываются не в формате windows, а формате cygwin. +Например, /cygdrive/c/Users/vasya/zapret. +Если в путях присутствуют национальные символы, то при вызове winws из cmd или bat кодировку нужно использовать OEM. +Для русского языка это 866. Пути с пробелами нужно брать в кавычки. - , c winws cygwin . , nfqws, - cygwin1.dll, winws . binaries/win64 zapret-winws, - cygwin. . - cygwin, binaries/win64. blockcheck. - cygwin winws kill , *nix. +Существует неочевидный момент, каcаемый запуска winws из cygwin шелла. Если в директории, где находится nfqws, находится +копия cygwin1.dll, winws не запустится. Поэтому в binaries/win64 существует директория zapret-winws, содержащая полный +комплект для запуска без cygwin. Его вы и берете для повседневного использования. +Если нужен запуск под cygwin, то следует запускать из binaries/win64. Это нужно для работы blockcheck. +Из cygwin шелла можно посылать winws сигналы через kill точно так же, как в *nix. - windows 7 winws cygwin : +Как получить совместимый с windows 7 и winws cygwin : curl -O https://www.cygwin.com/setup-x86_64.exe setup-x86_64.exe --allow-unsupported-windows --no-verify --site http://ctm.crouchingtigerhiddenfruitbat.org/pub/cygwin/circa/64bit/2024/01/30/231215 - curl. +Следует выбрать установку curl. - gcc-core,make,zlib-devel. -winws cygwin1.dll, windivert.dll, windivert64.sys. binaries/win64/zapret-winws. - 32- x86 windows , , - . -32- windivert . 2.2.2. - arm64 windivert. windivert, - . +Для сборки из исходников требуется gcc-core,make,zlib-devel. +winws требует cygwin1.dll, windivert.dll, windivert64.sys. Их можно взять из binaries/win64/zapret-winws. +Версию для 32-битных x86 windows собрать можно, но такие системы уже уходят в прошлое, поэтому если надо - собирайте сами. +32-битный windivert можно взять с сайта разработчика. Требуется версия 2.2.2. +Для arm64 систем нет подписанного драйвера windivert. Можно самому собрать windivert, но работать он будет только +с отключенной подписью драйверов. blockcheck ---------- -blockcheck.sh posix shell posix. windows, , . - blockcheck.sh . - cygwin , . - cygwin shell cygwin.bat. - zapret. windows X: /cygdrive/x. - *nix : 1 ./install_bin.sh , ./blockcheck.sh. -WSL , . +blockcheck.sh написан на posix shell и требует некоторых стандартных утилит posix. В windows, естественно, этого нет. +Потому просто так запустить blockcheck.sh невозможно. +Для этого требуется скачать и установить cygwin так , как описано в предыдущем разделе. +Следует запустить от имени администратора cygwin shell через cygwin.bat. +В нем нужно пройти в директорию с zapret. Буква диска windows X: отображается как /cygdrive/x. +Далее все как в *nix : 1 раз ./install_bin.sh , затем ./blockcheck.sh. +WSL использовать нельзя, это не то же самое. -cygwin winws . winws SIGHUP . +cygwin для обычной работы winws не нужен. Разве что вы хотите посылать winws SIGHUP для перечитки листов без перезапуска. - winws +автозапуск winws ---------------- - winws windows windows. - schtasks. - binaries/win64/winws task_*.cmd . - , , winws %WINWS1%. - . , - winws1,winws2,winws3,... +Для запуска winws вместе с windows воспользуйтесь планировщиком задач windows. +Удобнее всего создавать задачи и управлять ими через консольную программу schtasks. +В директории binaries/win64/winws подготовлены файлы task_*.cmd . +В них реализовано создание, удаление, старт и стоп одной копии процесса winws с параметрами из переменной %WINWS1%. +Исправьте параметры на нужную вам стратегию. Если для разных фильтров применяется разная стратегия, размножьте код +для задач winws1,winws2,winws3,... - . +Все батники требуется запускать от имени администратора. - taskschd.msc +Управлять задачами можно так же из графической программы управления планировщиком taskschd.msc