Compare commits

..

No commits in common. "a585d09c031ef918d5fb78d88904d28b8fc0f0ff" and "4374ca229084c330d5c85ec1b3a6596217b66a9c" have entirely different histories.

4 changed files with 201 additions and 292 deletions

View File

@ -1,15 +1,11 @@
# Windows quick start
Специально для тех, кто хочет побыстрее начать, но не хочет слишком углубляться в простыню readme.txt.
Специально для тех, кто хочет побыстрее начать, но не хочет слишком углубляться в простыню [readme.md](./readme.md).
> [!CAUTION]
> Как обычно, компьютерная грамотность ложится полностью на вас.
> Вы должны уметь работать с консолью windows и иметь минимальные навыки обращения с командными файлами `bat`, `cmd`.
> Если грамотность отсутствует и возникает куча _"как?"_ на базовых вещах, значит эта программа не для вас.
> Разработчик не будет отвечать на вопросы из серии школы компьютерной грамотности.
> Если вы все-таки хотите продолжать, задавайте вопросы в дискуссиях на github или на форумах.
> Возможно, кто-то вам поможет. Но не надо писать issue на github. Они будут закрываться сразу.
## Немного разъяснений
Как обычно, компьютерная грамотность ложится полностью на вас.
Вы должны уметь работать с консолью windows и иметь минимальные навыки обращения с командными файлами bat,cmd.
Если грамотность отсутствует и возникает куча "как" на базовых вещах, значит эта программа не для вас.
Разработчик не будет отвечать на вопросы из серии школы компьютерной грамотности.
Если вы все-таки хотите продолжать, задавайте вопросы в дискуссиях на github или на форумах.
Возможно, кто-то вам поможет. Но не надо писать issue на github. Они будут закрываться сразу.
Обход DPI является хакерской методикой. Под этим словом понимается метод, которому сопротивляется окружающая среда,
которому автоматически не гарантирована работоспособность в любых условиях и на любых ресурсах,
@ -22,34 +18,32 @@
Будем считать, что у вас есть windows 7 или выше. Задача - обойти блокировки с самой системы.
> [!NOTE]
> Есть решение самое простое, а есть "как положено".
Есть решение самое простое, а есть "как положено".
## САМОЕ ПРОСТОЕ РЕШЕНИЕ
САМОЕ ПРОСТОЕ РЕШЕНИЕ
_"Совсем ничего не могу, все очень сложно, дайте мне таблетку."_ ©Простой пользователь
Совсем ничего не могу, все очень сложно, дайте мне таблетку.
1) Скачайте и распакуйте архив https://github.com/bol-van/zapret-win-bundle/archive/refs/heads/master.zip.
2) Запустите `zapret-winws/preset_russia.cmd` от имени администратора. Возможно, заведется сразу.
Скачайте и распакуйте архив https://github.com/bol-van/zapret-win-bundle/archive/refs/heads/master.zip
Запустите zapret-winws/preset_russia.cmd от имени администратора.
Возможно, заведется сразу. Этот вариант похож на "2_any_country.cmd" из GoodbyeDPI.
То же самое с ограничителем по автоматически создаваемому хост-листу `preset_russia_autohostlist.cmd`.
Что такое `autohostlist` - читайте [readme.md](./readme.md). Проще говоря, мы обходим только то, что долго и упорно не хочет открываться.
То же самое с ограничителем по автоматически создаваемому хост-листу preset_russia_autohostlist.cmd.
Что такое autohostlist - читайте readme.txt. Проще говоря, мы обходим только то, что долго и упорно не хочет открываться.
Сначала не будет, но надо пытаться много раз, и тогда сработает, а дальше будет всегда срабатывать.
Остальное не будет ломаться. Использовать только, если первый вариант тоже работает.
Не помогла _"таблетка"_ ? Это вовсе не значит, что ничего не получится. Но придется делать по нормальному.
Не помогла таблетка ? Это вовсе не значит, что ничего не получится. Но придется делать по-нормальному.
## РЕШЕНИЕ "КАК ПОЛОЖЕНО"
РЕШЕНИЕ "КАК ПОЛОЖЕНО"
1) Скачайте и распакуйте архив https://github.com/bol-van/zapret-win-bundle/archive/refs/heads/master.zip.
1) Скачайте и распакуйте архив https://github.com/bol-van/zapret-win-bundle/archive/refs/heads/master.zip
2) Если у вас Windows 7 x64, читайте [docs/windows.md](./windows.md). Без описанной там подготовки может не работать.
> [!WARNING]
> Для 32-битных систем Windows нет готового полного варианта.
На windows 11 arm64 выполните `arm64/install_arm64.cmd` от имени администратора и перезагрузите компьютер.
Читайте [docs/windows.md](./windows.md)
2) Если у вас Windows 7 x64, читайте docs/windows.txt. Без описанной там подготовки может не работать.
Для 32-битных систем Windows нет готового полного варианта, но есть собранные бинарники :
https://github.com/bol-van/zapret-win32
На windows 11 arm64 выполните arm64/install_arm64.cmd от имени администратора и перезагрузите компьютер.
Читайте docs/windows.txt
Имейте в виду, что антивирусы могут плохо реагировать на windivert.
cygwin так же имеет внушительный список несовместимостей с антивирусами, хотя современные антивирусы
@ -60,15 +54,15 @@ cygwin так же имеет внушительный список несовм
4) Если вы работаете в виртуальной машине, необходимо использовать соединение с сетью в режиме bridge. nat не подходит
5) Запустите `blockcheck\blockcheck.cmd`. blockcheck в начале проверяет **DNS**.
Если выводятся сообщения о подмене адресов, то нужно будет решить проблему с **DNS**.
blockcheck перейдет в этом случае на **DoH** _(DNS over HTTPS)_ и будет пытаться получить и использовать реальные IP адреса.
5) Запустите blockcheck\blockcheck.cmd. blockcheck в начале проверяет DNS.
Если выводятся сообщения о подмене адресов, то нужно будет решить проблему с DNS.
blockcheck перейдет в этом случае на DoH и будет пытаться получить и использовать реальные IP адреса.
Но если вы не настроите решение этой проблемы, обход будет работать только для тех программ,
которые сами реализуют механизмы SecureDNS. Для других программ обход работать не будет.
Решение проблемы DNS выходит за рамки проекта. Обычно она решается либо заменой DNS серверов
от провайдера на публичные (`1.1.1.1`, `8.8.8.8`), либо в случае перехвата провайдером обращений
к сторонним серверам - через специальные средства шифрования DNS запросов, такие как [dnscrypt](https://www.dnscrypt.org/), **DoT** _(DNS over TLS)_, **DoH**.
от провайдера на публичные (1.1.1.1, 8.8.8.8), либо в случае перехвата провайдером обращений
к сторонним серверам - через специальные средства шифрования DNS запросов, такие как dnscrypt, DoT, DoH.
В современных броузерах чаще всего DoH включен по умолчанию, но curl будет использовать обычный системный DNS.
win11 поддерживает системные DoH из коробки. Они не настроены по умолчанию.
В последних билдах win10 существует неофициальный обходной путь для включения DoH.
@ -77,17 +71,13 @@ win11 поддерживает системные DoH из коробки. Он
Тут все разжевано как и где это включается : https://hackware.ru/?p=13707
6) blockcheck позволяет выявить рабочую стратегию обхода блокировок.
Лог скрипта будет сохранен в `blockcheck\blockcheck.log`.
Запомните/перепишите найденные стратегии.
Лог скрипта будет сохранен в blockcheck\blockcheck.log.
Запомните найденные стратегии.
> [!WARNING]
> Следует понимать, что blockcheck проверяет доступность только конкретного домена, который вы вводите в начале.
> Вероятно, все остальные домены блокированы подобным образом, но не факт.
> [!TIP]
> В большинстве случаев можно обьединить несколько стратегий в одну универсальную, и это крайне желательно.
Необходимо понимать [как работают стратегии](./readme.md/#nfqws).
Следует понимать, что blockcheck проверяет доступность только конкретного домена, который вы вводите в начале.
Вероятно, все остальные домены блокированы подобным образом, но не факт.
В большинстве случаев можно обьединить несколько стратегий в одну универсальную, и это крайне желательно.
Необходимо понимать как работают стратегии.
zapret не может пробить блокировку по IP адресу. Для проверки нескольких доменов вводите их через пробел.
Сейчас блокираторы ставят на магистральных каналах. В сложных случаях у вас может быть несколько маршрутов
@ -96,8 +86,8 @@ zapret не может пробить блокировку по IP адресу.
blockcheck не всегда может выдать вам в итогах оптимальную стратегию, которую надо просто переписать в настройки.
В некоторых случаях надо реально думать что происходит, анализируя результат на разных стратегиях.
Если вы применяете большой TTL, чтобы достать до магистрала, то не лишним будет добавить дополнительный ограничитель
`--dpi-desync-fooling`, чтобы не сломать сайты на более коротких дистанциях.
_md5sig_ наиболее совместим, но работатет только на linux серверах.
--dpi-desync-fooling, чтобы не сломать сайты на более коротких дистанциях.
md5sig наиболее совместим, но работатет только на linux серверах.
badseq может работать только на https и не работать на http.
Чтобы выяснить какие дополнительные ограничители работают, смотрите результат теста аналогичных стратегий без TTL
с каждым из этих ограничителей.
@ -107,97 +97,85 @@ badseq может работать только на https и не работа
она стабильна, на третьих полный хаос, и проще отказаться.
Далее, имея понимание что работает на http, https, quic, нужно сконструировать параметры запуска winws
с использованием мультистратегии. Как работают мультистратегии описано в [readme.md](./readme.md).
с использованием мультистратегии. Как работают мультистратегии описано в readme.txt.
Прежде всего вам нужно собрать фильтр перехватываемого трафика. Это делается через параметры
`--wf-l3`, `--wf-tcp`, `--wf-udp`.
`--wf-l3` относится к версии ip протокола - ipv4 или ipv6.
`--wf-tcp` и `--wf-udp` содержат перечень портов или диапазонов портов через запятую.
--wf-l3, --wf-tcp, --wf-udp.
--wf-l3 относится к версии ip протокола - ipv4 или ipv6.
--wf-tcp и --wf-udp содержат перечень портов или диапазонов портов через запятую.
Пример стандартного фильтра для перехвата http, https, quic : `--wf-tcp=80,443` `--wf-udp=443`
Пример стандартного фильтра для перехвата http, https, quic : --wf-tcp=80,443 --wf-udp=443
> [!WARNING]
> Фильтр должен быть минимально необходимым. Перехват лишнего трафика приведет только к бессмысленному расходованию ресурсов процессора и замедлению интернета.
Фильтр должен быть минимально необходимым. Перехват лишнего трафика приведет только к бессмысленному
расходованию ресурсов процессора и замедлению интернета.
Если кратко по мультистратегии, то обычно параметры конструируются так :
```
--filter-udp=443 'параметры для quic' --new
--filter-tcp=80,443 'обьединенные параметры для http и https'
```
"--filter-udp=443 'параметры для quic' --new
--filter-tcp=80,443 'обьединенные параметры для http и https'"
Или так :
```
--filter-udp=443 'параметры для quic' --new
"--filter-udp=443 "параметры для quic" --new
--filter-tcp=80 'параметры для http' --new
--filter-tcp=443 'параметры для https'
```
--filter-tcp=443 'параметры для https'"
Если стратегии отличаются по версии ip протокола, и вы не можете их обьединить, фильтр пишется так :
```
--filter-l3=ipv4 --filter-udp=443 "параметры для quic ipv4" --new
"--filter-l3=ipv4 --filter-udp=443 "параметры для quic ipv4" --new
--filter-l3=ipv4 --filter-tcp=80 'параметры для http ipv4' --new
--filter-l3=ipv4 --filter-tcp=443 'параметры для https ipv4' --new
--filter-l3=ipv6 --filter-udp=443 "параметры для quic ipv6" --new
--filter-l3=ipv6 --filter-tcp=80 "параметры для http ipv6" --new
--filter-l3=ipv6 --filter-tcp=443 "параметры для https ipv6"
```
--filter-l3=ipv6 --filter-tcp=80 'параметры для http ipv6' --new
--filter-l3=ipv6 --filter-tcp=443 'параметры для https ipv6'"
Но здесь совсем _"копи-пастный"_ вариант.
Но здесь совсем "копи-пастный" вариант.
Чем больше вы обьедините стратегий и сократите их общее количество, тем будет лучше.
Если вам не нужно дурение отдельных протоколов, лучше всего будет их убрать из системы перехвата трафика через
параметры `--wf-*` и убрать соответствующие им профили мультистратегии.
параметры --wf-* и убрать соответствующие им профили мультистратегии.
tcp 80 - http, tcp 443 - https, udp 443 - quic.
Если используются методы нулевой фазы десинхронизации (`--mss`, `--wssize`, `--dpi-desync=syndata`) и фильтрация hostlist,
Если используются методы нулевой фазы десинхронизации (--mss, --wssize, --dpi-desync=syndata) и фильтрация hostlist,
то все параметры, относящиеся к этим методам, следует помещать в отдельные профили мультистратегии, которые получат
управление до определения имени хоста. Необходимо понимать алгоритм работы мультистратегий.
```
--filter-tcp=80 'параметры для http' --new
"--filter-tcp=80 'параметры для http' --new
--filter-tcp=443 'параметры для https' --hostlist=d:/users/user/temp/list.txt --new
--filter-tcp=443 --wssize 1:6
```
--filter-tcp=443 --wssize 1:6"
autohostlist профиль приоритетен, поэтому wssize нужно писать туда :
```
--filter-tcp=80 'параметры для http' --new
--filter-tcp=443 'параметры для https' --wssize 1:6 --hostlist-auto=d:/users/user/temp/autolist.txt
```
"--filter-tcp=80 'параметры для http' --new
--filter-tcp=443 'параметры для https' --wssize 1:6 --hostlist-auto=d:/users/user/temp/autolist.txt"
В этих примерах wssize будет применяться всегда к порту tcp 443, а хостлист будет игнорироваться.
К http применять wssize вредно и бессмысленно.
7) Протестируйте найденные стратегии на winws. Winws следует брать из zapret-winws.
7) Протестируйте найденные стратегии на winws. winws следует брать из zapret-winws.
Для этого откройте командную строку windows от имени администратора в директории zapret-winws.
Проще всего это сделать через `_CMD_ADMIN.cmd`. Он сам поднимет права и зайдет в нужную директорию.
Проще всего это сделать через _CMD_ADMIN.cmd. Он сам поднимет права и зайдет в нужную директорию.
8) Обеспечьте удобную загрузку обхода блокировок.
Есть 2 варианта. Ручной запуск через ярлык или автоматический при старте системы, вне контекста текущего пользователя.
Последний вариант разделяется на запуск через планировщик задач и через службы windows.
Если хотите ручной запуск, скопируйте `preset_russia.cmd` в `preset_my.cmd` (`<вашеазвание>.cmd`) и адаптируйте его под ваши параметра запуска.
Потом можно создать ярлык на рабочем столе на `preset_my.cmd`. Не забудьте, что требуется запускать от имени администратора.
Если хотите ручной запуск, скопируйте preset_russia.cmd в preset_my.cmd и адаптируйте его под ваши параметра запуска.
Потом можно создать ярлык на рабочем столе на preset_my.cmd. Не забудьте, что требуется запускать от имени администратора.
Но лучше будет сделать неинтерактивный автоматический запуск вместе с системой.
В zapret-winws есть командные файлы `task_*`, предназначенные для управления задачами планировщика.
Там следует поменять содержимое переменной `WINWS1` на свою стратегию.
В zapret-winws есть командные файлы task_*, предназначенные для управления задачами планировщика.
Там следует поменять содержимое переменной WINWS1 на свою стратегию.
Если вы не можете обьединить несколько стратегий для разных протоколов в одну, дублируйте код в каждом из cmd
для поддержки нескольких задач : _winws1_, _winws2_, _winws3_.
для поддержки нескольких задач : winws1,winws2,winws3.
После создания задач запустите их. Проверьте, что обход встает после перезагрузки windows.
Аналогично настраиваются и службы windows. Смотрите `service_*.cmd`
Аналогично настраиваются и службы windows. Смотрите service_*.cmd
9) Если ломаются отдельные незаблокированные ресурсы, нужно пользоваться ограничивающим
ipset или хост листом. Читайте основной талмуд [readme.md](./readme.md) ради подробностей.
ipset или хост листом. Читайте основной талмуд readme.txt ради подробностей.
Но еще лучше будет подбирать такие стратегии, которые ломают минимум.
Есть стратегии довольно безобидные, а есть сильно ломающие, которые подходят только для точечного пробития отдельных ресурсов,
когда ничего лучше нет. Хорошая стратегия может сильно ломать из-за плохо подобранных ограничителей для фейков - ttl, fooling.
> [!CAUTION]
> Это минимальная инструкция, чтобы соориентироваться с чего начать. Однако, это - не панацея.
> В некоторых случаях вы не обойдетесь без знаний и основного "талмуда".
Подробности и полное техническое описание расписаны в [readme.md](./readme.md)
Это минимальная инструкция, чтобы соориентироваться с чего начать. Однако, это - не панацея.
В некоторых случаях вы не обойдетесь без знаний и основного "талмуда".
Подробности и полное техническое описание расписаны в readme.txt

View File

@ -1,46 +1,8 @@
# zapret v.67
# Multilanguage/Мультиязычный README
# Multilanguage README
___
[![en](https://img.shields.io/badge/lang-en-red.svg)](https://github.com/bol-van/zapret/tree/master/docs/readme.en.md)
[![ru](https://img.shields.io/badge/lang-ru-green.svg)](https://github.com/bol-van/zapret/tree/master/docs/readme.md)
***
- [What is it for](#what-is-it-for)
- [How it works](#how-it-works)
- [How to put this into practice in the linux system](#how-to-put-this-into-practice-in-the-linux-system)
- [ip6tables](#ip6tables)
- [nftables](#nftables)
- [When it will not work](#when-it-will-not-work)
- [nfqws](#nfqws)
- [DPI desync attack](#dpi-desync-attack)
- [DPI desync combos](#dpi-desync-combos)
- [SYNACK mode](#synack-mode)
- [SYNDATA mode](#syndata-mode)
- [Virtual Machines](#virtual-machines)
- [CONNTRACK](#conntrack)
- [Reassemble](#reassemble)
- [UDP support](#udp-support)
- [IP fragmentation](#ip-fragmentation)
- [multiple strategies](#multiple-strategies)
- [tpws](#tpws)
- [multiple strategies](#multiple-strategies-1)
- [Ways to get a list of blocked IP](#ways-to-get-a-list-of-blocked-ip)
- [Domain name filtering](#domain-name-filtering)
- [**autohostlist** mode](#autohostlist-mode)
- [Choosing parameters](#choosing-parameters)
- [Screwing to the firewall control system or your launch system](#screwing-to-the-firewall-control-system-or-your-launch-system)
- [Installation](#installation)
- [Checking ISP](#checking-isp)
- [desktop linux system](#desktop-linux-system)
- [OpenWRT](#openwrt)
- [Android](#android)
- [FreeBSD, OpenBSD, MacOS](#freebsd-openbsd-macos)
- [Windows (WSL)](#windows-wsl)
- [Other devices](#other-devices)
- [Donations](#donations)
***
## What is it for
@ -193,7 +155,7 @@ follows all standards. For example, we are routed to squid. Connection goes thro
## nfqws
This program is a packet modifier and a NFQUEUE queue handler.
For BSD systems there is dvtws. Its built from the same source and has almost the same parameters (see [bsd.en.md](./bsd.en.md)).
For BSD systems there is dvtws. Its built from the same source and has almost the same parameters (see bsd.en.md).
nfqws takes the following parameters:
```
@ -1318,11 +1280,11 @@ Now its possible to run `/data/local/tmp/zapret/tpws` from any app such as taske
### FreeBSD, OpenBSD, MacOS
see [docs/bsd.en.md](./bsd.en.md)
see docs/bsd.en.md
### Windows (WSL)
see [docs/windows.en.md](./windows.en.md)
see docs/windows.en.md
### Other devices
@ -1352,5 +1314,4 @@ If this is the case then run another script in background and add some delay the
Are welcome here :
<img src=https://cdn-icons-png.flaticon.com/16/14446/14446252.png alt="USDT" style="vertical-align: middle;"/> USDT 0x3d52Ce15B7Be734c53fc9526ECbAB8267b63d66E
<img src=https://cdn-icons-png.flaticon.com/16/5968/5968260.png alt="USDT" style="vertical-align: middle;"/> BTC bc1qhqew3mrvp47uk2vevt5sctp7p2x9m7m5kkchve

View File

@ -66,7 +66,7 @@ VPN.
> *Linux/openwrt:* [docs/quick_start.txt](./quick_start.txt)
>
>*Windows:* [docs/quick_start_windows.md](./quick_start_windows.md)
>*Windows:* [docs/quick_start_windows.txt](./quick_start_windows.txt)
## Как это работает
@ -305,7 +305,7 @@ dvtws, собираемый из тех же исходников (см. [bsd.tx
--new ; начало новой стратегии (новый профиль)
--filter-l3=ipv4|ipv6 ; фильтр версии ip для текущей стратегии
--filter-tcp=[~]port1[-port2]|* ; фильтр портов tcp для текущей стратегии. ~ означает инверсию. установка фильтра tcp и неустановка фильтра udp запрещает udp. поддерживается список через запятую.
--filter-udp=[~]port1[-port2]|* ; фильтр портов udp для текущей стратегии. ~ означает инверсию. установка фильтра udp и неустановка фильтра tcp запрещает tcp. поддерживается список через запятую.
--filter-udp=[~]port1[-port2]|* ; фильтр портов udp для текущей стратегии. ~ означает инверсию. установка фильтра udp и неустановка фильтра tcp запрещает udp. поддерживается список через запятую.
--filter-l7=[http|tls|quic|wireguard|dht|unknown] ; фильтр протокола L6-L7. поддерживается несколько значений через запятую.
--ipset=<filename> ; включающий ip list. на каждой строчке ip или cidr ipv4 или ipv6. поддерживается множество листов и gzip. перечитка автоматическая.
--ipset-exclude=<filename> ; исключающий ip list. на каждой строчке ip или cidr ipv4 или ipv6. поддерживается множество листов и gzip. перечитка автоматическая.
@ -1533,12 +1533,12 @@ NFQWS_UDP_PKT_OUT=$((6+$AUTOHOSTLIST_RETRANS_THRESHOLD))
NFQWS_UDP_PKT_IN=0
```
***Задать порты для перенаправления на nfqws без connbytes ограничителя***\
Есть трафик, исходящий сеанс для которого необходимо перенаправлять весь без ограничителей.
Типичное применение - поддержка http keepalives на stateless DPI.
Это существенно нагружает процессор. Использовать только если понимаете зачем. Чаще всего это не нужно.
Входящий трафик ограничивается по connbytes через параметры PKT_IN.
Если указываете здесь какие-то порты, желательно их убрать из версии с connbytes ограничителем
Есть трафик, исходящий сеанс для которого необходимо перенаправлять весь без ограничителей
типичное применение - поддержка http keepalives на stateless DPI
это существенно нагружает процессор. использовать только если понимаете зачем. чаще всего это не нужно.
входящий трафик ограничивается по connbytes через параметры PKT_IN
задать порты для перенаправления на nfqws без connbytes ограничителя
если указываете здесь какие-то порты, желательно их убрать из версии с connbytes ограничителем
```
NFQWS_PORTS_TCP_KEEPALIVE=80
NFQWS_PORTS_UDP_KEEPALIVE=
@ -2058,7 +2058,7 @@ curl: (7) Failed to connect to www.ru port 80: Host is unreachable
## Windows
Описано в [docs/windows.md](./windows.md)
Описано в [docs/windows.txt](./windows.txt)
## Другие прошивки

View File

@ -1,68 +1,55 @@
# Windows
tpws
----
## tpws
Запуск tpws возможен только в Linux варианте под **WSL** _(Windows Subsystem for Linux)_.
Запуск 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`
Установить 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 в броузер или другую программу.
Скопировать на целевую систему `binaries/x86_64/tpws_wsl.tgz`.
Удаление : wsl --unregister tpws
Выполнить :
`wsl --import tpws "%USERPROFILE%\tpws" tpws_wsl.tgz`
Проверено на windows 10 build 19041 (20.04).
Запустить :
`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`
> [!NOTE]
> Проверено на windows 10 build 19041 (20.04).
Возможные проблемы:
- Не работают функции `--oob` и `--mss` из-за ограничений реализации WSL.
`--disorder` не работает из-за особенностей tcp/ip стека windows.
- Может не срабатывать детект RST в autohostlist.
- WSL может глючить со splice, приводя к зацикливанию процесса. Может потребоваться `--nosplice`.
- Не поддерживается tcp user timeout.
Чтобы избавиться от сообщений об ошибке добавляйте :
`--local-tcp-user-timeout=0 --remote-tcp-user-timeout=0`.
Не работают функции --oob и --mss из-за ограничений реализации WSL.
--disorder не работает из-за особенностей tcp/ip стека windows.
Может не срабатывать детект RST в autohostlist.
WSL может глючить со splice, приводя к зацикливанию процесса. Может потребоваться --nosplice.
Не поддерживается tcp user timeout.
Чтобы избавиться от исообщений об ошибке добавляйте "--local-tcp-user-timeout=0 --remote-tcp-user-timeout=0".
Эти сообщения только информативные, на работу они не влияют.
## winws
winws
-----
Это вариант пакетного фильтра nfqws для Windows, построенный на базе windivert.
Все функции работоспособны, однако функционал ipset в ядре отсутствует. Он реализован в user mode. Фильтры по большому количеству IP адресов невозможны.
Все функции работоспособны, однако функционал ipset отсутствует. Фильтры по большому количеству IP адресов невозможны.
Работа с проходящим трафиком, например в случае "расшаривания" соединения, не проверялась и не гарантируется.
Для работы с windivert требуются права администратора.
Специфические для unix параметры, такие как `--uid`, `--user` и тд, исключены. Все остальные параметры аналогичны nfqws и dvtws.
Специфические для unix параметры, такие как --uid, --user и тд, исключены. Все остальные параметры аналогичны nfqws и dvtws.
Работа с пакетным фильтром основана на двух действиях :
1) Выделение перенаправляемого трафика в режиме ядра и передача его пакетному фильтру в user mode.
2) Собственно обработка перенаправленных пакетов в пакетном фильтре.
Работа с пакетным фильтром основана на двух действиях.
Первое - выделение перенаправляемого трафика в режиме ядра и передача его пакетному фильтру в user mode.
Второе - собственно обработка перенаправленных пакетов в пакетном фильтре.
В windows отсутствуют встроенные средства для перенаправления трафика, такие как _iptables_, _nftables_, _pf_ или _ipfw_.
В windows отсутствуют встроенные средства для перенаправления трафика, такие как iptables, nftables, pf или ipfw.
Поэтому используется сторонний драйвер ядра windivert. Он работает, начиная с windows 7. На системах с включенным
secure boot могут быть проблемы из-за подписи драйвера. В этом случае отключите `secureboot` или включите режим `testsigning`.
На windows 7, вероятно, будут проблемы с загрузкой windivert. Читайте ниже соответствующий раздел.
secure boot могут быть проблемы из-за подписи драйвера. В этом случае отключите secureboot или включите режим testsigning.
На windows 7 вероятно будут проблемы с загрузкой windivert. Читайте ниже соответствующий раздел.
Задача _iptables_ в **winws** решается внутренними средствами через фильтры windivert.
Задача iptables в winws решается внутренними средствами через фильтры windivert.
У windivert существует собственный язык фильтров, похожий на язык фильтров wireshark.
[Документация по фильтрам windivert.](https://reqrypt.org/windivert-doc.html#filter_language)
Документация по фильтрам windivert : https://reqrypt.org/windivert-doc.html#filter_language
Чтобы не писать сложные фильтры вручную, предусмотрены различные упрощенные варианты автоматического построения фильтров.
```
--wf-iface=<int>[.<int>] ; числовые индексы интерфейса и суб-интерфейса
--wf-l3=ipv4|ipv6 ; фильтр L3 протоколов. по умолчанию включены ipv4 и ipv6.
--wf-tcp=[~]port1[-port2] ; фильтр портов для tcp. ~ означает отрицание
@ -72,187 +59,170 @@ secure boot могут быть проблемы из-за подписи дра
--ssid-filter=ssid1[,ssid2,ssid3,...] ; включать winws только когда подключена любая из указанных wifi сетей
--nlm-filter=net1[,net2,net3,...] ; включать winws только когда подключена любая из указанных сетей NLM
--nlm-list[=all] ; вывести список сетей NLM. по умолчанию только подключенных, all - всех.
```
Параметры --wf-l3, --wf-tcp, --wf-udp могут брать несколько значений через запятую.
Параметры `--wf-l3`, `--wf-tcp`, `--wf-udp` могут брать несколько значений через запятую.
Номера интерфейсов можно узнать так : `netsh int ip show int`.
Некоторых типы соединений там не увидеть. В этом случае запускайте **winws** с параметром `--debug` и смотрите IfIdx там.
SubInterface используется windivert, но практически всегда **0**, его можно не указывать. Вероятно, он нужен в редких случаях.
Номера интерфейсов можно узнать так : 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**.
сохраненного через --wf-save. Нужно править файл и подсовывать его в параметре --wf-raw. Максимальный размер фильтра - 8 Kb.
Можно запускать несколько процессов **winws** с разными стратегиями. Однако, не следует делать пересекающиеся фильтры.
Можно запускать несколько процессов winws с разными стратегиями. Однако, не следует делать пересекающиеся фильтры.
В `--ssid-filter` можно через запятую задать неограниченное количество имен wifi сетей (**SSID**). Если задана хотя бы одна сеть,
то winws включается только, если подключен указанный **SSID**. Если **SSID** исчезает, winws отключается. Если **SSID** появляется снова,
В --ssid-filter можно через запятую задать неограниченное количество имен wifi сетей (SSID). Если задана хотя бы одна сеть,
то winws включается только, если подключен указанный SSID. Если SSID исчезает, winws отключается. Если SSID появляется снова,
winws включается. Это нужно, чтобы можно было применять раздельное дурение к каждой отдельной wifi сети.
Названия сетей должны быть написаны в том регистре, в котором их видит система. Сравнение идет с учетом регистра!
Названия сетей должны быть написаны в том регистре, в котором их видит система. Сравнение идет с учетом регистра !
При этом нет никаких проверок куда реально идет трафик. Если одновременно подключен, допустим, ethernet,
и трафик идет туда, то дурение включается и выключается просто по факту наличия wifi сети, на которую трафик может и не идти.
И это может сломать дурение на ethernet. Поэтому полезно так же будет добавить фильтр `--wf-iface` на индекс интерфейса wifi адаптера,
И это может сломать дурение на ethernet. Поэтому полезно так же будет добавить фильтр --wf-iface на индекс интерфейса wifi адаптера,
чтобы не трогать другой трафик.
`--nlm-filter` аналогичен `--ssid-filter`, но работает с именами или GUIDами сетей Network List Manager (NLM).
--nlm-filter аналогичен --ssid-filter, но работает с именами или GUIDами сетей Network List Manager (NLM).
Это те сети, которые вы видите в панели управления в разделе "Центр управления сетями и общим доступом".
Под сетью подразумевается не конкретный адаптер, а именно сетевое окружение конкретного подключения.
Обычно проверяется mac адрес шлюза. К сети можно подключиться через любой адаптер, и она останется той же самой.
Если подключиться, допустим, к разными роутерам по кабелю, то будут разные сети.
А если к одному роутеру через 2 разных сетевых карточки на том же компе - будет одна сеть.
NLM абстрагирует типы сетевых адаптеров. Он работает как с wifi, так и с ethernet и любыми другими.
Поэтому это более универсальный метод, чем **SSID** фильтр.
Поэтому это более универсальный метод, чем ssid фильтр.
Однако, есть и неприятная сторона. В windows 7 вы легко могли ткнуть на иконку сети и выбрать тип : private или public.
Там же вы могли посмотреть список сетей и обьединить их. Чтобы, допустим, вы могли подключаться по кабелю и wifi
к одному роутеру, и система эти подключения воспринимала как одну сеть.
В следующих версиях windows они эти возможности сильно порезали. Похоже нет встроенных средств полноценно управлять
network locations в win10/11. Кое-что есть в **powershell**.
Можно поковыряться напрямую в реестре здесь :
`HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList`
Нужно менять ProfileGUID в `Signatures\Unmanaged`. Имена можно поменять в Profiles.
network locations в win10/11. Кое-что есть в powershell.
Можно поковыряться напрямую в реестре здесь : HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList
Нужно менять ProfileGUID в Signatures\Unmanaged. Имена можно поменять в Profiles.
Есть кое-какие сторонние утилиты. Кое-что находится, позволяющее посмотреть и удалить network profiles, но не обьединить.
Факт, что в ms они это сильно испортили. Движок network list все тот же, и он способен на все то, что было в win7.
Можно не бороться с этой проблемой, а просто указывать через запятую те названия сетей или GUIDы, которые выбрала система.
Или если у вас только wifi, то использовать `--ssid-filter`. Там хотя бы есть гарантия, что **SSID** соответствуют реальности,
Или если у вас только wifi, то использовать --ssid-filter. Там хотя бы есть гарантия, что SSID соответствуют реальности,
а система их не назвала как-то по-своему.
Если в путях присутствуют национальные символы, то при вызове winws из `cmd` или `bat` кодировку нужно использовать **OEM**.
Если в путях присутствуют национальные символы, то при вызове winws из cmd или bat кодировку нужно использовать OEM.
Для русского языка это 866. Пути с пробелами нужно брать в кавычки.
При использовании опции @<config_file> кодировка в файле должна быть **UTF-8** без **BOM mark**.
При использовании опции @<config_file> кодировка в файле должна быть UTF-8 без BOM mark.
Существует неочевидный момент, каcаемый запуска **winws** из cygwin shell\`а. Если в директории, где находится winws, находится
копия `cygwin1.dll`, **winws** не запустится.
Если нужен запуск под cygwin, то следует удалить или переместить `cygwin1.dll` из `binaries/win64`. Это нужно для работы blockcheck.
Из cygwin шелла можно посылать winws сигналы через `kill` точно так же, как в `*nix`.
Существует неочевидный момент, каcаемый запуска winws из cygwin шелла. Если в директории, где находится winws, находится
копия cygwin1.dll, winws не запустится.
Если нужен запуск под cygwin, то следует удалить или переместить cygwin1.dll из 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.
`curl -O https://www.cygwin.com/setup-x86_64.exe`
Для сборки из исходников требуется gcc-core,make,zlib-devel.
Собирать из директории nfq командой "make cygwin64" или "make cygwin32" для 64 и 32 битных версий соответственно.
winws требует cygwin1.dll, windivert.dll, windivert64.sys или windivert32.sys.
Их можно взять из binaries/win64 и binaries/win32.
`setup-x86_64.exe --allow-unsupported-windows --no-verify --site http://ctm.crouchingtigerhiddenfruitbat.org/pub/cygwin/circa/64bit/2024/01/30/231215`
> [!IMPORTANT]
> Следует выбрать установку curl.
Для сборки из исходников требуется _gcc-core_,_make_,_zlib-devel_.
Собирать из директории nfq командой `make cygwin64` или `make cygwin32` для 64 и 32 битных версий соответственно.
**winws** требует `cygwin1.dll`, `windivert.dll`, `windivert64.sys` или `windivert32.sys`.
Их можно взять из `binaries/win64` и `binaries/win32`.
Для _arm64_ windows нет подписанного драйвера windivert и нет cygwin.
Для arm64 windows нет подписанного драйвера windivert и нет cygwin.
Однако, эмуляция x64 windows 11 позволяет использовать все, кроме WinDivert64.sys без изменений.
Но при этом надо заменить WinDivert64.sys на неподписанную _arm64_ версию и установить режим testsigning.
Но при этом надо заменить WinDivert64.sys на неподписанную arm64 версию и установить режим testsigning.
## Windows 7 и windivert
Windows 7 и windivert
---------------------
Требования к подписи драйверов windows изменились в 2021 году.
Официальные бесплатные обновления windows 7 закончились в 2020.
После этого несколько лет продолжали идти платные обновления по программе **ESU**.
Именно в этих **ESU** обновлениях находится обновление ядра windows 7, позволяющиее загрузить драйвер
_windivert 2.2.2-A_, который идет в поставке zapret.
После этого несколько лет продолжали идти платные обновления по программе ESU.
Именно в этих ESU обновлениях находится обновление ядра windows 7, позволяющиее загрузить драйвер
windivert 2.2.2-A, который идет в поставке zapret.
Поэтому варианты следующие :
1) Взять `windivert64.sys` и `windivert.dll` версии _2.2.0-C_ или _2.2.0-D_ отсюда : https://reqrypt.org/download
1) Взять windivert64.sys и windivert.dll версии 2.2.0-C или 2.2.0-D отсюда : https://reqrypt.org/download
и заменить эти 2 файла.
В [zapret-win-bundle](https://github.com/bol-van/zapret-win-bundle) есть отдельных 2 места, где находится **winws** : [_zapret-winws_](https://github.com/bol-van/zapret-win-bundle/tree/master/zapret-winws) и [_blockcheck/zapret/nfq_](https://github.com/bol-van/zapret-win-bundle/tree/master/blockcheck).
В zapret-win-bundle есть отдельных 2 места, где находится winws : zapret-winws и blockcheck/zapret/nfq.
Надо менять в обоих местах.
Этот вариант проверен и должен работать. Тем не менее патч 10 летней давности, который включает SHA256
сигнатуры, все еще необходим.
> [!NOTE]
> Этот вариант проверен и должен работать. Тем не менее патч 10 летней давности, который включает SHA256 сигнатуры, все еще необходим.
2) Взломать **ESU** :
2) Взломать ESU :
https://hackandpwn.com/windows-7-esu-patching/
http://www.bifido.net/tweaks-and-scripts/8-extended-security-updates-installer.html
и обновить систему
3) Использовать UpdatePack7R2 от simplix : https://blog.simplix.info
> [!WARNING]
> Но с этим паком есть проблема. Автор из Украины, он очень обиделся на русских.
> Если в панели управления стоит регион RU или BY, появляется неприятный диалог.
> Чтобы эту проблему обойти, можно поставить временно любой другой регион, потом вернуть.
> Так же нет никаких гарантий, что автор не насовал туда какой-то зловредный код.
> Использовать на свой страх и риск.
Но с этим паком есть проблема. Автор из Украины, он очень обиделся на русских.
Если в панели управления стоит регион RU или BY, появляется неприятный диалог.
Чтобы эту проблему обойти, можно поставить временно любой другой регион, потом вернуть.
Так же нет никаких гарантий, что автор не насовал туда какой-то зловредный код.
Использовать на свой страх и риск.
Более безопасный вариант - скачать последнюю нормальную довоенную версию : 22.2.10
https://nnmclub.to/forum/viewtopic.php?t=1530323
Ее достаточно, чтобы _windivert 2.2.2-A_ заработал на windows 7.
Ее достаточно, чтобы windivert 2.2.2-A заработал на windows 7.
## blockcheck
blockcheck
----------
`blockcheck.sh` написан на _posix shell_ и требует некоторых стандартных утилит _posix_. В windows, естественно, этого нет.
Потому просто так запустить `blockcheck.sh` невозможно.
Для этого требуется скачать и установить _cygwin_ так , как описано в предыдущем разделе.
Следует запустить от имени администратора _cygwin shell_ через `cygwin.bat`.
blockcheck.sh написан на posix shell и требует некоторых стандартных утилит posix. В windows, естественно, этого нет.
Потому просто так запустить blockcheck.sh невозможно.
Для этого требуется скачать и установить cygwin так , как описано в предыдущем разделе.
Следует запустить от имени администратора cygwin shell через cygwin.bat.
В нем нужно пройти в директорию с zapret.
Обратные слэши путей windows нужно удваивать, менять на прямые слэши, либо использовать отображение на unix path.
Корректные варианты :
- `cd C:\\Users\\vasya`
- `cd C:/Users/vasya`
- `cd /cygdrive/c/Users/vasya`
Существует неочевидный момент, каcаемый запуска **winws** из _cygwin_ шелла. Если в директории, где находится **winws**, есть копия `cygwin1.dll`, **winws** не запустится. Нужно переименовать файл `cygwin1.dll`.
Далее все как в _*nix_ : 1 раз `./install_bin.sh` , затем `./blockcheck.sh`.
Корректный вариант 1 : cd "C:\\Users\\vasya"
Корректный вариант 2 : cd "C:/Users/vasya"
Корректный вариант 3 : cd "/cygdrive/c/Users/vasya"
Существует неочевидный момент, каcаемый запуска winws из cygwin шелла. Если в директории, где находится winws, находится
копия cygwin1.dll, winws не запустится. Нужно переименовать файл cygwin1.dll.
Далее все как в *nix : 1 раз ./install_bin.sh , затем ./blockcheck.sh.
WSL использовать нельзя, это не то же самое.
_cygwin_ для обычной работы **winws** не нужен.
cygwin для обычной работы winws не нужен.
Однако, хотя такой способ и работает, использование **winws** сильно облегчает [zapret-win-bundle](https://github.com/bol-van/zapret-win-bundle).
Там нет проблемы с `cygwin.dll`.
Однако, хотя такой способ и работает, использование winws сильно облегчает zapret-win-bundle.
Там нет проблемы с cygwin.dll.
## Автозапуск winws
автозапуск winws
----------------
Для запуска **winws** вместе с windows есть 2 варианта. Планировщик задач или службы windows.
Для запуска winws вместе с windows есть 2 варианта. Планировщик задач или службы windows.
Можно создавать задачи и управлять ими через консольную программу schtasks.
В директории `binaries/win64/winws` подготовлены файлы `task_*.cmd` .
В них реализовано создание, удаление, старт и стоп одной копии процесса winws с параметрами из переменной `%WINWS1%`.
В директории binaries/win64/winws подготовлены файлы task_*.cmd .
В них реализовано создание, удаление, старт и стоп одной копии процесса winws с параметрами из переменной %WINWS1%.
Исправьте параметры на нужную вам стратегию. Если для разных фильтров применяется разная стратегия, размножьте код
для задач _winws1_,_winws2_,_winws3_,_..._
для задач winws1,winws2,winws3,...
Аналогично настраивается вариант запуска через службы windows. Смотрите `service_*.cmd`.
Аналогично настраивается вариант запуска через службы windows. Смотрите service_*.cmd.
Все батники требуется запускать от имени администратора.
Управлять задачами можно так же из графической программы управления планировщиком `taskschd.msc`
Управлять задачами можно так же из графической программы управления планировщиком taskschd.msc
## Zapret-win-bundle
zapret-win-bundle
-----------------
Можно не возиться с _cygwin_, а взять готовый пакет, включающий в себя _cygwin_ и _blockcheck_ : https://github.com/bol-van/zapret-win-bundle
Там сделан максимум удобств для сосредоточения на самом zapret, исключая возню с установкой _cygwin_,
Можно не возиться с cygwin, а взять готовый пакет, включающий в себя cygwin и blockcheck : https://github.com/bol-van/zapret-win-bundle
Там сделан максимум удобств для сосредоточения на самом zapret, исключая возню с установкой cygwin,
заходами в директории, запусками под администратором и прочими сугубо техническими моментами, в которых могут быть
ошибки и непонимания, а новичок без базиса знаний может и вовсе запутаться.
`/zapret-winws` - здесь все, что нужно для запуска winws в повседневном рабочем режиме. остальное не нужно.\
`/zapret-winws/_CMD_ADMIN.cmd` - получить командную строку cmd в этой директории от имени администратора для тестирования **winws**
с параметрами, вводимыми вручную\
`/blockcheck/blockcheck.cmd` - достаточно кликнуть по нему, чтобы пошел _blockcheck_ с записью лога в `blockcheck/blockcheck.log`\
`/cygwin/cygwin.cmd` - запуск среды _cygwin bash_ под текущим пользователем\
`/cygwin/cygwin-admin.cmd` - запуск среды _cygwin bash_ под администратором
/zapret-winws - здесь все, что нужно для запуска winws в повседневном рабочем режиме. остальное не нужно.
/zapret-winws/_CMD_ADMIN.cmd - получить командную строку cmd в этой директории от имени администратора для тестирования winws
с параметрами, вводимыми вручную
/blockcheck/blockcheck.cmd - достаточно кликнуть по нему, чтобы пошел blockcheck с записью лога в blockcheck/blockcheck.log
/cygwin/cygwin.cmd - запуск среды cygwin bash под текущим пользователем
/cygwin/cygwin-admin.cmd - запуск среды cygwin bash под администратором
В среде _cygwin_ уже настроены alias-ы на winws,blockcheck,ip2net,mdig. С путями возиться не нужно!
> [!TIP]
> Из cygwin можно не только тестировать winws, но и посылать сигналы.
> Доступны команды:
>- `pidof`
>- `kill`
>- `killall`
>- `pgrep`
>- `pkill`
Но важно понимать, что таким образом не выйдет посылать сигналы **winws**, запущенному из _zapret-winws_,
поскольку там свой `cygwin1.dll`, и они не разделяют общее пространство процессов unix.
_zapret-winws_ - это отдельный комплект для повседневного использования, не требующий что-то еще, но и не связанный со _средой cygwin_.
Специально для посылки сигналов winws в _zapret-winws_ присутствует killall.exe.
В среде cygwin уже настроены alias-ы на winws,blockcheck,ip2net,mdig. С путями возиться не нужно !
Из cygwin можно не только тестировать winws, но и посылать сигналы.
Доступны команды pidof,kill,killall,pgrep,pkill.
Но важно понимать, что таким образом не выйдет посылать сигналы winws, запущенному из zapret-winws,
поскольку там свой cygwin1.dll, и они не разделяют общее пространство процессов unix.
zapret-winws - это отдельный комплект для повседневного использования, не требующий что-то еще, но и не связанный со средой cygwin.
Среду cygwin можно использовать для записи в файл дебаг-лога winws. Для этого пользуйтесь командой tee.
`winws --debug --wf-tcp=80,443 | tee winws.log`
`winws.log` будет в `cygwin/home/<имя_пользователя>`
winws --debug --wf-tcp=80,443 | tee winws.log
winws.log будет в cygwin/home/<имя_пользователя>
Если у вас windows 7, то блокнот не поймет переводы строк в стиле unix. Воспользуйтесь командой
`unix2dos winws.log`
unix2dos winws.log
> [!CAUTION]
> Поскольку 32-битные windows мало востребованы, _zapret-win-bundle_ существует только в варианте для windows _x64/arm64_.
Поскольку 32-битные windows мало востребованы, zapret-win-bundle существует только в варианте для windows x64/arm64.