What's new

Сюда буду сбрасывать информацию о последних изменениях в проекте

Опишу кратко назначение.
Проект нацелен на прозрачный обход блокировок на linux, в том числе на роутерах на базе openwrt
Он состоит из следующих компонент :

  1. Скрипты для автоматизации получения списка заблокированных ip и хостов и их обработки (ipset, ip2net, mdig).
  2. Программы для обхода DPI на http (nfqws,tpws), изредка работают и на https
  3. То, что не автоматизировано. Описательная часть для продвинутых пользователей : как организовать выборочное прозрачное проксирование соединений, заворот на VPN, способы модификации существующих VPN решений для изменений их стандартного протокола с целью скрытия от DPI

Изменения май-июнь 2019
Проект был существенно доработан.

Сделана максимально упрощенная установка для пользователей основных дистрибутивов linux и openwrt через скрипт install_easy.sh.
Вариант по умолчанию ставит сплиттер http запросов + Host => HOST
Переписаны скрипты для debian и openwrt.
Убрана вся каша с провайдерами, потому что все равно не буду следить за актуальностью что на каком провайдере.
Теперь все более логично. Вы выбираете что использовать : tpws или nfqws, их параметры.
Можно легко самому добавлять в скрипты запуск дополнительных демонов или их копий с разными параметрами.
Добавление правил firewall вынесено в отдельные процедуры, которые можно использовать при модификации скрипта.
Добавление правил firewall под openwrt вынесено в отдельный firewall include /etc/firewall.zapret, чтобы /etc/firewall.user использовать для своих целей и не смешивать команды.
Настройки вынесены из init скриптов в отдельный файл “config”.
Все выглядит проще и лаконичней imho
Листы РКН разрослись до мегабайтов. Теперь они хранятся в сжатом виде, что уменьшает в разы требования свободного места на роутере.
Новая программа ip2net позволяет в 2-3 раза уменьшить ipset-ы, объединяя ip в подсети.
Многопоточный ресолвер mdig делает снова реальным самостоятельный ресолвинг реестра через get_reestr.sh.
Добавлены бинарики для arm64, mips64, ppc.
Бинарики для всех архитектур, кроме mips64, запакованы в upx. Это уменьшает их размер в 2 раза.
Сделан автоматический распознаватель архитектуры и установщик бинариков - install_bin.sh
install_easy.sh в случае необнаружения подходящих бинариков может сам их собрать при условии наличия gcc,make и необходимых -dev пакетов
Можно запустить install_easy с параметром “make”, чтобы форсировать сборку.
Сделана поддержка ipv6. Она и раньше была в tpws, nfqws, но сейчас она пронесена через все компоненты.
tpws получил дополнительные функции для привязки к определенным IP и возможности по ожиданию готовности интерфейсов,
возможность чтения hostlist-ов в формате gzip
Логика управления соединениями в tpws переписана на использование неблокирующих сокетов, устранены многочисленные потенциальные проблемы кода, унаследованного у взятого где-то в сети примера не лучшего качества
nfqws больше не требует рута для работы, ограничиваясь сбросом capabilities до CAP_NET_ADMIN.
В tpws и nfqws кроме --user добавлена возможность установки uid:gid через параметр --uid. Это полезно на android, поскольку там нет /etc/passwd.
Написана документация по настройке policy based routing на примере wireguard.
Описан метод модификации wireguard для противостояния возможным попыткам заблокировать VPN протоколы на DPI (суверенный рунет).

Изменения сентябрь 2019

Выяснилось откуда в реестре появляется миллион+ IP и этот список неудержимо растет.
Автоматическое распознавание телеграм прокси.
Вот вы сидите в метро через wifi, тыкаетесь в новонайденный телеграм прокси.
А вас снифают. И сливают инфу РКН.
Переработаны скрипты получения ipset.
Добавлена поддержка листов с https://antifilter.network на замену get_antizapret.
умные префиксированныо-вычищенные листы оставляют нас всего лишь с десятками тысяч префиксов, что запросто потянет роутер с 64 Mb RAM
Переработано получение листов непосредственно из реестра (get_reestr_*.sh)
бывший get_reestr.sh переименован в get_reestr_resolve.sh. Это скрипт для самостоятельного ресолва доменов из реестра через mdig.
На смену get_combined.sh пришел get_reestr_combined.sh. Теперь он работает только с реестром, не используя другие листы.
get_reestr_ip.sh подтягивает IP в том виде, в каком они значатся в реестре
get_reestr_ip, get_reestr_combined поддерживают теперь ipv6. Оба убирают мусор , которым на данный момент считается телеграм
В ip2net добавлена поддержка ipv6 и настройка параметров через командную строку. create_ipset.sh обновлен до поддержки этой функции.
Параметры ip2net вынесены в config

Добавлена поддержка режима socks4/5
Он не требует повышенных привилегий, рута
может использоваться на нерутированных android устройствах с программами, поддерживающими socks или через хитрые методы прозрачного заворота через tun

Для разработки программы, которая бы использовала zapret, можно взять исходный код программы Intra или какого-нибудь проксификатора (например, shadowsocks). Почти все подобные программы используют badvpn tun2socks.

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

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

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

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