What's new

Лично у меня совсем нет опыта в android development, и вряд ли я начну делать аппликуху сам. Но если кто желает, пожалуйста.
Хотя, если так подумать, то при таком подходе зачем нужен бинарик tpws ? Ведь можно то же самое и на яве соорудить. Не зависеть от платформы.
С tpws преимущество разве что в скорости немного. Но я не думаю, что это существенно для мобильников

Можно сделать универсальную аппликуху для рута и без рута. Если рут, то адвансед моде и тпвс в транспарент режиме, иначе через выкрутасы

В tpws добавлена опция --hostpad=
Добавляет паддинг-хедеров перед Host: на указанное количество байтов
Полезно против DPI, выполняющих реассемблинг TCP с ограниченным буфером.
Если техника работает, то после некоторого количества bytes http запрос начнет проходить до сайта.
Если при этом критический размер padding около MTU, значит скорее всего DPI не выполняет реассемблинг пакетов, и лучше будет использовать обычные опции --split-…
Если все же реассемблинг выполняется, то критический размер будет около размера буфера DPI. Он может быть 4K или 8K, возможны и другие значения.

Реализована атака десинхронизации DPI для http и https. За основу взята идея от ValdikSS.

Очень крутая и полезная вещь, у нескольких хостеров (включая Селектел) отлично работает, что позволяет пользоваться запрещёнкой без оверхеда на VPN с большим RTT.
Спасибо!

Речь про десинхронизацию или другие опции ?
Пока про десинхронизацию у меня нет отзывов, тестирование было крайне ограниченным

Да, речь про десинхронизацию и она прекрасна своей изящностью в сочетании с минимальным оверхедом.

Добавлен выбор режима десинхронизации DPI.
На текущий момент это может быть

  • поддельный пакет с разрешенным запросом : --dpi-desync без параметра или --dpi-desync=fake
  • пакет сброса соединения : --dpi-desync=rst

Добавлен режим disorder для dpi-desync.

В этом режиме пакет с http request или tls client hello разбивается на 2 части. Отсылка идет следующим образом :

  1. 2-й сегмент
  2. поддельный 1-й сегмент
  3. 1-й сегмент
  4. поддельный 1-й сегмент

цель атаки - максимально усложнить DPI реконструкцию сообщения, по которому принимается решение о блокировке

Исправлен баг, при котором была невозможна отправка поддельных пакетов ipv4 и ipv6 с одного процесса nfqws. Для 4 и 6 теперь используются разные raw сокеты.

Добавлен режим --dpi-desync-fooling=badseq. Испорченные sequence numbers в поддельных пакетах.
Возможно сочетание любых режимов через запятую : --dpi-desync-fooling=badseq,badsum,md5sig

Отработана схема использования nfqws на мобильных модемах Huawei.
Проверено на E8372. Вероятно работает на E3372 с минимальными модификациями.
Возможно, на других устройствах.

Изменение window size в nfqws считается устаревшим и более не поддерживается в скриптах.
На замену ему приходит более быстрая альтернатива --dpi-desync=split2, лишенная других недостатков wsize (типа невозможности заменить регистр Host: при --wsize=3 на пакетах от linux клиента)

В свете последних изменений переписана вводная часть readme.

Не планируете интеграцию наработок https://github.com/Kkevsterrr/geneva ?

Универсальный тампер движок портировать с питона не планирую
Но по мере необходимости готов добавлять новые стратегии, работающие в exUSSR

Изменение поведения опций сплита в tpws.

Теперь tpws в состоянии распознавать не только http, но и TLS ClientHello.
split-http-req может применяться совместно с split-pos. Если блок данных является http запросом, будет применяться split-http-req, в ином случае split-pos.
split-pos по умолчанию работает только с http и TLS ClientHello. Если вам нужно сплитать все остальное, укажите --split-any-protocol.
–hostlist так же теперь работает со SNI из TLS ClientHello.

В config параметры TPWS_OPT_HTTP и TPWS_OPT_HTTPS удалены, вместо них единый TPWS_OPT.

Простой инсталятор и скрипты запуска адаптированы, чтобы более не запускать по отдельному инстансу на http и https. Добавлен режим tpws_hostlist_https.

В продолжение предыдущего.

В tpws добавлена возможность биндаться на множество адресов.
Параметры --bind-addr и --bind-iface* начинают новый бинд. Следующие параметры --bind-wait*, --bind-linklocal относятся к последнему бинду.
Если хотите указывать link-local явно в --bind-addr, то теперь к нему надо добавлять %interface_name.
Например : fe80::1111:2222:3333:4444%br-lan
Если явно не создан ни один бинд, то в целях совместимости параметров создается бинд по умолчанию на все адреса.

init скрипты адаптированы, чтобы запускать только 1 tpws в любых случаях. Ранее их могло быть до 6 шт.
Особую проблему это представляло при использовании hostlist. Каждый инстанс подгружал свой hostlist. RAM это съедало до 6 раз больше, чем могло бы быть. На soho роутерах и листах от РКН это означало невозможность использования в такой конфигурации

8 posts were merged into an existing topic: Обсуждение

Сделана экспериментальная поддержка flow offloading в openwrt , включая простой инсталятор
В openwrt flow offloading работает только глобально. Либо включено, либо выключено. nfqws не работает с включенным offloading.
Скрипты zapret теперь сами в состоянии выборочно управлять трафиком, который идет на offload, отключая при этом системную установку. То есть в люси у вас будет чекбоксик выключен, но оффлоад на самом деле будет работать там, где он не мешает nfqws

Тестировалось только на software flow offloading, на hardware возможности проверить нет
Если кто-то может проверить, буду благодарен.

Сделал рефакторинг системы управления режимами. Вместо впихивания нескольких опций в один строковый параметр MODE, эти опции теперь разделены по разным переменным.
Поддержка keep alive в nfqws больше не требует custom скрипта. Она теперь вшита в основной функционал.

# CHOOSE OPERATION MODE
# MODE : nfqws,tpws,filter,custom
# nfqws : use nfqws
# tpws : use tpws
# filter : no daemon, just create ipset or download hostlist
# custom : custom mode. should modify custom init script and add your own code
MODE=tpws
# apply fooling to http
MODE_HTTP=1
# for nfqws only. support http keep alives. enable only if DPI checks for http request in any outgoing packet
MODE_HTTP_KEEPALIVE=0
# apply fooling to https
MODE_HTTPS=1
# none,ipset,hostlist
MODE_FILTER=none

Добавлена проверка на подмену DNS в простой инсталятор install_easy.sh
Инсталятор сам не будет решать проблему DNS за вас, но предупредит о возможной подмене