Zapret - DPI bypass multi platform Topics (NFQWS)

nfqws - Эта программа - модификатор пакетов и обработчик очереди NFQUEUE

Подготовка

$ amtm ep /tmp/mnt/SYS

Установка и настройка zapret

https://github.com/bol-van/zapret

$ wget https://github.com/bol-van/zapret/releases/download/v72.3/zapret-v72.3.tar.gz $ tar -xvzf zapret-v72.3.tar.gz $ cd zapret-v72.3 $ ./install_easy.sh - Y - Y - Y - Y - 1 : iptables - Y - N - N - Y - N - 3 - br0 - 8 - eth0 - 3
$ wget https://github.com/bol-van/zapret2/releases/download/v0.9.5.2/zapret2-v0.9.5.2.tar.gz $ tar -xvzf zapret2-v0.9.5.2.tar.gz $ cd zapret2-v0.9.5.2 $ ./install_easy.sh

Выбираем iptables

Выбираем имя внутреннего сетевого интерфейса (LAN), br0 - обычно в роутере

Выбираем режим фильтрации трафика (none, ipset, hostlist, autohostlist). - none

Обновление

$ wget https://github.com/bol-van/zapret/releases/download/v72.3/zapret-v72.3.tar.gz $ tar -xvzf zapret-v72.3.tar.gz $ cd zapret-v72.3 $ ./install_bin.sh

Режимы фильтрации

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

ipset - фильтрация трафика с помощью ipset. Сложный режим, как работает читаем в инструкции.

hostlist - фильтрация списком хостов из файлов: /opt/zapret/ipset/zapret-hosts-user.txt - прописывайте свои домены, которые нужно обрабатывать или в файле/opt/zapret/ipset/zapret-hosts-user-exclude.txt - домены, которые нужно исключить из обработки. Пишется по одному доменному имени или IP-адресу на строчку. То что там изначально написано в файлах - удаляем. Рекомендую это режим использовать, если хотите обрабатывать только определенные адреса или наоборот если хотите исключить из обработки некоторые адреса.

autohostlist -режим hostlist + распознавание блокировок и ведение автоматического листа.

Режим фильтра также можно потом менять через параметр MODE_FILTER в /opt/zapret/config.

Текущие настройки

v1

nano /opt/zapret/config

WS_USER=nobody FWTYPE=iptables SET_MAXELEM=1048576 IPSET_OPT="hashsize 262144 maxelem $SET_MAXELEM" IP2NET_OPT4="--prefix-length=22-30 --v4-threshold=3/4" IP2NET_OPT6="--prefix-length=48-64 --v6-threshold=3" AUTOHOSTLIST_RETRANS_THRESHOLD=3 AUTOHOSTLIST_FAIL_THRESHOLD=3 AUTOHOSTLIST_FAIL_TIME=30 AUTOHOSTLIST_DEBUGLOG=0 MDIG_THREADS=50 GZIP_LISTS=1 DESYNC_MARK=0x40000000 DESYNC_MARK_POSTNAT=0x20000000 TPWS_SOCKS_ENABLE=0 TPPORT_SOCKS=987 TPWS_SOCKS_OPT=" --filter-tcp=80 --methodeol <HOSTLIST> --new --filter-tcp=443 --split-pos=1,midsld --disorder <HOSTLIST> " TPWS_ENABLE=0 TPWS_PORTS=80,443 TPWS_OPT=" --filter-tcp=80 --methodeol --split-pos=2,midsld --hostlist=/opt/zapret/ipset/youtube_domain_list.txt --new --filter-tcp=443 --split-pos=2,midsld --disorder --hostlist=/opt/zapret/ipset/youtube_domain_list.txt " NFQWS_ENABLE=1 NFQWS_PORTS_TCP=80,443 NFQWS_PORTS_UDP=443 NFQWS_TCP_PKT_OUT=$((6+$AUTOHOSTLIST_RETRANS_THRESHOLD)) NFQWS_TCP_PKT_IN=3 NFQWS_UDP_PKT_OUT=$((6+$AUTOHOSTLIST_RETRANS_THRESHOLD)) NFQWS_UDP_PKT_IN=0 MODE_HTTP=1 MODE_HTTPS=1 MODE_QUIC=1 NFQWS_OPT=" # YouTube rules --filter-tcp=80 --dpi-desync=fake,multisplit --dpi-desync-ttl=1 --hostlist=/opt/zapret/ipset/youtube_domain_list.txt --new --filter-tcp=443 --dpi-desync=fake,multidisorder --dpi-desync-split-pos=1 --dpi-desync-ttl=1 --dpi-desync-fake-tls=/opt/zapret/files/fake/tls_clienthello_www_google_com.bin --hostlist=/opt/zapret/ipset/youtube_domain_list.txt --new #--filter-udp=443 --dpi-desync=fake --dpi-desync-ttl=1 --dpi-desync-fake-quic=/opt/zapret/files/fake/quic_initial_www_google_com.bin --hostlist=/opt/zapret/ipset/youtube_domain_list.txt --filter-udp=443 --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_www_google_com.bin --hostlist=/opt/zapret/ipset/youtube_domain_list.txt # Main rules --filter-tcp=80,443 --dpi-desync=fake --dpi-desync-ttl=0 --filter-udp=443 --dpi-desync=fake --dpi-desync-ttl=0 " NFQWS_OPT_DESYNC="--dpi-desync=fake,disorder2 --dpi-desync-split-pos=1 --dpi-desync-ttl=0 --dpi-desync-fooling=md5sig,badsum --dpi-desync-repeats=6 --dpi-desync-any-protocol --dpi-desync-cutoff=d4 --dpi-desync-fake-tls=/opt/zapret/files/fake/tls_clienthello_www_google_com.bin" 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_www_google_com.bin" # Network settings MODE_FILTER=none FLOWOFFLOAD=disable IFACE_LAN=br0 IFACE_WAN=eth0 # Initialization INIT_APPLY_FW=1 DISABLE_IPV6=0 DEBUGLOG=0

v2

nano /opt/zapret2/config

# General Settings WS_USER=nobody FWTYPE=iptables SET_MAXELEM=1048576 IPSET_OPT="hashsize 262144 maxelem $SET_MAXELEM" # Resource Management MDIG_THREADS=50 GZIP_LISTS=1 DESYNC_MARK=0x40000000 DESYNC_MARK_POSTNAT=0x20000000 # NFQWS2 Engine Settings # NFQWS_ENABLE in zapret1 is often NFQWS2_ENABLE in zapret2 scripts NFQWS2_ENABLE=1 NFQWS_PORTS_TCP=80,443 NFQWS_PORTS_UDP=443 # Main Zapret2 Logic (Lua-based) # You must have zapret-lib.lua and zapret-antidpi.lua in the working directory NFQWS_OPT=" --lua-init=@zapret-lib.lua --lua-init=@zapret-antidpi.lua # YouTube Rules (Lua equivalents of your old strategies) --filter-tcp=80 --hostlist=/opt/zapret2/ipset/youtube_domain_list.txt --payload=http_req --lua-desync=multisplit:pos=2 --new --filter-tcp=443 --hostlist=/opt/zapret2/ipset/youtube_domain_list.txt --payload=tls_client_hello --lua-desync=multidisorder:pos=1:fake:blob=fake_default_tls --new --filter-udp=443 --hostlist=/opt/zapret2/ipset/youtube_domain_list.txt --payload=quic_initial --lua-desync=fake:blob=fake_default_quic:repeats=6 --new # General Rules (Fallback) --filter-tcp=80,443 --payload=tls_client_hello,http_req --lua-desync=fake --new --filter-udp=443 --payload=quic_initial --lua-desync=fake " # Network settings MODE_FILTER=none FLOWOFFLOAD=disable IFACE_LAN=br0 IFACE_WAN=eth0 # Initialization INIT_APPLY_FW=1 DISABLE_IPV6=0 DEBUGLOG=0

Подготовка листа доменов для обработки

$ echo '' > /opt/zapret/ipset/youtube_domain_list.txt

Только для теста

config-default

NWQWS_OPT

--debug=0|1 ; 1=выводить отладочные сообщения
--dry-run ; проверить опции командной строки и выйти. код 0 - успешная проверка.
--version ; вывести версию и выйти
--comment ; любой текст (игнорируется)
--daemon ; демонизировать прогу
--pidfile=<file> ; сохранить PID в файл
--user=<username> ; менять uid процесса
--uid=uid[:gid] ; менять uid процесса
--qnum=N ; номер очереди N
--bind-fix4 ; пытаться решить проблему неверного выбора исходящего интерфейса для сгенерированных ipv4 пакетов
--bind-fix6 ; пытаться решить проблему неверного выбора исходящего интерфейса для сгенерированных ipv6 пакетов
--ctrack-timeouts=S:E:F[:U] ; таймауты внутреннего conntrack в состояниях SYN, ESTABLISHED, FIN, таймаут udp. по умолчанию 60:300:60:60
--ctrack-disable=[0|1] ; 1 или остутствие аргумента отключает conntrack
--ipcache-lifetime=<int> ; время жизни записей кэша IP в секундах. 0 - без ограничений.
--ipcache-hostname=[0|1] ; 1 или отсутствие аргумента включают кэширование имен хостов для применения в стратегиях нулевой фазы
--wsize=<winsize>[:<scale_factor>] ; менять tcp window size на указанный размер в SYN,ACK. если не задан scale_factor, то он не меняется (устарело !)
--wssize=<winsize>[:<scale_factor>] ; менять tcp window size на указанный размер в исходящих пакетах. scale_factor по умолчанию 0. (см. conntrack !)
--wssize-cutoff=[n|d|s]N ; изменять server window size в исходящих пакетах (n), пакетах данных (d), относительных sequence (s) по номеру меньше N
--wssize-forced-cutoff=0|1 ; 1(default)=автоматически отключать wssize в случае обнаружения известного протокола
--synack-split=[syn|synack|acksyn] ; выполнить tcp split handshake. вместо SYN,ACK отсылать только SYN, SYN+ACK или ACK+SYN
--orig-ttl=<int> ; модифицировать TTL оригинального пакета
--orig-ttl6=<int> ; модифицировать ipv6 hop limit оригинальных пакетов. если не указано, используется значение --orig-ttl
--orig-autottl=[<delta>[:<min>[-<max>]]|-] ; режим auto ttl для ipv4 и ipv6. по умолчанию: +5:3-64. "0:0-0" или "-" отключает функцию
--orig-autottl6=[<delta>[:<min>[-<max>]]|-] ; переопределение предыдущего параметра для ipv6
--orig-tcp-flags-set=<int|0xHEX|flaglist> ; устанавливать указанные tcp флаги (flags |= value). число , либо список через запятую : FIN,SYN,RST,PSH,ACK,URG,ECE,CWR,AE,R1,R2,R3
--orig-tcp-flags-unset=<int|0xHEX|flaglist> ; удалять указанные tcp флаги (flags &= ~value)
--orig-mod-start=[n|d|s]N ; применять orig-mod только в исходящих пакетах (n), пакетах данных (d), относительных sequence (s) по номеру больше или равно N
--orig-mod-cutoff=[n|d|s]N ; применять orig-mod только в исходящих пакетах (n), пакетах данных (d), относительных sequence (s) по номеру меньше N
--dup=<int> ; высылать N дубликатов до оригинала
--dup-replace=[0|1] ; 1 или отсутствие аргумента блокирует отправку оригинала. отправляются только дубликаты.
--dup-ttl=<int> ; модифицировать TTL дубликатов
--dup-ttl6=<int> ; модифицировать ipv6 hop limit дубликатов. если не указано, используется значение --dup-ttl
--dup-autottl=[<delta>[:<min>[-<max>]]|-] ; режим auto ttl для ipv4 и ipv6. по умолчанию: +1:3-64. "0:0-0" или "-" отключает функцию
--dup-autottl6=[<delta>[:<min>[-<max>]]|-] ; переопределение предыдущего параметра для ipv6
--dup-tcp-flags-set=<int|0xHEX|flaglist> ; устанавливать указанные tcp флаги (flags |= value). число , либо список через запятую : FIN,SYN,RST,PSH,ACK,URG,ECE,CWR,AE,R1,R2,R3
--dup-tcp-flags-unset=<int|0xHEX|flaglist> ; удалять указанные tcp флаги (flags &= ~value)
--dup-fooling=<fooling> ; дополнительные методики как сделать, чтобы дубликат не дошел до сервера. none md5sig badseq badsum datanoack ts hopbyhop hopbyhop2
--dup-ts-increment=<int|0xHEX> ; инкремент TSval для ts. по умолчанию -600000
--dup-badseq-increment=<int|0xHEX> ; инкремент sequence number для badseq. по умолчанию -10000
--dup-badack-increment=<int|0xHEX> ; инкремент ack sequence number для badseq. по умолчанию -66000
--dup-ip-id=same|zero|seq|rnd ; режим назначения ip_id для пакетов dup
--dup-start=[n|d|s]N ; применять dup только в исходящих пакетах (n), пакетах данных (d), относительных sequence (s) по номеру больше или равно N
--dup-cutoff=[n|d|s]N ; применять dup только в исходящих пакетах (n), пакетах данных (d), относительных sequence (s) по номеру меньше N
--hostcase ; менять регистр заголовка "Host:" по умолчанию на "host:".
--hostnospace ; убрать пробел после "Host:" и переместить его в конец значения "User-Agent:" для сохранения длины пакета
--methodeol ; добавить перевод строки в unix стиле ('\n') перед методом и убрать пробел из Host: : "GET / ... Host: domain.com" => "\nGET / ... Host:domain.com"
--hostspell=HoST ; точное написание заголовка Host (можно "HOST" или "HoSt"). автоматом включает --hostcase
--domcase ; домен после Host: сделать таким : TeSt.cOm
--ip-id=seq|seqgroup|rnd|zero ; режим назначения ip_id для генерированных пакетов
--dpi-desync=[<mode0>,]<mode>[,<mode2] ; атака по десинхронизации DPI. mode : synack syndata fake fakeknown rst rstack hopbyhop destopt ipfrag1 multisplit multidisorder fakedsplit hostfakesplit fakeddisorder ipfrag2 udplen tamper
--dpi-desync-fwmark=<int|0xHEX> ; бит fwmark для пометки десинхронизирующих пакетов, чтобы они повторно не падали в очередь. default = 0x40000000
--dpi-desync-ttl=<int> ; установить ttl для десинхронизирующих пакетов
--dpi-desync-ttl6=<int> ; установить ipv6 hop limit для десинхронизирующих пакетов. если не указано, используется значение --dpi-desync-ttl
--dpi-desync-autottl=[<delta>[:<min>[-<max>]]|-] ; режим auto ttl для ipv4 и ipv6. по умолчанию: 1:3-20. "0:0-0" или "-" отключает функцию
--dpi-desync-autottl6=[<delta>[:<min>[-<max>]]|-] ; переопределение предыдущего параметра для ipv6
--dpi-desync-tcp-flags-set=<int|0xHEX|flaglist> ; устанавливать указанные tcp флаги (flags |= value). число , либо список через запятую : FIN,SYN,RST,PSH,ACK,URG,ECE,CWR,AE,R1,R2,R3
--dpi-desync-tcp-flags-unset=<int|0xHEX|flaglist> ; удалять указанные tcp флаги (flags &= ~value)
--dpi-desync-fooling=<fooling> ; дополнительные методики как сделать, чтобы фейковый пакет не дошел до сервера. none md5sig badseq badsum datanoack ts hopbyhop hopbyhop2
--dpi-desync-repeats=<N> ; посылать каждый генерируемый в nfqws пакет N раз (не влияет на остальные пакеты)
--dpi-desync-skip-nosni=0|1 ; 1(default)=не применять dpi desync для запросов без hostname в SNI, в частности для ESNI
--dpi-desync-split-pos=N|-N|marker+N|marker-N ; список через запятую маркеров для tcp сегментации в режимах split и disorder
--dpi-desync-split-seqovl=N|-N|marker+N|marker-N ; единичный маркер, определяющий величину перекрытия sequence в режимах split и disorder. для split поддерживается только положительное число.
--dpi-desync-split-seqovl-pattern=[+ofs]@<filename>|0xHEX ; чем заполнять фейковую часть overlap
--dpi-desync-fakedsplit-pattern=[+ofs]@<filename>|0xHEX ; чем заполнять фейки в fakedsplit/fakeddisorder
--dpi-desync-fakedsplit-mod=mod[,mod] ; может быть none, altorder=0|1|2|3 + 0|8|16
--dpi-desync-hostfakesplit-midhost=marker+N|marker-N ; маркер дополнительного разреза сегмента с оригинальным хостом. должен попадать в пределы хоста.
--dpi-desync-hostfakesplit-mod=mod[,mod] ; может быть none, host=<hostname>, altorder=0|1
--dpi-desync-ts-increment=<int|0xHEX> ; инкремент TSval для ts. по умолчанию -600000
--dpi-desync-badseq-increment=<int|0xHEX> ; инкремент sequence number для badseq. по умолчанию -10000
--dpi-desync-badack-increment=<int|0xHEX> ; инкремент ack sequence number для badseq. по умолчанию -66000
--dpi-desync-any-protocol=0|1 ; 0(default)=работать только по http request и tls clienthello 1=по всем непустым пакетам данных
--dpi-desync-fake-tcp-mod=mod[,mod] ; список через запятую режимов runtime модификации tcp фейков (любых) : none, seq
--dpi-desync-fake-http=[+ofs]@<filename>|0xHEX	; файл, содержащий фейковый http запрос для dpi-desync=fake, на замену стандартному www.iana.org
--dpi-desync-fake-tls=[+ofs]@<filename>|0xHEX|![+offset] ; файл, содержащий фейковый tls clienthello для dpi-desync=fake, на замену стандартному. '!' = стандартный фейк
--dpi-desync-fake-tls-mod=mod[,mod] ; список через запятую режимов runtime модификации фейков : none,rnd,rndsni,sni=<sni>,dupsid,padencap
--dpi-desync-fake-unknown=[+ofs]@<filename>|0xHEX ; файл, содержащий фейковый пейлоад неизвестного протокола для dpi-desync=fake, на замену стандартным нулям 256 байт
--dpi-desync-fake-syndata=[+ofs]@<filename>|0xHEX ; файл, содержащий фейковый пейлоад пакета SYN для режима десинхронизации syndata
--dpi-desync-fake-quic=[+ofs]@<filename>|0xHEX ; файл, содержащий фейковый QUIC Initial
--dpi-desync-fake-wireguard=[+ofs]@<filename>|0xHEX ; файл, содержащий фейковый wireguard handshake initiation
--dpi-desync-fake-dht=[+ofs]@<filename>|0xHEX ; файл, содержащий фейковый пейлоад DHT протокола для dpi-desync=fake, на замену стандартным нулям 64 байт
--dpi-desync-fake-discord=[+ofs]@<filename>|0xHEX ; файл, содержащий фейковый пейлоад Discord протокола нахождения IP адреса для голосовых чатов для dpi-desync=fake, на замену стандартным нулям 64 байт
--dpi-desync-fake-stun=[+ofs]@<filename>|0xHEX ; файл, содержащий фейковый пейлоад STUN протокола для dpi-desync=fake, на замену стандартным нулям 64 байт
--dpi-desync-fake-unknown-udp=[+ofs]@<filename>|0xHEX ; файл, содержащий фейковый пейлоад неизвестного udp протокола для dpi-desync=fake, на замену стандартным нулям 64 байт
--dpi-desync-udplen-increment=<int> ; на сколько увеличивать длину udp пейлоада в режиме udplen
--dpi-desync-udplen-pattern=[+ofs]@<filename>|0xHEX ; чем добивать udp пакет в режиме udplen. по умолчанию - нули
--dpi-desync-start=[n|d|s]N ; применять dpi desync только в исходящих пакетах (n), пакетах данных (d), относительных sequence (s) по номеру больше или равно N
--dpi-desync-cutoff=[n|d|s]N ; применять dpi desync только в исходящих пакетах (n), пакетах данных (d), относительных sequence (s) по номеру меньше N
--hostlist=<filename> ; действовать только над доменами, входящими в список из filename. поддомены автоматически учитываются, если хост не начинается с '^'.
; в файле должен быть хост на каждой строке.
; список читается при старте и хранится в памяти в виде иерархической структуры для быстрого поиска.
; при изменении времени модификации файла он перечитывается автоматически по необходимости
; список может быть запакован в gzip. формат автоматически распознается и разжимается
; списков может быть множество. пустой общий лист = его отсутствие
; хосты извлекаются из Host: хедера обычных http запросов и из SNI в TLS ClientHello.
--hostlist-domains=<domain_list> ; фиксированный список доменов через зяпятую. можно использовать # в начале для комментирования отдельных доменов.
--hostlist-exclude=<filename> ; не применять дурение к доменам из листа. может быть множество листов. схема аналогична include листам.
--hostlist-exclude-domains=<domain_list> ; фиксированный список доменов через зяпятую. можно использовать # в начале для комментирования отдельных доменов.
--hostlist-auto=<filename> ; обнаруживать автоматически блокировки и заполнять автоматический hostlist (требует перенаправления входящего трафика)
--hostlist-auto-fail-threshold=<int> ; сколько раз нужно обнаружить ситуацию, похожую на блокировку, чтобы добавить хост в лист (по умолчанию: 3)
--hostlist-auto-fail-time=<int> ; все эти ситуации должны быть в пределах указанного количества секунд (по умолчанию: 60)
--hostlist-auto-retrans-threshold=<int> ; сколько ретрансмиссий запроса считать блокировкой (по умолчанию: 3)
--hostlist-auto-debug=<logfile> ; лог положительных решений по autohostlist. позволяет разобраться почему там появляются хосты.
--new ; начало новой стратегии (новый профиль)
--skip ; не использовать этот профиль . полезно для временной деактивации профиля без удаления параметров.
--filter-l3=ipv4|ipv6 ; фильтр версии ip для текущей стратегии
--filter-tcp=[~]port1[-port2]|* ; фильтр портов tcp для текущей стратегии. ~ означает инверсию. установка фильтра tcp и неустановка фильтра udp запрещает udp. поддерживается список через запятую.
--filter-udp=[~]port1[-port2]|* ; фильтр портов udp для текущей стратегии. ~ означает инверсию. установка фильтра udp и неустановка фильтра tcp запрещает tcp. поддерживается список через запятую.
--filter-l7=<proto> ; фильтр протокола L6-L7. поддерживается несколько значений через запятую. proto : http tls quic wireguard dht discord stun unknown
--filter-ssid=ssid1[,ssid2,ssid3,...] ; фильтр по имени wifi сети (только для linux)
--ipset=<filename> ; включающий ip list. на каждой строчке ip или cidr ipv4 или ipv6. поддерживается множество листов и gzip. перечитка автоматическая.
--ipset-ip=<ip_list> ; фиксированный список подсетей через запятую. можно использовать # в начале для комментирования отдельных подсетей.
--ipset-exclude=<filename> ; исключающий ip list. на каждой строчке ip или cidr ipv4 или ipv6. поддерживается множество листов и gzip. перечитка автоматическая.
--ipset-exclude-ip=<ip_list> ; фиксированный список подсетей через запятую. можно использовать # в начале для комментирования отдельных подсетей.

Параметр / Комбинация	Возможная проблема
–dpi-desync=fake,multisplit & –dpi-desync=fake,multidisorder	Слишком агрессивные методы для TLS 1.2 могут нарушать стабильность соединения, что критично для Android-плееров и Smart TV.
–dpi-desync-split-pos=10	Слишком высокое значение может не работать для обхода и негативно влиять на производительность.
–dpi-desync-ttl=1 / –dpi-desync-ttl=0	Слишком низкий TTL может помешать пакетам достигать серверов Google, которые находятся "близко" к провайдеру, что приводит к сбоям
–dpi-desync-repeats=6	Может быть недостаточно для стабильного обхода, что приводит к подвисаниям YouTube на Android
Отсутствие –dpi-desync-fooling	Без ограничителей фейки могут применяться ко всем подключениям, ломая легитимные

Фильтры

nano /opt/zapret/ipset/zapret-hosts-user.txt

www.youtube.com
youtube.com

nano /opt/zapret/ipset/zapret-hosts-user-exclude.txt

nano /opt/zapret/ipset/youtube_domain_list.txt

10tv.app
1e100.net
7tv.app
7tv.gg
7tv.io
api.7tv.app
api.ffzap.com
api.frankerfacez.com
apis.google.com
betterttv.net
cdn.7tv.app
cdn.7tv.gg
cdn.betterttv.net
cdn.frankerfacez.com
cdn2.frankerfacez.com
doubleclick.net
emotes.7tv.app
events.7tv.app
frankerfacez.com
ggpht.com
googleapis.com
googleusercontent.com
googlevideo.com
gstatic.com
gvt1.com
jnn-pa.googleapis.com
l.google.com
m.youtube.com
nhacmp3youtube.com
play.google.com
static.7tv.app
video.google.com
wide-youtube.l.google.com
www.youtube.com
youtu.be
youtube.be
youtube.ca
youtube.co
youtube.co.in
youtube.co.uk
youtube.com
youtube.com.au
youtube.com.br
youtube.com.mx
youtube.com.tr
youtube.com.ua
youtube.de
youtube.es
youtube.fr
youtube.googleapis.com
youtube.jp
youtube.nl
youtube.pl
youtube.pt
youtube.ru
youtubeapi.com
youtubechildren.com
youtubecommunity.com
youtubecreators.com
youtubeeducation.com
youtubeembeddedplayer.googleapis.com
youtubei.googleapis.com
youtubekids.com
youtube-nocookie.com
youtube-studio.com
youtube-ui.l.google.com
yt.be
yt-video-upload.l.google.com
yt3.ggpht.com
ytimg.com
i.ytimg.com
static.doubleclick.net
googleads.g.doubleclick.net

nano /opt/zapret/ipset/zapret-ip-exclude.txt

0.0.0.0/8
10.0.0.0/8
192.168.0.0/16
172.16.0.0/12
100.64.0.0/10
169.254.0.0/16
224.0.0.0/3
255.255.255.255/32

Скрипты

discord

Отключение проверки контрольной суммы пакетов

$ opkg install procps-ng-sysctl

nano /opt/etc/init.d/S00fix

#!/bin/sh start() { sysctl -w net.netfilter.nf_conntrack_checksum=0 &> /dev/null } stop() { sysctl -w net.netfilter.nf_conntrack_checksum=1 &> /dev/null } case "$1" in 'start') start ;; 'stop') stop ;; *) stop start ;; esac exit 0
$ chmod +x /opt/etc/init.d/S00fix

/tmp/mnt/SYS/entware/zapret/ipset/get_refilter_domains.sh

#!/bin/sh IPSET_DIR="$(dirname "$0")" IPSET_DIR="$(cd "$IPSET_DIR"; pwd)" . "$IPSET_DIR/def.sh" TMPLIST="$TMPDIR/list.txt" URL="https://github.com/1andrevich/Re-filter-lists/releases/latest/download/domains_all.lst" dl() { # $1 - url # $2 - file # $3 - minsize # $4 - maxsize curl -L -H "Accept-Encoding: gzip" -k --fail --max-time 60 --connect-timeout 10 --retry 4 --max-filesize $4 -o "$TMPLIST" "$1" || { echo list download failed : $1 exit 2 } dlsize=$(LC_ALL=C LANG=C wc -c "$TMPLIST" | xargs | cut -f 1 -d ' ') if test $dlsize -lt $3; then echo list is too small : $dlsize bytes. can be bad. exit 2 fi zzcopy "$TMPLIST" "$2" rm -f "$TMPLIST" } # useful in case ipban set is used in custom scripts FAIL= getipban || FAIL=1 "$IPSET_DIR/create_ipset.sh" [ -n "$FAIL" ] && exit dl "$URL" "$ZHOSTLIST" 32768 4194304 hup_zapret_daemons exit 0

Запуск

$ /tmp/mnt/SYS/entware/zapret/ipset/get_refilter_domains.sh $ /opt/zapret/init.d/sysv/zapret restart $ /opt/etc/init.d/S00fix start $ iptables -S

Автозапуск

nano /jffs/scripts/firewall-start

#!/bin/sh sleep 10 logger "hostlist" "Update domains list" /tmp/mnt/SYS/entware/zapret/ipset/get_refilter_domains.sh logger "firewall" "Applying dpi-start rules" /opt/zapret/init.d/sysv/zapret restart /opt/etc/init.d/S00fix start
$ chmod +x /jffs/scripts/firewall-start