Вот по dest ip и нужно, теоретически это могло бы быть и отдельным профилем, но фильтра по IP там нет. Да и наверное это слишком частный случай, чтобы добавлять фильтр по IP для профилей, хотя было бы неплохо.
Переносить функционал ipset в nfqws теоретически имело бы только смысл на винде.
На остальных это в ядре есть в виде таблиц или сетов различных.
Все делается через custom script
Поэтому я и взял старый ноут и на нем экспериментирую. Работает - хорошо, не работает и хрен с ним, в один клик свичнул прокси в браузере и ни в одном глазу. Экспериментировать на роутере, который просто работает и от которого я ни логина, ни пароля уже не помню, никакого желания нет.
Потихоньку соберу своего крокодила тогда и можно будет переселить или на роутер или, скорее всего, на отдельный все же одноплатник.
@bolvan Спасибо за грандиозную работу!
У вас, как у автора zapret’а, хотел уточнить пару моментов, если позволите:
Используется padavan со включёнными модулями xt_NFQUEUE и nfnetlink_queue, nfqws заводится с успехом, но решил перенастроить S51nfqws под себя. Ваш пакет через install_* не ставил, воткнул бинарники, настроил соответствующие пути и всё, кроме ютуб, работает.
Хочу завести по вашей ссылке, но встал вопрос: как значение NFQWS_OPT_DESYNC передаётся для собственного запускаемого бинарника из шелл файла? Параллельно с NFQWS_ARGS или подменяется его значение?
Вопрос в следующем контексте, чтобы передавать для запуска разные параметры, оформил функцией
_startup_args() {
local args="--filter-tcp=443"
# All
args="$args $NFQWS_ARGS $NFQWS_EXTRA_ARGS"
# Fake
if [ "$NFQWS_ARGS_FAKE" != "" ]; then
args="$args --new --filter-tcp=443 $NFQWS_ARGS_FAKE"
fi
# QUIC
if [ "$QUIC_ENABLED" -eq "1" ]; then
args="$args --new --filter-udp=443 $NFQWS_ARGS_QUIC"
# args="$args $NFQWS_ARGS_FAKE_QUIC"
fi
# DESYNC
if [ "$NFQWS_OPT_DESYNC" != "" ]; then
args="$args --filter-tcp=443 $NFQWS_OPT_DESYNC"
if [ -z "$IPV6_ENABLED" ] || [ "$IPV6_ENABLED" -eq "1" ]; then
args="$args NFQWS_OPT_DESYNC_HTTPS6"
fi
fi
echo "$args"
}
А уже в сам бинарник запускается через
$NFQWS_BIN --daemon $LOGGING --pidfile=$PIDFILE $(_startup_args)
Как корректнее дополнить основной блок обхода DPI (чтобы работали inst, twi, прочие сайта) отдельным блоком только под ютуб?
Извините за сумбурное изложение вопроса
Хм. Что то меня тогда отпугнуло от dnsmasq - наверное просто не понял как он работает, потому что чукча не читатель, а писатель (с помощью чата гпт). Сейчас попробовал - действительно добавляет в ipset (по логам из dnsmasq это видно). Правда протестировать полноценно не могу, потому что собственно ютуб не работает.
Это правильная стратегия, потому что старый ноут есть у многих, и ноуты стандартны (IBM совместимы), а роутеры всякие разные - как в них openwrt полезет, х.з…
Эти скрипты я не писал, так что про них ничего сказать не могу.
Мои скрипты заполняют базовые параметры сами.
Потом добавляют $NFQWS_OPT_DESYNC. За ним идет блок хостлистов. В конце идет “–new $NFQWS_OPT_DESYNC_SUFFIX”, если суффикс определен. В суффикс пишуются в основном только несовместимые с хостлистами стратегии.
Вот пример процесса на моей системе
/home/opt/zapret/nfq/nfqws --qnum=200 --user=daemon --dpi-desync-fwmark=0x40000000 --hostlist=/opt/zapret_lists/list-youtube.txt --dpi-desync=fake,split2 --dpi-desync-fooling=datanoack --dpi-desync-fake-tls=/opt/zapret/files/fake/tls_clienthello_www_google_com.bin --new --dpi-desync=fake,split2 --dpi-desync-fooling=datanoack --hostlist=/home/opt/zapret/ipset/zapret-hosts-user.txt --hostlist-exclude=/home/opt/zapret/ipset/zapret-hosts-user-exclude.txt --hostlist-auto=/home/opt/zapret/ipset/zapret-hosts-auto.txt --hostlist-auto-fail-threshold=3 --hostlist-auto-fail-time=60 --hostlist-auto-retrans-threshold=3 --hostlist-auto-debug=/home/opt/zapret/ipset/zapret-hosts-auto-debug.log
Подскажите, в zapret есть функция HEX как в goodbyedpi? Если да, то какой должен быть конфиг?
nfqws --qnum=200 --dpi-desync=split2 --dpi-desync-split-pos=1 --hostlist=/youtubet.txt
nft create table inet ztest
nft add chain inet ztest post "{type filter hook postrouting priority mangle;}"
nft add rule inet ztest post tcp dport "{80,443}" ct original packets 1-12 queue num 200 bypass
nft add rule inet ztest post udp dport 443 ct original packets 1-4 queue num 200 bypass
В целом работает удовлетворительно. Иногда бывают некоторые затыки, в первую очередь в прямых эфирах.
Спасибо, попробовал конфигурацию (тупо перезатёр $args вашим кодом), ютуб стал запускать очень медленно (пчелайн), в роликах даже страница не прогружается
Я четко означил, что это не копипаста. Копипаста не работает
Если речь о --fake-from-hex, то фейки в nfqws загружаются отдельно из файлов для каждого известного типа протокола и для неизвестных протоколов. Можно и в HEX, но HEX константам должно предшествовать 0x. См опции командной строки.
Фейк для TLS по умолчанию радномизируется на предмет SNI, session id и random полей TLS ClientHello. Если указаны внешние данные - они шлются как есть.
Хм, а чем так плохо использовать zapret для вообще всех хостов? Замедления интернета у себя не заметил.
И ещё интересно насколько часта ситуация, что реально не объединить несколько стратегий в одну - и из-за этого приходится такие длинные конструкции писать.
Такая необходимость у меня реально возникла только для youtube.
Раньше жили без мультистратегий, и все было норм.
Добрый день.
роутер с openwrt. установлен zapret.
долго пытался подобрать различные варианты чтобы работало приложение smarttube на android tv (на пк ютуб работает отлично). Блокировал 443 порт udp - не помогло. в итоге запустил эмулятор андроида и там установил smarttube. естественно так же не работало. но когда еще параллельно запустил на этом же пк zapret-winws с базовой настройкой, увидел что в приложении smarttube начали появляться хотя бы окошки с видео, но не воспроизводились. в итоге решил из конфига win версии потихоньку выкидывал рандомно ключи и в один прекрасный момент smarttube заработал. когда отключил zapret на роутере естественно smarttube перестал работать. вопрос в том, как теперь правильно объединить конфиги в один на роутере чтобы smarttube на android tv и ютуб на компе работали?
конфиг на win версии
Спойлер
start “zapret: http,https,quic” /min “%~dp0winws.exe” --wf-tcp=80,443 --wf-udp=443 --filter-udp=443 --new --filter-tcp=443 --dpi-desync=fake --dpi-desync-fooling=md5sig --dpi-desync-fake-tls=“%~dp0tls_clienthello_www_google_com.bin” --new --dpi-desync=fake,disorder2 --dpi-desync-fooling=md5sig
конфиг на роутере
Спойлер
NFQWS_OPT_DESYNC=“–dpi-desync=split --dpi-desync-fooling=badseq”
#NFQWS_OPT_DESYNC_HTTP=“–dpi-desync=split --dpi-desync-ttl=0 --dpi-desync-fooling=badsum”
#NFQWS_OPT_DESYNC_HTTPS=“–wssize=1:6 --dpi-desync=split --dpi-desync-ttl=0 --dpi-desync-fooling=badsum”
#NFQWS_OPT_DESYNC_HTTP6=“–dpi-desync=split --dpi-desync-ttl=5 --dpi-desync-fooling=none”
#NFQWS_OPT_DESYNC_HTTPS6=“–wssize=1:6 --dpi-desync=split --dpi-desync-ttl=5 --dpi-desync-fooling=none”
NFQWS_OPT_DESYNC_QUIC=“–dpi-desync=fake --dpi-desync-repeats=6 --dpi-desync-ttl=0 --dpi-desync-any-protocol --dpi-desync-cutoff=d4 --dpi-desync-fooling=md5sig,badsum --dpi-desync-fake-quic=/opt/zapret/files/fake/quic_initial_google_com.bin”
#NFQWS_OPT_DESYNC_QUIC6=“–dpi-desync=hopbyhop”
+1, тоже только с таким конфигом на ПК работает и то, половина GGC возвращают 403, а на тв (WebOS) как будто сами видео грузятся, а остальной фронт - нет
upd: android и iOS тоже работают
upd2: завелось с этим конфигом везде
start “zapret: http,https,quic” /min “%~dp0winws.exe” --wf-tcp=80,443 --wf-udp=443 --filter-udp=443 --new --filter-tcp=443 --dpi-desync=fake --dpi-desync-fooling=md5sig --dpi-desync-fake-tls=“%~dp0tls_clienthello_www_google_com.bin” --new --dpi-desync=fake,disorder2 --dpi-desync-fooling=md5sig
Зачем делать пустой профиль с udp ? Надо убрать перехват udp из windivert фильтра.
Тоже самое касается и 80 tcp.
Тогда фильтр tcp вообще не нужен будет
start “zapret: http,https,quic” /min “%~dp0winws.exe” --wf-tcp=443 --dpi-desync=fake --dpi-desync-fooling=md5sig --dpi-desync-fake-tls=“%~dp0tls_clienthello_www_google_com.bin” --new --dpi-desync=fake,disorder2 --dpi-desync-fooling=md5sig
В роутер пишется тоже самое, но без windivert. wf-tcp не сработает и не нужен
Да, еще пути поправить, конечно
@bolvan Подскажите, пожалуйста, правильно ли понимаю, что в блокчеке:
- при проверке http и tls используется фейк=0x00000000?
- при проверке quic фейк вообще не используется?
И можно ли сделать, чтоб использовался tls_clienthello_translate_google_com.bin в 1-ом случае и quic_ietf_google_com_2.bin во 2-ом?
Наличие фейка зависит не от опции --dpi-desync-fake-tls, а от --dpi-desync=fake.
там есть фейк по умолчанию для каждого известного протокола. для tls делается некоторая рандомизация фейка по умолчанию.
что касается специализированных не общих пейлоадов, то я не буду скакать за веяниями текущего момента и вносить частные случаи в блокчек как “простое решение” из коробки
кому надо - допишите параметр в код скрипта. это делается достаточно просто
сделал переменные PKTWS_EXTRA, TPWS_EXTRA
чтобы эти параметры добавлялись всегда к параметрам запуска соотв демонов
и туда уже вносите что угодно
см тему whats new
Большое вам спасибо!
Можно еще уточнить плс, PKTWS_EXTRA="--dpi-desync-fake-tls=/opt/zapret/files/fake/tls_clienthello_www_google_com.bin" ./blockcheck.sh
нужно самому добавить в начало скрипта blockcheck.sh, так? Или в blog.sh?