tpws ---- Запуск tpws возможен только в Linux варианте под WSL. Нативного варианта под Windows нет, поскольку он использует epoll, которого под windows не существует. 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 --unregister tpws Проверено на windows 10 build 19041 (20.04). Не работают функции --oob и --mss из-за ограничений реализации WSL. --disorder не работает из-за особенностей tcp/ip стека windows. Может не срабатывать детект RST в autohostlist. WSL может глючить со splice, приводя к зацикливанию процесса. Может потребоваться --nosplice. winws ----- Это вариант пакетного фильтра nfqws для Windows, построенный на базе windivert. Все функции работоспособны, однако функционал ipset отсутствует. Фильтры по большому количеству IP адресов невозможны. Работа с проходящим трафиком, например в случае "расшаривания" соединения, не проверялась и не гарантируется. Для работы с windivert требуются права администратора. Специфические для unix параметры, такие как --uid, --user и тд, исключены. Все остальные параметры аналогичны nfqws и dvtws. Работа с пакетным фильтром основана на двух действиях. Первое - выделение перенаправляемого трафика в режиме ядра и передача его пакетному фильтру в user mode. Второе - собственно обработка перенаправленных пакетов в пакетном фильтре. В windows отсутствуют встроенные средства для перенаправления трафика, такие как iptables, nftables, pf или ipfw. Поэтому используется сторонний драйвер ядра windivert. Он работает, начиная с windows 7. На системах с включенным secure boot могут быть проблемы из-за подписи драйвера. В этом случае отключите secureboot или включите режим testsigning. На windows 7 требуются обновления. На старых очень давно не обновляемых системах может быть ошибка проверки подписи драйвера. Требования к патчам точно такие же, как и у GoodbyeDPI. Нужно обновление, включающее поддержку подписей с SHA256. https://learn.microsoft.com/en-us/security-updates/SecurityAdvisories/2015/3033929 Задача iptables в winws решается внутренними средствами через фильтры windivert. У windivert существует собственный язык фильтров, похожий на язык фильтров wireshark. Документация по фильтрам windivert : https://reqrypt.org/windivert-doc.html#filter_language Чтобы не писать сложные фильтры вручную, предусмотрены различные упрощенные варианты автоматического построения фильтров. --wf-iface=[.] ; числовые индексы интерфейса и суб-интерфейса --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 могут брать несколько значений через запятую. Номера интерфейсов можно узнать так : netsh int ip show int. Некоторых типы соединений там не увидеть. В этом случае запускайте winws с параметром --debug и смотрите IfIdx там. SubInterface используется windivert, но практически всегда 0, его можно не указывать. Вероятно он нужен в редких случаях. Конструктор фильтров автоматически включает входящие tcp пакеты с tcp synack и tcp rst для корректной работы функций autottl и autohostlist. При включении autohostlist так же перенаправляются пакеты данных с http redirect с кодами 302 и 307. Всегда добавляется фильтр на исключение не-интернет адресов ipv4 и ipv6. Для сложных нестандартных сценариев могут потребоваться свои фильтры. Логично будет начать со стандартного шаблона, сохраненного через --wf-save. Нужно править файл и подсовывать его в параметре --wf-raw. Максимальный размер фильтра - 8 Kb. Можно запускать несколько процессов winws с разными стратегиями. Однако, не следует делать пересекающиеся фильтры. Если в путях присутствуют национальные символы, то при вызове 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. Как получить совместимый с 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. Для сборки из исходников требуется gcc-core,make,zlib-devel. Собирать из директории nfq командой "make cygwin". winws требует cygwin1.dll, windivert.dll, windivert64.sys. Их можно взять из binaries/win64/zapret-winws. Версию для 32-битных x86 windows собрать можно, но такие системы уже уходят в прошлое, поэтому если надо - собирайте сами. 32-битный windivert можно взять с сайта разработчика. Требуется версия 2.2.2. Для arm64 windows нет подписанного драйвера windivert и нет cygwin. Однако, эмуляция x64 windows 11 позволяет использовать все, кроме WinDivert64.sys без изменений. Но при этом надо заменить WinDivert64.sys на неподписанную arm64 версию и установить режим testsigning. blockcheck ---------- blockcheck.sh написан на posix shell и требует некоторых стандартных утилит posix. В windows, естественно, этого нет. Потому просто так запустить blockcheck.sh невозможно. Для этого требуется скачать и установить cygwin так , как описано в предыдущем разделе. Следует запустить от имени администратора cygwin shell через cygwin.bat. В нем нужно пройти в директорию с zapret. Обратные слэши путей windows нужно удваивать, менять на прямые слэши, либо использовать отображение на unix path. Корректный вариант 1 : cd "C:\\Users\\vasya" Корректный вариант 2 : cd "C:/Users/vasya" Корректный вариант 3 : cd "/cygdrive/c/Users/vasya" Далее все как в *nix : 1 раз ./install_bin.sh , затем ./blockcheck.sh. WSL использовать нельзя, это не то же самое. cygwin для обычной работы winws не нужен. Разве что вы хотите посылать winws SIGHUP для перечитки листов без перезапуска. Можно не возиться с cygwin, а взять готовый пакет, включающий в себя cygwin и blockcheck : https://github.com/bol-van/zapret-win-bundle автозапуск winws ---------------- Для запуска winws вместе с windows есть 2 варианта. Планировщик задач или службы windows. Можно создавать задачи и управлять ими через консольную программу schtasks. В директории binaries/win64/winws подготовлены файлы task_*.cmd . В них реализовано создание, удаление, старт и стоп одной копии процесса winws с параметрами из переменной %WINWS1%. Исправьте параметры на нужную вам стратегию. Если для разных фильтров применяется разная стратегия, размножьте код для задач winws1,winws2,winws3,... Аналогично настраивается вариант запуска через службы windows. Смотрите service_*.cmd. Все батники требуется запускать от имени администратора. Управлять задачами можно так же из графической программы управления планировщиком taskschd.msc