Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
router:zapret [2025/02/04 21:23] – удалено - внешнее изменение (Дата неизвестна) 127.0.0.1router:zapret [2025/12/16 21:28] (текущий) mirocow
Строка 1: Строка 1:
 +{{tag>[asus merlin amtm entware router]}}
  
 +====== Zapret - DPI bypass multi platform Topics (NFQWS)  ======
 +
 +  * [[:nfqws]]
 +
 +===== Подготовка =====
 +
 +<code bash>
 +$ amtm 
 + ep
 + /tmp/mnt/SYS
 +</code>
 +
 +===== Установка и настройка zapret =====
 +
 +https://github.com/bol-van/zapret
 +
 +<code bash>
 +$ 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
 +</code>
 +
 +  * **Выбираем iptables**
 +  * **Выбираем имя внутреннего сетевого интерфейса (LAN), br0 - обычно в роутере**
 +  * **Выбираем режим фильтрации трафика (none, ipset, hostlist, autohostlist). - none**
 +
 +===== Обновление =====
 +
 +<code bash>
 +$ 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
 +</code>
 +
 +==== Режимы фильтрации ====
 +
 +  * 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.
 +
 +==== Текущие настройки ====
 +
 +nano /opt/zapret/config
 +<code bash>
 +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
 +</code>
 +
 +<code bash>
 +# Network settings
 +MODE_FILTER=none
 +FLOWOFFLOAD=disable
 +IFACE_LAN=br0
 +IFACE_WAN=eth0
 +BIND_INTERFACE=1  # Interface binding for stability
 +
 +# Caching and performance
 +ENABLE_DNS_CACHE=1
 +DNS_CACHE_SIZE=10000
 +DNS_CACHE_TTL=300
 +
 +# Initialization
 +INIT_APPLY_FW=1
 +DISABLE_IPV6=0
 +DEBUGLOG=0
 +# Additional optimizations
 +#SKIP_IPv4_DISABLED=1
 +#SKIP_IPv6_DISABLED=1
 +ENABLE_FAST_START=1
 +PRELOAD_IPSETS=1  # Ipsets preloading for speed
 +
 +# YouTube-specific optimizations
 +YOUTUBE_CDN_OPTIMIZE=1
 +ENABLE_QUIC_BYPASS=1
 +AGGRESSIVE_RETRANSMISSION=1
 +</code>
 +
 +==== Подготовка листа доменов для обработки ====
 +
 +<code bash>
 +$ echo '' > /opt/zapret/ipset/youtube_domain_list.txt
 +</code>
 +
 +=== Только для теста ===
 +
 +  * [[:config-default]]
 +
 +===== NWQWS_OPT =====
 +
 +<code>
 +--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>                              ; фиксированный список подсетей через запятую. можно использовать # в начале для комментирования отдельных подсетей.
 +</code>
 +
 +^ Параметр / Комбинация                                           ^ Возможная проблема                                                                                                                  ^
 +| --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
 +<code>
 +www.youtube.com
 +youtube.com
 +</code>
 +
 +nano /opt/zapret/ipset/zapret-hosts-user-exclude.txt 
 +<code>
 +
 +</code>
 +
 +nano /opt/zapret/ipset/youtube_domain_list.txt
 +<code>
 +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
 +</code>
 +
 +nano /opt/zapret/ipset/zapret-ip-exclude.txt
 +<code>
 +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
 +</code>
 +
 +==== Скрипты ====
 +
 +  * [[:discord]]
 +
 +==== Отключение проверки контрольной суммы пакетов ====
 +
 +<code bash>
 +$ opkg install procps-ng-sysctl
 +</code>
 +
 +nano /opt/etc/init.d/S00fix
 +<code bash>
 +#!/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
 +</code>
 +
 +<code bash>
 +$ chmod +x /opt/etc/init.d/S00fix
 +</code>
 +
 +/tmp/mnt/SYS/entware/zapret/ipset/get_refilter_domains.sh
 +<code bash>
 +#!/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
 +</code>
 +
 +==== Запуск ====
 +
 +<code bash>
 +$ /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
 +</code>
 +
 +==== Автозапуск ====
 +
 +nano /jffs/scripts/firewall-start  
 +<code bash>
 +#!/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
 +</code>
 +
 +<code bash>
 +$ chmod +x /jffs/scripts/firewall-start
 +</code>