B4 - инструмент обхода разноуровневых DPI на Go с удобной веб-мордой. Работает на уровне ядра Linux через NFQUEUE - перехватывает сетевые пакеты и применяет к ним техники обхода.
Написан с нуля на Go - хех, это не очередной форк/обертка zapret или других существующих решений. Zapret - мощный CLI-инструмент с тонкой ручной настройкой. B4 - другой подход: веб-интерфейс, полная интеграция v2ray geodat-файлов и автоматический подбор стратегий и применение изменений на лету без перезапуска.
Мне хотелось сделать инструмент, который можно поставить на роутер или любой другой Linux-девайс, открыть в браузере и получить работающий результат - без возни с десятками аргументов командной строки.

B4 устанавливается одной командой, настраивается через веб-интерфейс и умеет автоматически подбирать рабочую стратегию обхода для конкретной сети. Поддерживает geodata-базы (v2ray/xray) - вместо ручного добавления сотен доменов/ip/asn можно подключить условные категории youtube или facebook и получить актуальный список, который обновляется вместе с базой.
Изменения применяются на лету - без перезапуска сервиса и разрыва текущих соединений.
Работает на Linux-системах, серверах и роутерах (OpenWRT, Keenetic, Entware).
Техническая спецификация
Ядро: Go, перехват пакетов через netfilter queue (NFQUEUE), отправка через raw sockets
Geodata: интеграция с geosite/geoip базами (v2ray/xray) - таргетирование по категориям доменов и IP-диапазонам, есть поддержка своего b4geoip-файла (обновляется раз в сутки)
Firewall: автоматическая настройка iptables/nftables - правила создаются и восстанавливаются автоматически (возможность переопределить)
Обработка: многопоточная - от 1 до 16 воркеров, каждый со своей очередью
Протоколы: TCP, UDP, QUIC, IPv4/IPv6
Веб-интерфейс: React 19, TypeScript, встроен в бинарник - один файл ~13 МБ (amd64), без внешних зависимостей
Установка: одна команда или через Docker
Установка
wget -qO- https://raw.githubusercontent.com/DanielLavrushin/b4/main/install.sh | bash
На некоторых роутерах home-директория может быть tmpfs (RAM), который очищается при перезагрузке. Для таких случаев лучше скачать скрипт на постоянное хранилище:
Asus Merlin:
/jffs/scripts/Keenetic/Entware:
/opt/
После установки веб-интерфейс доступен по адресу http://<ip-устройства>:7000
Поддерживаемые архитектуры: x86_64, ARM (arm64, armv7, armv6, armv5), MIPS (mipsle, mips softfloat), RISC-V.
Интерфейс

Интерфейс разбит на несколько разделов:
Dashboard - общая картина: активные соединения, статистика пакетов, активность устройств, топ доменов, непокрытые домены, аптайм и нагрузка.
Sets - наборы правил обхода: какие домены/IP обходить и какой стратегией. Вообще это основной рабочий раздел.
Discovery - автоматический подбор рабочей стратегии для конкретного домена.
Connections - живой поток соединений в реальном времени: куда идут пакеты, по какому протоколу, попадают ли под правила. Можно прямо отсюда добавить домен в сет.
Logs - лог-стрим с фильтрацией.
Settings - настройки ядра, geodata, discovery, API-интеграции, захват TLS ClientHello payload.
Основная работа происходит в разделе Sets. Каждый сет - это связка "что обходить" + "как обходить". Домены и IP можно добавлять вручную или подключать категории из geodata-баз (v2ray/xray).
Все изменения применяются мгновенно - сохранил и работает, без перезапуска. Двинул ползунок - применилось.
Первичная настройка
После установки открываем http://ip-устройства:7000 и переходим в Settings.
Settings → Geodat Settings → Download Files
Можно скачать только geosite, только geoip или оба сразу. После загрузки файлы подхватываются автоматически - кеш категорий пересоздаётся, перезапуск не нужен.
Рекомендую:
- для geosite: RUNET Freedom - наиболее полный и актуальный список для рунета. (для слабых роутеров сильно рекомендуется выбирать Loyalsoldier).
для geoip: b4geoip

API-токены
Settings → API → IPINFO.IO
Опционально - токен для обогащения IP-адресов информацией об ASN (ниже будет описано, зачем это нужно). Позволяет добавлять целые подсети провайдера одной кнопкой. Бесплатный тариф - 10k запросов/неделя.

Таким образом можно таргетировать визуально все пакеты

IP Протоколы
Settings → Core → Feature Flags
По умолчанию включён только IPv4. Если нужен IPv6 - можно отдельно включить в настройках (по умолчанию отключен).
Фильтрация устройств
Если B4 стоит на роутере, не всегда нужно обрабатывать весь трафик. Можно выбрать конкретные устройства в сети.
Settings → Core → Device Filtering
На роутере можно ограничить работу B4 конкретными устройствами. Два режима:
Whitelist - обход DPI только для выбранных устройств
Blacklist - обход для всех, кроме выбранных

Устройства подтягиваются из DHCP-leases роутера автоматически.
Discovery
Главная фича для тех, кто не хочет разбираться в параметрах фрагментации и фейковых пакетов.
Discovery автоматически перебирает стратегии обхода и находит рабочую для вашей сети. Запускается из интерфейса сета или с главной страницы.

Как работает
Устанавливает TLS-соединение с тестовой целью.
Последовательно применяет динамические пресеты (ну... честно пытается).
Сравнивает время ответа с эталонным (незаблокированный домен из настроек).

если повезет
Примеры сетов
Каждый сет можно экспортировать в JSON и импортировать на другом устройстве. Открываем сет, секция Import/Export - вставляем JSON.

Ниже примеры рабочих конфигураций. Стратегии подбирались для российских провайдеров - на вашей сети результат может отличаться, используйте Discovery для автоматического подбора.
YouTube{"id":"f506c73d-9b25-4be0-b117-c9d70591befe","name":"youtube","tcp":{"conn_bytes_limit":19,"seg2delay":20,"seg2delay_max":60,"syn_fake":false,"syn_fake_len":0,"syn_ttl":7,"drop_sack":false,"incoming":{"mode":"off","min":14,"max":14,"fake_ttl":7,"fake_count":3,"strategy":"badsum"},"desync":{"mode":"off","ttl":7,"count":3,"post_desync":false},"win":{"mode":"off","values":[0,1460,8192,65535]},"duplicate":{"enabled":false,"count":3}},"udp":{"mode":"fake","fake_seq_length":6,"fake_len":64,"faking_strategy":"none","dport_filter":"","filter_quic":"parse","filter_stun":true,"conn_bytes_limit":8,"seg2delay":10,"seg2delay_max":40},"fragmentation":{"strategy":"combo","reverse_order":true,"tlsrec_pos":0,"middle_sni":true,"sni_position":1,"oob_position":0,"oob_char":120,"seq_overlap_pattern":[],"combo":{"first_byte_split":true,"extension_split":true,"shuffle_mode":"full","first_delay_ms":30,"jitter_max_us":1000,"decoy_enabled":false,"decoy_snis":["ya.ru","vk.com","mail.ru","dzen.ru"]},"disorder":{"shuffle_mode":"full","min_jitter_us":1000,"max_jitter_us":3000}},"faking":{"sni":true,"ttl":8,"strategy":"pastseq","seq_offset":10000,"sni_seq_length":1,"sni_type":3,"custom_payload":"","payload_file":"","tls_mod":[],"timestamp_decrease":600000,"sni_mutation":{"mode":"off","grease_count":3,"padding_size":2048,"fake_ext_count":5,"fake_snis":[]},"tcp_md5":true},"targets":{"sni_domains":[],"ip":[],"geosite_categories":["youtube"],"geoip_categories":[]},"enabled":true,"dns":{"enabled":false,"target_dns":"","fragment_query":false},"stats":{"manual_domains":0,"manual_ips":0,"geosite_domains":178,"geoip_ips":0,"total_domains":178,"total_ips":0,"geosite_category_breakdown":{"youtube":178}}}
Hyperion
сет зависим от payload: gosuslugi.ru (генерируется в разделе настроек -> Capture) (основан на сервисе Гиперион
{"id":"1731ef6f-ec56-43b6-bc72-daec1e484daf","name":"hyperion","tcp":{"conn_bytes_limit":19,"seg2delay":20,"seg2delay_max":90,"syn_fake":false,"syn_fake_len":0,"syn_ttl":7,"drop_sack":false,"incoming":{"mode":"off","min":14,"max":14,"fake_ttl":7,"fake_count":3,"strategy":"badsum"},"desync":{"mode":"off","ttl":7,"count":3,"post_desync":false},"win":{"mode":"off","values":[0,1460,8192,65535]},"duplicate":{"enabled":false,"count":3}},"udp":{"mode":"fake","fake_seq_length":6,"fake_len":64,"faking_strategy":"none","dport_filter":"","filter_quic":"disabled","filter_stun":true,"conn_bytes_limit":8,"seg2delay":0,"seg2delay_max":0},"fragmentation":{"strategy":"combo","reverse_order":true,"tlsrec_pos":0,"middle_sni":true,"sni_position":1,"oob_position":0,"oob_char":120,"seq_overlap_pattern":[],"combo":{"first_byte_split":true,"extension_split":true,"shuffle_mode":"full","first_delay_ms":30,"jitter_max_us":1500,"decoy_enabled":false,"decoy_snis":["ya.ru","vk.com","mail.ru","dzen.ru"]},"disorder":{"shuffle_mode":"full","min_jitter_us":1000,"max_jitter_us":3000}},"faking":{"sni":true,"ttl":8,"strategy":"pastseq","seq_offset":10000,"sni_seq_length":1,"sni_type":4,"custom_payload":"","payload_file":"captures/tls_gosuslugi_ru.bin","tls_mod":[],"timestamp_decrease":600000,"sni_mutation":{"mode":"off","grease_count":3,"padding_size":2048,"fake_ext_count":5,"fake_snis":[]},"tcp_md5":true},"targets":{"sni_domains":["kinopub.online","linuxserver.io","euronews.com","shikimori.one","proton.me"],"ip":[],"geosite_categories":["cloudflare","ru-blocked","meta","discord","kinopub","youtube","intel","twitter","protonmail","canva","dw","category-media-ru","linkedin","instagram","hdrezka","fastly","hetzner","oracle","cdn77","digitalocean","akamai"],"geoip_categories":["cloudflare","digitalocean","contabo","akamai","amazon","hetzner","ovh","telegram","twitter","cdn77","scaleway","oracle","fastly"]},"enabled":true,"dns":{"enabled":false,"target_dns":"","fragment_query":false},"stats":{"manual_domains":5,"manual_ips":0,"geosite_domains":76395,"geoip_ips":7137,"total_domains":76400,"total_ips":7137,"geosite_category_breakdown":{"akamai":81,"canva":6,"category-media-ru":131,"cdn77":2,"cloudflare":74,"digitalocean":4,"discord":28,"dw":2,"fastly":8,"hdrezka":11,"hetzner":15,"instagram":74,"intel":288,"kinopub":11,"linkedin":12,"meta":553,"oracle":18,"protonmail":9,"ru-blocked":74866,"twitter":24,"youtube":178},"geoip_category_breakdown":{"akamai":596,"amazon":3447,"cdn77":213,"cloudflare":900,"contabo":284,"digitalocean":173,"fastly":62,"hetzner":117,"oracle":737,"ovh":554,"scaleway":21,"telegram":12,"twitter":21}}}
Заключение
B4 - один бинарник на Go, который ставится одной командой, настраивается из браузера и умеет сам подбирать рабочую стратегию. Работает на Linux - от VPS до роутера на MIPS.
Проект в активной разработке. Буду рад багрепортам, идеям и рекомендациям.
Есть Telegram-группа, где можно попросить помощи с настройкой, предложить фичу или просто дать обратную связь.




Важно понимать: рабочая стратегия обхода зависит от провайдера, региона и конкретного оборудования на сети. То, что работает у одного - может не работать у другого.
Дисклеймер
B4 не является VPN, прокси или туннелем. Принципиальное отличие:
VPN/прокси - трафик идёт через промежуточный сервер. Провайдер не видит конечный адрес, но видит подключение к VPN. Именно такие инструменты попадают под регуляцию - они позволяют скрывать назначение трафика и получать доступ к заблокированным ресурсам.
B4 - трафик идёт напрямую, без промежуточных серверов. Провайдер видит, куда вы подключаетесь. Инструмент не меняет маршрут и не открывает доступ к заблокированным ресурсам. Он работает на уровне структуры TCP-пакето. Программа работает на уровне структуры TCP-пакетов, не позволяя оборудованию DPI корректно классифицировать трафик.
На момент публикации (февраль 2026) использование подобных инструментов в РФ не запрещено законодательно. Автор не несёт ответственности за использование в юрисдикциях, где это может быть ограничено.
