Add Russian documentation for UDP handling, backup settings, core settings, discovery settings, geodata, payloads, security, and domain monitoring

- Created UDP documentation detailing traffic handling and filtering options.
- Added backup settings documentation for configuration backup and restoration.
- Introduced core settings documentation covering service management, packet processing, and logging.
- Added discovery settings documentation for automatic configuration detection.
- Created geodata documentation explaining GeoSite and GeoIP databases and their usage.
- Added payloads documentation for generating and managing TLS payloads for faking.
- Introduced security documentation for web interface authorization and HTTPS setup.
- Added domain monitoring documentation for automatic detection of blocked domains and recovery processes.
- Created footer and navbar localization files for Russian language support.
This commit is contained in:
Daniel Lavrushin 2026-04-18 21:43:56 +02:00
parent 1df5909e62
commit ef8bedd247
No known key found for this signature in database
GPG key ID: 57F1CAB57AD35056
79 changed files with 3545 additions and 3133 deletions

View file

@ -1,76 +1,6 @@
---
sidebar_position: 1
title: CLI-параметры
title: CLI parameters
---
# CLI-параметры
b4 принимает параметры командной строки, которые имеют приоритет над значениями из конфигурационного файла.
## Основные
| Флаг | Описание | По умолчанию |
| --- | --- | --- |
| `--config` | Путь к файлу конфигурации | `/etc/b4/b4.json` |
| `--verbose` | Уровень логирования: `debug`, `trace`, `info`, `silent` | `info` |
| `-v`, `--version` | Показать версию и выйти | — |
| `--clear-tables` | Очистить правила iptables/nftables и выйти | — |
## Очередь и обработка
| Флаг | Описание | По умолчанию |
| --- | --- | --- |
| `--queue-num` | Номер очереди netfilter | `537` |
| `--threads` | Количество рабочих потоков | `4` |
| `--mark` | Метка пакета для правил iptables | `32768` |
| `--ipv4` | Включить обработку IPv4 | `true` |
| `--ipv6` | Включить обработку IPv6 | `false` |
## Фаервол
| Флаг | Описание | По умолчанию |
| --- | --- | --- |
| `--skip-tables` | Пропустить настройку iptables/nftables при запуске | `false` |
| `--tables-monitor-interval` | Интервал мониторинга правил (сек), `0` = отключить | `10` |
| `--masquerade` | Включить NAT masquerade (для контейнеров/шлюзов) | `false` |
| `--masquerade-interface` | Интерфейс для masquerade (пусто = все) | — |
## Логирование
| Флаг | Описание | По умолчанию |
| --- | --- | --- |
| `-i`, `--instaflush` | Сбрасывать логи немедленно | `true` |
| `--syslog` | Дублировать логи в syslog | `false` |
| `--error-file` | Путь к файлу ошибок | `/var/log/b4/errors.log` |
## Веб-сервер
| Флаг | Описание | По умолчанию |
| --- | --- | --- |
| `--web-port` | Порт веб-интерфейса (`0` = отключить) | `7000` |
## Примеры
Запуск с кастомным конфигом и debug-логированием:
```bash
b4 --config /opt/etc/b4/b4.json --verbose debug
```
Очистка правил фаервола:
```bash
b4 --clear-tables
```
Запуск без автонастройки фаервола (ручное управление правилами):
```bash
b4 --skip-tables
```
Запуск в контейнере с masquerade:
```bash
b4 --masquerade --masquerade-interface eth0
```
English translation is in progress. See the [Russian version](/ru/docs/advanced/cli).

View file

@ -1,121 +1,6 @@
---
sidebar_position: 2
title: Конфигурационный файл
title: Configuration file
---
# Конфигурационный файл
b4 хранит конфигурацию в JSON-файле. По умолчанию: `/etc/b4/b4.json`. Путь можно изменить через флаг `--config`.
## Расположение по платформам
| Платформа | Путь |
| --- | --- |
| Linux | `/etc/b4/b4.json` |
| OpenWRT (с extroot/USB) | `/opt/etc/b4/b4.json` |
| OpenWRT (без USB) | `/etc/b4/b4.json` |
| ASUS Merlin | `/opt/etc/b4/b4.json` |
| Keenetic | `/opt/etc/b4/b4.json` |
| Docker | `/etc/b4/b4.json` (внутри контейнера) |
## Структура
Файл создаётся автоматически при первом запуске с значениями по умолчанию. Основные секции:
```json
{
"queue": {
"start_num": 537,
"threads": 4,
"mark": 32768,
"ipv4": true,
"ipv6": false,
"tcp_conn_bytes_limit": 19,
"udp_conn_bytes_limit": 8,
"interfaces": [],
"mss_clamp": {
"enabled": false,
"size": 88
},
"devices": {
"enabled": false,
"vendor_lookup": false
}
},
"system": {
"tables": {
"skip_setup": false,
"monitor_interval": 10,
"engine": "",
"masquerade": false,
"masquerade_interface": ""
},
"logging": {
"level": 1,
"error_file": "/var/log/b4/errors.log",
"instaflush": true,
"syslog": false
},
"web_server": {
"port": 7000,
"bind_address": "0.0.0.0",
"tls_cert": "",
"tls_key": "",
"username": "",
"password": "",
"language": "en",
"swagger": false
},
"socks5": {
"enabled": false,
"port": 1080,
"bind_address": "0.0.0.0"
},
"mtproto": {
"enabled": false,
"port": 3128,
"bind_address": "0.0.0.0",
"fake_sni": "storage.googleapis.com"
},
"checker": {
"discovery_timeout": 5,
"config_propagate_ms": 1500,
"reference_domain": "yandex.ru",
"reference_dns": ["9.9.9.9", "1.1.1.1", "8.8.8.8"],
"validation_tries": 1
},
"geo": {
"sitedat_path": "",
"ipdat_path": "",
"sitedat_url": "",
"ipdat_url": ""
},
"timezone": ""
},
"sets": []
}
```
:::warning Редактирование вручную
Конфигурацию можно редактировать вручную, но рекомендуется использовать веб-интерфейс — он валидирует значения и применяет миграции при обновлении версии. При ручном редактировании перезапустите b4 для применения изменений.
:::
## Секция sets
Каждый сет — объект в массиве `sets` с полной конфигурацией TCP/UDP/DNS/маршрутизации. Структура сета соответствует вкладкам в веб-интерфейсе:
- `targets` — домены, IP, GeoSite/GeoIP категории, устройства
- `tcp` — общие настройки TCP
- `fragmentation` — метод фрагментации и параметры
- `faking` — SNI faking, SYN fake, desync, window, incoming, mutation
- `udp` — QUIC, STUN, fake-режим
- `dns` — DNS-редирект
- `routing` — маршрутизация через интерфейсы
:::tip Импорт/Экспорт
Для переноса конфигурации сетов между устройствами используйте вкладку **Импорт/Экспорт** в редакторе сета — она показывает JSON-представление и позволяет копировать/вставлять.
:::
## Миграции
При обновлении b4 структура конфигурации может измениться. b4 автоматически мигрирует старые конфигурации при запуске — добавляет новые поля с значениями по умолчанию, переименовывает устаревшие. Ручное вмешательство не требуется.
English translation is in progress. See the [Russian version](/ru/docs/advanced/config).

View file

@ -1,13 +1,6 @@
---
sidebar_position: 13
title: Продвинутое
title: Advanced
---
# Продвинутое
Справочные материалы для продвинутых пользователей:
- [CLI-параметры](./cli) — флаги командной строки
- [Конфигурационный файл](./config) — структура `b4.json`
- [API](/swagger) — Swagger-документация и REST API
- [Как работает ТСПУ](./tspu) — техническое описание российской системы DPI
English translation is in progress. See the [Russian version](/ru/docs/advanced).

View file

@ -1,29 +1,6 @@
---
sidebar_position: 4
title: Как работает ТСПУ
title: How TSPU works
---
# Как работает ТСПУ
ТСПУ (Технические средства противодействия угрозам) — российская система глубокого анализа пакетов (DPI), установленная на сетях интернет-провайдеров. Именно эта система блокирует доступ к сайтам и сервисам.
## Документация
Подробное техническое описание архитектуры ТСПУ (АСБИ), её компонентов, принципов работы и методов фильтрации доступно в отдельном проекте:
**[tspu-docs](https://github.com/DanielLavrushin/tspu-docs)** — полное руководство на основе ~5-часовой видеолекции по архитектуре, настройке и эксплуатации ТСПУ. 24 главы.
:::warning Актуальность
Документация сгенерирована с помощью ИИ на основе транскрипта видеолекции и проверена вручную. Материал может быть устаревшим — ТСПУ постоянно обновляется, и текущая реализация может отличаться от описанной. Также возможны неточности.
:::
Основные темы:
- Архитектура АСБИ/ТСПУ — балансировщики, фильтры, DPI-движок
- Методы блокировки — DNS-подмена, SNI-фильтрация, блокировка по IP
- Механизмы обнаружения — как ТСПУ распознаёт обход
- Уязвимости системы — на чём основаны стратегии обхода b4
:::info
Понимание того, как работает ТСПУ, помогает выбирать и настраивать стратегии обхода. Но для базового использования b4 это не обязательно — дискавери автоматически подбирает рабочую конфигурацию.
:::
English translation is in progress. See the [Russian version](/ru/docs/advanced/tspu).

View file

@ -1,162 +1,6 @@
---
sidebar_position: 10
title: Соединения
title: Connections
---
# Соединения
Раздел отображает TCP/UDP-соединения, проходящие через b4, в реальном времени. Данные поступают через WebSocket — таблица обновляется непрерывно.
![connections](../static/img/connections/20260323230547.png)
## Таблица соединений
### Столбцы
| Столбец | Описание |
| --- | --- |
| **Время** | Время соединения (ЧЧ:ММ:СС), моноширинный шрифт |
| **Протокол** | Цветная метка: `TCP`, `UDP`, `P-TCP`, `P-UDP` |
| **Сет** | Название сета, если соединение обрабатывается. Пустое — соединение прошло без модификации |
| **Домен** | SNI-домен из TLS/QUIC-рукопожатия. Рядом метка версии TLS (1.2 / 1.3) |
| **Источник** | IP отправителя. Если устройство опознано — показывает имя или vendor в виде метки |
| **Назначение** | IP:порт получателя. Возможность определить ASN и добавить IP в сет |
:::info Протоколы P-TCP и P-UDP
Префикс **P** означает, что соединение прошло через встроенный SOCKS5-прокси b4, а не через перехват на уровне netfilter.
:::
:::info Метки TLS
Метки **1.2** и **1.3** рядом с доменом — версия протокола TLS. Провайдеры могут блокировать TLS 1.2 и 1.3 разными методами, поэтому для них могут потребоваться разные стратегии обхода. Сеты можно настроить на конкретную версию TLS во вкладке [Цели](./sets/targets).
:::
---
## Добавление доменов в сеты
Если домен не входит ни в один сет, рядом с ним отображается иконка **+**. При нажатии открывается диалог добавления:
<!-- screenshot: диалог добавления домена -->
1. **Выбор шаблона домена** — от точного до широкого:
- `rr1---sn-ab5l6ne7.googlevideo.com` — самый точный, только это имя хоста
- `*.googlevideo.com` — промежуточная точность
- `*.*.googlevideo.com` — самый широкий, все поддомены
2. **Выбор сета** — в какой сет добавить домен (выпадающий список включённых сетов)
3. Нажмите **Добавить домен**
:::tip
Для YouTube и подобных сервисов, которые используют множество CDN-поддоменов, выбирайте широкий шаблон (например, `*.googlevideo.com`). Иначе придётся добавлять каждый поддомен отдельно.
:::
Если домен уже в сете — вместо **+** отображается серая галочка.
---
## Добавление IP/CIDR в сеты
Клик по иконке **+** рядом с IP назначения открывает диалог с информацией об IP.
<!-- screenshot: диалог добавления IP -->
### Обогащение данных
Перед добавлением можно получить информацию об IP:
| Кнопка | Источник | Что показывает |
| --- | --- | --- |
| **Загрузить сетевую информацию** | RIPE NCC | ASN, анонсированные префиксы |
| **Обогатить через IPInfo** | ipinfo.io | Организация, hostname, расположение, координаты |
:::info IPInfo
Для использования IPInfo необходимо указать токен API в [Настройки → Основные](./settings/core). Бесплатный токен можно получить на [ipinfo.io](https://ipinfo.io).
:::
### Варианты добавления
**Если ASN найден** — b4 загружает все анонсированные IP-префиксы этого ASN:
- **Добавить только IP** — один конкретный адрес
- **Добавить все N префиксов** — все IP-диапазоны организации
**Если ASN не найден** — выбор CIDR-маски вручную:
| Маска | Описание |
| --- | --- |
| `/32` | Один IP-адрес |
| `/24` | ~256 IP — локальная подсеть |
| `/16` | ~65K IP — сетевой блок |
| `/8` | ~16M IP — класс A |
Для IPv6 доступны маски `/128`, `/64`, `/48`, `/32`.
### ASN в таблице
После обогащения рядом с IP назначения отображается метка **ASxxxxx**. ASN-данные кэшируются в браузере. Метку можно удалить, нажав на крестик.
Для быстрого определения ASN без открытия диалога — нажмите иконку сети рядом с IP.
---
## Фильтрация
Поле фильтра в верхней панели поддерживает комбинирование условий:
- `+` — объединение (AND)
- `!` — исключение (NOT)
- Фильтр по полям: `protocol:`, `domain:`, `asn:`, `device:`, `alias:`
### Примеры
| Фильтр | Что покажет |
| --- | --- |
| `tcp` | Все TCP-соединения |
| `domain:youtube` | Соединения с «youtube» в домене |
| `tcp+!domain:google.com` | TCP-соединения, кроме Google |
| `protocol:udp+domain:discord` | UDP-соединения к Discord |
| `asn:AS13335` | Соединения к Cloudflare |
| `device:iPhone` | Соединения от устройства с именем iPhone |
Фильтр сохраняется между сессиями.
При активном фильтре в панели отображается количество отфильтрованных соединений. Сортировку можно сбросить кнопкой **×** рядом с индикатором сортировки.
---
## Режим отображения
Переключатель в верхней панели:
| Режим | Описание |
| --- | --- |
| **Только домены** | Показывает только соединения с распознанным SNI-доменом. Режим по умолчанию |
| **Все пакеты** | Показывает весь перехваченный трафик, включая пакеты без домена |
:::tip
Режим **Все пакеты** полезен для диагностики — можно увидеть, какой трафик b4 перехватывает, но не может распознать. В обычной работе достаточно режима **Только домены**.
:::
---
## Управление потоком
Данные поступают непрерывно. Таблица автоматически прокручивается к последним записям. Если прокрутить вверх — автопрокрутка останавливается, и в правом нижнем углу появляется кнопка возврата вниз.
### Горячие клавиши
| Клавиша | Действие |
| --- | --- |
| **P** или **Pause** | Пауза / возобновление потока. При паузе рамка таблицы подсвечивается |
| **Ctrl+X** или **Delete** | Очистить таблицу |
### Кнопка очистки
Иконка корзины в верхней панели очищает все отображаемые соединения.
---
## Метка непросмотренных доменов
В боковом меню рядом с пунктом **Соединения** может отображаться счётчик — количество новых соединений, которые совпали с сетом, пока вы находились на другой странице. Счётчик сбрасывается при переходе на страницу соединений.
English translation is in progress. See the [Russian version](/ru/docs/connections).

View file

@ -1,67 +1,6 @@
---
sidebar_position: 4
title: Дашборд
title: Dashboard
---
# Дашборд
Главная страница, которая открывается по умолчанию. Показывает текущее состояние b4, метрики и активность устройств в сети.
## Состояние системы
Баннер в верхней части страницы отображает:
- **Статус** — Работает / Нестабильно / Критично
- **NFQueue** — состояние очереди netfilter
- **Фаервол** — состояние правил iptables/nftables
- **Воркеры** — сколько рабочих потоков активно (например, «3/4 активно»)
- **Аптайм** — время работы с последнего запуска
- **Версия** — текущая версия b4
Здесь же есть кнопка **Сброс статистики** для обнуления всех счётчиков.
![dashbanner](../static/img/dashboard/20260323205258.png)
## Метрики
Три карточки с основными показателями:
| Метрика | Что показывает |
| --- | --- |
| **Соединения** | Общее количество соединений и текущая скорость (соед/с) |
| **Обход DPI** | Количество соединений, обработанных сетами, и процент от общего |
| **Пакеты** | Количество обработанных пакетов и текущая скорость (пак/с) |
Ниже отображается график **Скорость соединений** — линейный график в реальном времени.
![metrics](../static/img/dashboard/20260323205426.png)
## Активные сеты
Список включённых сетов с количеством целей (доменов + IP). Клик по сету переходит к его редактированию.
![activesets](../static/img/dashboard/20260323205519.png)
## Активность устройств
Показывает, какие устройства в сети к каким доменам обращаются:
- **Заголовок устройства** — имя (или MAC/vendor), IP, количество доменов и соединений
- **Раскрываемый список доменов** — для каждого домена показано количество соединений
Если домен ещё не добавлен ни в один сет, рядом с ним отображается кнопка «+» для быстрого добавления.
:::info Метки TLS
Рядом с доменами могут отображаться метки **1.2** или **1.3** — это версия протокола TLS, которую использует соединение. Такие же метки встречаются в разделах Соединения и Дискавери. Версия TLS важна, потому что провайдеры могут блокировать TLS 1.2 и TLS 1.3 разными методами — для них могут потребоваться разные стратегии обхода.
:::
![devices](../static/img/dashboard/20260323205600.png)
## Мониторинг доменов
Если включён [мониторинг доменов](./watchdog), на дашборде отображается панель мониторинга. Она показывает статус каждого отслеживаемого домена, время последней проверки и количество ошибок. Здесь же можно добавить новый домен или запустить принудительную проверку.
## Домены не в сетах
Топ-15 доменов, которые обрабатываются b4, но не включены ни в один сет. Отсортированы по количеству соединений. Каждый домен можно добавить в сет через кнопку «+».
![nodevices](../static/img/dashboard/20260323205631.png)
English translation is in progress. See the [Russian version](/ru/docs/dashboard).

View file

@ -1,51 +1,6 @@
---
sidebar_position: 9
title: DPI Детектор
title: DPI Detector
---
# DPI Детектор
Детектор определяет, какие методы блокировки использует ваш провайдер. Это помогает понять, что именно нужно обходить, и выбрать подходящую стратегию.
## Типы проверок
### Целостность DNS
Сравнивает ответы DNS по UDP с ответами через DoH (DNS over HTTPS). Если IP-адреса различаются — провайдер подменяет DNS-ответы.
Результат показывает:
- IP от обычного DNS (UDP)
- IP от DoH
- Статус: OK / TIMEOUT / BLOCKED
- Обнаружение stub-IP (заглушки провайдера)
### Доступность доменов
Проверяет доступность сайтов через разные протоколы:
- TLS 1.3
- TLS 1.2
- HTTP
Для каждого показывает статус, IP-адрес, задержку. Если IP отличается от эталонного — помечается как Fake IP.
### TCP Fat Probe тест
Отправляет keep-alive запросы с увеличивающимся размером заголовка. Определяет, при каком размере пакета ТСПУ/DPI разрывает соединение.
Результат: провайдер/ASN, порог срабатывания (КБ), RTT.
### Перебор SNI по белому списку
Перебирает SNI-домены для определения, какие домены провайдер пропускает без анализа (белый список).
<!-- screenshot: страница детектора с результатами проверок -->
## Запуск
Выберите нужные проверки и нажмите кнопку запуска. Каждый тест занимает несколько секунд.
## История
Результаты сохраняются с отметкой времени. Можно сравнить результаты в разные моменты — например, до и после смены провайдера или обновления оборудования ТСПУ.
English translation is in progress. See the [Russian version](/ru/docs/detector).

View file

@ -1,76 +1,6 @@
---
sidebar_position: 7
title: Дискавери
title: Discovery
---
# Дискавери
Дискавери автоматически подбирает рабочую конфигурацию обхода для указанных доменов. b4 перебирает стратегии, тестирует их и находит те, которые работают с вашим провайдером.
Базовый сценарий использования описан в разделе [Быстрый старт](./quickstart).
## Параметры поиска
Перед запуском можно раскрыть панель **Параметры поиска** и настроить:
| Параметр | Описание |
| --- | --- |
| **Пропустить поиск DNS** | Не проверять DNS-блокировку. Включите, если используете DoH или сторонний DNS |
| **Пропустить кэшированные стратегии** | Не пробовать стратегии, которые уже были найдены ранее |
| **Версия TLS** | Авто / TLS 1.2 / TLS 1.3 — ограничить тестирование конкретной версией |
| **Попыток валидации** | 15 — сколько раз проверить стратегию перед тем, как считать её рабочей |
| **Пользовательские payloads** | Использовать захваченные TLS ClientHello (настраиваются в разделе Настройки → Пэйлоады) |
Кнопка **Очистить кэш** удаляет ранее найденные стратегии — полезно при смене провайдера или при изменении методов блокировки.
<!-- screenshot: раскрытая панель параметров поиска -->
## Фазы поиска
После нажатия **Начать поиск** процесс проходит несколько фаз:
1. **Базовый тест** — проверка, действительно ли сайт заблокирован
2. **Кэшированные стратегии** — проверка ранее найденных конфигураций
3. **Поиск стратегий** — перебор методов обхода
4. **Оптимизация** — подбор параметров найденной стратегии
5. **Тест комбинаций** — проверка комбинированных стратегий
6. **Проверка DNS** — определение DNS-блокировки
Прогресс и текущая фаза отображаются на странице. В панели **Журнал поиска** можно следить за деталями тестирования.
<!-- screenshot: процесс поиска с журналом -->
## Результаты
Для каждого домена отображается карточка с результатом:
| Статус | Значение |
| --- | --- |
| **Успешно** | Найдена рабочая конфигурация. Показывает скорость и улучшение по сравнению с baseline |
| **DNS Poisoning** | DNS-сервер возвращает подменённый IP. Нужно сменить DNS |
| **Transport Blocked** | Блокировка на уровне IP/транспорта. Требуется VPN или маршрутизация через другой интерфейс |
На карточке успешного результата кнопка **Использовать эту конфигурацию** открывает диалог создания сета.
<!-- screenshot: карточки результатов — успешный и заблокированный -->
## Применение результатов
В диалоге **Добавить конфигурацию**:
- **Создать новый сет** — создаёт сет с найденной конфигурацией и добавляет домен
- **Добавить в существующий похожий сет** — добавляет домен в уже настроенный сет с похожими параметрами
<!-- screenshot: диалог добавления конфигурации -->
## История результатов
Результаты предыдущих запусков сохраняются внизу страницы. Для каждого результата доступны:
- Повторный запуск тестирования
- Применение найденной конфигурации
- Удаление из истории
## Автоматический мониторинг (Watchdog)
Если вы хотите, чтобы b4 сам следил за доступностью доменов и при необходимости запускал дискавери — используйте [мониторинг доменов](./watchdog).
English translation is in progress. See the [Russian version](/ru/docs/discovery).

View file

@ -3,72 +3,4 @@ sidebar_position: 6
title: Docker
---
# Docker
Образ: [lavrushin/b4](https://hub.docker.com/r/lavrushin/b4) на Docker Hub.
## docker-compose
Создайте файл `docker-compose.yml`:
```yaml
services:
b4:
image: lavrushin/b4:latest
container_name: b4
network_mode: host
cap_add:
- NET_ADMIN
- NET_RAW
- SYS_MODULE
volumes:
- ./config:/etc/b4
restart: unless-stopped
```
Запуск:
```bash
mkdir -p config
docker compose up -d
```
## docker run
```bash
mkdir -p config
docker run -d \
--name b4 \
--network host \
--cap-add NET_ADMIN \
--cap-add NET_RAW \
--cap-add SYS_MODULE \
-v ./config:/etc/b4 \
--restart unless-stopped \
lavrushin/b4:latest
```
## Параметры
| Параметр | Зачем |
| --- | --- |
| `network_mode: host` | b4 работает с сетевым стеком хоста напрямую |
| `NET_ADMIN` | управление netfilter и правилами firewall |
| `NET_RAW` | работа с raw-сокетами |
| `SYS_MODULE` | загрузка модулей ядра (modprobe) |
| `-v ./config:/etc/b4` | конфигурация сохраняется на хосте |
## Управление
```bash
docker compose logs -f b4 # логи
docker compose restart b4 # перезапуск
docker compose down # остановка
docker compose pull && docker compose up -d # обновление
```
## Веб-интерфейс
После запуска: `http://localhost:7000`
Порт настраивается в `config/b4.json` (параметр `web_server.port`).
English translation is in progress. See the [Russian version](/ru/docs/install/docker).

View file

@ -1,52 +1,6 @@
---
sidebar_position: 2
title: Установка
title: Installation
---
# Установка
b4 устанавливается на Linux-устройства: серверы, компьютеры и роутеры. Выберите подходящий способ:
- [Linux](./linux) — универсальная установка на любой Linux-дистрибутив
- [OpenWRT](./openwrt) — роутеры с прошивкой OpenWRT
- [ASUS Merlin](./merlin) — роутеры ASUS с прошивкой Merlin
- [Keenetic](./keenetic) — роутеры Keenetic
- [MikroTik](./mikrotik) — RouterOS 7.x через контейнеры
- [Docker](./docker) — запуск в Docker-контейнере
После установки b4 доступен через веб-интерфейс в браузере (по умолчанию порт `7000`).
## Обновление и удаление {#update-remove}
### Обновление
```bash
curl -fsSL https://raw.githubusercontent.com/DanielLavrushin/b4/main/install.sh | sh -s -- --update
```
Или обновление до конкретной версии:
```bash
curl -fsSL https://raw.githubusercontent.com/DanielLavrushin/b4/main/install.sh | sh -s -- v1.46.5
```
При обновлении текущий бинарник сохраняется как резервная копия, сервис останавливается, заменяется на новую версию и запускается снова. Конфигурация не затрагивается.
### Удаление
```bash
curl -fsSL https://raw.githubusercontent.com/DanielLavrushin/b4/main/install.sh | sh -s -- --remove
```
При удалении:
1. Сервис останавливается и убирается из автозапуска
2. Бинарник удаляется
3. Конфигурация — по выбору (установщик спросит, удалять ли `/etc/b4` или `/opt/etc/b4`)
### Диагностика
Для вывода информации о системе, установленной версии и состоянии модулей ядра:
```bash
curl -fsSL https://raw.githubusercontent.com/DanielLavrushin/b4/main/install.sh | sh -s -- --sysinfo
```
English translation is in progress. See the [Russian version](/ru/docs/install).

View file

@ -3,59 +3,4 @@ sidebar_position: 4
title: Keenetic
---
# Keenetic
## Требования
- Роутер Keenetic с поддержкой OPKG
- Установленный Entware (обязательно)
## Установка Entware
### Новые модели (со встроенным хранилищем)
1. Откройте веб-интерфейс роутера
2. Перейдите в **Параметры системы**
3. Включите компонент **Менеджер пакетов OPKG**
### Старые модели (нужен USB-накопитель)
1. Вставьте USB-накопитель в роутер
2. Установите Entware через менеджер пакетов
Подробнее: https://help.keenetic.com/hc/ru/articles/360021214160
## Установка b4
Подключитесь по SSH и выполните:
```bash
curl -fsSL https://raw.githubusercontent.com/DanielLavrushin/b4/main/install.sh | sh
```
## Управление сервисом
```bash
/opt/etc/init.d/S99b4 start
/opt/etc/init.d/S99b4 stop
/opt/etc/init.d/S99b4 restart
```
## Пути
| Что | Где |
| --- | --- |
| Бинарник | `/opt/sbin/b4` |
| Конфигурация | `/opt/etc/b4/b4.json` |
| Сервис | `/opt/etc/init.d/S99b4` |
## Архитектура
- Старые модели (MT7621) — `mipsle_softfloat`
- Новые модели (aarch64) — `arm64`
Установщик определяет архитектуру автоматически.
:::warning Без Entware
Без Entware b4 устанавливается в `/tmp`, который очищается при каждой перезагрузке. Для постоянной работы Entware обязателен.
:::
English translation is in progress. See the [Russian version](/ru/docs/install/keenetic).

View file

@ -3,86 +3,4 @@ sidebar_position: 1
title: Linux
---
# Linux (универсальная установка)
Подходит для любого дистрибутива: Ubuntu, Debian, Fedora, Alpine, Arch и других.
## Установка
```bash
curl -fsSL https://raw.githubusercontent.com/DanielLavrushin/b4/main/install.sh | sh
```
Или через `wget`:
```bash
wget -qO- https://raw.githubusercontent.com/DanielLavrushin/b4/main/install.sh | sh
```
Установщик автоматически определит архитектуру, установит бинарник в `/usr/local/bin` и создаст конфигурацию в `/etc/b4`.
Для установки без интерактивных вопросов (с настройками по умолчанию):
```bash
curl -fsSL https://raw.githubusercontent.com/DanielLavrushin/b4/main/install.sh | sh -s -- --quiet
```
## Управление сервисом
### systemd (Ubuntu, Debian, Fedora и большинство дистрибутивов)
```bash
systemctl start b4
systemctl stop b4
systemctl restart b4
systemctl status b4
systemctl enable b4 # автозапуск при загрузке
```
Просмотр логов:
```bash
journalctl -u b4 -f
```
### OpenRC (Alpine)
```bash
rc-service b4 start
rc-service b4 stop
rc-service b4 restart
rc-update add b4 default # автозапуск при загрузке
```
## Пути
| Что | Где |
| --- | --- |
| Бинарник | `/usr/local/bin/b4` |
| Конфигурация | `/etc/b4/b4.json` |
| Сервис (systemd) | `/etc/systemd/system/b4.service` |
| Сервис (OpenRC/SysV) | `/etc/init.d/b4` |
## Модули ядра
b4 использует NFQUEUE для перехвата пакетов. Нужные модули ядра обычно загружаются автоматически при запуске сервиса. Если возникают проблемы, загрузите их вручную:
```bash
modprobe nfnetlink_queue
modprobe xt_NFQUEUE
modprobe nf_conntrack
```
Для проверки:
```bash
lsmod | grep nfqueue
```
:::info LXC-контейнеры
В LXC-контейнерах модули ядра должны быть загружены на хосте. В конфигурации контейнера добавьте:
```
lxc.cgroup2.devices.allow: c 10:200 rwm
features: nesting=1,keyctl=1
```
:::
English translation is in progress. See the [Russian version](/ru/docs/install/linux).

View file

@ -3,53 +3,4 @@ sidebar_position: 3
title: ASUS Merlin
---
# ASUS Merlin
## Требования
- Роутер ASUS с прошивкой Asuswrt-Merlin
- Установленный Entware (обязательно)
- USB-накопитель (для Entware и b4)
## Установка Entware
Entware — обязательное условие. Если он ещё не установлен:
1. Вставьте USB-накопитель в роутер
2. Подключитесь по SSH: `ssh admin@192.168.1.1`
3. Запустите `amtm`
4. Выберите пункт `ep` для установки Entware
Подробнее: https://diversion.ch/amtm.html
## Установка b4
После установки Entware:
```bash
curl -fsSL https://raw.githubusercontent.com/DanielLavrushin/b4/main/install.sh | sh
```
## Управление сервисом
```bash
/opt/etc/init.d/S99b4 start
/opt/etc/init.d/S99b4 stop
/opt/etc/init.d/S99b4 restart
```
Сервис запускается автоматически при загрузке роутера через Entware.
## Пути
| Что | Где |
| --- | --- |
| Бинарник | `/opt/sbin/b4` |
| Конфигурация | `/opt/etc/b4/b4.json` |
| Сервис | `/opt/etc/init.d/S99b4` |
## Без Entware
Если Entware не установлен, b4 устанавливается в `/jffs/b4`. В этом случае автозапуск при загрузке не настраивается — бинарник нужно запускать вручную.
Размер `/jffs` обычно ограничен ~60 МБ, поэтому рекомендуется использовать USB-накопитель с Entware.
English translation is in progress. See the [Russian version](/ru/docs/install/merlin).

View file

@ -3,156 +3,4 @@ sidebar_position: 5
title: MikroTik
---
# MikroTik (RouterOS 7.x)
b4 запускается как контейнер на MikroTik RouterOS 7.x.
## Требования
- RouterOS версии 7.21.1 и выше
- Архитектура ARM64 или AMD64
- Подключённый внешний накопитель (Flash/SSD/HDD), отформатированный в Ext4
:::warning
Контейнеры на MikroTik требуют внешний накопитель — внутренней памяти роутера недостаточно.
:::
## Параметры примера
В руководстве используются следующие значения. Замените на свои:
| Параметр | Значение |
| --- | --- |
| Сеть моста | 192.168.210.0/24 |
| Шлюз моста | 192.168.210.1 |
| Имя моста | bridge-docker |
| IP контейнера | 192.168.210.10 |
| Имя интерфейса | B4 |
| Сеть LAN | 192.168.100.0/24 |
| DNS-сервер | 192.168.100.1 |
| Таблица маршрутизации | to_b4 |
| Диск | /usb1 |
| Список клиентов | b4users |
## Шаг 1: Мост
Создайте мост для Docker-сети:
```routeros
/interface/bridge add name=bridge-docker port-cost-mode=short
/ip/address add address=192.168.210.1/24 interface=bridge-docker network=192.168.210.0
```
## Шаг 2: Интерфейс
Создайте виртуальный Ethernet-интерфейс и подключите к мосту:
```routeros
/interface/veth add address=192.168.210.10/24 gateway=192.168.210.1 name=B4
/interface/bridge/port add bridge=bridge-docker interface=B4
```
## Шаг 3: Маршрутизация
Создайте таблицу маршрутизации и маршрут через контейнер:
```routeros
/routing table add disabled=no fib name=to_b4
/ip route add check-gateway=ping gateway=192.168.210.10 routing-table=to_b4
```
## Шаг 4: Маркировка трафика
Перенаправьте трафик клиентов из списка `b4users` через контейнер:
```routeros
/ip firewall mangle add chain=prerouting action=mark-connection \
new-connection-mark=b4_connections passthrough=yes connection-state=new \
dst-address-type=!local src-address-list=b4users in-interface-list=LAN \
place-before=0
/ip firewall mangle add chain=prerouting action=mark-routing \
new-routing-mark=to_b4 passthrough=no connection-mark=b4_connections \
in-interface-list=LAN log=no place-before=1
```
:::caution FastTrack
FastTrack обходит правила mangle. Ограничьте его немаркированными соединениями:
```routeros
/ip firewall filter set [find action=fasttrack-connection] connection-mark=no-mark
```
:::
## Шаг 5: Точки монтирования
```routeros
/container/mounts add name=b4_etc src=/usb1/docker/b4-mounts/etc dst=/opt/etc/b4
```
Убедитесь, что директория `/usb1/docker/b4-mounts/etc` существует на диске.
## Шаг 6: Запуск контейнера
Настройте реестр:
```routeros
/container/config set registry-url=https://registry-1.docker.io tmpdir=/usb1/docker/pull
```
Создайте и запустите контейнер:
```routeros
/container add remote-image=lavrushin/b4:latest interface=B4 \
root-dir=/usb1/docker/b4-mikrotik mounts=b4_etc \
cmd="--config /opt/etc/b4/b4.json" start-on-boot=yes \
logging=yes dns=192.168.100.1
```
После загрузки образа:
```routeros
/container start [find tag~"b4"]
```
## Шаг 7: Добавление клиентов
Добавьте устройства в адресный список `b4users`:
```routeros
/ip firewall address-list add list=b4users address=192.168.100.50
/ip firewall address-list add list=b4users address=192.168.100.51
```
## Веб-интерфейс
После запуска контейнера: `http://192.168.210.10:7000`
## Обновление
```routeros
/container stop [find tag~"b4"]
/container remove [find tag~"b4"]
/container add remote-image=lavrushin/b4:latest interface=B4 \
root-dir=/usb1/docker/b4-mikrotik mounts=b4_etc \
cmd="--config /opt/etc/b4/b4.json" start-on-boot=yes \
logging=yes dns=192.168.100.1
```
Конфигурация хранится на точке монтирования и сохраняется при пересоздании контейнера.
## Решение проблем
**Контейнер не запускается:**
1. Проверьте статус: `/container print`
2. Смотрите логи: `/log print where topics~"container"`
3. Убедитесь, что диск отформатирован в Ext4
**Нет доступа к веб-интерфейсу:**
1. Проверьте, что контейнер запущен: `/container print`
2. Проверьте связность: `/ping 192.168.210.10`
**Трафик не перенаправляется:**
1. Проверьте список: `/ip firewall address-list print where list=b4users`
2. Проверьте mangle: `/ip firewall mangle print`
3. Проверьте маршрут: `/ip route print where routing-table=to_b4`
English translation is in progress. See the [Russian version](/ru/docs/install/mikrotik).

View file

@ -3,143 +3,4 @@ sidebar_position: 2
title: OpenWRT
---
# OpenWRT
## Требования
- OpenWRT 19.07 и выше
- Внешнее хранилище (USB или extroot) — рекомендуется, так как на внутренней памяти роутера может не хватить места
:::warning Место на диске
На роутерах с OpenWRT внутренняя память ограничена (overlay). Если доступно менее 2 МБ, установщик предупредит об этом. Рекомендуется использовать extroot или USB-накопитель.
Инструкция по настройке extroot: https://openwrt.org/docs/guide-user/additional-software/extroot_configuration
:::
## Установка
Подключитесь к роутеру по SSH и выполните:
```bash
curl -fsSL https://raw.githubusercontent.com/DanielLavrushin/b4/main/install.sh | sh
```
Если `curl` не установлен:
```bash
opkg update && opkg install curl ca-certificates
```
Или через `wget`:
```bash
wget -qO- https://raw.githubusercontent.com/DanielLavrushin/b4/main/install.sh | sh
```
:::info wget на OpenWRT
Стандартный `wget` в OpenWRT (BusyBox) не поддерживает HTTPS. Установите полную версию:
```bash
opkg update && opkg install wget-ssl ca-certificates
```
:::
## Модули ядра
Установщик попытается загрузить необходимые модули автоматически. Если при запуске вы видите предупреждение `[WARN] No netfilter queue module available` или ошибки связанные с nftables — установите модули вручную.
### OpenWRT 24.x+ (apk)
```bash
apk add kmod-nft-queue kmod-nft-nat kmod-nft-compat kmod-nft-conntrack
```
### OpenWRT 23.x и ниже (opkg)
```bash
opkg update
opkg install kmod-nft-queue kmod-nft-conntrack nftables-json coreutils-nohup
```
Для совсем старых версий (без nftables):
```bash
opkg install kmod-nfnetlink-queue kmod-ipt-nfqueue iptables-mod-nfqueue iptables-mod-conntrack-extra
```
### Загрузка модулей
После установки модулей может потребоваться загрузить их вручную:
```bash
modprobe nft_queue
modprobe nft_ct
modprobe xt_connbytes
```
Если команда выполняется без вывода — модуль загружен успешно.
## Управление сервисом
```bash
/etc/init.d/b4 enable # автозапуск при загрузке
/etc/init.d/b4 start
/etc/init.d/b4 stop
/etc/init.d/b4 restart
```
:::tip Работа через SSH
Сервис b4 работает как системный демон — он продолжит работать после закрытия SSH-сессии (PuTTY, терминал и т.д.). Не нужно использовать `screen` или `nohup` вручную.
:::
## Пути
При наличии `/opt` (extroot/USB):
| Что | Где |
| --- | --- |
| Бинарник | `/opt/bin/b4` |
| Конфигурация | `/opt/etc/b4/b4.json` |
Без внешнего хранилища (fallback):
| Что | Где |
| --- | --- |
| Бинарник | `/usr/bin/b4` |
| Конфигурация | `/etc/b4/b4.json` |
## Веб-интерфейс
После запуска b4 доступен по адресу `http://<IP роутера>:7000`. Например, если IP роутера `192.168.1.1`, откройте в браузере:
```text
http://192.168.1.1:7000
```
## LuCI-приложение
Существует сторонний пакет [luci-app-b4](https://github.com/BugOldfag/luci-app-b4), который добавляет управление b4 в интерфейс LuCI. Проект находится в стадии alpha и покрывает часть функций. Основной веб-интерфейс b4 (порт 7000) по-прежнему доступен.
## Устранение неполадок
### Service crashed / сервис не запускается
1. Убедитесь что модули ядра установлены и загружены (см. раздел «Модули ядра» выше)
2. Проверьте логи: `logread | grep b4`
### Error: Could not process rule
Если b4 вылетает с ошибкой при добавлении правил в цепочку, возможно остались «битые» таблицы от предыдущего неудачного запуска. Очистите их:
```bash
nft delete table inet b4_mangle 2>/dev/null
```
После этого запустите b4 заново:
```bash
/etc/init.d/b4 restart
```
### Низкая скорость / тормозит видео
Проверьте настройку **Software flow offloading** в разделе Network → Firewall. Попробуйте включить или выключить её — на некоторых устройствах это влияет на производительность b4.
English translation is in progress. See the [Russian version](/ru/docs/install/openwrt).

View file

@ -1,23 +1,23 @@
---
sidebar_position: 1
title: Введение
title: Introduction
---
## Что такое b4
## What b4 is
**b4** (Bye Bye Big Bro) — это программа, которая помогает открывать сайты, заблокированные вашим интернет-провайдером. Провайдеры используют технологию DPI (глубокий анализ пакетов), чтобы распознавать и блокировать трафик к определённым ресурсам. b4 изменяет сетевые пакеты таким образом, что система блокировки не может их распознать — при этом сайт получает данные без изменений и работает как обычно.
**b4** (Bye Bye Big Bro) is a service that helps open websites blocked by your internet provider. Providers use DPI technology (Deep Packet Inspection) to recognize and block traffic to specific resources. b4 modifies network packets so that the blocking system cannot recognize them - the destination site still receives the data unchanged and works as usual.
b4 работает на Linux-устройствах: обычных компьютерах, серверах и роутерах. Если установить b4 на роутер — обход блокировок работает сразу для всех устройств в домашней сети без дополнительных настроек на каждом из них.
b4 runs on Linux devices: regular computers, servers, and routers. When installed on a router, bypass works for every device on the home network without any configuration on the individual devices.
Управление происходит через **веб-интерфейс** в браузере.
Management is done through a **web interface** in the browser.
## Как это работает
## How it works
```mermaid
flowchart LR
A["Ваше устройство"] --> B["b4"]
B --> C{"DPI провайдера"}
C -->|"Не распознал"| D["Сайт работает"]
A["Your device"] --> B["b4"]
B --> C{"Provider DPI"}
C -->|"Not recognized"| D["Site works"]
style A fill:#4a9eff,color:#fff,stroke:none
style B fill:#e91e63,color:#fff,stroke:none
@ -25,56 +25,56 @@ flowchart LR
style D fill:#4caf50,color:#fff,stroke:none
```
**Без b4:** вы открываете сайт — провайдер видит, куда вы идёте, и блокирует соединение.
**Without b4:** you open a site - the provider sees where you are going and blocks the connection.
**С b4:** пакеты модифицируются до того, как попадут к провайдеру. DPI-система не может определить, какой сайт вы запрашиваете, и пропускает трафик. Сам сайт при этом собирает пакеты обратно и работает нормально.
**With b4:** packets are modified before they reach the provider. The DPI system cannot determine which site you are requesting and lets the traffic through. The site itself reassembles the packets and works normally.
Основные методы обхода:
Main bypass methods:
- **Фрагментация** — запрос разбивается на части, которые DPI не может собрать воедино
- **Подмена** — отправка ложных пакетов, которые сбивают DPI с толку
- **Модификация** — изменение служебных полей пакета, чтобы они не совпадали с сигнатурами блокировки
- **Fragmentation** - the request is split into parts that the DPI cannot reassemble
- **Faking** - sending decoy packets that confuse the DPI
- **Modification** - altering packet header fields so they do not match blocking signatures
Разбираться в деталях не обязательно — в b4 есть механизм автоматического подбора конфигурации под вашего провайдера.
You do not need to understand the details - b4 includes an automatic mechanism that picks a working configuration for your provider.
## Основные возможности
## Main features
b4 состоит из нескольких частей, которые подробно описаны в соответствующих разделах документации:
b4 consists of several parts, each described in detail in its own documentation section:
- **Наборы настроек (сеты)** — конфигурации обхода для TCP/UDP трафика с разными стратегиями
- **Обнаружение** — автоматический подбор рабочей конфигурации
- **Детектор DPI** — определение методов блокировки у вашего провайдера
- **Мониторинг соединений** — просмотр трафика в реальном времени
- **GeoSite/GeoIP** — работа с категориями сайтов и IP-адресов
- **Фильтрация по устройствам** — разные правила для разных устройств в сети
- **Маршрутизация** — направление трафика через заданный интерфейс (VPN, WireGuard и т.д.)
- **SOCKS5-прокси** — для приложений, которые поддерживают прокси
- **MTProto-прокси** — прокси для Telegram
- **Sets** - bypass configurations for TCP/UDP traffic with different strategies
- **Discovery** - automatic selection of a working configuration
- **DPI Detector** - identifies the blocking methods used by your provider
- **Connections monitor** - view traffic in real time
- **GeoSite/GeoIP** - work with site categories and IP addresses
- **Per-device filtering** - different rules for different devices on the network
- **Routing** - direct traffic through a specific interface (VPN, WireGuard, etc.)
- **SOCKS5 proxy** - for applications that support proxies
- **MTProto proxy** - a proxy for Telegram
## Системные требования
## System requirements
### Поддерживаемые платформы
### Supported platforms
| Платформа | Описание |
| ----------- | ------------------------------------------------------------- |
| Linux | Любой дистрибутив с ядром 3.13+ (Ubuntu, Debian, Alpine и др.) |
| OpenWRT | Роутеры с прошивкой OpenWRT |
| ASUS Merlin | Роутеры ASUS с прошивкой Merlin (через Entware) |
| Keenetic | Роутеры Keenetic с поддержкой OPKG |
| MikroTik | RouterOS 7.x с поддержкой контейнеров |
| Docker | Любая система с Docker |
| Platform | Description |
| --- | --- |
| Linux | Any distribution with kernel 3.13+ (Ubuntu, Debian, Alpine, etc.) |
| OpenWRT | Routers running OpenWRT firmware |
| ASUS Merlin | ASUS routers with Merlin firmware (via Entware) |
| Keenetic | Keenetic routers with OPKG support |
| MikroTik | RouterOS 7.x with container support |
| Docker | Any system with Docker |
### Поддерживаемые архитектуры
### Supported architectures
`amd64`, `arm64`, `armv7`, `armv6`, `armv5`, `386`, `mips`, `mipsle`, `mips64`, `mips64le`
### Минимальные требования
### Minimum requirements
- **RAM:** 64 МБ свободной памяти
- **Диск:** ~30 МБ для бинарника + место для конфигурации и geodata
- **Ядро Linux:** 3.13+ с поддержкой NFQUEUE (`nfnetlink_queue`)
- **Права:** root (для работы с netfilter)
- **RAM:** 64 MB of free memory
- **Disk:** ~30 MB for the binary plus space for configuration and geodata
- **Linux kernel:** 3.13+ with NFQUEUE support (`nfnetlink_queue`)
- **Privileges:** root (required for netfilter)
:::info
При установке на роутер обход работает для всех устройств в сети без настройки на каждом из них.
When installed on a router, bypass works for every device on the network without any per-device setup.
:::

View file

@ -1,36 +1,6 @@
---
sidebar_position: 11
title: Логи
title: Logs
---
# Логи
Раздел отображает системные логи b4 в реальном времени. Логи поступают через WebSocket и обновляются непрерывно.
<!-- screenshot: страница логов -->
## Управление
- **Фильтр** — текстовый поиск по содержимому логов (без учёта регистра)
- **Поток / Пауза** — переключение между режимами потоковой трансляции и паузы
- **Очистить логи** — удалить все отображаемые строки
## Горячие клавиши
| Клавиша | Действие |
| --- | --- |
| **P** или **Pause** | Пауза / возобновление потока |
| **Ctrl+X** или **Delete** | Очистить логи |
## Уровень логирования
Количество информации в логах зависит от настройки уровня логирования (Настройки → Основные → Настройки логирования):
| Уровень | Что отображается |
| --- | --- |
| **ERROR** | Только ошибки |
| **INFO** | Ошибки + основные события |
| **TRACE** | INFO + детали обработки пакетов |
| **DEBUG** | Всё, включая отладочную информацию |
Для диагностики проблем используйте TRACE или DEBUG. Для обычной работы достаточно INFO.
English translation is in progress. See the [Russian version](/ru/docs/logs).

View file

@ -1,168 +1,6 @@
---
sidebar_position: 12
title: MTProto Прокси
title: MTProto Proxy
---
# MTProto Прокси для Telegram
B4 включает встроенный прокси для Telegram, который маскирует трафик под обычное HTTPS-соединение к популярному сайту.
## Два сценария использования
![mtproto](../static/img/mtproto/20260322135051.png)
### Сценарий 1: B4 на VPS за границей (простой)
B4 установлен на сервере за пределами цензурированной зоны. Пользователи из России подключают Telegram напрямую к VPS.
```text
Телефон (Россия) ──────▶ B4 на VPS ──────▶ Telegram
ТСПУ видит
«HTTPS к google.com»
(не блокирует)
```
Настройка занимает 2 минуты. Дополнительное ПО не требуется.
### Сценарий 2: B4 на роутере внутри России (с relay)
B4 установлен на роутере или машине внутри России. Требуется дополнительный VPS для пересылки трафика, так как ТСПУ блокирует все прямые соединения к серверам Telegram по IP.
```text
Телефон ──────▶ B4 (роутер) ──────▶ VPS ──────▶ Telegram
ТСПУ видит ТСПУ видит
«HTTPS к google.com» «трафик к VPS»
(не блокирует) (не блокирует)
```
На VPS достаточно запустить простую пересылку трафика — без ключей и настроек.
---
## Сценарий 1: B4 на VPS
### Шаг 1: Настройка B4
В веб-интерфейсе B4 → **Settings****General****MTProto Proxy**:
1. **Enable MTProto Proxy** — включить
2. **Port** — порт для подключений (рекомендуется `443`)
3. **Fake SNI Domain** — домен для маскировки (например `storage.googleapis.com`)
4. Нажать **Generate Secret**
5. Скопировать значение из поля **Secret**
6. Сохранить настройки и перезапустить B4
Поле **DC Relay** оставить пустым — B4 на VPS подключается к Telegram напрямую.
### Шаг 2: Настройка Telegram
1. Открыть **Telegram****Настройки****Данные и память** → **Прокси**
2. Нажать **Добавить прокси**
3. Выбрать тип **MTProto**
4. Заполнить:
- **Сервер**: IP-адрес или домен VPS
- **Порт**: порт из шага 1
- **Секрет**: скопированный секрет
5. Нажать **Готово** и включить прокси
![telegra](../static/img/mtproto/20260322135130.png)
---
## Сценарий 2: B4 на роутере внутри России
### Шаг 1: Подготовка VPS
На любом VPS за границей запустить пересылку трафика:
```bash
# Установка socat
apt install -y socat
# Запуск пересылки (при необходимости заменить 7007 на другой начальный порт)
socat TCP-LISTEN:7007,fork,reuseaddr TCP:149.154.175.50:443 &
socat TCP-LISTEN:7008,fork,reuseaddr TCP:149.154.167.51:443 &
socat TCP-LISTEN:7009,fork,reuseaddr TCP:149.154.175.100:443 &
socat TCP-LISTEN:7010,fork,reuseaddr TCP:149.154.167.91:443 &
socat TCP-LISTEN:7011,fork,reuseaddr TCP:149.154.171.5:443 &
```
Больше ничего на VPS настраивать не нужно. Никаких ключей, секретов или дополнительного ПО.
:::warning Порты
B4 использует **5 последовательных портов** начиная с указанного. Например, при начальном порте `7007` должны быть открыты порты `7007``7011` в firewall VPS. Каждый порт соответствует одному из 5 дата-центров Telegram.
:::
:::tip
Для автозапуска можно добавить команды в `/etc/rc.local` или создать systemd-сервис.
:::
### Шаг 2: Настройка B4
В веб-интерфейсе B4 → **Settings****General****MTProto Proxy**:
1. **Enable MTProto Proxy** — включить
2. **Port** — порт для подключений (например `7002`)
3. **Fake SNI Domain** — домен для маскировки (например `storage.googleapis.com`)
4. **DC Relay** — адрес VPS с начальным портом (например `my-vps.com:7007`)
5. Нажать **Generate Secret**
6. Скопировать значение из поля **Secret**
7. Сохранить настройки и перезапустить B4
### Шаг 3: Настройка Telegram
1. [Открыть](https://core.telegram.org/proxy#adding-a-proxy) **Telegram****Настройки****Данные и память** → **Прокси**
2. Нажать **Добавить прокси**
3. Выбрать тип **MTProto**
4. Заполнить:
- **Сервер**: IP-адрес роутера или машины с B4
- **Порт**: порт из шага 2
- **Секрет**: скопированный секрет
5. Нажать **Готово** и включить прокси
---
## Выбор домена для маскировки
Домен должен быть:
- популярным в России
- незаблокированным
- критически важным (блокировка такого домена нарушит работу других сервисов)
:::info
При подключении к порту B4 без правильного секрета — B4 прозрачно перенаправляет на настоящий сайт (указанный в Fake SNI). Сканер видит обычный сайт, а не прокси.
:::
## Что-то пошло не так, памагити
### Telegram показывает "Подключение..."
- Убедиться, что `socat` запущен на VPS и порты доступны (сценарий 2)
- Проверить правильность адреса VPS в поле DC Relay
- В логах B4 должны быть строки `MTProto fake-TLS handshake OK` и `MTProto relay`
### Неправильный секрет
В логах: `HMAC verification failed`
Секрет в Telegram не совпадает с секретом в B4.
### Расхождение времени
В логах: `timestamp out of range`
Часы на устройстве и на машине с B4 расходятся. Необходимо синхронизировать время.
### VPS недоступен
В логах: `dial DC ... i/o timeout`
- VPS выключен или `socat` не запущен
- Firewall на VPS блокирует входящие соединения на нужных портах
### Нет ответа от Telegram
В логах: `DC->client: 0 bytes`
- Если DC Relay **не настроен**: серверы Telegram заблокированы по IP. Необходимо настроить VPS relay (придется использовать только сценарий 2).
- Если DC Relay **настроен**: `socat` на VPS не запущен или указан неправильный порт.
English translation is in progress. See the [Russian version](/ru/docs/mtproto).

View file

@ -1,114 +1,6 @@
---
sidebar_position: 3
title: Быстрый старт
title: Quickstart
---
## Обзор
После установки b4 запускается как сервис и становится доступен через веб-интерфейс. Эта страница описывает путь от первого запуска до работающего обхода блокировок.
## Открыть веб-интерфейс
Откройте в браузере:
```text
http://<IP-адрес>:7000
```
Где `<IP-адрес>` — адрес устройства, на котором установлен b4:
- Если b4 на этом же компьютере: `http://localhost:7000`
- Если на роутере: `http://192.168.1.1:7000` (подставьте IP роутера)
:::info HTTPS
Если в настройках b4 включён HTTPS, используйте `https://` вместо `http://`. Браузер может показать предупреждение о сертификате — это нормально для самоподписанного сертификата, его можно принять.
:::
![dashboard](../static/img/quickstart/20260323203514.png)
При первом запуске дашборд будет пустым — это нормально. Данные появятся после настройки.
## Запустить обнаружение
b4 может автоматически подобрать рабочую конфигурацию для вашего провайдера. Для этого используется раздел **Дискавери**.
### Шаг 1: Перейти в Дискавери
В боковом меню нажмите **Дискавери**.
![discovery](../static/img/quickstart/20260323203615.png)
### Шаг 2: Добавить домены
В поле **Добавить домен или URL** введите адрес заблокированного сайта и нажмите Enter. Можно добавить несколько доменов через запятую.
Примеры:
- `youtube.com`
- `googlevideo.com`
![discovery2](../static/img/quickstart/20260323203727.png)
### Шаг 3: Начать поиск
Нажмите **Начать поиск**.
b4 начнёт перебирать стратегии обхода и тестировать их на указанных доменах. Процесс проходит несколько фаз:
1. **Базовый тест** — проверка, действительно ли сайт заблокирован
2. **Поиск стратегий** — перебор методов обхода
3. **Оптимизация** — подбор параметров
4. **Тест комбинаций** — проверка комбинированных стратегий
5. **Проверка DNS** — проверка DNS-блокировки
![disearch](../static/img/quickstart/20260323203826.png)
Поиск может занять от 1 до 10 минут в зависимости от провайдера.
:::tip Пропустить проверку DNS
Если вы уверены, что DNS работает нормально (например, используете DoH или сторонний DNS-сервер), включите опцию **Пропустить поиск DNS** в **Параметрах поиска**. Это ускорит процесс и уберёт ложные срабатывания по DNS.
:::
### Шаг 4: Результаты
После завершения для каждого домена отображается результат:
- **Успешно** — найдена рабочая конфигурация
- **Заблокирован** — сайт заблокирован на уровне DNS или транспорта, нужны дополнительные настройки
![success](../static/img/quickstart/20260323203905.png)
## Применить конфигурацию
На карточке успешного результата нажмите **Использовать эту конфигурацию**.
![addset](../static/img/quickstart/20260323204345.png)
В открывшемся диалоге:
1. Выберите **Создать новый сет** (или **Добавить в существующий похожий сет**, если у вас уже есть настроенные сеты)
2. Укажите название сета (или оставьте предложенное)
3. Нажмите **Создать сет**
Сет — это набор настроек обхода, привязанный к списку доменов или ip адресов. Подробнее о сетах — в разделе [Сеты](./sets/).
## Проверить работу
### Через браузер
Откройте сайт, для которого настроен обход. Если всё работает — сайт загрузится.
### Через раздел Соединения
В боковом меню нажмите **Соединения**. Здесь отображаются все текущие TCP/UDP-соединения в реальном времени.
![connections](../static/img/quickstart/20260323204510.png)
Если обход работает, в столбце **Сет** напротив соединений с настроенным доменом будет отображаться название вашего сета.
## Что дальше
- Добавить другие домены — через Дискавери или вручную в настройках сета
- Настроить обход по категориям (GeoSite) — чтобы не добавлять домены по одному
- Посмотреть раздел [Сеты](./sets/) для подробного описания всех возможностей
English translation is in progress. See the [Russian version](/ru/docs/quickstart).

View file

@ -1,138 +1,6 @@
---
sidebar_position: 6
title: Сеты
title: Sets
---
# Сеты
Сет — это набор настроек обхода DPI, привязанный к списку доменов, IP-адресов, UDP-портов или категорий GeoSite/GeoIP. Можно создать несколько сетов с разными стратегиями для разных сайтов.
## Управление сетами
На странице **Сеты** отображаются все созданные наборы. Для каждого сета видно:
- Название и статус (включён/выключен)
- Количество доменов и IP
- Активные техники (COMBO, DISORDER, HYBRID и т.д.)
- Состояние DNS-маршрутизации и SNI Faking
![sets](../../static/img/index/20260323210109.png)
Доступные действия:
- **Создать сет** — новый набор настроек
- **Редактировать** — клик по карточке
- **Дублировать** — создать копию существующего сета
- **Сравнить** — сравнение двух сетов в два столбца
- **Удалить** — удаление одного или нескольких сетов (через массовое выделение)
- **Перетаскивание** — изменение порядка сетов (порядок влияет на приоритет обработки)
## Редактор сета
Редактор содержит 5 вкладок:
- [Цели](./targets) — домены, IP, GeoSite/GeoIP категории, устройства
- [TCP](./tcp/) — фрагментация, faking, desync и другие TCP-стратегии
- [UDP](./udp) — обработка UDP-трафика, QUIC, STUN
- [Маршрутизация](./routing) — DNS-редирект и маршрутизация трафика через интерфейсы
- **Импорт/Экспорт** — JSON-представление конфигурации сета для переноса между устройствами
![set](../../static/img/index/20260323210150.png)
## Как это работает
```mermaid
flowchart TD
A["Пакет из сети"] --> B{"IP назначения\nсовпал с сетом?"}
B -->|"Да"| C["Предварительный сет\n(по IP)"]
B -->|"Нет"| D
C --> D{"Есть ли\nTLS/QUIC данные?"}
D -->|"Да"| E["Извлечь домен (SNI)"]
D -->|"Нет"| F
E --> G{"Домен совпал\nс сетом?"}
G -->|"Да"| SEL
G -->|"Нет"| TLSCHK
TLSCHK{"IP совпал ранее\nи версия TLS\nподходит?"}
TLSCHK -->|"Да"| SEL
TLSCHK -->|"Нет"| F
F{"IP ранее\nсвязывался\nс доменом?"}
F -->|"Да"| SEL
F -->|"Нет"| H
H{"Есть сет\nтолько по порту?"}
H -->|"Да"| SEL
H -->|"Нет"| SKIP["Пропустить"]
SEL{"Сет с устройством\n+ версия TLS?"}
SEL -->|"Да"| OK["Применить сет"]
SEL -->|"Нет"| SEL2{"Общий сет\n+ версия TLS?"}
SEL2 -->|"Да"| OK
SEL2 -->|"Нет"| SEL3{"Любой\nподходящий сет?"}
SEL3 -->|"Да"| OK
SEL3 -->|"Нет"| SKIP
style A fill:#4a9eff,color:#fff,stroke:none
style OK fill:#4caf50,color:#fff,stroke:none
style SKIP fill:#666,color:#fff,stroke:none
style C fill:#ff9800,color:#fff,stroke:none
style SEL fill:#9c27b0,color:#fff,stroke:none
style SEL2 fill:#9c27b0,color:#fff,stroke:none
style SEL3 fill:#9c27b0,color:#fff,stroke:none
style TLSCHK fill:#ff9800,color:#fff,stroke:none
```
### Порядок сопоставления
1. **IP-адрес** — проверяется первым. Если IP назначения совпал с IP/CIDR в каком-то сете, это запоминается как предварительное совпадение
2. **Домен (SNI)** — если в пакете есть TLS/QUIC-данные, b4 извлекает домен. Если домен совпал с сетом — **этот сет заменяет** предварительное совпадение по IP. Домен всегда имеет приоритет
3. **Выученный IP** — если b4 ранее видел этот IP в связке с доменом (из предыдущих соединений), используется тот же сет
4. **Порт** — проверяется, только если сет настроен исключительно по порту (без доменов и IP)
5. **Предварительный IP** — если ни домен, ни выученный IP, ни порт не сработали, используется совпадение по IP из шага 1
:::tip Фильтр портов
Если в сете настроен фильтр портов — он работает как дополнительное условие. Даже если домен или IP совпали, пакет будет обработан только при совпадении порта.
:::
:::info Выбор сета при нескольких совпадениях
Если один и тот же домен или IP настроен в нескольких сетах, b4 выбирает сет по приоритету:
1. Сет с указанным **исходным устройством**, совпавшим с MAC отправителя + совпавшей **версией TLS**
2. Сет без привязки к устройству + совпавшей версией TLS
3. Если ни один сет не подошёл по TLS — версия TLS игнорируется и проверка повторяется
Таким образом, сеты с привязкой к устройствам всегда имеют приоритет над общими, а фильтр TLS-версии уточняет выбор, но не блокирует обработку.
:::
:::info Выученные IP
Когда b4 видит соединение, где домен (SNI) совпал с сетом, он запоминает связку IP → домен на 10 минут. Это ускоряет обработку последующих пакетов к тому же серверу, даже если в них нет SNI.
:::
### Что происходит при совпадении
Для TCP-пакетов b4 перехватывает оригинальный пакет и отправляет вместо него модифицированную версию. В зависимости от настроек сета применяются:
1. Удаление SACK-опции (если включено)
2. Мутация ClientHello (если включена)
3. Десинхронизация (RST/FIN/ACK)
4. Манипуляция TCP-окном
5. Отправка фейковых SNI-пакетов
6. Фрагментация по выбранной стратегии
Для UDP — пакет либо отбрасывается (режим drop), либо заменяется фейковым ответом (режим fake).
Если ни один сет не совпал — пакет проходит без изменений.
## Импорт и экспорт
Вкладка **Импорт/Экспорт** показывает JSON-конфигурацию сета. Можно:
- Скопировать JSON для переноса на другое устройство
- Вставить JSON для импорта конфигурации
Исходные устройства (MAC-адреса) не экспортируются — их нужно настроить заново на целевом устройстве.
English translation is in progress. See the [Russian version](/ru/docs/sets).

View file

@ -1,200 +1,6 @@
---
sidebar_position: 4
title: Маршрутизация
title: Routing
---
# Маршрутизация
Вкладка маршрутизации управляет тем, как обрабатываются DNS-запросы и куда направляется трафик, совпавший с целями сета. Содержит два раздела: **DNS-редирект** и **Маршрутизация трафика**.
## DNS-редирект
Перенаправляет DNS-запросы для доменов из сета на указанный DNS-сервер.
Некоторые провайдеры перехватывают DNS-ответы и подменяют IP-адреса (DNS poisoning). В результате подключение идёт на неправильный адрес, даже если домен не заблокирован напрямую. DNS-редирект отправляет запрос на альтернативный сервер, минуя перехват.
```mermaid
flowchart LR
A["Приложение"] -->|"DNS-запрос<br/>instagram.com"| B["b4"]
B -->|"Перехват"| C{"DNS провайдера"}
C -->|"Подмена IP"| X["❌ Неправильный адрес"]
B -->|"Редирект"| D["Указанный DNS"]
D -->|"Реальный IP"| E["✅ Сайт работает"]
style A fill:#4a9eff,color:#fff,stroke:none
style B fill:#e91e63,color:#fff,stroke:none
style C fill:#ff9800,color:#fff,stroke:none
style X fill:#f44336,color:#fff,stroke:none
style D fill:#4caf50,color:#fff,stroke:none
style E fill:#4caf50,color:#fff,stroke:none
```
### Настройка
1. Включите **DNS-редирект**
2. Выберите DNS-сервер из списка или введите IP вручную
:::tip
Если не знаете, какой DNS выбрать — начните с любого из списка, кроме Google DNS (8.8.8.8). Google DNS блокируется некоторыми провайдерами в первую очередь.
:::
### Список серверов
В интерфейсе отображается список DNS-серверов с иконками:
| Иконка | Значение |
| --- | --- |
| ⚡ | Fast — ориентирован на скорость |
| 🛑 | AdBlock — блокирует рекламные домены |
| 🔒 | DNSSEC — криптографическая проверка ответов |
При выборе сервера его IP автоматически подставляется в поле. Можно ввести любой другой IP вручную.
:::warning
Если поле DNS-сервера пустое, редирект не будет работать, даже если он включён.
:::
### Фрагментация DNS-запроса
Переключатель **Фрагментировать запрос** разбивает DNS-пакет на несколько частей перед отправкой.
Используется, если провайдер анализирует содержимое DNS-пакетов даже к сторонним серверам и блокирует запросы по содержимому.
:::info
Фрагментация затрагивает только DNS-запросы доменов из текущего сета. Остальной DNS-трафик не изменяется.
:::
---
## Маршрутизация трафика
Направляет трафик, совпавший с целями сета, через указанный сетевой интерфейс — например, VPN, WireGuard или другой туннель.
### Общая схема
```mermaid
flowchart TB
DNS["DNS-ответ для домена из сета"] -->|"IP + TTL"| IPSET
STATIC["Статические IP из целей сета"] -->|"IP"| IPSET
IPSET["IP-набор<br/>(nftables set / ipset)"]
IPSET --> MARK["PREROUTING / OUTPUT<br/>dst IP в наборе? → fwmark"]
MARK -->|"fwmark"| RULE["ip rule<br/>fwmark → таблица маршрутизации"]
RULE --> ROUTE["Таблица маршрутизации<br/>default → выходной интерфейс"]
ROUTE --> MASQ["POSTROUTING<br/>Masquerade"]
MASQ --> IFACE["wg0 / tun0 / ..."]
style DNS fill:#4a9eff,color:#fff,stroke:none
style STATIC fill:#4a9eff,color:#fff,stroke:none
style IPSET fill:#ff9800,color:#fff,stroke:none
style MARK fill:#e91e63,color:#fff,stroke:none
style MASQ fill:#e91e63,color:#fff,stroke:none
style RULE fill:#9c27b0,color:#fff,stroke:none
style ROUTE fill:#9c27b0,color:#fff,stroke:none
style IFACE fill:#4caf50,color:#fff,stroke:none
```
### Как это работает (подробно)
Маршрутизация использует policy-based routing — маршрутизацию на основе меток пакетов:
1. **Сбор IP-адресов.** Когда b4 видит DNS-ответ для домена из сета, он извлекает из него IP-адреса и добавляет их во внутренний IP-набор (nftables set или ipset). IP-адреса, указанные вручную в [целях сета](./targets.md), добавляются при загрузке конфигурации.
2. **Маркировка пакетов.** b4 создаёт цепочки в firewall для каждого сета:
- **PREROUTING** (mangle) — маркирует транзитный трафик (от устройств в сети), если IP назначения есть в наборе. Если указаны исходные интерфейсы — маркирует только трафик с этих интерфейсов.
- **OUTPUT** (mangle) — маркирует трафик от самого роутера.
3. **Policy routing.** Для маркированных пакетов создаётся правило `ip rule`: пакеты с определённым `fwmark` направляются в отдельную таблицу маршрутизации, где default route указывает на выходной интерфейс.
4. **Masquerade.** В цепочке **POSTROUTING** (nat) ко всему маркированному трафику, выходящему через целевой интерфейс, применяется masquerade — исходный IP пакета заменяется на IP выходного интерфейса. Это необходимо, чтобы ответные пакеты возвращались через тот же туннель.
5. **Предварительное разрешение.** При включении маршрутизации b4 сразу резолвит все домены из целей сета и добавляет полученные IP в набор. Это обеспечивает маршрутизацию с первого запроса, не дожидаясь DNS-трафика через NFQUEUE.
### Настройка
1. Включите **Маршрутизацию**
2. Выберите **Исходные интерфейсы**с каких интерфейсов перехватывать трафик
3. Выберите **Выходной интерфейс** — куда направить трафик
![routing](../../static/img/routing/20260326230827.png)
После включения в верхней части раздела отображается диаграмма потока:
```text
[Исходные интерфейсы] → B4 → [Выходной интерфейс] → Интернет
```
Диаграмма обновляется при изменении настроек.
### Исходные интерфейсы
Определяют, с каких сетевых интерфейсов перехватывать трафик для маршрутизации. Отображаются как кнопки-бейджи — клик включает/выключает интерфейс.
:::info
Если ни один исходный интерфейс не выбран — маршрутизация применяется ко всему трафику, включая трафик от самого роутера.
:::
Если ранее выбранный интерфейс исчез из системы (например, VPN-подключение разорвалось), он отображается красным с пометкой «stale».
### Выходной интерфейс
Сетевой интерфейс, через который будет отправлен маркированный трафик:
| Интерфейс | Описание |
| --- | --- |
| `wg0`, `wg1` | WireGuard-туннель |
| `tun0`, `tun1` | OpenVPN-туннель |
| `ppp0` | PPP-соединение |
:::warning
Если выбранный выходной интерфейс перестал быть доступен, появится предупреждение. Маршрутизация не будет работать, пока интерфейс не появится снова.
:::
### IP TTL (время жизни записи)
Определяет, сколько секунд IP-адрес, полученный из DNS-ответа, хранится в IP-наборе маршрутизации. По истечении TTL запись удаляется автоматически.
Значение по умолчанию: **3600** секунд (1 час).
IP-адреса, добавленные вручную в целях сета, также получают этот TTL и обновляются при каждой синхронизации конфигурации.
:::tip
Для стабильных сервисов с постоянными IP можно увеличить TTL. Для CDN-сервисов, где IP меняются часто, лучше уменьшить.
:::
### Firewall backend
b4 автоматически определяет доступный backend:
| Backend | Требования | Описание |
| --- | --- | --- |
| **nftables** | бинарник `nft` | Создаёт таблицу `b4_route` с цепочками `prerouting`, `output`, `postrouting`. IP-наборы с поддержкой `interval` и `timeout`. |
| **iptables + ipset** | бинарники `iptables`, `ipset` | Использует таблицы `mangle` и `nat`. Создаёт ipset типа `hash:net` для хранения IP. Также проверяет `iptables-legacy`. |
:::info
Выбор backend происходит автоматически. На системах с nftables используется nftables, на старых системах — iptables. Ручная настройка не требуется.
:::
### FWMark и таблица маршрутизации
Каждому выходному интерфейсу автоматически назначаются:
- **fwmark** — метка пакета (диапазон `0x100``0x7EFF`)
- **routing table** — номер таблицы маршрутизации (диапазон `100``2099`)
Значения вычисляются на основе имени интерфейса и остаются стабильными между перезагрузками. Если несколько сетов используют один и тот же выходной интерфейс — они разделяют `fwmark` и таблицу.
:::info
Ручное указание `fwmark` и `table` доступно через конфигурационный файл. В этом случае автоматическое назначение не используется.
:::
### Очистка
При отключении маршрутизации или удалении сета b4 полностью удаляет все созданные правила:
- Удаляет `ip rule` и записи в таблице маршрутизации
- Удаляет jump-правила из базовых цепочек
- Очищает и удаляет созданные цепочки и IP-наборы
При полной остановке b4 выполняется очистка обоих backend (nftables и iptables) для удаления возможных остаточных правил.
English translation is in progress. See the [Russian version](/ru/docs/sets/routing).

View file

@ -1,61 +1,6 @@
---
sidebar_position: 1
title: Цели
title: Targets
---
# Цели
Вкладка «Цели» определяет, к какому трафику применяется сет. Трафик фильтруется по доменам, IP-адресам, категориям GeoSite/GeoIP и исходным устройствам.
## Фильтр версии TLS
В верхней части вкладки — выбор версии TLS:
- **Any** — обрабатывать весь TLS-трафик
- **1.2** — только TLS 1.2
- **1.3** — только TLS 1.3
Это полезно, если для разных версий TLS нужны разные стратегии обхода (некоторые провайдеры блокируют TLS 1.2 и TLS 1.3 по-разному).
## Домены
Ручной ввод доменов для обхода. Введите домен и нажмите Enter.
- Можно добавлять несколько через запятую или перенос строки
- При дублировании с другим сетом — появляется предупреждение
- Кнопка **Редактировать список** открывает текстовый редактор (по одному домену на строку)
![targets](../../static/img/targets/20260323211836.png)
## Категории GeoSite
Вместо добавления доменов по одному можно выбрать категорию из базы GeoSite. Каждая категория содержит сотни или тысячи доменов (например, `youtube`, `discord`, `google`).
Для использования GeoSite нужно загрузить базу данных (Настройки → Geodat настройки).
Клик по категории показывает список входящих в неё доменов.
## IP-адреса
Ручной ввод IP или CIDR-диапазонов (например, `10.0.0.0/8`, `192.168.1.100`).
Работает аналогично доменам: поддержка массового редактирования, предупреждения о дублях.
## Категории GeoIP
Аналог GeoSite, но для IP-диапазонов. Категории привязаны к странам и ASN.
## Исходные устройства
Ограничивает действие сета трафиком от конкретных устройств в сети (по MAC-адресу).
Таблица показывает доступные устройства:
| Столбец | Описание |
| --- | --- |
| Выбор | Чекбокс для включения устройства |
| MAC | MAC-адрес устройства |
| IP | Текущий IP-адрес |
| Имя | Имя устройства или vendor |
Если устройства не выбраны — сет применяется ко всему трафику. Если выбраны — только к трафику от этих устройств. Сеты с привязкой к устройствам имеют приоритет над общими.
English translation is in progress. See the [Russian version](/ru/docs/sets/targets).

View file

@ -3,208 +3,4 @@ sidebar_position: 3
title: Faking
---
# Faking
Вкладка Faking содержит методы отправки ложных пакетов и модификации реальных пакетов для обмана DPI. Каждая секция — отдельный аккордеон в интерфейсе.
Подробнее о типах пэйлоадов и их генерации — в разделе [Пэйлоады](../../settings/payloads).
<!-- screenshot: подвкладка faking с раскрытыми секциями -->
## Фейковые SNI-пакеты
Отправляет пакеты с поддельным содержимым **до** настоящего ClientHello. DPI анализирует фейковый пакет, а настоящие данные проходят незамеченными. Фейковый пакет не доходит до сервера благодаря выбранной стратегии.
### Стратегия фейка
Определяет, **как** фейковый пакет станет необрабатываемым для сервера:
| Стратегия | Механизм |
| --- | --- |
| **TTL** | Заниженный TTL — пакет истекает на промежуточном узле и не доходит до сервера |
| **Random Sequence** | Случайный TCP sequence number — сервер отбрасывает пакет с неожиданным seq |
| **Past Sequence** | Прошедший sequence number — сервер уже обработал этот seq, повторный игнорирует |
| **TCP Check** | Неверная контрольная сумма TCP — ядро сервера отбрасывает пакет до обработки |
| **MD5 Sum** | TCP MD5-опция — сервер без настроенного MD5 отбрасывает пакет |
| **TCP Timestamp** | Устаревший TCP timestamp — сервер отбрасывает пакет с timestamp в далёком прошлом |
### Тип пэйлоада
Содержимое фейкового пакета. Подробное описание всех типов — в разделе [Пэйлоады](../../settings/payloads#типы-пэйлоадов).
| Тип | Содержимое |
| --- | --- |
| Случайное | 1200 случайных байтов |
| Пресет: Google | TLS ClientHello от имени Google |
| Пресет: DuckDuckGo | TLS ClientHello от имени DuckDuckGo |
| Сгенерированный payload | Оптимизированный ClientHello из раздела [Настройки → Пэйлоады](../../settings/payloads) |
| Все нули | 1200 нулевых байтов |
| Инвертированный оригинал | Побитовая инверсия реального TLS-пакета |
:::tip Сгенерированные пэйлоады
Если в списке нет доступных пэйлоадов — сначала сгенерируйте их в [Настройки → Пэйлоады](../../settings/payloads).
:::
### Параметры
| Параметр | Описание | Диапазон |
| --- | --- | --- |
| TTL фейка | TTL для фейковых пакетов. Должен быть достаточным, чтобы пакет дошёл до DPI, но истёк до сервера | 164 |
| Смещение Sequence | Сдвиг TCP sequence number (для стратегий pastseq/randseq) | — |
| Уменьшение Timestamp | Величина уменьшения TCP timestamp (для стратегии timestamp, по умолчанию 600000) | — |
| Количество фейковых пакетов | Сколько фейковых пакетов отправить перед реальными данными | 120 |
:::tip Подбор TTL
Правильный TTL зависит от количества сетевых узлов между вами и провайдерским DPI. Дискавери подбирает TTL автоматически. При ручной настройке начните с `3` и корректируйте.
:::
### TLS-модификации фейковых пакетов
Если тип пэйлоада содержит TLS-структуру (не случайное и не нули), доступны дополнительные модификации фейкового ClientHello:
| Параметр | Описание |
| --- | --- |
| Рандомизация TLS Random | Заменяет 32-байтовое поле Random в фейковом ClientHello случайными байтами. Без этого DPI может заметить, что поле Random одинаковое в фейке и реальном пакете |
| Дублировать Session ID | Копирует Session ID из реального ClientHello в фейковый. DPI может отслеживать Session ID для связки пакетов |
---
## Фейковые SYN-пакеты
Отправляет фейковые SYN-пакеты во время TCP-рукопожатия — **до** начала реального соединения. Запутывает DPI ещё до того, как соединение установлено.
:::warning
Это агрессивная техника — фейковые SYN могут влиять на работу некоторых сетевых устройств.
:::
| Параметр | Описание | Диапазон |
| --- | --- | --- |
| SYN MD5 Signature | Отправить фейковый SYN с опцией TCP MD5 перед реальным рукопожатием | — |
| Длина payload | Размер данных в фейковом SYN. `0` = только заголовок, `>0` = добавить фейковый TLS payload | 01200 |
| TTL | TTL для фейковых SYN-пакетов | 1100 |
---
## TCP Desync
Десинхронизация внедряет фейковые TCP управляющие пакеты (RST/FIN/ACK) с повреждёнными контрольными суммами и низким TTL. Эти пакеты путают DPI с отслеживанием состояния, но отбрасываются реальным сервером.
### Режим Desync
| Режим | Что отправляет |
| --- | --- |
| **RST** | Фейковые RST-пакеты с неверными контрольными суммами — DPI считает соединение разорванным |
| **FIN** | Фейковые FIN-пакеты с прошлыми sequence numbers — DPI считает соединение завершённым |
| **ACK** | Фейковые ACK-пакеты со случайными будущими sequence/ack numbers — DPI теряет состояние |
| **Combo** | Последовательность RST + FIN + ACK |
| **Full** | Полная атака: фейковый SYN, перекрывающиеся RST, PSH и URG пакеты |
### Параметры Desync
| Параметр | Описание | Диапазон |
| --- | --- | --- |
| TTL Desync | Низкий TTL гарантирует истечение фейковых пакетов до сервера | 150 |
| Количество пакетов | Количество фейковых пакетов на одну атаку десинхронизации | 120 |
| Post-ClientHello RST | Отправить фейковый RST **после** ClientHello для удаления соединения из таблицы отслеживания DPI | — |
---
## Манипуляция окном
Отправляет фейковые ACK-пакеты с изменёнными размерами TCP-окна **перед** реальным пакетом. Фейки используют низкий TTL — они истекают до сервера, но путают DPI на промежуточных узлах.
| Режим | Описание |
| --- | --- |
| **Нулевое окно** | Фейковые пакеты: сначала window=0, затем window=65535 |
| **Случайное** | 35 фейковых пакетов со случайными размерами окна из заданного списка |
| **Осцилляция** | Циклический перебор пользовательских значений окна |
| **Эскалация** | Постепенное увеличение: 0 → 100 → 500 → 1460 → 8192 → 32768 → 65535 |
При режимах **Случайное** и **Осцилляция** можно задать свой список значений окна (065535). Если список пуст — используются значения по умолчанию.
---
## Обход входящих ответов (Incoming)
Манипулирует **входящими ответами** сервера. Используется для обхода DPI, который дросселирует (замедляет) соединения после получения определённого объёма данных (~1520 КБ). b4 вбрасывает фейковые пакеты к серверу, которые DPI видит, но они не доходят до назначения.
### Режим
| Режим | Описание |
| --- | --- |
| **Фейковые пакеты** | Внедрение повреждённых ACK-пакетов к серверу с низким TTL на каждый входящий пакет данных |
| **Внедрение Reset** | Внедрение фейковых RST-пакетов при достижении порога входящих байтов |
| **Внедрение FIN** | Внедрение фейковых FIN-пакетов при достижении порога |
| **Desync Combo** | Внедрение RST+FIN+ACK combo при достижении порога |
### Стратегия повреждения
Определяет, как фейковый пакет станет необрабатываемым:
| Стратегия | Описание |
| --- | --- |
| **Bad Checksum** | Повреждение контрольной суммы TCP — пакеты отбрасываются ядром |
| **Bad Sequence** | Повреждение sequence number — пакеты игнорируются TCP-стеком |
| **Bad ACK** | Повреждение ACK number — пакеты игнорируются TCP-стеком |
| **Random** | Случайный выбор метода для каждого пакета |
| **All** | Все повреждения одновременно: bad seq + bad ack + bad checksum |
### Параметры Incoming
| Параметр | Описание | Диапазон |
| --- | --- | --- |
| TTL фейка | Низкий TTL гарантирует истечение фейков до сервера | 120 |
| Количество фейков | Количество фейковых пакетов на одну инжекцию | 110 |
| Порог мин. | Минимальный объём входящих данных для срабатывания (КБ) | 550 |
| Порог макс. | Максимальный порог — рандомизируется между мин. и макс. для каждого соединения | 550 |
:::info Пороги и режим Fake
В режиме **Фейковые пакеты** пороги не используются — фейки отправляются на каждый входящий пакет. Пороги работают только в режимах Reset, FIN и Desync Combo.
:::
---
## Мутация ClientHello
Изменение структуры TLS ClientHello **настоящего** пакета (не фейкового). Рандомизирует порядок расширений и добавляет шум — чтобы ClientHello не совпадал с известными DPI сигнатурами.
:::warning Мутация изменяет настоящий пакет
В отличие от остальных секций на этой вкладке, мутация модифицирует **реальный** ClientHello, который дойдёт до сервера. Если сайт перестал работать после включения мутации — отключите её.
:::
### Режим мутации
| Режим | Описание |
| --- | --- |
| **GREASE Extensions** | Вставить GREASE-расширения для обмана DPI |
| **Padding** | Добавить расширение padding до целевого размера |
| **Fake Extensions** | Вставить фейковые/неизвестные TLS-расширения |
| **Fake SNIs** | Добавить дополнительные фейковые записи SNI |
| **Random** | Рандомизировать порядок расширений и добавить шум |
| **Advanced** | Комбинация нескольких техник мутации с ручной настройкой |
### Параметры по режимам
**GREASE:**
| Параметр | Описание | Диапазон |
| --- | --- | --- |
| Количество GREASE | Сколько GREASE-расширений вставить | 110 |
**Padding:**
| Параметр | Описание | Диапазон |
| --- | --- | --- |
| Размер Padding | Целевой размер ClientHello с padding | 25616384 байт |
**Fake Extensions:**
| Параметр | Описание | Диапазон |
| --- | --- | --- |
| Количество Fake Extensions | Сколько фейковых TLS-расширений вставить | 115 |
**Fake SNIs:**
Добавляет дополнительные значения SNI в ClientHello. Введите домены (например, `ya.ru`, `vk.com`) — они будут внедрены в расширение SNI наряду с реальным доменом.
**Advanced** включает все параметры выше для ручной комбинации.
English translation is in progress. See the [Russian version](/ru/docs/sets/tcp/faking).

View file

@ -1,39 +1,6 @@
---
sidebar_position: 1
title: Общее
title: General
---
# Общее
Базовые параметры обработки TCP-трафика в сете.
![common](../../../static/img/general/20260323224155.png)
## Лимит TCP пакетов соединения
Сколько пакетов в начале каждого соединения анализировать. После этого лимита пакеты проходят без модификации. TLS-рукопожатие (ClientHello) обычно происходит в первых 35 пакетах, поэтому обрабатывать всё соединение не нужно.
:::info
Значение не может превышать глобальный лимит, заданный в [Настройки → Основные → Очередь](../../settings/core#очередь-и-обработка-пакетов). Если в сете указано больше — будет использован глобальный лимит.
:::
## Задержка между пакетами (Seg2Delay)
Задержка (мс) между отправкой фрагментов. Задаётся как диапазон **мин–макс** — для каждого соединения b4 выбирает случайное значение из этого диапазона. Если мин и макс одинаковы — задержка фиксированная.
## Фильтр портов
Ограничивает, на каких портах назначения этот сет будет применяться. Формат iptables: `443` или `443,80`.
:::info
На уровне фаервола b4 всегда перехватывает трафик на порт 443. Если в сетах указаны дополнительные порты — они добавляются к перехвату. Фильтр портов в сете сужает, к какому трафику **этот конкретный сет** будет применяться, а не то, что b4 обрабатывает глобально.
:::
## Отбросить `SACK`
Удаляет опцию `Selective Acknowledgment` из TCP-пакетов. `SACK` помогает серверу и клиенту эффективно пересылать потерянные фрагменты — некоторые DPI-системы используют `SACK` для восстановления порядка фрагментов.
## Дублирование пакетов
Отправляет каждый пакет несколько раз (110 копий). Полезно, если провайдер отбрасывает часть пакетов при обнаружении аномалий.
![dup](../../../static/img/general/20260323224129.png)
English translation is in progress. See the [Russian version](/ru/docs/sets/tcp/general).

View file

@ -3,12 +3,4 @@ sidebar_position: 2
title: TCP
---
# TCP
Вкладка TCP — основная часть настройки обхода DPI. Содержит три подвкладки, соответствующие трём аспектам обработки пакетов:
- [Общее](./general) — лимиты, задержки, дублирование
- [Фрагментация](./splitting) — разбиение пакетов на части
- [Faking](./faking) — отправка ложных пакетов, десинхронизация, мутация
<!-- screenshot: вкладка TCP с тремя подвкладками -->
English translation is in progress. See the [Russian version](/ru/docs/sets/tcp).

View file

@ -3,40 +3,4 @@ sidebar_position: 5
title: RST Protection
---
# Защита от RST-инъекций
Некоторые DPI-системы обрывают соединения, отправляя поддельные TCP RST-пакеты от имени сервера. Браузер принимает такой пакет за настоящий и закрывает соединение.
Эта функция анализирует входящие RST-пакеты и отбрасывает те, которые выглядят как инъекции.
## Как работает
b4 применяет три независимых проверки к каждому RST-пакету:
| Проверка | Что отбрасывает |
|---|---|
| **RST до ответа сервера** | RST пришёл раньше, чем любой реальный ответ от сервера — характерный признак инъекции |
| **Повторный RST** | Второй и последующие RST на одном соединении — легитимное соединение крайне редко отправляет больше одного |
| **Несовпадение TTL** | TTL в RST-пакете значительно отличается от TTL первого реального ответа сервера — пакет пришёл с другого узла сети |
:::info
Каждая проверка работает независимо. Пакет отбрасывается, если сработала **хотя бы одна** из них.
:::
## Настройки
### Включить RST Protection
Переключатель активирует защиту для этого сета.
### TTL Tolerance
Допустимая разница в TTL между RST-пакетом и реальным ответом сервера. Диапазон: 120, по умолчанию **3**.
:::tip
Значение 3 подходит для большинства сетей. Увеличьте, если b4 ложно отбрасывает легитимные RST (видно в логах).
:::
## Логирование
Каждый отброшенный RST отображается в [логах](../../logs) с указанием причины: несовпадение TTL, RST до ответа сервера или повторный RST.
English translation is in progress. See the [Russian version](/ru/docs/sets/tcp/rst-protection).

View file

@ -1,206 +1,6 @@
---
sidebar_position: 2
title: Фрагментация
title: Splitting
---
# Фрагментация
Основной инструмент обхода DPI. Суть: разбить TCP-пакет на части так, чтобы DPI не смог собрать их и прочитать содержимое (в частности, поле SNI в TLS ClientHello).
![fragment](../../../static/img/splitting/20260323224335.png)
## Метод фрагментации
| Метод | Описание |
| --- | --- |
| **tcp** | Разделение на уровне TCP-сегментов. Один пакет становится двумя TCP-сегментами |
| **ip** | Разделение на уровне IP. Один IP-пакет разбивается на IP-фрагменты |
| **tls** | Одна TLS-запись разбивается на несколько TLS-записей внутри одного TCP-пакета |
| **oob** | Out-of-Band — вставка байта с TCP URG флагом, который сбивает DPI |
| **combo** | Комбинация нескольких точек разделения с приманками, перемешиванием и фейками между фрагментами |
| **hybrid** | Гибрид combo и disorder — комбинированные методы с изменённым порядком |
| **disorder** | Фрагменты отправляются не по порядку со случайными задержками |
| **extsplit** | Автоматическое разделение перед SNI-расширением в TLS ClientHello |
| **firstbyte** | Отправка одного байта, пауза, затем остальное — атака по таймингу |
| **none** | Без фрагментации (используйте, если нужен только faking) |
:::info Как выбрать метод
Используйте [Дискавери](../../discovery) — он протестирует все методы и найдёт рабочий. Ручной подбор нужен, если дискавери не справился или вы хотите оптимизировать конкретный случай.
:::
## Пул стратегий
Если включён пул, b4 случайным образом выбирает метод из пула для каждого нового соединения. Это затрудняет DPI адаптацию к конкретному методу — каждое соединение выглядит по-разному.
:::tip
Выберите несколько стратегий, которые работают у вашего провайдера (через дискавери), и включите их в пул. Пул не используется, если он пуст — в этом случае используется метод, выбранный выше.
:::
## Обратный порядок
Отправляет фрагменты в обратном порядке (последний фрагмент первым). DPI, ожидающий данные по порядку, не сможет собрать содержимое.
---
## TCP/IP Segmentation
Доступно при методе **tcp** или **ip**.
### Умное разделение SNI
Автоматически находит SNI-поле в TLS ClientHello и разделяет посередине имени хоста. Рекомендуемый вариант — не требует ручной настройки.
### Фиксированная позиция разделения
Ручное смещение точки разделения (050 байт от начала TLS payload). Используйте, если умное разделение не работает у вашего провайдера. Задаётся как диапазон **мин–макс** — для каждого соединения b4 выберет случайную позицию из диапазона.
:::info 3 сегмента
Если включены оба варианта (умное SNI + фиксированная позиция) — пакет разделяется на **3 сегмента**: на фиксированной позиции и в середине SNI.
:::
---
## Combo
Комбинирует несколько точек разделения с приманками и перемешиванием. Самый гибкий метод.
### Приманка (Decoy)
Отправляет фейковый ClientHello с разрешённым SNI перед реальным трафиком:
1. Фейковый пакет (с низким TTL) → DPI видит и анализирует, но пакет не доходит до сервера
2. Реальный пакет (фрагментированный) → проходит мимо DPI и доставляется серверу
### Точки разделения
![splitpoints](../../../static/img/splitting/20260323224920.png)
| Параметр | Описание |
| --- | --- |
| First Byte | Разделение после первого байта (десинхронизация по времени) |
| Extension Split | Разделение перед SNI-расширением |
| SNI Split | Разделение в середине имени хоста SNI |
Каждая включённая точка добавляет дополнительный сегмент. Интерфейс показывает количество активных разделений и результирующее число сегментов.
:::warning
Должна быть включена хотя бы одна точка разделения, иначе combo отправит пакет одним сегментом.
:::
### Режим перемешивания
| Режим | Описание |
| --- | --- |
| `middle` | Первый и последний сегменты остаются на месте, перемешиваются только средние |
| `full` | Все сегменты случайно перемешиваются |
| `reverse` | Сегменты отправляются в обратном порядке |
### Тайминги
![timeings](../../../static/img/splitting/20260323225046.png)
| Параметр | Описание | Диапазон |
| --- | --- | --- |
| Задержка первого сегмента | Пауза после отправки первого сегмента | 10500 мс |
| Макс. джиттер | Случайная задержка между остальными сегментами | 10010000 мкс |
### Фейк на сегмент (мультидисордер)
Отправляет фейковые перекрывающие пакеты перед **каждым** реальным сегментом, а не только перед первым. Засоряет реассемблер DPI мусором.
| Параметр | Описание | Диапазон |
| --- | --- | --- |
| Фейк на сегмент | Включить фейки между сегментами | — |
| Фейков на сегмент | Количество фейковых пакетов перед каждым сегментом | 111 |
---
## Disorder
Отправляет реальные TCP-сегменты не по порядку со случайными задержками. В отличие от combo, disorder не использует фейковые пакеты (кроме мультидисордера) — он полагается на то, что DPI ожидает последовательные данные.
### Режим перемешивания
| Режим | Описание |
| --- | --- |
| `full` | Все сегменты случайно перемешиваются |
| `reverse` | Сегменты отправляются в обратном порядке |
### Временной джиттер
Случайная задержка между сегментами. Задаётся как диапазон **мин–макс** (мкс).
:::info
Джиттер используется, когда Seg2Delay (задержка между пакетами на вкладке [Общее](./general)) равен 0. Если Seg2Delay задан — он имеет приоритет.
:::
:::warning
Максимальный джиттер должен быть больше минимального.
:::
### Перекрытие последовательности (seqovl)
Добавляет фейковые байты с уменьшённым TCP sequence number. DPI видит фейковый заголовок протокола, а сервер отбрасывает перекрытие (у него уже есть правильные данные).
| Паттерн | Что видит DPI |
| --- | --- |
| `tls12` | Заголовок TLS 1.2 |
| `tls11` | Заголовок TLS 1.1 |
| `tls10` | Заголовок TLS 1.0 |
| `http_get` | HTTP GET-запрос |
| `zeros` | Нулевые байты |
| `custom` | Свои hex-байты |
### Мультидисордер
Аналогично combo — отправляет фейковые перекрывающие пакеты перед каждым реальным сегментом.
---
## Extension Split
Автоматически разделяет TLS ClientHello прямо перед расширением SNI. DPI видит неполный список расширений и не может распарсить SNI.
```text
[TLS Header] [Handshake] [Ciphers] [Ext₁] [Ext₂] | [SNI: youtube.com] [Ext...]
↑ разделение здесь
```
:::info Настройка не требуется
Extension Split работает автоматически. Используйте переключатель **Обратный порядок** и **Задержку между пакетами** (Seg2Delay) на вкладке [Общее](./general) для дополнительной настройки.
:::
---
## First-Byte Desync
Атака по таймингу: отправляет один байт (`0x16` — тип TLS-записи), делает паузу, затем отправляет остальной ClientHello. DPI видит неполную TLS-запись и не может распарсить SNI до истечения таймаута.
```text
[0x16] ──── пауза ──── [остальная часть TLS ClientHello...]
```
:::info Настройка не требуется
Задержка контролируется **Seg2Delay** на вкладке [Общее](./general). Минимум 100 мс применяется автоматически — если Seg2Delay меньше, b4 использует 100 мс.
:::
---
## OOB (Out-of-Band)
Вставляет байт с TCP URG (urgent) флагом в поток данных. Сервер игнорирует OOB-данные (они обрабатываются отдельно от основного потока), но DPI с отслеживанием состояния путается — видит лишний байт, который смещает его парсинг.
| Параметр | Описание | Диапазон |
| --- | --- | --- |
| Позиция вставки | Сколько байтов до точки вставки OOB. Задаётся как диапазон мин–макс | 150 |
| OOB байт | Байт, передаваемый через OOB (отображается символ + hex) | — |
---
## TLS Record Splitting
Разделяет ClientHello на несколько TLS-записей внутри одного TCP-пакета. DPI, ожидающий однозаписный хендшейк, не может сопоставить сигнатуру.
| Параметр | Описание | Диапазон |
| --- | --- | --- |
| Позиция разделения | Размер первой TLS-записи в байтах. Задаётся как диапазон мин–макс | 1100 |
English translation is in progress. See the [Russian version](/ru/docs/sets/tcp/splitting).

View file

@ -3,124 +3,4 @@ sidebar_position: 3
title: UDP
---
# UDP
Вкладка UDP управляет обработкой UDP-трафика. Два основных сценария:
1. **Блокировка QUIC** — браузер переключается на TCP, где b4 применяет обход DPI
2. **Обход DPI для UDP** — фейковые пакеты и фрагментация для UDP-трафика
<!-- screenshot: вкладка UDP -->
## Как b4 обрабатывает UDP
```mermaid
flowchart TD
A["UDP-пакет"] --> B{"IP или порт\nсовпал с сетом?"}
B -->|"Нет"| PASS["Пропустить"]
B -->|"Да"| C{"Это QUIC?"}
C -->|"Нет"| STUN{"Это STUN?"}
C -->|"Да"| D{"Фильтр QUIC\n(настройка сета)"}
D -->|"Отключён"| PASS
D -->|"Весь QUIC"| ACTION
D -->|"Парсить SNI"| E{"Домен из SNI\nсовпал с целями?"}
E -->|"Да"| ACTION
E -->|"Нет"| PASS
STUN -->|"Да + фильтр вкл."| PASS
STUN -->|"Нет"| ACTION
ACTION{"Что делать\nс пакетом?"}
ACTION -->|"Drop"| DROP["Отбросить пакет\n→ приложение\nпереключится на TCP"]
ACTION -->|"Reject"| REJECT["Отбросить пакет\n→ отправить ICMP\nPort Unreachable\n→ мгновенный переход\nна TCP"]
ACTION -->|"Fake"| FAKE["Отправить фейки\n→ фрагментировать\nреальный пакет"]
style A fill:#4a9eff,color:#fff,stroke:none
style PASS fill:#666,color:#fff,stroke:none
style DROP fill:#f44336,color:#fff,stroke:none
style REJECT fill:#ff9800,color:#fff,stroke:none
style FAKE fill:#4caf50,color:#fff,stroke:none
style ACTION fill:#9c27b0,color:#fff,stroke:none
```
## Какой UDP-трафик обрабатывать
Чтобы b4 начал обрабатывать UDP, должен быть включён хотя бы один из фильтров: QUIC или порты. Без них все UDP-пакеты проходят без изменений.
### Фильтр QUIC
QUIC — протокол поверх UDP, который используют браузеры (YouTube, Google, Discord и др.). Шифрование QUIC отличается от TCP/TLS, поэтому стратегии обхода TCP к нему неприменимы.
| Режим | Описание |
| --- | --- |
| **Отключён** | QUIC-трафик не обрабатывается |
| **Весь QUIC** | Совпадение со всеми QUIC Initial пакетами. Не анализирует содержимое — просто определяет, что пакет является QUIC |
| **Парсить SNI** | Извлекает домен (SNI) из QUIC ClientHello и обрабатывает только пакеты, домен которых совпадает с целями сета |
:::warning Парсинг SNI требует домены
В режиме **Парсить SNI** необходимо добавить домены в разделе [Цели](./targets). Без доменов QUIC-трафик обрабатываться не будет.
:::
:::tip Когда использовать «Весь QUIC»
Если цель — заставить браузер переключиться на TCP (где b4 работает эффективнее), используйте **Весь QUIC** в режиме **Reject**. Браузер мгновенно перейдёт на HTTPS/TCP, получив ICMP-ответ о недоступности порта.
:::
### Фильтр портов
Совпадение с определёнными UDP-портами — для обработки трафика VoIP, игр и других UDP-приложений. Формат: `5000-6000,8000`. Оставьте пустым для отключения.
### Фильтровать STUN-пакеты
Игнорировать STUN-пакеты — они проходят без обработки. STUN используется для NAT traversal в WebRTC (голосовые/видеозвонки).
:::info
Рекомендуется включить, если вы используете голосовые или видеозвонки (Discord, Telegram, WhatsApp). Блокировка STUN нарушит их работу.
:::
---
## Как обрабатывать совпавший трафик
Настройки ниже доступны, если включён хотя бы один фильтр (QUIC или порты).
### Лимит пакетов соединения
Максимальное количество пакетов в начале UDP-соединения, которые анализируются. Не может превышать глобальный лимит из [Настройки → Основные → Очередь](../settings/core#очередь-и-обработка-пакетов).
### Режим действия
| Режим | Описание |
| --- | --- |
| **Drop** | Отбрасывает совпавшие UDP-пакеты. Приложение вынуждено переключиться на TCP (например, QUIC → HTTPS) |
| **Reject** | Отбрасывает пакет и отправляет клиенту ICMP Port Unreachable. Клиент сразу понимает, что UDP недоступен, и переключается на TCP без ожидания таймаутов |
| **Fake & Fragment** | Отправляет фейковые пакеты перед реальными и фрагментирует реальные для обхода DPI |
:::tip Drop vs Reject
**Drop** — клиент ждёт таймаут (обычно 310 секунд) перед переходом на TCP. **Reject** — клиент получает ICMP-ответ и переключается на TCP практически мгновенно.
:::
---
## Настройки Fake & Fragment
Доступны при режиме **Fake & Fragment**.
### Стратегия фейка
Определяет, как фейковый пакет станет необрабатываемым для сервера:
| Стратегия | Описание |
| --- | --- |
| **Нет** | Без стратегии — фейковые пакеты отправляются как есть |
| **TTL** | Низкий TTL — фейковые пакеты истекают на промежуточном узле и не доходят до сервера |
| **Checksum** | Повреждённая контрольная сумма UDP — сервер отбрасывает пакеты с неверной суммой |
### Параметры
| Параметр | Описание | Диапазон |
| --- | --- | --- |
| Количество фейковых пакетов | Сколько фейковых пакетов отправить перед реальным | 120 |
| Размер фейкового пакета | Размер payload каждого фейкового UDP-пакета в байтах | 321500 |
| Задержка между сегментами | Задержка между отправкой фейковых и реальных пакетов. Задаётся как диапазон мин–макс — для каждого соединения выбирается случайное значение | 01000 мс |
English translation is in progress. See the [Russian version](/ru/docs/sets/udp).

View file

@ -1,22 +1,6 @@
---
sidebar_position: 7
title: Бэкап
title: Backup
---
# Бэкап
## Скачать резервную копию
Кнопка **Скачать** создаёт архив `.tar.gz` со всей конфигурацией b4. В архив входит содержимое директории конфигурации, кроме файлов `.dat` (GeoSite/GeoIP) и базы OUI (vendor lookup).
![backup](../../static/img/backup/20260323215742.png)
## Восстановить из копии
1. Нажмите **Загрузить** и выберите ранее скачанный `.tar.gz`
2. Файлы конфигурации будут заменены на содержимое архива
3. После восстановления будет предложено перезапустить сервис
:::warning
Восстановление полностью заменяет текущую конфигурацию. Если нужно сохранить текущие настройки — сначала скачайте резервную копию.
:::
English translation is in progress. See the [Russian version](/ru/docs/settings/backup).

View file

@ -1,239 +1,6 @@
---
sidebar_position: 1
title: Основные
title: Core
---
# Основные настройки
Все изменения на этой вкладке требуют перезапуска сервиса (кроме языка интерфейса).
## Управление
Кнопки в верхней части настроек:
- **Перезапустить сервис** — перезапуск b4 (ожидаемое время простоя: 510 секунд)
:::warning Сброс конфигурации
При сбросе конфигурации сохраняются: домены, категории GeoSite/GeoIP и настройки тестирования. Всё остальное (сеть, обход DPI, протоколы, логирование) сбрасывается.
:::
![restart](../../static/img/core/20260323213113.png)
## Очередь и обработка пакетов
Настройки ядра обработки пакетов через netfilter.
![nfque](../../static/img/core/20260323213159.png)
| Параметр | Описание | Диапазон | По умолчанию |
| --- | --- | --- | --- |
| Начальный номер очереди | Номер NFQUEUE. Изменяйте, если другие программы используют те же номера | 065535 | `537` |
| Метка пакета | Метка netfilter для правил iptables/nftables. b4 использует её для маркировки обработанных пакетов | — | `32768` |
| Рабочие потоки | Количество параллельных воркеров. Больше потоков = выше пропускная способность на многоядерных системах | 116 | `4` |
| Лимит TCP пакетов соединения | Сколько TCP-пакетов на соединение анализировать. Сеты не могут превышать это значение | 1100 | `19` |
| Лимит UDP пакетов соединения | Сколько UDP-пакетов на соединение анализировать. Сеты не могут превышать это значение | 130 | `8` |
:::tip Лимиты пакетов
Эти лимиты — глобальный потолок. В каждом сете можно установить свой лимит, но он не может быть выше глобального. Увеличение значения даёт b4 больше времени на анализ, но повышает нагрузку.
:::
## Функции
### Протоколы
| Параметр | Описание | По умолчанию |
| --- | --- | --- |
| Поддержка IPv4 | Обработка IPv4-трафика | Вкл |
| Поддержка IPv6 | Обработка IPv6-трафика | Выкл |
### Фаервол
![firewall](../../static/img/core/20260323213229.png)
| Параметр | Описание | По умолчанию |
| --- | --- | --- |
| Пропустить настройку IPTables/NFTables | b4 не будет создавать правила firewall. Используйте, если настраиваете правила вручную | Выкл |
| Интервал мониторинга фаервола | Как часто проверять и восстанавливать правила (сек). Если правила удаляются внешними программами, b4 восстановит их | `10` |
| Движок фаервола | Какой backend использовать для правил | Автоопределение |
| NAT Masquerade | Включить NAT-маскарад. Нужен для контейнеров и шлюзов, где b4 перенаправляет трафик | Выкл |
| Интерфейс Masquerade | На каком интерфейсе применять маскарад. Появляется при включении NAT Masquerade | Все |
:::warning Интервал мониторинга
Значение 0 полностью отключает мониторинг правил. Если внешняя программа или скрипт удалит правила b4 — они не будут восстановлены.
:::
Движок фаервола — выбор из:
| Значение | Описание |
| --- | --- |
| Автоопределение | b4 сам определит доступный backend (рекомендуется) |
| nftables | Использовать nftables |
| iptables | Использовать iptables |
| iptables-legacy | Использовать iptables-legacy (для старых систем) |
### Сетевые интерфейсы
Выбор интерфейсов для мониторинга. Интерфейсы отображаются как кликабельные метки — нажмите, чтобы включить/выключить.
:::info
Если не выбран ни один интерфейс — b4 слушает все доступные.
:::
## Настройки логирования
![logs](../../static/img/core/20260323213335.png)
| Параметр | Описание | По умолчанию |
| --- | --- | --- |
| Уровень логирования | Детализация логов | INFO |
| Путь к файлу ошибок | Записывать ошибки в файл | `/var/log/b4/errors.log` |
| Часовой пояс | Часовой пояс для временных меток | Системный (авто) |
| Мгновенный сброс | Сбрасывать буфер после каждой записи. Может влиять на производительность | Вкл |
| Syslog | Дублировать логи в системный syslog | Выкл |
Уровни логирования:
| Уровень | Что отображается |
| --- | --- |
| Ошибка | Только ошибки |
| Инфо | Ошибки + основные события |
| Трассировка | Инфо + детали обработки пакетов |
| Отладка | Всё, включая отладочную информацию |
:::warning Уровень Ошибка
При уровне **Ошибка** разделы **Логи** и **Соединения** в веб-интерфейсе не будут показывать данные — они получают информацию из потока логов, который при этом уровне практически пуст.
:::
:::info Файл ошибок
b4 не ведёт постоянный лог-файл — всё выводится в stdout/stderr (и перехватывается веб-интерфейсом через WebSocket). В файл `errors.log` записываются только критические ошибки и аварийные завершения.
:::
:::tip
Для диагностики проблем используйте **Трассировка** или **Отладка**. Для обычной работы достаточно **Инфо**.
:::
## Веб-сервер
Настройки веб-интерфейса b4.
![webserver](../../static/img/core/20260323213523.png)
| Параметр | Описание | По умолчанию |
| --- | --- | --- |
| Адрес привязки | IP для прослушивания. `0.0.0.0` = все интерфейсы, `127.0.0.1` = только localhost, `::` = все IPv6 | `0.0.0.0` |
| Порт | Порт веб-интерфейса | `7000` |
| TLS Сертификат | Путь к файлу сертификата `.crt` или `.pem` (пусто = HTTP) | — |
| TLS Ключ | Путь к файлу ключа `.key` или `.pem` (пусто = HTTP) | — |
| Язык | Язык интерфейса: English / Русский | English |
### Авторизация
| Параметр | Описание | По умолчанию |
| --- | --- | --- |
| Имя пользователя | Логин для входа в веб-интерфейс | — |
| Пароль | Пароль для входа | — |
:::warning Частичная авторизация
Авторизация работает только когда заполнены **оба** поля. Если указано только имя пользователя или только пароль — авторизация не включится.
:::
:::warning HTTP + авторизация
Если авторизация включена, но TLS не настроен — логин и пароль передаются по незашифрованному HTTP. Настройте TLS-сертификаты для безопасной передачи. Подробнее — в разделе [Безопасность](./security).
:::
## SOCKS5 Прокси
Встроенный SOCKS5-прокси. Приложения могут направлять через него трафик — он будет обработан b4 с применением настроенных сетов.
![sock5](../../static/img/core/20260323213642.png)
| Параметр | Описание | По умолчанию |
| --- | --- | --- |
| Включить | Запустить SOCKS5-сервер | Выкл |
| Адрес привязки | IP для прослушивания. `0.0.0.0` = все, `127.0.0.1` = только localhost | `0.0.0.0` |
| Порт | Порт прокси | `1080` |
| Имя пользователя | Логин для SOCKS5-авторизации (пусто = без авторизации) | — |
| Пароль | Пароль для SOCKS5-авторизации (пусто = без авторизации) | — |
Все поля кроме «Включить» становятся доступны только после включения прокси.
:::info
Изменения настроек SOCKS5 требуют перезапуска сервиса.
:::
## MTProto Прокси
Встроенный Telegram MTProto-прокси с fake-TLS обфускацией. Трафик Telegram оборачивается в TLS-соединение, маскируясь под обычный HTTPS-трафик. Подробное руководство по настройке — в разделе [MTProto Прокси](../mtproto).
![mtproto](../../static/img/core/20260323213811.png)
| Параметр | Описание | По умолчанию |
| --- | --- | --- |
| Включить | Запустить MTProto-сервер | Выкл |
| Адрес привязки | IP для прослушивания | `0.0.0.0` |
| Порт | Порт прокси | `3128` |
| Домен для Fake SNI | Домен, который будет виден в TLS-рукопожатии. DPI увидит этот домен вместо Telegram | `storage.googleapis.com` |
| DC Relay | Адрес внешнего relay-сервера (host:port) для доступа к Telegram DC, если они заблокированы по IP | — |
| Secret | Секрет для подключения клиента Telegram. Вставьте его в настройках прокси в Telegram | — |
Кнопка **Сгенерировать Secret** создаёт секрет на основе текущего домена Fake SNI.
:::info DC Relay
DC Relay нужен, когда b4 установлен на роутере внутри страны с блокировкой, а IP-адреса серверов Telegram заблокированы. В этом случае нужен VPS за пределами блокировки, который будет relay-сервером.
:::
:::info
Изменения настроек MTProto требуют перезапуска сервиса.
:::
## Глобальный MSS Clamping
Ограничение TCP Maximum Segment Size на SYN/SYN-ACK пакетах для трафика на порт 443. Уменьшает размер сегментов, что приводит к естественной фрагментации — DPI не может собрать фрагментированный ClientHello.
![mss](../../static/img/core/20260323213923.png)
| Параметр | Описание | Диапазон | По умолчанию |
| --- | --- | --- | --- |
| Включить | Активировать глобальный MSS Clamping | — | Выкл |
| Размер MSS | Размер MSS в байтах. Меньше значение = больше фрагментация | 101460 | `88` |
:::info Глобальный vs индивидуальный MSS
Глобальный MSS Clamping применяется ко **всему** трафику на порт 443. Если нужно ограничить MSS только для конкретных устройств (например, телевизор с YouTube) — настройте MSS в столбце **MSS** в [таблице устройств](#фильтрация-устройств) ниже. Индивидуальный MSS работает независимо от глобального.
:::
## Фильтрация устройств
Ограничение работы b4 трафиком от конкретных устройств в сети (по MAC-адресу). Полезно, если обход нужен не для всех устройств.
![devices](../../static/img/core/20260323214332.png)
| Параметр | Описание | По умолчанию |
| --- | --- | --- |
| Включить | Активировать фильтрацию по устройствам | Выкл |
| Определение производителя | Скачать базу vendor для определения производителя по MAC (~6 МБ) | Выкл |
| Инвертировать выбор | Переключение между белым и чёрным списком | Выкл |
:::info Режимы фильтрации
- **Белый список** (по умолчанию) — обход DPI работает **только** для выбранных устройств
- **Чёрный список** (инвертировать выбор) — выбранные устройства **исключаются** из обхода DPI
:::
### Таблица устройств
При включении фильтрации появляется таблица обнаруженных устройств:
| Столбец | Описание |
| --- | --- |
| Выбор | Чекбокс для включения/исключения устройства |
| MAC | MAC-адрес |
| IP | Текущий IP-адрес |
| Имя | Псевдоним устройства (можно задать через иконку редактирования) или vendor |
| MSS | Индивидуальный MSS Clamping для этого устройства (101460, пусто = выключен) |
Кнопка **Обновить** перезагружает список устройств из ARP-таблицы.
:::tip Индивидуальный MSS
MSS Clamping можно настроить для каждого устройства отдельно — например, уменьшить MSS только для телевизора с YouTube, не затрагивая остальные устройства.
:::
English translation is in progress. See the [Russian version](/ru/docs/settings/core).

View file

@ -1,51 +1,6 @@
---
sidebar_position: 6
title: Дискавери
title: Discovery
---
# Настройки дискавери
Параметры, влияющие на работу автоматического поиска конфигурации и детектора DPI. Настраиваются в **Настройки → Дискавери**.
![discovery](../../static/img/discovery/20260323220046.png)
## Параметры
| Параметр | Описание | Диапазон | По умолчанию |
| --- | --- | --- | --- |
| Таймаут поиска | Максимальное время ожидания ответа при проверке каждой стратегии | 330 сек | `5` сек |
| Задержка распространения | Время ожидания после применения конфигурации перед тестированием. Нужно, чтобы правила успели активироваться | 5005000 мс | `1500` мс |
| Попыток валидации | Сколько раз стратегия должна сработать подряд, чтобы считаться рабочей. Больше = надёжнее, но дольше | 15 | `1` |
| Эталонный домен | Домен, который заведомо доступен — используется как контрольный при проверке | — | `yandex.ru` |
## DNS-серверы
Список DNS-серверов, используемых при проверке DNS-блокировки. Дискавери сравнивает ответы от этих серверов с ответами провайдерского DNS, чтобы определить подмену.
По умолчанию:
| Сервер | Провайдер |
| --- | --- |
| `9.9.9.9` | Quad9 |
| `1.1.1.1` | Cloudflare |
| `8.8.8.8` | Google |
| `9.9.1.1` | Quad9 (резерв) |
| `8.8.4.4` | Google (резерв) |
Серверы можно добавлять и удалять через интерфейс.
:::tip Когда менять DNS-серверы
Если провайдер блокирует обращения к публичным DNS (например, перехватывает трафик на порт 53), дискавери может давать ложные результаты по DNS. В таком случае добавьте DNS-серверы, доступные в вашей сети, или используйте опцию **Пропустить поиск DNS** при запуске дискавери.
:::
:::info Эталонный домен
Эталонный домен должен быть **незаблокированным** в вашей сети. Он используется для двух целей:
- Проверка базовой связности — если он недоступен, результаты дискавери будут некорректными
- Измерение базовой скорости — скорость загрузки эталонного домена используется как точка отсчёта для сравнения стратегий между собой
:::
:::warning Скорость в результатах дискавери
Скорость, которую показывает дискавери (например, «40 КБ/с»), — это **не реальная скорость** вашего соединения. При тестировании загружается очень маленький объём данных, недостаточный для точного измерения. Эти цифры нужны только для **сравнения стратегий между собой** — какая быстрее, какая медленнее. Не ориентируйтесь на абсолютные значения.
:::
English translation is in progress. See the [Russian version](/ru/docs/settings/discovery).

View file

@ -1,83 +1,6 @@
---
sidebar_position: 2
title: Геоданные
title: Geo data
---
# Геоданные
## Что такое GeoSite и GeoIP
**GeoSite** и **GeoIP** — это базы данных в формате [V2Ray](https://github.com/v2fly/v2ray-core), которые позволяют работать с целыми категориями сайтов и IP-адресов вместо того, чтобы добавлять их по одному.
- **GeoSite** (`sitedat.dat`) — файл с доменами, сгруппированными по категориям. Например, категория `youtube` содержит все домены, связанные с YouTube (youtube.com, googlevideo.com, ytimg.com и т.д.)
- **GeoIP** (`ipdat.dat`) — файл с IP-диапазонами, сгруппированными по странам и ASN
:::info Зачем это нужно
Вместо того, чтобы вручную добавлять десятки доменов YouTube или Discord, достаточно выбрать нужную категорию в настройках сета. При обновлении базы новые домены подхватываются автоматически.
:::
## Источники
b4 поддерживает несколько предустановленных источников, а также позволяет указать свой URL.
| Источник | Что содержит | Ссылка |
| --- | --- | --- |
| **Loyalsoldier** | Глобальная база доменов и IP (Китай + мир) | [GitHub](https://github.com/Loyalsoldier/v2ray-rules-dat) |
| **RUNET Freedom** | База, оптимизированная для российских блокировок | [GitHub](https://github.com/runetfreedom/russia-v2ray-rules-dat) |
| **b4geoip** | Официальная GeoIP база b4 — IP-диапазоны по ASN (только GeoIP) | [GitHub](https://github.com/DanielLavrushin/b4geoip) |
:::tip Для российских пользователей
Рекомендуется **RUNET Freedom** для GeoSite (домены) и **b4geoip** для GeoIP (IP-диапазоны).
:::
### b4geoip
Официальная GeoIP база проекта b4. Собирается автоматически из данных [RIPE NCC](https://stat.ripe.net/) — реальные анонсированные IP-префиксы по ASN. Содержит категории для:
- **Облачные провайдеры** — AWS, Google Cloud, Azure, DigitalOcean, Hetzner, OVH, Scaleway, Oracle Cloud, Contabo, AEZA
- **CDN** — Cloudflare, Akamai, Fastly, CDN77
- **Игровые компании** — Roblox, Valve/Steam, Sony/PlayStation, Nintendo, EA, Riot Games, Ubisoft, Epic Games, Wargaming, Bungie, Take-Two, CCP
- **Платформы** — Telegram, GitHub, Apple, Adobe, Amazon, Blizzard
В отличие от баз по странам, b4geoip группирует IP именно по сервисам — это позволяет точно маршрутизировать трафик конкретных платформ.
## Настройка
<!-- screenshot: секция геоданных с выбором источника и статусом -->
1. Перейдите в **Настройки → Geodat настройки**
2. Укажите **Директорию назначения** — куда сохранять файлы (по умолчанию `/etc/b4`)
3. Выберите **Источник** из выпадающего списка или укажите URL вручную
4. Нажмите **Скачать**
Статус файла отображается рядом с названием:
- **Active** — файл найден, показывается размер и дата
- **Not Found** — файл отсутствует, нужно скачать
Файлы можно также загрузить вручную через кнопку **Загрузить** (upload `.dat` файла).
:::warning Размер файлов
Файлы GeoSite и GeoIP могут занимать 515 МБ каждый. На роутерах с ограниченной памятью убедитесь, что места достаточно.
:::
## Использование в сетах
После загрузки баз категории становятся доступны в настройках сетов (вкладка **Цели**):
- **Категории GeoSite** — выбрать категории доменов для обхода
- **Категории GeoIP** — выбрать категории IP для обхода
При выборе категории рядом отображается количество доменов/IP в ней. Можно нажать на категорию, чтобы просмотреть содержимое.
## Обновление
Базы обновляются вручную — зайдите в настройки и нажмите **Скачать** повторно. Перезапуск b4 после обновления не требуется — новые данные подхватываются автоматически.
## Инструменты
| Проект | Описание |
| --- | --- |
| [GeodatExplorer](https://github.com/DanielLavrushin/GeodatExplorer) | Веб-приложение для просмотра содержимого `.dat` файлов — категории, домены, IP-диапазоны. Помогает понять, что именно входит в базу, перед тем как использовать категорию в сете |
| [v2dat](https://github.com/DanielLavrushin/v2dat) | CLI-утилита для распаковки `.dat` файлов V2Ray в текстовые списки. Полезно для скриптов и автоматизации |
| [b4geoip](https://github.com/DanielLavrushin/b4geoip) | Официальная GeoIP база b4 (описана [выше](#b4geoip)) |
English translation is in progress. See the [Russian version](/ru/docs/settings/geodata).

View file

@ -1,17 +1,6 @@
---
sidebar_position: 5
title: Настройки
title: Settings
---
# Настройки
Настройки b4 разделены на несколько вкладок:
- [Основные](./core) — сеть, очередь, функции, логирование, прокси, устройства
- [Геоданные](./geodata) — базы GeoSite и GeoIP
- [Безопасность](./security) — авторизация, HTTPS
- [Пэйлоады](./payloads) — генерация и управление TLS-пэйлоадами для faking
- [Дискавери](./discovery) — таймауты, DNS-серверы, эталонный домен
- [Бэкап](./backup) — резервное копирование и восстановление
Изменения в настройках применяются после нажатия кнопки сохранения. Некоторые параметры (SOCKS5, MTProto, очередь) требуют перезапуска сервиса.
English translation is in progress. See the [Russian version](/ru/docs/settings).

View file

@ -1,105 +1,6 @@
---
sidebar_position: 4
title: Пэйлоады
title: Payloads
---
# Пэйлоады
![payloads](../../static/img/payloads/20260323222921.png)
## Зачем нужны пэйлоады
Одна из стратегий обхода DPI — отправка **фейковых пакетов** (faking). b4 отправляет провайдеру поддельный пакет с подменёнными данными, а настоящий пакет отправляет так, чтобы DPI его не заметила. Для этого фейковый пакет должен содержать какие-то данные — это и есть **пэйлоад**.
```mermaid
flowchart TD
A["Браузер отправляет\nзапрос к сайту"] --> B["b4 перехватывает"]
B --> C["1. Отправляет фейковый пакет"]
C --> D{"DPI провайдера"}
D -->|"DPI видит фейк,\nсчитает соединение\nбезопасным"| E["Пакет умирает\nне дойдя до сайта\n(TTL истёк)"]
B --> F["2. Отправляет настоящий пакет\n(фрагментирован)"]
F --> D
D -->|"DPI уже принял\nрешение по фейку,\nпропускает"| G["Сайт получает\nнастоящие данные"]
style B fill:#e91e63,color:#fff,stroke:none
style D fill:#ff9800,color:#fff,stroke:none
style E fill:#666,color:#fff,stroke:none
style G fill:#4caf50,color:#fff,stroke:none
style C fill:#2196f3,color:#fff,stroke:none
style F fill:#4a9eff,color:#fff,stroke:none
```
Фейковый пакет отправляется с **заниженным TTL** (время жизни). Он проходит через оборудование провайдера (DPI его видит и анализирует), но не доходит до настоящего сервера — пакет «умирает» по дороге. Сервер никогда не получает мусор, а DPI уже принял решение на основе фейка.
## Типы пэйлоадов
b4 поддерживает несколько типов содержимого для фейковых пакетов. Тип выбирается в настройках сета: **TCP → Faking → Тип пэйлоада**.
| Тип | Что содержит | Когда использовать |
| --- | --- | --- |
| **Random** | 1200 случайных байтов | По умолчанию. Работает у большинства провайдеров |
| **Google ClientHello** | Готовый TLS ClientHello от имени Google | Если DPI пропускает трафик к Google |
| **DuckDuckGo ClientHello** | Готовый TLS ClientHello от имени DuckDuckGo | Альтернатива Google |
| **Captured Payload** | Сгенерированный или загруженный пэйлоад | Для продвинутой настройки (см. ниже) |
| **Zeros** | 1200 нулевых байтов (0x00) | Минимальная нагрузка на процессор |
| **Inverted** | Побитовая инверсия оригинального TLS-пакета | Выглядит как повреждённый пакет |
:::tip Какой выбрать
Используйте тот тип, который предложил дискавери. Если настраиваете вручную — начните с **Random** и попробуйте другие варианты, если не сработает. Поведение DPI зависит от провайдера и может меняться со временем.
:::
## Генерация пэйлоада (Captured Payload)
Сгенерированный пэйлоад — это **оптимизированный TLS ClientHello**, который выглядит как настоящее TLS-рукопожатие браузера. В отличие от случайных байтов, DPI распознаёт его как легитимный TLS и применяет другие правила обработки.
### Почему SNI-first
Российские DPI (ТСПУ) используют оптимизацию: если в TLS ClientHello расширение SNI стоит **первым**, система проверяет домен по белому списку и, если домен разрешён — пропускает соединение по ускоренному пути. b4 генерирует ClientHello именно так — SNI на первом месте — чтобы использовать эту особенность.
### Как сгенерировать
1. Введите домен в поле **Домен** (например, `youtube.com`)
2. Нажмите **Сгенерировать**
b4 создаст ClientHello с реалистичным набором TLS-расширений и шифров, SNI на первом месте. Генерация мгновенная — реальное соединение с сайтом не устанавливается. Один домен — один пэйлоад. Повторная генерация не создаст дубликат.
### Загрузка своего пэйлоада
Если у вас есть бинарный файл (`.bin`, до 64 КБ):
1. Укажите **Имя/Домен** — идентификатор пэйлоада
2. Нажмите **Выбрать файл** и выберите `.bin`
3. Нажмите **Загрузить**
:::tip Имя из файла
Если имя файла содержит домен (например, `tls_youtube_com.bin`), поле имени заполнится автоматически.
:::
## Использование в сетах
После генерации пэйлоады становятся доступны в настройках сета:
1. Откройте сет → вкладка **TCP** → секция **Faking**
2. В поле **Тип пэйлоада** выберите **Captured Payload**
3. В появившемся списке выберите нужный пэйлоад по домену
## Использование в дискавери
При запуске дискавери можно указать пэйлоады в **Параметрах поиска → Пользовательские payloads**. Дискавери протестирует каждую стратегию с каждым из указанных пэйлоадов и выберет наиболее эффективную комбинацию.
:::info Когда это полезно
Если стандартный дискавери (с Random-пэйлоадом) не находит рабочую конфигурацию — сгенерируйте пэйлоады для нескольких доменов и запустите дискавери с ними. Некоторые провайдеры реагируют на содержимое фейкового пакета, и реалистичный ClientHello может сработать там, где случайные байты не помогли.
:::
## Управление
Каждый пэйлоад отображается как карточка с доменом, размером и датой создания.
| Действие | Описание |
| --- | --- |
| Просмотр hex | Показать содержимое в hex-формате, скопировать в буфер |
| Скачать .bin | Скачать как бинарный файл |
| Удалить | Удалить пэйлоад |
| Очистить все | Удалить все пэйлоады (кнопка в заголовке) |
Пэйлоады хранятся в директории `captures/` внутри директории конфигурации b4 (обычно `/etc/b4/captures/`).
English translation is in progress. See the [Russian version](/ru/docs/settings/payloads).

View file

@ -1,44 +1,6 @@
---
sidebar_position: 3
title: Безопасность
title: Security
---
# Безопасность
## Авторизация
По умолчанию веб-интерфейс доступен без пароля. Для ограничения доступа задайте логин и пароль:
1. Перейдите в **Настройки → Основные → Веб-сервер**
2. Заполните поля **Имя пользователя** и **Пароль**
3. Сохраните настройки
После этого при открытии веб-интерфейса потребуется ввести учётные данные.
:::warning Доступ извне
Если b4 доступен извне (например, на VPS), настройте авторизацию. Без неё любой, кто знает адрес и порт, получит полный доступ к управлению.
:::
:::danger Авторизация без HTTPS
Если авторизация включена, но HTTPS **не настроен** — логин и пароль передаются по сети **открытым текстом**. Любой, кто может перехватить трафик (например, в публичной Wi-Fi сети), увидит ваши учётные данные. Всегда включайте HTTPS вместе с авторизацией, особенно если b4 доступен не только из локальной сети.
:::
## HTTPS
Для включения HTTPS:
1. Подготовьте файлы сертификата и ключа (`.crt`/`.pem` и `.key`/`.pem`)
2. В настройках веб-сервера укажите пути к файлам:
- **TLS Сертификат** — путь к файлу сертификата (`.crt` или `.pem`)
- **TLS Ключ** — путь к файлу ключа (`.key` или `.pem`)
3. Сохраните и перезапустите
Для самоподписанного сертификата (подходит для локальной сети):
```bash
openssl req -x509 -newkey rsa:2048 -keyout server.key -out server.crt -days 365 -nodes -subj "/CN=b4"
```
Скопируйте файлы в директорию конфигурации (например, `/etc/b4/`) и укажите пути в настройках.
После включения HTTPS веб-интерфейс будет доступен по `https://`.
English translation is in progress. See the [Russian version](/ru/docs/settings/security).

View file

@ -1,57 +1,6 @@
---
sidebar_position: 8
title: Мониторинг доменов
title: Domain Watchdog
---
# Мониторинг доменов (Watchdog)
Мониторинг периодически проверяет доступность указанных доменов и при обнаружении блокировки автоматически запускает [дискавери](./discovery) для поиска рабочей конфигурации.
Настройки мониторинга находятся в **Настройки → Дискавери → раздел Мониторинг**.
![](../static/img/watchdog/20260404234138.png)
## Как это работает
1. Мониторинг с заданным интервалом делает HTTP-запрос к каждому домену из списка
2. Если домен не отвечает или обнаружена страница блокировки — фиксируется ошибка
3. После нескольких последовательных ошибок (настраивается) мониторинг автоматически запускает дискавери для этого домена
4. Найденная конфигурация применяется к существующему сету или создаётся новый
## Параметры
| Параметр | Описание | По умолчанию |
| --- | --- | --- |
| Интервал проверки | Как часто проверять домены, когда всё работает | `300` сек (5 мин) |
| Интервал при ошибке | Как часто проверять, если домен уже в статусе «Проблема» | `60` сек |
| Кулдаун | Пауза после попытки восстановления перед возобновлением обычных проверок | `900` сек (15 мин) |
| Таймаут | Максимальное время ожидания ответа от домена | `15` сек |
| Макс. попыток | Сколько ошибок подряд нужно для запуска автовосстановления | `3` |
![](../static/img/watchdog/20260404234557.png)
## Статусы доменов
| Статус | Значение |
| --- | --- |
| **Доступен** | Домен отвечает нормально |
| **Проблема** | Зафиксированы ошибки, но порог для восстановления ещё не достигнут |
| **Восстановление** | Запущен дискавери для поиска рабочей конфигурации |
| **В очереди** | Домен ожидает следующей проверки |
## Добавление доменов
Домены можно добавлять двумя способами:
- Через панель «Мониторинг доменов» на главной — поле ввода с кнопкой «+»
- Через **Настройки → Дискавери → раздел Мониторинг**
Можно указать как домен (например, `youtube.com`), так и полный URL (например, `https://youtube.com/watch?v=test`). Если указан URL — мониторинг будет проверять именно этот адрес. Если указан только домен — проверяется `https://домен/`.
:::tip Какие домены добавлять
Добавляйте домены, которые вы реально используете и которые могут быть заблокированы. Мониторинг проверяет именно HTTP-доступность, поэтому домен должен отвечать по HTTP/HTTPS.
:::
:::warning Мониторинг и дискавери
Если дискавери уже запущен вручную, мониторинг не будет запускать параллельный процесс — он дождётся завершения текущего.
:::
English translation is in progress. See the [Russian version](/ru/docs/watchdog).

View file

@ -4,19 +4,25 @@ import type * as Preset from "@docusaurus/preset-classic";
const config: Config = {
title: "B4 - Bye Bye Big Bro",
tagline: "Продвинутая система обхода блокировок",
tagline: "Advanced censorship bypass system",
favicon: "img/favicon.ico",
url: "https://daniellavrushin.github.io/",
baseUrl: "/b4",
onBrokenLinks: "warn",
markdown: {
mermaid: true,
},
themes: ["@docusaurus/theme-mermaid"],
i18n: {
defaultLocale: "ru",
locales: ["ru"],
defaultLocale: "en",
locales: ["en", "ru"],
localeConfigs: {
en: { label: "English" },
ru: { label: "Русский" },
},
},
presets: [
@ -25,7 +31,8 @@ const config: Config = {
{
docs: {
sidebarPath: "./sidebars.ts",
editUrl: "https://github.com/DanielLavrushin/b4/tree/main/docs/",
editUrl:
"https://github.com/DanielLavrushin/b4/tree/main/docs/",
},
theme: {
customCss: "./src/css/custom.css",
@ -46,13 +53,17 @@ const config: Config = {
type: "docSidebar",
sidebarId: "tutorialSidebar",
position: "left",
label: "Документация",
label: "Docs",
},
{
to: "/swagger",
label: "API",
position: "left",
},
{
type: "localeDropdown",
position: "right",
},
{
href: "https://github.com/DanielLavrushin/b4",
label: "GitHub",

62
docs/i18n/ru/code.json Normal file
View file

@ -0,0 +1,62 @@
{
"home.title": {
"message": "Документация",
"description": "Page title for the homepage"
},
"home.meta.description": {
"message": "b4 - обход блокировок для Linux",
"description": "Meta description for the homepage"
},
"home.subtitle": {
"message": "Обход блокировок на уровне сетевых пакетов для Linux и роутеров",
"description": "Homepage hero subtitle"
},
"home.description": {
"message": "Веб-интерфейс, автоматический подбор конфигурации, поддержка роутеров и серверов",
"description": "Homepage hero description"
},
"home.cta.start": {
"message": "Начать",
"description": "Homepage CTA button to docs"
},
"home.cta.github": {
"message": "GitHub",
"description": "Homepage CTA button to GitHub"
},
"home.section.heading": {
"message": "Документация",
"description": "Homepage section heading for doc cards"
},
"home.section.intro.title": {
"message": "Введение",
"description": "Doc card title: intro"
},
"home.section.intro.desc": {
"message": "Что такое b4, как работает обход блокировок и что нужно для старта.",
"description": "Doc card description: intro"
},
"home.section.install.title": {
"message": "Установка",
"description": "Doc card title: install"
},
"home.section.install.desc": {
"message": "Установка на Linux, OpenWRT, ASUS Merlin, Keenetic, MikroTik и Docker.",
"description": "Doc card description: install"
},
"home.section.quickstart.title": {
"message": "Быстрый старт",
"description": "Doc card title: quickstart"
},
"home.section.quickstart.desc": {
"message": "От первого запуска до работающего обхода за 5 минут через веб-интерфейс.",
"description": "Doc card description: quickstart"
},
"home.section.sets.title": {
"message": "Сеты",
"description": "Doc card title: sets"
},
"home.section.sets.desc": {
"message": "Наборы настроек обхода: цели, TCP/UDP стратегии, маршрутизация.",
"description": "Doc card description: sets"
}
}

View file

@ -0,0 +1,76 @@
---
sidebar_position: 1
title: CLI-параметры
---
# CLI-параметры
b4 принимает параметры командной строки, которые имеют приоритет над значениями из конфигурационного файла.
## Основные
| Флаг | Описание | По умолчанию |
| --- | --- | --- |
| `--config` | Путь к файлу конфигурации | `/etc/b4/b4.json` |
| `--verbose` | Уровень логирования: `debug`, `trace`, `info`, `silent` | `info` |
| `-v`, `--version` | Показать версию и выйти | - |
| `--clear-tables` | Очистить правила iptables/nftables и выйти | - |
## Очередь и обработка
| Флаг | Описание | По умолчанию |
| --- | --- | --- |
| `--queue-num` | Номер очереди netfilter | `537` |
| `--threads` | Количество рабочих потоков | `4` |
| `--mark` | Метка пакета для правил iptables | `32768` |
| `--ipv4` | Включить обработку IPv4 | `true` |
| `--ipv6` | Включить обработку IPv6 | `false` |
## Фаервол
| Флаг | Описание | По умолчанию |
| --- | --- | --- |
| `--skip-tables` | Пропустить настройку iptables/nftables при запуске | `false` |
| `--tables-monitor-interval` | Интервал мониторинга правил (сек), `0` = отключить | `10` |
| `--masquerade` | Включить NAT masquerade (для контейнеров/шлюзов) | `false` |
| `--masquerade-interface` | Интерфейс для masquerade (пусто = все) | - |
## Логирование
| Флаг | Описание | По умолчанию |
| --- | --- | --- |
| `-i`, `--instaflush` | Сбрасывать логи немедленно | `true` |
| `--syslog` | Дублировать логи в syslog | `false` |
| `--error-file` | Путь к файлу ошибок | `/var/log/b4/errors.log` |
## Веб-сервер
| Флаг | Описание | По умолчанию |
| --- | --- | --- |
| `--web-port` | Порт веб-интерфейса (`0` = отключить) | `7000` |
## Примеры
Запуск с кастомным конфигом и debug-логированием:
```bash
b4 --config /opt/etc/b4/b4.json --verbose debug
```
Очистка правил фаервола:
```bash
b4 --clear-tables
```
Запуск без автонастройки фаервола (ручное управление правилами):
```bash
b4 --skip-tables
```
Запуск в контейнере с masquerade:
```bash
b4 --masquerade --masquerade-interface eth0
```

View file

@ -0,0 +1,121 @@
---
sidebar_position: 2
title: Конфигурационный файл
---
# Конфигурационный файл
b4 хранит конфигурацию в JSON-файле. По умолчанию: `/etc/b4/b4.json`. Путь можно изменить через флаг `--config`.
## Расположение по платформам
| Платформа | Путь |
| --- | --- |
| Linux | `/etc/b4/b4.json` |
| OpenWRT (с extroot/USB) | `/opt/etc/b4/b4.json` |
| OpenWRT (без USB) | `/etc/b4/b4.json` |
| ASUS Merlin | `/opt/etc/b4/b4.json` |
| Keenetic | `/opt/etc/b4/b4.json` |
| Docker | `/etc/b4/b4.json` (внутри контейнера) |
## Структура
Файл создаётся автоматически при первом запуске с значениями по умолчанию. Основные секции:
```json
{
"queue": {
"start_num": 537,
"threads": 4,
"mark": 32768,
"ipv4": true,
"ipv6": false,
"tcp_conn_bytes_limit": 19,
"udp_conn_bytes_limit": 8,
"interfaces": [],
"mss_clamp": {
"enabled": false,
"size": 88
},
"devices": {
"enabled": false,
"vendor_lookup": false
}
},
"system": {
"tables": {
"skip_setup": false,
"monitor_interval": 10,
"engine": "",
"masquerade": false,
"masquerade_interface": ""
},
"logging": {
"level": 1,
"error_file": "/var/log/b4/errors.log",
"instaflush": true,
"syslog": false
},
"web_server": {
"port": 7000,
"bind_address": "0.0.0.0",
"tls_cert": "",
"tls_key": "",
"username": "",
"password": "",
"language": "en",
"swagger": false
},
"socks5": {
"enabled": false,
"port": 1080,
"bind_address": "0.0.0.0"
},
"mtproto": {
"enabled": false,
"port": 3128,
"bind_address": "0.0.0.0",
"fake_sni": "storage.googleapis.com"
},
"checker": {
"discovery_timeout": 5,
"config_propagate_ms": 1500,
"reference_domain": "yandex.ru",
"reference_dns": ["9.9.9.9", "1.1.1.1", "8.8.8.8"],
"validation_tries": 1
},
"geo": {
"sitedat_path": "",
"ipdat_path": "",
"sitedat_url": "",
"ipdat_url": ""
},
"timezone": ""
},
"sets": []
}
```
:::warning Редактирование вручную
Конфигурацию можно редактировать вручную, но рекомендуется использовать веб-интерфейс - он валидирует значения и применяет миграции при обновлении версии. При ручном редактировании перезапустите b4 для применения изменений.
:::
## Секция sets
Каждый сет - объект в массиве `sets` с полной конфигурацией TCP/UDP/DNS/маршрутизации. Структура сета соответствует вкладкам в веб-интерфейсе:
- `targets` - домены, IP, GeoSite/GeoIP категории, устройства
- `tcp` - общие настройки TCP
- `fragmentation` - метод фрагментации и параметры
- `faking` - SNI faking, SYN fake, desync, window, incoming, mutation
- `udp` - QUIC, STUN, fake-режим
- `dns` - DNS-редирект
- `routing` - маршрутизация через интерфейсы
:::tip Импорт/Экспорт
Для переноса конфигурации сетов между устройствами используйте вкладку **Импорт/Экспорт** в редакторе сета - она показывает JSON-представление и позволяет копировать/вставлять.
:::
## Миграции
При обновлении b4 структура конфигурации может измениться. b4 автоматически мигрирует старые конфигурации при запуске - добавляет новые поля с значениями по умолчанию, переименовывает устаревшие. Ручное вмешательство не требуется.

View file

@ -0,0 +1,13 @@
---
sidebar_position: 13
title: Продвинутое
---
# Продвинутое
Справочные материалы для продвинутых пользователей:
- [CLI-параметры](./cli) - флаги командной строки
- [Конфигурационный файл](./config) - структура `b4.json`
- [API](/swagger) - Swagger-документация и REST API
- [Как работает ТСПУ](./tspu) - техническое описание российской системы DPI

View file

@ -0,0 +1,29 @@
---
sidebar_position: 4
title: Как работает ТСПУ
---
# Как работает ТСПУ
ТСПУ (Технические средства противодействия угрозам) - российская система глубокого анализа пакетов (DPI), установленная на сетях интернет-провайдеров. Именно эта система блокирует доступ к сайтам и сервисам.
## Документация
Подробное техническое описание архитектуры ТСПУ (АСБИ), её компонентов, принципов работы и методов фильтрации доступно в отдельном проекте:
**[tspu-docs](https://github.com/DanielLavrushin/tspu-docs)** - полное руководство на основе ~5-часовой видеолекции по архитектуре, настройке и эксплуатации ТСПУ. 24 главы.
:::warning Актуальность
Документация сгенерирована с помощью ИИ на основе транскрипта видеолекции и проверена вручную. Материал может быть устаревшим - ТСПУ постоянно обновляется, и текущая реализация может отличаться от описанной. Также возможны неточности.
:::
Основные темы:
- Архитектура АСБИ/ТСПУ - балансировщики, фильтры, DPI-движок
- Методы блокировки - DNS-подмена, SNI-фильтрация, блокировка по IP
- Механизмы обнаружения - как ТСПУ распознаёт обход
- Уязвимости системы - на чём основаны стратегии обхода b4
:::info
Понимание того, как работает ТСПУ, помогает выбирать и настраивать стратегии обхода. Но для базового использования b4 это не обязательно - дискавери автоматически подбирает рабочую конфигурацию.
:::

View file

@ -0,0 +1,162 @@
---
sidebar_position: 10
title: Соединения
---
# Соединения
Раздел отображает TCP/UDP-соединения, проходящие через b4, в реальном времени. Данные поступают через WebSocket - таблица обновляется непрерывно.
![connections](/img/connections/20260323230547.png)
## Таблица соединений
### Столбцы
| Столбец | Описание |
| --- | --- |
| **Время** | Время соединения (ЧЧ:ММ:СС), моноширинный шрифт |
| **Протокол** | Цветная метка: `TCP`, `UDP`, `P-TCP`, `P-UDP` |
| **Сет** | Название сета, если соединение обрабатывается. Пустое - соединение прошло без модификации |
| **Домен** | SNI-домен из TLS/QUIC-рукопожатия. Рядом метка версии TLS (1.2 / 1.3) |
| **Источник** | IP отправителя. Если устройство опознано - показывает имя или vendor в виде метки |
| **Назначение** | IP:порт получателя. Возможность определить ASN и добавить IP в сет |
:::info Протоколы P-TCP и P-UDP
Префикс **P** означает, что соединение прошло через встроенный SOCKS5-прокси b4, а не через перехват на уровне netfilter.
:::
:::info Метки TLS
Метки **1.2** и **1.3** рядом с доменом - версия протокола TLS. Провайдеры могут блокировать TLS 1.2 и 1.3 разными методами, поэтому для них могут потребоваться разные стратегии обхода. Сеты можно настроить на конкретную версию TLS во вкладке [Цели](./sets/targets).
:::
---
## Добавление доменов в сеты
Если домен не входит ни в один сет, рядом с ним отображается иконка **+**. При нажатии открывается диалог добавления:
<!-- screenshot: диалог добавления домена -->
1. **Выбор шаблона домена** - от точного до широкого:
- `rr1---sn-ab5l6ne7.googlevideo.com` - самый точный, только это имя хоста
- `*.googlevideo.com` - промежуточная точность
- `*.*.googlevideo.com` - самый широкий, все поддомены
2. **Выбор сета** - в какой сет добавить домен (выпадающий список включённых сетов)
3. Нажмите **Добавить домен**
:::tip
Для YouTube и подобных сервисов, которые используют множество CDN-поддоменов, выбирайте широкий шаблон (например, `*.googlevideo.com`). Иначе придётся добавлять каждый поддомен отдельно.
:::
Если домен уже в сете - вместо **+** отображается серая галочка.
---
## Добавление IP/CIDR в сеты
Клик по иконке **+** рядом с IP назначения открывает диалог с информацией об IP.
<!-- screenshot: диалог добавления IP -->
### Обогащение данных
Перед добавлением можно получить информацию об IP:
| Кнопка | Источник | Что показывает |
| --- | --- | --- |
| **Загрузить сетевую информацию** | RIPE NCC | ASN, анонсированные префиксы |
| **Обогатить через IPInfo** | ipinfo.io | Организация, hostname, расположение, координаты |
:::info IPInfo
Для использования IPInfo необходимо указать токен API в [Настройки → Основные](./settings/core). Бесплатный токен можно получить на [ipinfo.io](https://ipinfo.io).
:::
### Варианты добавления
**Если ASN найден** - b4 загружает все анонсированные IP-префиксы этого ASN:
- **Добавить только IP** - один конкретный адрес
- **Добавить все N префиксов** - все IP-диапазоны организации
**Если ASN не найден** - выбор CIDR-маски вручную:
| Маска | Описание |
| --- | --- |
| `/32` | Один IP-адрес |
| `/24` | ~256 IP - локальная подсеть |
| `/16` | ~65K IP - сетевой блок |
| `/8` | ~16M IP - класс A |
Для IPv6 доступны маски `/128`, `/64`, `/48`, `/32`.
### ASN в таблице
После обогащения рядом с IP назначения отображается метка **ASxxxxx**. ASN-данные кэшируются в браузере. Метку можно удалить, нажав на крестик.
Для быстрого определения ASN без открытия диалога - нажмите иконку сети рядом с IP.
---
## Фильтрация
Поле фильтра в верхней панели поддерживает комбинирование условий:
- `+` - объединение (AND)
- `!` - исключение (NOT)
- Фильтр по полям: `protocol:`, `domain:`, `asn:`, `device:`, `alias:`
### Примеры
| Фильтр | Что покажет |
| --- | --- |
| `tcp` | Все TCP-соединения |
| `domain:youtube` | Соединения с «youtube» в домене |
| `tcp+!domain:google.com` | TCP-соединения, кроме Google |
| `protocol:udp+domain:discord` | UDP-соединения к Discord |
| `asn:AS13335` | Соединения к Cloudflare |
| `device:iPhone` | Соединения от устройства с именем iPhone |
Фильтр сохраняется между сессиями.
При активном фильтре в панели отображается количество отфильтрованных соединений. Сортировку можно сбросить кнопкой **×** рядом с индикатором сортировки.
---
## Режим отображения
Переключатель в верхней панели:
| Режим | Описание |
| --- | --- |
| **Только домены** | Показывает только соединения с распознанным SNI-доменом. Режим по умолчанию |
| **Все пакеты** | Показывает весь перехваченный трафик, включая пакеты без домена |
:::tip
Режим **Все пакеты** полезен для диагностики - можно увидеть, какой трафик b4 перехватывает, но не может распознать. В обычной работе достаточно режима **Только домены**.
:::
---
## Управление потоком
Данные поступают непрерывно. Таблица автоматически прокручивается к последним записям. Если прокрутить вверх - автопрокрутка останавливается, и в правом нижнем углу появляется кнопка возврата вниз.
### Горячие клавиши
| Клавиша | Действие |
| --- | --- |
| **P** или **Pause** | Пауза / возобновление потока. При паузе рамка таблицы подсвечивается |
| **Ctrl+X** или **Delete** | Очистить таблицу |
### Кнопка очистки
Иконка корзины в верхней панели очищает все отображаемые соединения.
---
## Метка непросмотренных доменов
В боковом меню рядом с пунктом **Соединения** может отображаться счётчик - количество новых соединений, которые совпали с сетом, пока вы находились на другой странице. Счётчик сбрасывается при переходе на страницу соединений.

View file

@ -0,0 +1,67 @@
---
sidebar_position: 4
title: Дашборд
---
# Дашборд
Главная страница, которая открывается по умолчанию. Показывает текущее состояние b4, метрики и активность устройств в сети.
## Состояние системы
Баннер в верхней части страницы отображает:
- **Статус** - Работает / Нестабильно / Критично
- **NFQueue** - состояние очереди netfilter
- **Фаервол** - состояние правил iptables/nftables
- **Воркеры** - сколько рабочих потоков активно (например, «3/4 активно»)
- **Аптайм** - время работы с последнего запуска
- **Версия** - текущая версия b4
Здесь же есть кнопка **Сброс статистики** для обнуления всех счётчиков.
![dashbanner](/img/dashboard/20260323205258.png)
## Метрики
Три карточки с основными показателями:
| Метрика | Что показывает |
| --- | --- |
| **Соединения** | Общее количество соединений и текущая скорость (соед/с) |
| **Обход DPI** | Количество соединений, обработанных сетами, и процент от общего |
| **Пакеты** | Количество обработанных пакетов и текущая скорость (пак/с) |
Ниже отображается график **Скорость соединений** - линейный график в реальном времени.
![metrics](/img/dashboard/20260323205426.png)
## Активные сеты
Список включённых сетов с количеством целей (доменов + IP). Клик по сету переходит к его редактированию.
![activesets](/img/dashboard/20260323205519.png)
## Активность устройств
Показывает, какие устройства в сети к каким доменам обращаются:
- **Заголовок устройства** - имя (или MAC/vendor), IP, количество доменов и соединений
- **Раскрываемый список доменов** - для каждого домена показано количество соединений
Если домен ещё не добавлен ни в один сет, рядом с ним отображается кнопка «+» для быстрого добавления.
:::info Метки TLS
Рядом с доменами могут отображаться метки **1.2** или **1.3** - это версия протокола TLS, которую использует соединение. Такие же метки встречаются в разделах Соединения и Дискавери. Версия TLS важна, потому что провайдеры могут блокировать TLS 1.2 и TLS 1.3 разными методами - для них могут потребоваться разные стратегии обхода.
:::
![devices](/img/dashboard/20260323205600.png)
## Мониторинг доменов
Если включён [мониторинг доменов](./watchdog), на дашборде отображается панель мониторинга. Она показывает статус каждого отслеживаемого домена, время последней проверки и количество ошибок. Здесь же можно добавить новый домен или запустить принудительную проверку.
## Домены не в сетах
Топ-15 доменов, которые обрабатываются b4, но не включены ни в один сет. Отсортированы по количеству соединений. Каждый домен можно добавить в сет через кнопку «+».
![nodevices](/img/dashboard/20260323205631.png)

View file

@ -0,0 +1,51 @@
---
sidebar_position: 9
title: DPI Детектор
---
# DPI Детектор
Детектор определяет, какие методы блокировки использует ваш провайдер. Это помогает понять, что именно нужно обходить, и выбрать подходящую стратегию.
## Типы проверок
### Целостность DNS
Сравнивает ответы DNS по UDP с ответами через DoH (DNS over HTTPS). Если IP-адреса различаются - провайдер подменяет DNS-ответы.
Результат показывает:
- IP от обычного DNS (UDP)
- IP от DoH
- Статус: OK / TIMEOUT / BLOCKED
- Обнаружение stub-IP (заглушки провайдера)
### Доступность доменов
Проверяет доступность сайтов через разные протоколы:
- TLS 1.3
- TLS 1.2
- HTTP
Для каждого показывает статус, IP-адрес, задержку. Если IP отличается от эталонного - помечается как Fake IP.
### TCP Fat Probe тест
Отправляет keep-alive запросы с увеличивающимся размером заголовка. Определяет, при каком размере пакета ТСПУ/DPI разрывает соединение.
Результат: провайдер/ASN, порог срабатывания (КБ), RTT.
### Перебор SNI по белому списку
Перебирает SNI-домены для определения, какие домены провайдер пропускает без анализа (белый список).
<!-- screenshot: страница детектора с результатами проверок -->
## Запуск
Выберите нужные проверки и нажмите кнопку запуска. Каждый тест занимает несколько секунд.
## История
Результаты сохраняются с отметкой времени. Можно сравнить результаты в разные моменты - например, до и после смены провайдера или обновления оборудования ТСПУ.

View file

@ -0,0 +1,76 @@
---
sidebar_position: 7
title: Дискавери
---
# Дискавери
Дискавери автоматически подбирает рабочую конфигурацию обхода для указанных доменов. b4 перебирает стратегии, тестирует их и находит те, которые работают с вашим провайдером.
Базовый сценарий использования описан в разделе [Быстрый старт](./quickstart).
## Параметры поиска
Перед запуском можно раскрыть панель **Параметры поиска** и настроить:
| Параметр | Описание |
| --- | --- |
| **Пропустить поиск DNS** | Не проверять DNS-блокировку. Включите, если используете DoH или сторонний DNS |
| **Пропустить кэшированные стратегии** | Не пробовать стратегии, которые уже были найдены ранее |
| **Версия TLS** | Авто / TLS 1.2 / TLS 1.3 - ограничить тестирование конкретной версией |
| **Попыток валидации** | 15 - сколько раз проверить стратегию перед тем, как считать её рабочей |
| **Пользовательские payloads** | Использовать захваченные TLS ClientHello (настраиваются в разделе Настройки → Пэйлоады) |
Кнопка **Очистить кэш** удаляет ранее найденные стратегии - полезно при смене провайдера или при изменении методов блокировки.
<!-- screenshot: раскрытая панель параметров поиска -->
## Фазы поиска
После нажатия **Начать поиск** процесс проходит несколько фаз:
1. **Базовый тест** - проверка, действительно ли сайт заблокирован
2. **Кэшированные стратегии** - проверка ранее найденных конфигураций
3. **Поиск стратегий** - перебор методов обхода
4. **Оптимизация** - подбор параметров найденной стратегии
5. **Тест комбинаций** - проверка комбинированных стратегий
6. **Проверка DNS** - определение DNS-блокировки
Прогресс и текущая фаза отображаются на странице. В панели **Журнал поиска** можно следить за деталями тестирования.
<!-- screenshot: процесс поиска с журналом -->
## Результаты
Для каждого домена отображается карточка с результатом:
| Статус | Значение |
| --- | --- |
| **Успешно** | Найдена рабочая конфигурация. Показывает скорость и улучшение по сравнению с baseline |
| **DNS Poisoning** | DNS-сервер возвращает подменённый IP. Нужно сменить DNS |
| **Transport Blocked** | Блокировка на уровне IP/транспорта. Требуется VPN или маршрутизация через другой интерфейс |
На карточке успешного результата кнопка **Использовать эту конфигурацию** открывает диалог создания сета.
<!-- screenshot: карточки результатов - успешный и заблокированный -->
## Применение результатов
В диалоге **Добавить конфигурацию**:
- **Создать новый сет** - создаёт сет с найденной конфигурацией и добавляет домен
- **Добавить в существующий похожий сет** - добавляет домен в уже настроенный сет с похожими параметрами
<!-- screenshot: диалог добавления конфигурации -->
## История результатов
Результаты предыдущих запусков сохраняются внизу страницы. Для каждого результата доступны:
- Повторный запуск тестирования
- Применение найденной конфигурации
- Удаление из истории
## Автоматический мониторинг (Watchdog)
Если вы хотите, чтобы b4 сам следил за доступностью доменов и при необходимости запускал дискавери - используйте [мониторинг доменов](./watchdog).

View file

@ -0,0 +1,74 @@
---
sidebar_position: 6
title: Docker
---
# Docker
Образ: [lavrushin/b4](https://hub.docker.com/r/lavrushin/b4) на Docker Hub.
## docker-compose
Создайте файл `docker-compose.yml`:
```yaml
services:
b4:
image: lavrushin/b4:latest
container_name: b4
network_mode: host
cap_add:
- NET_ADMIN
- NET_RAW
- SYS_MODULE
volumes:
- ./config:/etc/b4
restart: unless-stopped
```
Запуск:
```bash
mkdir -p config
docker compose up -d
```
## docker run
```bash
mkdir -p config
docker run -d \
--name b4 \
--network host \
--cap-add NET_ADMIN \
--cap-add NET_RAW \
--cap-add SYS_MODULE \
-v ./config:/etc/b4 \
--restart unless-stopped \
lavrushin/b4:latest
```
## Параметры
| Параметр | Зачем |
| --- | --- |
| `network_mode: host` | b4 работает с сетевым стеком хоста напрямую |
| `NET_ADMIN` | управление netfilter и правилами firewall |
| `NET_RAW` | работа с raw-сокетами |
| `SYS_MODULE` | загрузка модулей ядра (modprobe) |
| `-v ./config:/etc/b4` | конфигурация сохраняется на хосте |
## Управление
```bash
docker compose logs -f b4 # логи
docker compose restart b4 # перезапуск
docker compose down # остановка
docker compose pull && docker compose up -d # обновление
```
## Веб-интерфейс
После запуска: `http://localhost:7000`
Порт настраивается в `config/b4.json` (параметр `web_server.port`).

View file

@ -0,0 +1,52 @@
---
sidebar_position: 2
title: Установка
---
# Установка
b4 устанавливается на Linux-устройства: серверы, компьютеры и роутеры. Выберите подходящий способ:
- [Linux](./linux) - универсальная установка на любой Linux-дистрибутив
- [OpenWRT](./openwrt) - роутеры с прошивкой OpenWRT
- [ASUS Merlin](./merlin) - роутеры ASUS с прошивкой Merlin
- [Keenetic](./keenetic) - роутеры Keenetic
- [MikroTik](./mikrotik) - RouterOS 7.x через контейнеры
- [Docker](./docker) - запуск в Docker-контейнере
После установки b4 доступен через веб-интерфейс в браузере (по умолчанию порт `7000`).
## Обновление и удаление {#update-remove}
### Обновление
```bash
curl -fsSL https://raw.githubusercontent.com/DanielLavrushin/b4/main/install.sh | sh -s -- --update
```
Или обновление до конкретной версии:
```bash
curl -fsSL https://raw.githubusercontent.com/DanielLavrushin/b4/main/install.sh | sh -s -- v1.46.5
```
При обновлении текущий бинарник сохраняется как резервная копия, сервис останавливается, заменяется на новую версию и запускается снова. Конфигурация не затрагивается.
### Удаление
```bash
curl -fsSL https://raw.githubusercontent.com/DanielLavrushin/b4/main/install.sh | sh -s -- --remove
```
При удалении:
1. Сервис останавливается и убирается из автозапуска
2. Бинарник удаляется
3. Конфигурация - по выбору (установщик спросит, удалять ли `/etc/b4` или `/opt/etc/b4`)
### Диагностика
Для вывода информации о системе, установленной версии и состоянии модулей ядра:
```bash
curl -fsSL https://raw.githubusercontent.com/DanielLavrushin/b4/main/install.sh | sh -s -- --sysinfo
```

View file

@ -0,0 +1,61 @@
---
sidebar_position: 4
title: Keenetic
---
# Keenetic
## Требования
- Роутер Keenetic с поддержкой OPKG
- Установленный Entware (обязательно)
## Установка Entware
### Новые модели (со встроенным хранилищем)
1. Откройте веб-интерфейс роутера
2. Перейдите в **Параметры системы**
3. Включите компонент **Менеджер пакетов OPKG**
### Старые модели (нужен USB-накопитель)
1. Вставьте USB-накопитель в роутер
2. Установите Entware через менеджер пакетов
Подробнее: https://help.keenetic.com/hc/ru/articles/360021214160
## Установка b4
Подключитесь по SSH и выполните:
```bash
curl -fsSL https://raw.githubusercontent.com/DanielLavrushin/b4/main/install.sh | sh
```
## Управление сервисом
```bash
/opt/etc/init.d/S99b4 start
/opt/etc/init.d/S99b4 stop
/opt/etc/init.d/S99b4 restart
```
## Пути
| Что | Где |
| --- | --- |
| Бинарник | `/opt/sbin/b4` |
| Конфигурация | `/opt/etc/b4/b4.json` |
| Сервис | `/opt/etc/init.d/S99b4` |
## Архитектура
- Старые модели (MT7621) - `mipsle_softfloat`
- Новые модели (aarch64) - `arm64`
Установщик определяет архитектуру автоматически.
:::warning Без Entware
Без Entware b4 устанавливается в `/tmp`, который очищается при каждой перезагрузке. Для постоянной работы Entware обязателен.
:::

View file

@ -0,0 +1,88 @@
---
sidebar_position: 1
title: Linux
---
# Linux (универсальная установка)
Подходит для любого дистрибутива: Ubuntu, Debian, Fedora, Alpine, Arch и других.
## Установка
```bash
curl -fsSL https://raw.githubusercontent.com/DanielLavrushin/b4/main/install.sh | sh
```
Или через `wget`:
```bash
wget -qO- https://raw.githubusercontent.com/DanielLavrushin/b4/main/install.sh | sh
```
Установщик автоматически определит архитектуру, установит бинарник в `/usr/local/bin` и создаст конфигурацию в `/etc/b4`.
Для установки без интерактивных вопросов (с настройками по умолчанию):
```bash
curl -fsSL https://raw.githubusercontent.com/DanielLavrushin/b4/main/install.sh | sh -s -- --quiet
```
## Управление сервисом
### systemd (Ubuntu, Debian, Fedora и большинство дистрибутивов)
```bash
systemctl start b4
systemctl stop b4
systemctl restart b4
systemctl status b4
systemctl enable b4 # автозапуск при загрузке
```
Просмотр логов:
```bash
journalctl -u b4 -f
```
### OpenRC (Alpine)
```bash
rc-service b4 start
rc-service b4 stop
rc-service b4 restart
rc-update add b4 default # автозапуск при загрузке
```
## Пути
| Что | Где |
| --- | --- |
| Бинарник | `/usr/local/bin/b4` |
| Конфигурация | `/etc/b4/b4.json` |
| Сервис (systemd) | `/etc/systemd/system/b4.service` |
| Сервис (OpenRC/SysV) | `/etc/init.d/b4` |
## Модули ядра
b4 использует NFQUEUE для перехвата пакетов. Нужные модули ядра обычно загружаются автоматически при запуске сервиса. Если возникают проблемы, загрузите их вручную:
```bash
modprobe nfnetlink_queue
modprobe xt_NFQUEUE
modprobe nf_conntrack
```
Для проверки:
```bash
lsmod | grep nfqueue
```
:::info LXC-контейнеры
В LXC-контейнерах модули ядра должны быть загружены на хосте. В конфигурации контейнера добавьте:
```
lxc.cgroup2.devices.allow: c 10:200 rwm
features: nesting=1,keyctl=1
```
:::

View file

@ -0,0 +1,55 @@
---
sidebar_position: 3
title: ASUS Merlin
---
# ASUS Merlin
## Требования
- Роутер ASUS с прошивкой Asuswrt-Merlin
- Установленный Entware (обязательно)
- USB-накопитель (для Entware и b4)
## Установка Entware
Entware - обязательное условие. Если он ещё не установлен:
1. Вставьте USB-накопитель в роутер
2. Подключитесь по SSH: `ssh admin@192.168.1.1`
3. Запустите `amtm`
4. Выберите пункт `ep` для установки Entware
Подробнее: https://diversion.ch/amtm.html
## Установка b4
После установки Entware:
```bash
curl -fsSL https://raw.githubusercontent.com/DanielLavrushin/b4/main/install.sh | sh
```
## Управление сервисом
```bash
/opt/etc/init.d/S99b4 start
/opt/etc/init.d/S99b4 stop
/opt/etc/init.d/S99b4 restart
```
Сервис запускается автоматически при загрузке роутера через Entware.
## Пути
| Что | Где |
| --- | --- |
| Бинарник | `/opt/sbin/b4` |
| Конфигурация | `/opt/etc/b4/b4.json` |
| Сервис | `/opt/etc/init.d/S99b4` |
## Без Entware
Если Entware не установлен, b4 устанавливается в `/jffs/b4`. В этом случае автозапуск при загрузке не настраивается - бинарник нужно запускать вручную.
Размер `/jffs` обычно ограничен ~60 МБ, поэтому рекомендуется использовать USB-накопитель с Entware.

View file

@ -0,0 +1,158 @@
---
sidebar_position: 5
title: MikroTik
---
# MikroTik (RouterOS 7.x)
b4 запускается как контейнер на MikroTik RouterOS 7.x.
## Требования
- RouterOS версии 7.21.1 и выше
- Архитектура ARM64 или AMD64
- Подключённый внешний накопитель (Flash/SSD/HDD), отформатированный в Ext4
:::warning
Контейнеры на MikroTik требуют внешний накопитель - внутренней памяти роутера недостаточно.
:::
## Параметры примера
В руководстве используются следующие значения. Замените на свои:
| Параметр | Значение |
| --- | --- |
| Сеть моста | 192.168.210.0/24 |
| Шлюз моста | 192.168.210.1 |
| Имя моста | bridge-docker |
| IP контейнера | 192.168.210.10 |
| Имя интерфейса | B4 |
| Сеть LAN | 192.168.100.0/24 |
| DNS-сервер | 192.168.100.1 |
| Таблица маршрутизации | to_b4 |
| Диск | /usb1 |
| Список клиентов | b4users |
## Шаг 1: Мост
Создайте мост для Docker-сети:
```routeros
/interface/bridge add name=bridge-docker port-cost-mode=short
/ip/address add address=192.168.210.1/24 interface=bridge-docker network=192.168.210.0
```
## Шаг 2: Интерфейс
Создайте виртуальный Ethernet-интерфейс и подключите к мосту:
```routeros
/interface/veth add address=192.168.210.10/24 gateway=192.168.210.1 name=B4
/interface/bridge/port add bridge=bridge-docker interface=B4
```
## Шаг 3: Маршрутизация
Создайте таблицу маршрутизации и маршрут через контейнер:
```routeros
/routing table add disabled=no fib name=to_b4
/ip route add check-gateway=ping gateway=192.168.210.10 routing-table=to_b4
```
## Шаг 4: Маркировка трафика
Перенаправьте трафик клиентов из списка `b4users` через контейнер:
```routeros
/ip firewall mangle add chain=prerouting action=mark-connection \
new-connection-mark=b4_connections passthrough=yes connection-state=new \
dst-address-type=!local src-address-list=b4users in-interface-list=LAN \
place-before=0
/ip firewall mangle add chain=prerouting action=mark-routing \
new-routing-mark=to_b4 passthrough=no connection-mark=b4_connections \
in-interface-list=LAN log=no place-before=1
```
:::caution FastTrack
FastTrack обходит правила mangle. Ограничьте его немаркированными соединениями:
```routeros
/ip firewall filter set [find action=fasttrack-connection] connection-mark=no-mark
```
:::
## Шаг 5: Точки монтирования
```routeros
/container/mounts add name=b4_etc src=/usb1/docker/b4-mounts/etc dst=/opt/etc/b4
```
Убедитесь, что директория `/usb1/docker/b4-mounts/etc` существует на диске.
## Шаг 6: Запуск контейнера
Настройте реестр:
```routeros
/container/config set registry-url=https://registry-1.docker.io tmpdir=/usb1/docker/pull
```
Создайте и запустите контейнер:
```routeros
/container add remote-image=lavrushin/b4:latest interface=B4 \
root-dir=/usb1/docker/b4-mikrotik mounts=b4_etc \
cmd="--config /opt/etc/b4/b4.json" start-on-boot=yes \
logging=yes dns=192.168.100.1
```
После загрузки образа:
```routeros
/container start [find tag~"b4"]
```
## Шаг 7: Добавление клиентов
Добавьте устройства в адресный список `b4users`:
```routeros
/ip firewall address-list add list=b4users address=192.168.100.50
/ip firewall address-list add list=b4users address=192.168.100.51
```
## Веб-интерфейс
После запуска контейнера: `http://192.168.210.10:7000`
## Обновление
```routeros
/container stop [find tag~"b4"]
/container remove [find tag~"b4"]
/container add remote-image=lavrushin/b4:latest interface=B4 \
root-dir=/usb1/docker/b4-mikrotik mounts=b4_etc \
cmd="--config /opt/etc/b4/b4.json" start-on-boot=yes \
logging=yes dns=192.168.100.1
```
Конфигурация хранится на точке монтирования и сохраняется при пересоздании контейнера.
## Решение проблем
**Контейнер не запускается:**
1. Проверьте статус: `/container print`
2. Смотрите логи: `/log print where topics~"container"`
3. Убедитесь, что диск отформатирован в Ext4
**Нет доступа к веб-интерфейсу:**
1. Проверьте, что контейнер запущен: `/container print`
2. Проверьте связность: `/ping 192.168.210.10`
**Трафик не перенаправляется:**
1. Проверьте список: `/ip firewall address-list print where list=b4users`
2. Проверьте mangle: `/ip firewall mangle print`
3. Проверьте маршрут: `/ip route print where routing-table=to_b4`

View file

@ -0,0 +1,145 @@
---
sidebar_position: 2
title: OpenWRT
---
# OpenWRT
## Требования
- OpenWRT 19.07 и выше
- Внешнее хранилище (USB или extroot) - рекомендуется, так как на внутренней памяти роутера может не хватить места
:::warning Место на диске
На роутерах с OpenWRT внутренняя память ограничена (overlay). Если доступно менее 2 МБ, установщик предупредит об этом. Рекомендуется использовать extroot или USB-накопитель.
Инструкция по настройке extroot: https://openwrt.org/docs/guide-user/additional-software/extroot_configuration
:::
## Установка
Подключитесь к роутеру по SSH и выполните:
```bash
curl -fsSL https://raw.githubusercontent.com/DanielLavrushin/b4/main/install.sh | sh
```
Если `curl` не установлен:
```bash
opkg update && opkg install curl ca-certificates
```
Или через `wget`:
```bash
wget -qO- https://raw.githubusercontent.com/DanielLavrushin/b4/main/install.sh | sh
```
:::info wget на OpenWRT
Стандартный `wget` в OpenWRT (BusyBox) не поддерживает HTTPS. Установите полную версию:
```bash
opkg update && opkg install wget-ssl ca-certificates
```
:::
## Модули ядра
Установщик попытается загрузить необходимые модули автоматически. Если при запуске вы видите предупреждение `[WARN] No netfilter queue module available` или ошибки связанные с nftables - установите модули вручную.
### OpenWRT 24.x+ (apk)
```bash
apk add kmod-nft-queue kmod-nft-nat kmod-nft-compat kmod-nft-conntrack
```
### OpenWRT 23.x и ниже (opkg)
```bash
opkg update
opkg install kmod-nft-queue kmod-nft-conntrack nftables-json coreutils-nohup
```
Для совсем старых версий (без nftables):
```bash
opkg install kmod-nfnetlink-queue kmod-ipt-nfqueue iptables-mod-nfqueue iptables-mod-conntrack-extra
```
### Загрузка модулей
После установки модулей может потребоваться загрузить их вручную:
```bash
modprobe nft_queue
modprobe nft_ct
modprobe xt_connbytes
```
Если команда выполняется без вывода - модуль загружен успешно.
## Управление сервисом
```bash
/etc/init.d/b4 enable # автозапуск при загрузке
/etc/init.d/b4 start
/etc/init.d/b4 stop
/etc/init.d/b4 restart
```
:::tip Работа через SSH
Сервис b4 работает как системный демон - он продолжит работать после закрытия SSH-сессии (PuTTY, терминал и т.д.). Не нужно использовать `screen` или `nohup` вручную.
:::
## Пути
При наличии `/opt` (extroot/USB):
| Что | Где |
| --- | --- |
| Бинарник | `/opt/bin/b4` |
| Конфигурация | `/opt/etc/b4/b4.json` |
Без внешнего хранилища (fallback):
| Что | Где |
| --- | --- |
| Бинарник | `/usr/bin/b4` |
| Конфигурация | `/etc/b4/b4.json` |
## Веб-интерфейс
После запуска b4 доступен по адресу `http://<IP роутера>:7000`. Например, если IP роутера `192.168.1.1`, откройте в браузере:
```text
http://192.168.1.1:7000
```
## LuCI-приложение
Существует сторонний пакет [luci-app-b4](https://github.com/BugOldfag/luci-app-b4), который добавляет управление b4 в интерфейс LuCI. Проект находится в стадии alpha и покрывает часть функций. Основной веб-интерфейс b4 (порт 7000) по-прежнему доступен.
## Устранение неполадок
### Service crashed / сервис не запускается
1. Убедитесь что модули ядра установлены и загружены (см. раздел «Модули ядра» выше)
2. Проверьте логи: `logread | grep b4`
### Error: Could not process rule
Если b4 вылетает с ошибкой при добавлении правил в цепочку, возможно остались «битые» таблицы от предыдущего неудачного запуска. Очистите их:
```bash
nft delete table inet b4_mangle 2>/dev/null
```
После этого запустите b4 заново:
```bash
/etc/init.d/b4 restart
```
### Низкая скорость / тормозит видео
Проверьте настройку **Software flow offloading** в разделе Network → Firewall. Попробуйте включить или выключить её - на некоторых устройствах это влияет на производительность b4.

View file

@ -0,0 +1,80 @@
---
sidebar_position: 1
title: Введение
---
## Что такое b4
**b4** (Bye Bye Big Bro) - это сервис, который помогает открывать сайты, заблокированные вашим интернет-провайдером. Провайдеры используют технологию DPI (глубокий анализ пакетов), чтобы распознавать и блокировать трафик к определённым ресурсам. b4 изменяет сетевые пакеты таким образом, что система блокировки не может их распознать - при этом сайт получает данные без изменений и работает как обычно.
b4 работает на Linux-устройствах: обычных компьютерах, серверах и роутерах. Если установить b4 на роутер - обход блокировок работает сразу для всех устройств в домашней сети без дополнительных настроек на каждом из них.
Управление происходит через **веб-интерфейс** в браузере.
## Как это работает
```mermaid
flowchart LR
A["Ваше устройство"] --> B["b4"]
B --> C{"DPI провайдера"}
C -->|"Не распознал"| D["Сайт работает"]
style A fill:#4a9eff,color:#fff,stroke:none
style B fill:#e91e63,color:#fff,stroke:none
style C fill:#ff9800,color:#fff,stroke:none
style D fill:#4caf50,color:#fff,stroke:none
```
**Без b4:** вы открываете сайт - провайдер видит, куда вы идёте, и блокирует соединение.
**С b4:** пакеты модифицируются до того, как попадут к провайдеру. DPI-система не может определить, какой сайт вы запрашиваете, и пропускает трафик. Сам сайт при этом собирает пакеты обратно и работает нормально.
Основные методы обхода:
- **Фрагментация** - запрос разбивается на части, которые DPI не может собрать воедино
- **Подмена** - отправка ложных пакетов, которые сбивают DPI с толку
- **Модификация** - изменение служебных полей пакета, чтобы они не совпадали с сигнатурами блокировки
Разбираться в деталях не обязательно - в b4 есть механизм автоматического подбора конфигурации под вашего провайдера.
## Основные возможности
b4 состоит из нескольких частей, которые подробно описаны в соответствующих разделах документации:
- **Наборы настроек (сеты)** - конфигурации обхода для TCP/UDP трафика с разными стратегиями
- **Обнаружение** - автоматический подбор рабочей конфигурации
- **Детектор DPI** - определение методов блокировки у вашего провайдера
- **Мониторинг соединений** - просмотр трафика в реальном времени
- **GeoSite/GeoIP** - работа с категориями сайтов и IP-адресов
- **Фильтрация по устройствам** - разные правила для разных устройств в сети
- **Маршрутизация** - направление трафика через заданный интерфейс (VPN, WireGuard и т.д.)
- **SOCKS5-прокси** - для приложений, которые поддерживают прокси
- **MTProto-прокси** - прокси для Telegram
## Системные требования
### Поддерживаемые платформы
| Платформа | Описание |
| ----------- | ------------------------------------------------------------- |
| Linux | Любой дистрибутив с ядром 3.13+ (Ubuntu, Debian, Alpine и др.) |
| OpenWRT | Роутеры с прошивкой OpenWRT |
| ASUS Merlin | Роутеры ASUS с прошивкой Merlin (через Entware) |
| Keenetic | Роутеры Keenetic с поддержкой OPKG |
| MikroTik | RouterOS 7.x с поддержкой контейнеров |
| Docker | Любая система с Docker |
### Поддерживаемые архитектуры
`amd64`, `arm64`, `armv7`, `armv6`, `armv5`, `386`, `mips`, `mipsle`, `mips64`, `mips64le`
### Минимальные требования
- **RAM:** 64 МБ свободной памяти
- **Диск:** ~30 МБ для бинарника + место для конфигурации и geodata
- **Ядро Linux:** 3.13+ с поддержкой NFQUEUE (`nfnetlink_queue`)
- **Права:** root (для работы с netfilter)
:::info
При установке на роутер обход работает для всех устройств в сети без настройки на каждом из них.
:::

View file

@ -0,0 +1,36 @@
---
sidebar_position: 11
title: Логи
---
# Логи
Раздел отображает системные логи b4 в реальном времени. Логи поступают через WebSocket и обновляются непрерывно.
<!-- screenshot: страница логов -->
## Управление
- **Фильтр** - текстовый поиск по содержимому логов (без учёта регистра)
- **Поток / Пауза** - переключение между режимами потоковой трансляции и паузы
- **Очистить логи** - удалить все отображаемые строки
## Горячие клавиши
| Клавиша | Действие |
| --- | --- |
| **P** или **Pause** | Пауза / возобновление потока |
| **Ctrl+X** или **Delete** | Очистить логи |
## Уровень логирования
Количество информации в логах зависит от настройки уровня логирования (Настройки → Основные → Настройки логирования):
| Уровень | Что отображается |
| --- | --- |
| **ERROR** | Только ошибки |
| **INFO** | Ошибки + основные события |
| **TRACE** | INFO + детали обработки пакетов |
| **DEBUG** | Всё, включая отладочную информацию |
Для диагностики проблем используйте TRACE или DEBUG. Для обычной работы достаточно INFO.

View file

@ -0,0 +1,168 @@
---
sidebar_position: 12
title: MTProto Прокси
---
# MTProto Прокси для Telegram
B4 включает встроенный прокси для Telegram, который маскирует трафик под обычное HTTPS-соединение к популярному сайту.
## Два сценария использования
![mtproto](/img/mtproto/20260322135051.png)
### Сценарий 1: B4 на VPS за границей (простой)
B4 установлен на сервере за пределами цензурированной зоны. Пользователи из России подключают Telegram напрямую к VPS.
```text
Телефон (Россия) ──────▶ B4 на VPS ──────▶ Telegram
ТСПУ видит
«HTTPS к google.com»
(не блокирует)
```
Настройка занимает 2 минуты. Дополнительное ПО не требуется.
### Сценарий 2: B4 на роутере внутри России (с relay)
B4 установлен на роутере или машине внутри России. Требуется дополнительный VPS для пересылки трафика, так как ТСПУ блокирует все прямые соединения к серверам Telegram по IP.
```text
Телефон ──────▶ B4 (роутер) ──────▶ VPS ──────▶ Telegram
ТСПУ видит ТСПУ видит
«HTTPS к google.com» «трафик к VPS»
(не блокирует) (не блокирует)
```
На VPS достаточно запустить простую пересылку трафика - без ключей и настроек.
---
## Сценарий 1: B4 на VPS
### Шаг 1: Настройка B4
В веб-интерфейсе B4 → **Settings****General****MTProto Proxy**:
1. **Enable MTProto Proxy** - включить
2. **Port** - порт для подключений (рекомендуется `443`)
3. **Fake SNI Domain** - домен для маскировки (например `storage.googleapis.com`)
4. Нажать **Generate Secret**
5. Скопировать значение из поля **Secret**
6. Сохранить настройки и перезапустить B4
Поле **DC Relay** оставить пустым - B4 на VPS подключается к Telegram напрямую.
### Шаг 2: Настройка Telegram
1. Открыть **Telegram****Настройки****Данные и память** → **Прокси**
2. Нажать **Добавить прокси**
3. Выбрать тип **MTProto**
4. Заполнить:
- **Сервер**: IP-адрес или домен VPS
- **Порт**: порт из шага 1
- **Секрет**: скопированный секрет
5. Нажать **Готово** и включить прокси
![telegra](/img/mtproto/20260322135130.png)
---
## Сценарий 2: B4 на роутере внутри России
### Шаг 1: Подготовка VPS
На любом VPS за границей запустить пересылку трафика:
```bash
# Установка socat
apt install -y socat
# Запуск пересылки (при необходимости заменить 7007 на другой начальный порт)
socat TCP-LISTEN:7007,fork,reuseaddr TCP:149.154.175.50:443 &
socat TCP-LISTEN:7008,fork,reuseaddr TCP:149.154.167.51:443 &
socat TCP-LISTEN:7009,fork,reuseaddr TCP:149.154.175.100:443 &
socat TCP-LISTEN:7010,fork,reuseaddr TCP:149.154.167.91:443 &
socat TCP-LISTEN:7011,fork,reuseaddr TCP:149.154.171.5:443 &
```
Больше ничего на VPS настраивать не нужно. Никаких ключей, секретов или дополнительного ПО.
:::warning Порты
B4 использует **5 последовательных портов** начиная с указанного. Например, при начальном порте `7007` должны быть открыты порты `7007``7011` в firewall VPS. Каждый порт соответствует одному из 5 дата-центров Telegram.
:::
:::tip
Для автозапуска можно добавить команды в `/etc/rc.local` или создать systemd-сервис.
:::
### Шаг 2: Настройка B4
В веб-интерфейсе B4 → **Settings****General****MTProto Proxy**:
1. **Enable MTProto Proxy** - включить
2. **Port** - порт для подключений (например `7002`)
3. **Fake SNI Domain** - домен для маскировки (например `storage.googleapis.com`)
4. **DC Relay** - адрес VPS с начальным портом (например `my-vps.com:7007`)
5. Нажать **Generate Secret**
6. Скопировать значение из поля **Secret**
7. Сохранить настройки и перезапустить B4
### Шаг 3: Настройка Telegram
1. [Открыть](https://core.telegram.org/proxy#adding-a-proxy) **Telegram****Настройки****Данные и память** → **Прокси**
2. Нажать **Добавить прокси**
3. Выбрать тип **MTProto**
4. Заполнить:
- **Сервер**: IP-адрес роутера или машины с B4
- **Порт**: порт из шага 2
- **Секрет**: скопированный секрет
5. Нажать **Готово** и включить прокси
---
## Выбор домена для маскировки
Домен должен быть:
- популярным в России
- незаблокированным
- критически важным (блокировка такого домена нарушит работу других сервисов)
:::info
При подключении к порту B4 без правильного секрета - B4 прозрачно перенаправляет на настоящий сайт (указанный в Fake SNI). Сканер видит обычный сайт, а не прокси.
:::
## Что-то пошло не так, памагити
### Telegram показывает "Подключение..."
- Убедиться, что `socat` запущен на VPS и порты доступны (сценарий 2)
- Проверить правильность адреса VPS в поле DC Relay
- В логах B4 должны быть строки `MTProto fake-TLS handshake OK` и `MTProto relay`
### Неправильный секрет
В логах: `HMAC verification failed`
Секрет в Telegram не совпадает с секретом в B4.
### Расхождение времени
В логах: `timestamp out of range`
Часы на устройстве и на машине с B4 расходятся. Необходимо синхронизировать время.
### VPS недоступен
В логах: `dial DC ... i/o timeout`
- VPS выключен или `socat` не запущен
- Firewall на VPS блокирует входящие соединения на нужных портах
### Нет ответа от Telegram
В логах: `DC->client: 0 bytes`
- Если DC Relay **не настроен**: серверы Telegram заблокированы по IP. Необходимо настроить VPS relay (придется использовать только сценарий 2).
- Если DC Relay **настроен**: `socat` на VPS не запущен или указан неправильный порт.

View file

@ -0,0 +1,114 @@
---
sidebar_position: 3
title: Быстрый старт
---
## Обзор
После установки b4 запускается как сервис и становится доступен через веб-интерфейс. Эта страница описывает путь от первого запуска до работающего обхода блокировок.
## Открыть веб-интерфейс
Откройте в браузере:
```text
http://<IP-адрес>:7000
```
Где `<IP-адрес>` - адрес устройства, на котором установлен b4:
- Если b4 на этом же компьютере: `http://localhost:7000`
- Если на роутере: `http://192.168.1.1:7000` (подставьте IP роутера)
:::info HTTPS
Если в настройках b4 включён HTTPS, используйте `https://` вместо `http://`. Браузер может показать предупреждение о сертификате - это нормально для самоподписанного сертификата, его можно принять.
:::
![dashboard](/img/quickstart/20260323203514.png)
При первом запуске дашборд будет пустым - это нормально. Данные появятся после настройки.
## Запустить обнаружение
b4 может автоматически подобрать рабочую конфигурацию для вашего провайдера. Для этого используется раздел **Дискавери**.
### Шаг 1: Перейти в Дискавери
В боковом меню нажмите **Дискавери**.
![discovery](/img/quickstart/20260323203615.png)
### Шаг 2: Добавить домены
В поле **Добавить домен или URL** введите адрес заблокированного сайта и нажмите Enter. Можно добавить несколько доменов через запятую.
Примеры:
- `youtube.com`
- `googlevideo.com`
![discovery2](/img/quickstart/20260323203727.png)
### Шаг 3: Начать поиск
Нажмите **Начать поиск**.
b4 начнёт перебирать стратегии обхода и тестировать их на указанных доменах. Процесс проходит несколько фаз:
1. **Базовый тест** - проверка, действительно ли сайт заблокирован
2. **Поиск стратегий** - перебор методов обхода
3. **Оптимизация** - подбор параметров
4. **Тест комбинаций** - проверка комбинированных стратегий
5. **Проверка DNS** - проверка DNS-блокировки
![disearch](/img/quickstart/20260323203826.png)
Поиск может занять от 1 до 10 минут в зависимости от провайдера.
:::tip Пропустить проверку DNS
Если вы уверены, что DNS работает нормально (например, используете DoH или сторонний DNS-сервер), включите опцию **Пропустить поиск DNS** в **Параметрах поиска**. Это ускорит процесс и уберёт ложные срабатывания по DNS.
:::
### Шаг 4: Результаты
После завершения для каждого домена отображается результат:
- **Успешно** - найдена рабочая конфигурация
- **Заблокирован** - сайт заблокирован на уровне DNS или транспорта, нужны дополнительные настройки
![success](/img/quickstart/20260323203905.png)
## Применить конфигурацию
На карточке успешного результата нажмите **Использовать эту конфигурацию**.
![addset](/img/quickstart/20260323204345.png)
В открывшемся диалоге:
1. Выберите **Создать новый сет** (или **Добавить в существующий похожий сет**, если у вас уже есть настроенные сеты)
2. Укажите название сета (или оставьте предложенное)
3. Нажмите **Создать сет**
Сет - это набор настроек обхода, привязанный к списку доменов или ip адресов. Подробнее о сетах - в разделе [Сеты](./sets/).
## Проверить работу
### Через браузер
Откройте сайт, для которого настроен обход. Если всё работает - сайт загрузится.
### Через раздел Соединения
В боковом меню нажмите **Соединения**. Здесь отображаются все текущие TCP/UDP-соединения в реальном времени.
![connections](/img/quickstart/20260323204510.png)
Если обход работает, в столбце **Сет** напротив соединений с настроенным доменом будет отображаться название вашего сета.
## Что дальше
- Добавить другие домены - через Дискавери или вручную в настройках сета
- Настроить обход по категориям (GeoSite) - чтобы не добавлять домены по одному
- Посмотреть раздел [Сеты](./sets/) для подробного описания всех возможностей

View file

@ -0,0 +1,138 @@
---
sidebar_position: 6
title: Сеты
---
# Сеты
Сет - это набор настроек обхода DPI, привязанный к списку доменов, IP-адресов, UDP-портов или категорий GeoSite/GeoIP. Можно создать несколько сетов с разными стратегиями для разных сайтов.
## Управление сетами
На странице **Сеты** отображаются все созданные наборы. Для каждого сета видно:
- Название и статус (включён/выключен)
- Количество доменов и IP
- Активные техники (COMBO, DISORDER, HYBRID и т.д.)
- Состояние DNS-маршрутизации и SNI Faking
![sets](/img/index/20260323210109.png)
Доступные действия:
- **Создать сет** - новый набор настроек
- **Редактировать** - клик по карточке
- **Дублировать** - создать копию существующего сета
- **Сравнить** - сравнение двух сетов в два столбца
- **Удалить** - удаление одного или нескольких сетов (через массовое выделение)
- **Перетаскивание** - изменение порядка сетов (порядок влияет на приоритет обработки)
## Редактор сета
Редактор содержит 5 вкладок:
- [Цели](./targets) - домены, IP, GeoSite/GeoIP категории, устройства
- [TCP](./tcp/) - фрагментация, faking, desync и другие TCP-стратегии
- [UDP](./udp) - обработка UDP-трафика, QUIC, STUN
- [Маршрутизация](./routing) - DNS-редирект и маршрутизация трафика через интерфейсы
- **Импорт/Экспорт** - JSON-представление конфигурации сета для переноса между устройствами
![set](/img/index/20260323210150.png)
## Как это работает
```mermaid
flowchart TD
A["Пакет из сети"] --> B{"IP назначения\nсовпал с сетом?"}
B -->|"Да"| C["Предварительный сет\n(по IP)"]
B -->|"Нет"| D
C --> D{"Есть ли\nTLS/QUIC данные?"}
D -->|"Да"| E["Извлечь домен (SNI)"]
D -->|"Нет"| F
E --> G{"Домен совпал\nс сетом?"}
G -->|"Да"| SEL
G -->|"Нет"| TLSCHK
TLSCHK{"IP совпал ранее\nи версия TLS\nподходит?"}
TLSCHK -->|"Да"| SEL
TLSCHK -->|"Нет"| F
F{"IP ранее\nсвязывался\nс доменом?"}
F -->|"Да"| SEL
F -->|"Нет"| H
H{"Есть сет\nтолько по порту?"}
H -->|"Да"| SEL
H -->|"Нет"| SKIP["Пропустить"]
SEL{"Сет с устройством\n+ версия TLS?"}
SEL -->|"Да"| OK["Применить сет"]
SEL -->|"Нет"| SEL2{"Общий сет\n+ версия TLS?"}
SEL2 -->|"Да"| OK
SEL2 -->|"Нет"| SEL3{"Любой\nподходящий сет?"}
SEL3 -->|"Да"| OK
SEL3 -->|"Нет"| SKIP
style A fill:#4a9eff,color:#fff,stroke:none
style OK fill:#4caf50,color:#fff,stroke:none
style SKIP fill:#666,color:#fff,stroke:none
style C fill:#ff9800,color:#fff,stroke:none
style SEL fill:#9c27b0,color:#fff,stroke:none
style SEL2 fill:#9c27b0,color:#fff,stroke:none
style SEL3 fill:#9c27b0,color:#fff,stroke:none
style TLSCHK fill:#ff9800,color:#fff,stroke:none
```
### Порядок сопоставления
1. **IP-адрес** - проверяется первым. Если IP назначения совпал с IP/CIDR в каком-то сете, это запоминается как предварительное совпадение
2. **Домен (SNI)** - если в пакете есть TLS/QUIC-данные, b4 извлекает домен. Если домен совпал с сетом - **этот сет заменяет** предварительное совпадение по IP. Домен всегда имеет приоритет
3. **Выученный IP** - если b4 ранее видел этот IP в связке с доменом (из предыдущих соединений), используется тот же сет
4. **Порт** - проверяется, только если сет настроен исключительно по порту (без доменов и IP)
5. **Предварительный IP** - если ни домен, ни выученный IP, ни порт не сработали, используется совпадение по IP из шага 1
:::tip Фильтр портов
Если в сете настроен фильтр портов - он работает как дополнительное условие. Даже если домен или IP совпали, пакет будет обработан только при совпадении порта.
:::
:::info Выбор сета при нескольких совпадениях
Если один и тот же домен или IP настроен в нескольких сетах, b4 выбирает сет по приоритету:
1. Сет с указанным **исходным устройством**, совпавшим с MAC отправителя + совпавшей **версией TLS**
2. Сет без привязки к устройству + совпавшей версией TLS
3. Если ни один сет не подошёл по TLS - версия TLS игнорируется и проверка повторяется
Таким образом, сеты с привязкой к устройствам всегда имеют приоритет над общими, а фильтр TLS-версии уточняет выбор, но не блокирует обработку.
:::
:::info Выученные IP
Когда b4 видит соединение, где домен (SNI) совпал с сетом, он запоминает связку IP → домен на 10 минут. Это ускоряет обработку последующих пакетов к тому же серверу, даже если в них нет SNI.
:::
### Что происходит при совпадении
Для TCP-пакетов b4 перехватывает оригинальный пакет и отправляет вместо него модифицированную версию. В зависимости от настроек сета применяются:
1. Удаление SACK-опции (если включено)
2. Мутация ClientHello (если включена)
3. Десинхронизация (RST/FIN/ACK)
4. Манипуляция TCP-окном
5. Отправка фейковых SNI-пакетов
6. Фрагментация по выбранной стратегии
Для UDP - пакет либо отбрасывается (режим drop), либо заменяется фейковым ответом (режим fake).
Если ни один сет не совпал - пакет проходит без изменений.
## Импорт и экспорт
Вкладка **Импорт/Экспорт** показывает JSON-конфигурацию сета. Можно:
- Скопировать JSON для переноса на другое устройство
- Вставить JSON для импорта конфигурации
Исходные устройства (MAC-адреса) не экспортируются - их нужно настроить заново на целевом устройстве.

View file

@ -0,0 +1,200 @@
---
sidebar_position: 4
title: Маршрутизация
---
# Маршрутизация
Вкладка маршрутизации управляет тем, как обрабатываются DNS-запросы и куда направляется трафик, совпавший с целями сета. Содержит два раздела: **DNS-редирект** и **Маршрутизация трафика**.
## DNS-редирект
Перенаправляет DNS-запросы для доменов из сета на указанный DNS-сервер.
Некоторые провайдеры перехватывают DNS-ответы и подменяют IP-адреса (DNS poisoning). В результате подключение идёт на неправильный адрес, даже если домен не заблокирован напрямую. DNS-редирект отправляет запрос на альтернативный сервер, минуя перехват.
```mermaid
flowchart LR
A["Приложение"] -->|"DNS-запрос<br/>instagram.com"| B["b4"]
B -->|"Перехват"| C{"DNS провайдера"}
C -->|"Подмена IP"| X["❌ Неправильный адрес"]
B -->|"Редирект"| D["Указанный DNS"]
D -->|"Реальный IP"| E["✅ Сайт работает"]
style A fill:#4a9eff,color:#fff,stroke:none
style B fill:#e91e63,color:#fff,stroke:none
style C fill:#ff9800,color:#fff,stroke:none
style X fill:#f44336,color:#fff,stroke:none
style D fill:#4caf50,color:#fff,stroke:none
style E fill:#4caf50,color:#fff,stroke:none
```
### Настройка
1. Включите **DNS-редирект**
2. Выберите DNS-сервер из списка или введите IP вручную
:::tip
Если не знаете, какой DNS выбрать - начните с любого из списка, кроме Google DNS (8.8.8.8). Google DNS блокируется некоторыми провайдерами в первую очередь.
:::
### Список серверов
В интерфейсе отображается список DNS-серверов с иконками:
| Иконка | Значение |
| --- | --- |
| ⚡ | Fast - ориентирован на скорость |
| 🛑 | AdBlock - блокирует рекламные домены |
| 🔒 | DNSSEC - криптографическая проверка ответов |
При выборе сервера его IP автоматически подставляется в поле. Можно ввести любой другой IP вручную.
:::warning
Если поле DNS-сервера пустое, редирект не будет работать, даже если он включён.
:::
### Фрагментация DNS-запроса
Переключатель **Фрагментировать запрос** разбивает DNS-пакет на несколько частей перед отправкой.
Используется, если провайдер анализирует содержимое DNS-пакетов даже к сторонним серверам и блокирует запросы по содержимому.
:::info
Фрагментация затрагивает только DNS-запросы доменов из текущего сета. Остальной DNS-трафик не изменяется.
:::
---
## Маршрутизация трафика
Направляет трафик, совпавший с целями сета, через указанный сетевой интерфейс - например, VPN, WireGuard или другой туннель.
### Общая схема
```mermaid
flowchart TB
DNS["DNS-ответ для домена из сета"] -->|"IP + TTL"| IPSET
STATIC["Статические IP из целей сета"] -->|"IP"| IPSET
IPSET["IP-набор<br/>(nftables set / ipset)"]
IPSET --> MARK["PREROUTING / OUTPUT<br/>dst IP в наборе? → fwmark"]
MARK -->|"fwmark"| RULE["ip rule<br/>fwmark → таблица маршрутизации"]
RULE --> ROUTE["Таблица маршрутизации<br/>default → выходной интерфейс"]
ROUTE --> MASQ["POSTROUTING<br/>Masquerade"]
MASQ --> IFACE["wg0 / tun0 / ..."]
style DNS fill:#4a9eff,color:#fff,stroke:none
style STATIC fill:#4a9eff,color:#fff,stroke:none
style IPSET fill:#ff9800,color:#fff,stroke:none
style MARK fill:#e91e63,color:#fff,stroke:none
style MASQ fill:#e91e63,color:#fff,stroke:none
style RULE fill:#9c27b0,color:#fff,stroke:none
style ROUTE fill:#9c27b0,color:#fff,stroke:none
style IFACE fill:#4caf50,color:#fff,stroke:none
```
### Как это работает (подробно)
Маршрутизация использует policy-based routing - маршрутизацию на основе меток пакетов:
1. **Сбор IP-адресов.** Когда b4 видит DNS-ответ для домена из сета, он извлекает из него IP-адреса и добавляет их во внутренний IP-набор (nftables set или ipset). IP-адреса, указанные вручную в [целях сета](./targets.md), добавляются при загрузке конфигурации.
2. **Маркировка пакетов.** b4 создаёт цепочки в firewall для каждого сета:
- **PREROUTING** (mangle) - маркирует транзитный трафик (от устройств в сети), если IP назначения есть в наборе. Если указаны исходные интерфейсы - маркирует только трафик с этих интерфейсов.
- **OUTPUT** (mangle) - маркирует трафик от самого роутера.
3. **Policy routing.** Для маркированных пакетов создаётся правило `ip rule`: пакеты с определённым `fwmark` направляются в отдельную таблицу маршрутизации, где default route указывает на выходной интерфейс.
4. **Masquerade.** В цепочке **POSTROUTING** (nat) ко всему маркированному трафику, выходящему через целевой интерфейс, применяется masquerade - исходный IP пакета заменяется на IP выходного интерфейса. Это необходимо, чтобы ответные пакеты возвращались через тот же туннель.
5. **Предварительное разрешение.** При включении маршрутизации b4 сразу резолвит все домены из целей сета и добавляет полученные IP в набор. Это обеспечивает маршрутизацию с первого запроса, не дожидаясь DNS-трафика через NFQUEUE.
### Настройка
1. Включите **Маршрутизацию**
2. Выберите **Исходные интерфейсы** - с каких интерфейсов перехватывать трафик
3. Выберите **Выходной интерфейс** - куда направить трафик
![routing](/img/routing/20260326230827.png)
После включения в верхней части раздела отображается диаграмма потока:
```text
[Исходные интерфейсы] → B4 → [Выходной интерфейс] → Интернет
```
Диаграмма обновляется при изменении настроек.
### Исходные интерфейсы
Определяют, с каких сетевых интерфейсов перехватывать трафик для маршрутизации. Отображаются как кнопки-бейджи - клик включает/выключает интерфейс.
:::info
Если ни один исходный интерфейс не выбран - маршрутизация применяется ко всему трафику, включая трафик от самого роутера.
:::
Если ранее выбранный интерфейс исчез из системы (например, VPN-подключение разорвалось), он отображается красным с пометкой «stale».
### Выходной интерфейс
Сетевой интерфейс, через который будет отправлен маркированный трафик:
| Интерфейс | Описание |
| --- | --- |
| `wg0`, `wg1` | WireGuard-туннель |
| `tun0`, `tun1` | OpenVPN-туннель |
| `ppp0` | PPP-соединение |
:::warning
Если выбранный выходной интерфейс перестал быть доступен, появится предупреждение. Маршрутизация не будет работать, пока интерфейс не появится снова.
:::
### IP TTL (время жизни записи)
Определяет, сколько секунд IP-адрес, полученный из DNS-ответа, хранится в IP-наборе маршрутизации. По истечении TTL запись удаляется автоматически.
Значение по умолчанию: **3600** секунд (1 час).
IP-адреса, добавленные вручную в целях сета, также получают этот TTL и обновляются при каждой синхронизации конфигурации.
:::tip
Для стабильных сервисов с постоянными IP можно увеличить TTL. Для CDN-сервисов, где IP меняются часто, лучше уменьшить.
:::
### Firewall backend
b4 автоматически определяет доступный backend:
| Backend | Требования | Описание |
| --- | --- | --- |
| **nftables** | бинарник `nft` | Создаёт таблицу `b4_route` с цепочками `prerouting`, `output`, `postrouting`. IP-наборы с поддержкой `interval` и `timeout`. |
| **iptables + ipset** | бинарники `iptables`, `ipset` | Использует таблицы `mangle` и `nat`. Создаёт ipset типа `hash:net` для хранения IP. Также проверяет `iptables-legacy`. |
:::info
Выбор backend происходит автоматически. На системах с nftables используется nftables, на старых системах - iptables. Ручная настройка не требуется.
:::
### FWMark и таблица маршрутизации
Каждому выходному интерфейсу автоматически назначаются:
- **fwmark** - метка пакета (диапазон `0x100``0x7EFF`)
- **routing table** - номер таблицы маршрутизации (диапазон `100``2099`)
Значения вычисляются на основе имени интерфейса и остаются стабильными между перезагрузками. Если несколько сетов используют один и тот же выходной интерфейс - они разделяют `fwmark` и таблицу.
:::info
Ручное указание `fwmark` и `table` доступно через конфигурационный файл. В этом случае автоматическое назначение не используется.
:::
### Очистка
При отключении маршрутизации или удалении сета b4 полностью удаляет все созданные правила:
- Удаляет `ip rule` и записи в таблице маршрутизации
- Удаляет jump-правила из базовых цепочек
- Очищает и удаляет созданные цепочки и IP-наборы
При полной остановке b4 выполняется очистка обоих backend (nftables и iptables) для удаления возможных остаточных правил.

View file

@ -0,0 +1,61 @@
---
sidebar_position: 1
title: Цели
---
# Цели
Вкладка «Цели» определяет, к какому трафику применяется сет. Трафик фильтруется по доменам, IP-адресам, категориям GeoSite/GeoIP и исходным устройствам.
## Фильтр версии TLS
В верхней части вкладки - выбор версии TLS:
- **Any** - обрабатывать весь TLS-трафик
- **1.2** - только TLS 1.2
- **1.3** - только TLS 1.3
Это полезно, если для разных версий TLS нужны разные стратегии обхода (некоторые провайдеры блокируют TLS 1.2 и TLS 1.3 по-разному).
## Домены
Ручной ввод доменов для обхода. Введите домен и нажмите Enter.
- Можно добавлять несколько через запятую или перенос строки
- При дублировании с другим сетом - появляется предупреждение
- Кнопка **Редактировать список** открывает текстовый редактор (по одному домену на строку)
![targets](/img/targets/20260323211836.png)
## Категории GeoSite
Вместо добавления доменов по одному можно выбрать категорию из базы GeoSite. Каждая категория содержит сотни или тысячи доменов (например, `youtube`, `discord`, `google`).
Для использования GeoSite нужно загрузить базу данных (Настройки → Geodat настройки).
Клик по категории показывает список входящих в неё доменов.
## IP-адреса
Ручной ввод IP или CIDR-диапазонов (например, `10.0.0.0/8`, `192.168.1.100`).
Работает аналогично доменам: поддержка массового редактирования, предупреждения о дублях.
## Категории GeoIP
Аналог GeoSite, но для IP-диапазонов. Категории привязаны к странам и ASN.
## Исходные устройства
Ограничивает действие сета трафиком от конкретных устройств в сети (по MAC-адресу).
Таблица показывает доступные устройства:
| Столбец | Описание |
| --- | --- |
| Выбор | Чекбокс для включения устройства |
| MAC | MAC-адрес устройства |
| IP | Текущий IP-адрес |
| Имя | Имя устройства или vendor |
Если устройства не выбраны - сет применяется ко всему трафику. Если выбраны - только к трафику от этих устройств. Сеты с привязкой к устройствам имеют приоритет над общими.

View file

@ -0,0 +1,210 @@
---
sidebar_position: 3
title: Faking
---
# Faking
Вкладка Faking содержит методы отправки ложных пакетов и модификации реальных пакетов для обмана DPI. Каждая секция - отдельный аккордеон в интерфейсе.
Подробнее о типах пэйлоадов и их генерации - в разделе [Пэйлоады](../../settings/payloads).
<!-- screenshot: подвкладка faking с раскрытыми секциями -->
## Фейковые SNI-пакеты
Отправляет пакеты с поддельным содержимым **до** настоящего ClientHello. DPI анализирует фейковый пакет, а настоящие данные проходят незамеченными. Фейковый пакет не доходит до сервера благодаря выбранной стратегии.
### Стратегия фейка
Определяет, **как** фейковый пакет станет необрабатываемым для сервера:
| Стратегия | Механизм |
| --- | --- |
| **TTL** | Заниженный TTL - пакет истекает на промежуточном узле и не доходит до сервера |
| **Random Sequence** | Случайный TCP sequence number - сервер отбрасывает пакет с неожиданным seq |
| **Past Sequence** | Прошедший sequence number - сервер уже обработал этот seq, повторный игнорирует |
| **TCP Check** | Неверная контрольная сумма TCP - ядро сервера отбрасывает пакет до обработки |
| **MD5 Sum** | TCP MD5-опция - сервер без настроенного MD5 отбрасывает пакет |
| **TCP Timestamp** | Устаревший TCP timestamp - сервер отбрасывает пакет с timestamp в далёком прошлом |
### Тип пэйлоада
Содержимое фейкового пакета. Подробное описание всех типов - в разделе [Пэйлоады](../../settings/payloads#типы-пэйлоадов).
| Тип | Содержимое |
| --- | --- |
| Случайное | 1200 случайных байтов |
| Пресет: Google | TLS ClientHello от имени Google |
| Пресет: DuckDuckGo | TLS ClientHello от имени DuckDuckGo |
| Сгенерированный payload | Оптимизированный ClientHello из раздела [Настройки → Пэйлоады](../../settings/payloads) |
| Все нули | 1200 нулевых байтов |
| Инвертированный оригинал | Побитовая инверсия реального TLS-пакета |
:::tip Сгенерированные пэйлоады
Если в списке нет доступных пэйлоадов - сначала сгенерируйте их в [Настройки → Пэйлоады](../../settings/payloads).
:::
### Параметры
| Параметр | Описание | Диапазон |
| --- | --- | --- |
| TTL фейка | TTL для фейковых пакетов. Должен быть достаточным, чтобы пакет дошёл до DPI, но истёк до сервера | 164 |
| Смещение Sequence | Сдвиг TCP sequence number (для стратегий pastseq/randseq) | - |
| Уменьшение Timestamp | Величина уменьшения TCP timestamp (для стратегии timestamp, по умолчанию 600000) | - |
| Количество фейковых пакетов | Сколько фейковых пакетов отправить перед реальными данными | 120 |
:::tip Подбор TTL
Правильный TTL зависит от количества сетевых узлов между вами и провайдерским DPI. Дискавери подбирает TTL автоматически. При ручной настройке начните с `3` и корректируйте.
:::
### TLS-модификации фейковых пакетов
Если тип пэйлоада содержит TLS-структуру (не случайное и не нули), доступны дополнительные модификации фейкового ClientHello:
| Параметр | Описание |
| --- | --- |
| Рандомизация TLS Random | Заменяет 32-байтовое поле Random в фейковом ClientHello случайными байтами. Без этого DPI может заметить, что поле Random одинаковое в фейке и реальном пакете |
| Дублировать Session ID | Копирует Session ID из реального ClientHello в фейковый. DPI может отслеживать Session ID для связки пакетов |
---
## Фейковые SYN-пакеты
Отправляет фейковые SYN-пакеты во время TCP-рукопожатия - **до** начала реального соединения. Запутывает DPI ещё до того, как соединение установлено.
:::warning
Это агрессивная техника - фейковые SYN могут влиять на работу некоторых сетевых устройств.
:::
| Параметр | Описание | Диапазон |
| --- | --- | --- |
| SYN MD5 Signature | Отправить фейковый SYN с опцией TCP MD5 перед реальным рукопожатием | - |
| Длина payload | Размер данных в фейковом SYN. `0` = только заголовок, `>0` = добавить фейковый TLS payload | 01200 |
| TTL | TTL для фейковых SYN-пакетов | 1100 |
---
## TCP Desync
Десинхронизация внедряет фейковые TCP управляющие пакеты (RST/FIN/ACK) с повреждёнными контрольными суммами и низким TTL. Эти пакеты путают DPI с отслеживанием состояния, но отбрасываются реальным сервером.
### Режим Desync
| Режим | Что отправляет |
| --- | --- |
| **RST** | Фейковые RST-пакеты с неверными контрольными суммами - DPI считает соединение разорванным |
| **FIN** | Фейковые FIN-пакеты с прошлыми sequence numbers - DPI считает соединение завершённым |
| **ACK** | Фейковые ACK-пакеты со случайными будущими sequence/ack numbers - DPI теряет состояние |
| **Combo** | Последовательность RST + FIN + ACK |
| **Full** | Полная атака: фейковый SYN, перекрывающиеся RST, PSH и URG пакеты |
### Параметры Desync
| Параметр | Описание | Диапазон |
| --- | --- | --- |
| TTL Desync | Низкий TTL гарантирует истечение фейковых пакетов до сервера | 150 |
| Количество пакетов | Количество фейковых пакетов на одну атаку десинхронизации | 120 |
| Post-ClientHello RST | Отправить фейковый RST **после** ClientHello для удаления соединения из таблицы отслеживания DPI | - |
---
## Манипуляция окном
Отправляет фейковые ACK-пакеты с изменёнными размерами TCP-окна **перед** реальным пакетом. Фейки используют низкий TTL - они истекают до сервера, но путают DPI на промежуточных узлах.
| Режим | Описание |
| --- | --- |
| **Нулевое окно** | Фейковые пакеты: сначала window=0, затем window=65535 |
| **Случайное** | 35 фейковых пакетов со случайными размерами окна из заданного списка |
| **Осцилляция** | Циклический перебор пользовательских значений окна |
| **Эскалация** | Постепенное увеличение: 0 → 100 → 500 → 1460 → 8192 → 32768 → 65535 |
При режимах **Случайное** и **Осцилляция** можно задать свой список значений окна (065535). Если список пуст - используются значения по умолчанию.
---
## Обход входящих ответов (Incoming)
Манипулирует **входящими ответами** сервера. Используется для обхода DPI, который дросселирует (замедляет) соединения после получения определённого объёма данных (~1520 КБ). b4 вбрасывает фейковые пакеты к серверу, которые DPI видит, но они не доходят до назначения.
### Режим
| Режим | Описание |
| --- | --- |
| **Фейковые пакеты** | Внедрение повреждённых ACK-пакетов к серверу с низким TTL на каждый входящий пакет данных |
| **Внедрение Reset** | Внедрение фейковых RST-пакетов при достижении порога входящих байтов |
| **Внедрение FIN** | Внедрение фейковых FIN-пакетов при достижении порога |
| **Desync Combo** | Внедрение RST+FIN+ACK combo при достижении порога |
### Стратегия повреждения
Определяет, как фейковый пакет станет необрабатываемым:
| Стратегия | Описание |
| --- | --- |
| **Bad Checksum** | Повреждение контрольной суммы TCP - пакеты отбрасываются ядром |
| **Bad Sequence** | Повреждение sequence number - пакеты игнорируются TCP-стеком |
| **Bad ACK** | Повреждение ACK number - пакеты игнорируются TCP-стеком |
| **Random** | Случайный выбор метода для каждого пакета |
| **All** | Все повреждения одновременно: bad seq + bad ack + bad checksum |
### Параметры Incoming
| Параметр | Описание | Диапазон |
| --- | --- | --- |
| TTL фейка | Низкий TTL гарантирует истечение фейков до сервера | 120 |
| Количество фейков | Количество фейковых пакетов на одну инжекцию | 110 |
| Порог мин. | Минимальный объём входящих данных для срабатывания (КБ) | 550 |
| Порог макс. | Максимальный порог - рандомизируется между мин. и макс. для каждого соединения | 550 |
:::info Пороги и режим Fake
В режиме **Фейковые пакеты** пороги не используются - фейки отправляются на каждый входящий пакет. Пороги работают только в режимах Reset, FIN и Desync Combo.
:::
---
## Мутация ClientHello
Изменение структуры TLS ClientHello **настоящего** пакета (не фейкового). Рандомизирует порядок расширений и добавляет шум - чтобы ClientHello не совпадал с известными DPI сигнатурами.
:::warning Мутация изменяет настоящий пакет
В отличие от остальных секций на этой вкладке, мутация модифицирует **реальный** ClientHello, который дойдёт до сервера. Если сайт перестал работать после включения мутации - отключите её.
:::
### Режим мутации
| Режим | Описание |
| --- | --- |
| **GREASE Extensions** | Вставить GREASE-расширения для обмана DPI |
| **Padding** | Добавить расширение padding до целевого размера |
| **Fake Extensions** | Вставить фейковые/неизвестные TLS-расширения |
| **Fake SNIs** | Добавить дополнительные фейковые записи SNI |
| **Random** | Рандомизировать порядок расширений и добавить шум |
| **Advanced** | Комбинация нескольких техник мутации с ручной настройкой |
### Параметры по режимам
**GREASE:**
| Параметр | Описание | Диапазон |
| --- | --- | --- |
| Количество GREASE | Сколько GREASE-расширений вставить | 110 |
**Padding:**
| Параметр | Описание | Диапазон |
| --- | --- | --- |
| Размер Padding | Целевой размер ClientHello с padding | 25616384 байт |
**Fake Extensions:**
| Параметр | Описание | Диапазон |
| --- | --- | --- |
| Количество Fake Extensions | Сколько фейковых TLS-расширений вставить | 115 |
**Fake SNIs:**
Добавляет дополнительные значения SNI в ClientHello. Введите домены (например, `ya.ru`, `vk.com`) - они будут внедрены в расширение SNI наряду с реальным доменом.
**Advanced** включает все параметры выше для ручной комбинации.

View file

@ -0,0 +1,39 @@
---
sidebar_position: 1
title: Общее
---
# Общее
Базовые параметры обработки TCP-трафика в сете.
![common](/img/general/20260323224155.png)
## Лимит TCP пакетов соединения
Сколько пакетов в начале каждого соединения анализировать. После этого лимита пакеты проходят без модификации. TLS-рукопожатие (ClientHello) обычно происходит в первых 35 пакетах, поэтому обрабатывать всё соединение не нужно.
:::info
Значение не может превышать глобальный лимит, заданный в [Настройки → Основные → Очередь](../../settings/core#очередь-и-обработка-пакетов). Если в сете указано больше - будет использован глобальный лимит.
:::
## Задержка между пакетами (Seg2Delay)
Задержка (мс) между отправкой фрагментов. Задаётся как диапазон **мин–макс** - для каждого соединения b4 выбирает случайное значение из этого диапазона. Если мин и макс одинаковы - задержка фиксированная.
## Фильтр портов
Ограничивает, на каких портах назначения этот сет будет применяться. Формат iptables: `443` или `443,80`.
:::info
На уровне фаервола b4 всегда перехватывает трафик на порт 443. Если в сетах указаны дополнительные порты - они добавляются к перехвату. Фильтр портов в сете сужает, к какому трафику **этот конкретный сет** будет применяться, а не то, что b4 обрабатывает глобально.
:::
## Отбросить `SACK`
Удаляет опцию `Selective Acknowledgment` из TCP-пакетов. `SACK` помогает серверу и клиенту эффективно пересылать потерянные фрагменты - некоторые DPI-системы используют `SACK` для восстановления порядка фрагментов.
## Дублирование пакетов
Отправляет каждый пакет несколько раз (110 копий). Полезно, если провайдер отбрасывает часть пакетов при обнаружении аномалий.
![dup](/img/general/20260323224129.png)

View file

@ -0,0 +1,14 @@
---
sidebar_position: 2
title: TCP
---
# TCP
Вкладка TCP - основная часть настройки обхода DPI. Содержит три подвкладки, соответствующие трём аспектам обработки пакетов:
- [Общее](./general) - лимиты, задержки, дублирование
- [Фрагментация](./splitting) - разбиение пакетов на части
- [Faking](./faking) - отправка ложных пакетов, десинхронизация, мутация
<!-- screenshot: вкладка TCP с тремя подвкладками -->

View file

@ -0,0 +1,42 @@
---
sidebar_position: 5
title: RST Protection
---
# Защита от RST-инъекций
Некоторые DPI-системы обрывают соединения, отправляя поддельные TCP RST-пакеты от имени сервера. Браузер принимает такой пакет за настоящий и закрывает соединение.
Эта функция анализирует входящие RST-пакеты и отбрасывает те, которые выглядят как инъекции.
## Как работает
b4 применяет три независимых проверки к каждому RST-пакету:
| Проверка | Что отбрасывает |
|---|---|
| **RST до ответа сервера** | RST пришёл раньше, чем любой реальный ответ от сервера - характерный признак инъекции |
| **Повторный RST** | Второй и последующие RST на одном соединении - легитимное соединение крайне редко отправляет больше одного |
| **Несовпадение TTL** | TTL в RST-пакете значительно отличается от TTL первого реального ответа сервера - пакет пришёл с другого узла сети |
:::info
Каждая проверка работает независимо. Пакет отбрасывается, если сработала **хотя бы одна** из них.
:::
## Настройки
### Включить RST Protection
Переключатель активирует защиту для этого сета.
### TTL Tolerance
Допустимая разница в TTL между RST-пакетом и реальным ответом сервера. Диапазон: 120, по умолчанию **3**.
:::tip
Значение 3 подходит для большинства сетей. Увеличьте, если b4 ложно отбрасывает легитимные RST (видно в логах).
:::
## Логирование
Каждый отброшенный RST отображается в [логах](../../logs) с указанием причины: несовпадение TTL, RST до ответа сервера или повторный RST.

View file

@ -0,0 +1,206 @@
---
sidebar_position: 2
title: Фрагментация
---
# Фрагментация
Основной инструмент обхода DPI. Суть: разбить TCP-пакет на части так, чтобы DPI не смог собрать их и прочитать содержимое (в частности, поле SNI в TLS ClientHello).
![fragment](/img/splitting/20260323224335.png)
## Метод фрагментации
| Метод | Описание |
| --- | --- |
| **tcp** | Разделение на уровне TCP-сегментов. Один пакет становится двумя TCP-сегментами |
| **ip** | Разделение на уровне IP. Один IP-пакет разбивается на IP-фрагменты |
| **tls** | Одна TLS-запись разбивается на несколько TLS-записей внутри одного TCP-пакета |
| **oob** | Out-of-Band - вставка байта с TCP URG флагом, который сбивает DPI |
| **combo** | Комбинация нескольких точек разделения с приманками, перемешиванием и фейками между фрагментами |
| **hybrid** | Гибрид combo и disorder - комбинированные методы с изменённым порядком |
| **disorder** | Фрагменты отправляются не по порядку со случайными задержками |
| **extsplit** | Автоматическое разделение перед SNI-расширением в TLS ClientHello |
| **firstbyte** | Отправка одного байта, пауза, затем остальное - атака по таймингу |
| **none** | Без фрагментации (используйте, если нужен только faking) |
:::info Как выбрать метод
Используйте [Дискавери](../../discovery) - он протестирует все методы и найдёт рабочий. Ручной подбор нужен, если дискавери не справился или вы хотите оптимизировать конкретный случай.
:::
## Пул стратегий
Если включён пул, b4 случайным образом выбирает метод из пула для каждого нового соединения. Это затрудняет DPI адаптацию к конкретному методу - каждое соединение выглядит по-разному.
:::tip
Выберите несколько стратегий, которые работают у вашего провайдера (через дискавери), и включите их в пул. Пул не используется, если он пуст - в этом случае используется метод, выбранный выше.
:::
## Обратный порядок
Отправляет фрагменты в обратном порядке (последний фрагмент первым). DPI, ожидающий данные по порядку, не сможет собрать содержимое.
---
## TCP/IP Segmentation
Доступно при методе **tcp** или **ip**.
### Умное разделение SNI
Автоматически находит SNI-поле в TLS ClientHello и разделяет посередине имени хоста. Рекомендуемый вариант - не требует ручной настройки.
### Фиксированная позиция разделения
Ручное смещение точки разделения (050 байт от начала TLS payload). Используйте, если умное разделение не работает у вашего провайдера. Задаётся как диапазон **мин–макс** - для каждого соединения b4 выберет случайную позицию из диапазона.
:::info 3 сегмента
Если включены оба варианта (умное SNI + фиксированная позиция) - пакет разделяется на **3 сегмента**: на фиксированной позиции и в середине SNI.
:::
---
## Combo
Комбинирует несколько точек разделения с приманками и перемешиванием. Самый гибкий метод.
### Приманка (Decoy)
Отправляет фейковый ClientHello с разрешённым SNI перед реальным трафиком:
1. Фейковый пакет (с низким TTL) → DPI видит и анализирует, но пакет не доходит до сервера
2. Реальный пакет (фрагментированный) → проходит мимо DPI и доставляется серверу
### Точки разделения
![splitpoints](/img/splitting/20260323224920.png)
| Параметр | Описание |
| --- | --- |
| First Byte | Разделение после первого байта (десинхронизация по времени) |
| Extension Split | Разделение перед SNI-расширением |
| SNI Split | Разделение в середине имени хоста SNI |
Каждая включённая точка добавляет дополнительный сегмент. Интерфейс показывает количество активных разделений и результирующее число сегментов.
:::warning
Должна быть включена хотя бы одна точка разделения, иначе combo отправит пакет одним сегментом.
:::
### Режим перемешивания
| Режим | Описание |
| --- | --- |
| `middle` | Первый и последний сегменты остаются на месте, перемешиваются только средние |
| `full` | Все сегменты случайно перемешиваются |
| `reverse` | Сегменты отправляются в обратном порядке |
### Тайминги
![timeings](/img/splitting/20260323225046.png)
| Параметр | Описание | Диапазон |
| --- | --- | --- |
| Задержка первого сегмента | Пауза после отправки первого сегмента | 10500 мс |
| Макс. джиттер | Случайная задержка между остальными сегментами | 10010000 мкс |
### Фейк на сегмент (мультидисордер)
Отправляет фейковые перекрывающие пакеты перед **каждым** реальным сегментом, а не только перед первым. Засоряет реассемблер DPI мусором.
| Параметр | Описание | Диапазон |
| --- | --- | --- |
| Фейк на сегмент | Включить фейки между сегментами | - |
| Фейков на сегмент | Количество фейковых пакетов перед каждым сегментом | 111 |
---
## Disorder
Отправляет реальные TCP-сегменты не по порядку со случайными задержками. В отличие от combo, disorder не использует фейковые пакеты (кроме мультидисордера) - он полагается на то, что DPI ожидает последовательные данные.
### Режим перемешивания
| Режим | Описание |
| --- | --- |
| `full` | Все сегменты случайно перемешиваются |
| `reverse` | Сегменты отправляются в обратном порядке |
### Временной джиттер
Случайная задержка между сегментами. Задаётся как диапазон **мин–макс** (мкс).
:::info
Джиттер используется, когда Seg2Delay (задержка между пакетами на вкладке [Общее](./general)) равен 0. Если Seg2Delay задан - он имеет приоритет.
:::
:::warning
Максимальный джиттер должен быть больше минимального.
:::
### Перекрытие последовательности (seqovl)
Добавляет фейковые байты с уменьшённым TCP sequence number. DPI видит фейковый заголовок протокола, а сервер отбрасывает перекрытие (у него уже есть правильные данные).
| Паттерн | Что видит DPI |
| --- | --- |
| `tls12` | Заголовок TLS 1.2 |
| `tls11` | Заголовок TLS 1.1 |
| `tls10` | Заголовок TLS 1.0 |
| `http_get` | HTTP GET-запрос |
| `zeros` | Нулевые байты |
| `custom` | Свои hex-байты |
### Мультидисордер
Аналогично combo - отправляет фейковые перекрывающие пакеты перед каждым реальным сегментом.
---
## Extension Split
Автоматически разделяет TLS ClientHello прямо перед расширением SNI. DPI видит неполный список расширений и не может распарсить SNI.
```text
[TLS Header] [Handshake] [Ciphers] [Ext₁] [Ext₂] | [SNI: youtube.com] [Ext...]
↑ разделение здесь
```
:::info Настройка не требуется
Extension Split работает автоматически. Используйте переключатель **Обратный порядок** и **Задержку между пакетами** (Seg2Delay) на вкладке [Общее](./general) для дополнительной настройки.
:::
---
## First-Byte Desync
Атака по таймингу: отправляет один байт (`0x16` - тип TLS-записи), делает паузу, затем отправляет остальной ClientHello. DPI видит неполную TLS-запись и не может распарсить SNI до истечения таймаута.
```text
[0x16] ──── пауза ──── [остальная часть TLS ClientHello...]
```
:::info Настройка не требуется
Задержка контролируется **Seg2Delay** на вкладке [Общее](./general). Минимум 100 мс применяется автоматически - если Seg2Delay меньше, b4 использует 100 мс.
:::
---
## OOB (Out-of-Band)
Вставляет байт с TCP URG (urgent) флагом в поток данных. Сервер игнорирует OOB-данные (они обрабатываются отдельно от основного потока), но DPI с отслеживанием состояния путается - видит лишний байт, который смещает его парсинг.
| Параметр | Описание | Диапазон |
| --- | --- | --- |
| Позиция вставки | Сколько байтов до точки вставки OOB. Задаётся как диапазон мин–макс | 150 |
| OOB байт | Байт, передаваемый через OOB (отображается символ + hex) | - |
---
## TLS Record Splitting
Разделяет ClientHello на несколько TLS-записей внутри одного TCP-пакета. DPI, ожидающий однозаписный хендшейк, не может сопоставить сигнатуру.
| Параметр | Описание | Диапазон |
| --- | --- | --- |
| Позиция разделения | Размер первой TLS-записи в байтах. Задаётся как диапазон мин–макс | 1100 |

View file

@ -0,0 +1,126 @@
---
sidebar_position: 3
title: UDP
---
# UDP
Вкладка UDP управляет обработкой UDP-трафика. Два основных сценария:
1. **Блокировка QUIC** - браузер переключается на TCP, где b4 применяет обход DPI
2. **Обход DPI для UDP** - фейковые пакеты и фрагментация для UDP-трафика
<!-- screenshot: вкладка UDP -->
## Как b4 обрабатывает UDP
```mermaid
flowchart TD
A["UDP-пакет"] --> B{"IP или порт\nсовпал с сетом?"}
B -->|"Нет"| PASS["Пропустить"]
B -->|"Да"| C{"Это QUIC?"}
C -->|"Нет"| STUN{"Это STUN?"}
C -->|"Да"| D{"Фильтр QUIC\n(настройка сета)"}
D -->|"Отключён"| PASS
D -->|"Весь QUIC"| ACTION
D -->|"Парсить SNI"| E{"Домен из SNI\nсовпал с целями?"}
E -->|"Да"| ACTION
E -->|"Нет"| PASS
STUN -->|"Да + фильтр вкл."| PASS
STUN -->|"Нет"| ACTION
ACTION{"Что делать\nс пакетом?"}
ACTION -->|"Drop"| DROP["Отбросить пакет\n→ приложение\nпереключится на TCP"]
ACTION -->|"Reject"| REJECT["Отбросить пакет\n→ отправить ICMP\nPort Unreachable\n→ мгновенный переход\nна TCP"]
ACTION -->|"Fake"| FAKE["Отправить фейки\n→ фрагментировать\nреальный пакет"]
style A fill:#4a9eff,color:#fff,stroke:none
style PASS fill:#666,color:#fff,stroke:none
style DROP fill:#f44336,color:#fff,stroke:none
style REJECT fill:#ff9800,color:#fff,stroke:none
style FAKE fill:#4caf50,color:#fff,stroke:none
style ACTION fill:#9c27b0,color:#fff,stroke:none
```
## Какой UDP-трафик обрабатывать
Чтобы b4 начал обрабатывать UDP, должен быть включён хотя бы один из фильтров: QUIC или порты. Без них все UDP-пакеты проходят без изменений.
### Фильтр QUIC
QUIC - протокол поверх UDP, который используют браузеры (YouTube, Google, Discord и др.). Шифрование QUIC отличается от TCP/TLS, поэтому стратегии обхода TCP к нему неприменимы.
| Режим | Описание |
| --- | --- |
| **Отключён** | QUIC-трафик не обрабатывается |
| **Весь QUIC** | Совпадение со всеми QUIC Initial пакетами. Не анализирует содержимое - просто определяет, что пакет является QUIC |
| **Парсить SNI** | Извлекает домен (SNI) из QUIC ClientHello и обрабатывает только пакеты, домен которых совпадает с целями сета |
:::warning Парсинг SNI требует домены
В режиме **Парсить SNI** необходимо добавить домены в разделе [Цели](./targets). Без доменов QUIC-трафик обрабатываться не будет.
:::
:::tip Когда использовать «Весь QUIC»
Если цель - заставить браузер переключиться на TCP (где b4 работает эффективнее), используйте **Весь QUIC** в режиме **Reject**. Браузер мгновенно перейдёт на HTTPS/TCP, получив ICMP-ответ о недоступности порта.
:::
### Фильтр портов
Совпадение с определёнными UDP-портами - для обработки трафика VoIP, игр и других UDP-приложений. Формат: `5000-6000,8000`. Оставьте пустым для отключения.
### Фильтровать STUN-пакеты
Игнорировать STUN-пакеты - они проходят без обработки. STUN используется для NAT traversal в WebRTC (голосовые/видеозвонки).
:::info
Рекомендуется включить, если вы используете голосовые или видеозвонки (Discord, Telegram, WhatsApp). Блокировка STUN нарушит их работу.
:::
---
## Как обрабатывать совпавший трафик
Настройки ниже доступны, если включён хотя бы один фильтр (QUIC или порты).
### Лимит пакетов соединения
Максимальное количество пакетов в начале UDP-соединения, которые анализируются. Не может превышать глобальный лимит из [Настройки → Основные → Очередь](../settings/core#очередь-и-обработка-пакетов).
### Режим действия
| Режим | Описание |
| --- | --- |
| **Drop** | Отбрасывает совпавшие UDP-пакеты. Приложение вынуждено переключиться на TCP (например, QUIC → HTTPS) |
| **Reject** | Отбрасывает пакет и отправляет клиенту ICMP Port Unreachable. Клиент сразу понимает, что UDP недоступен, и переключается на TCP без ожидания таймаутов |
| **Fake & Fragment** | Отправляет фейковые пакеты перед реальными и фрагментирует реальные для обхода DPI |
:::tip Drop vs Reject
**Drop** - клиент ждёт таймаут (обычно 310 секунд) перед переходом на TCP. **Reject** - клиент получает ICMP-ответ и переключается на TCP практически мгновенно.
:::
---
## Настройки Fake & Fragment
Доступны при режиме **Fake & Fragment**.
### Стратегия фейка
Определяет, как фейковый пакет станет необрабатываемым для сервера:
| Стратегия | Описание |
| --- | --- |
| **Нет** | Без стратегии - фейковые пакеты отправляются как есть |
| **TTL** | Низкий TTL - фейковые пакеты истекают на промежуточном узле и не доходят до сервера |
| **Checksum** | Повреждённая контрольная сумма UDP - сервер отбрасывает пакеты с неверной суммой |
### Параметры
| Параметр | Описание | Диапазон |
| --- | --- | --- |
| Количество фейковых пакетов | Сколько фейковых пакетов отправить перед реальным | 120 |
| Размер фейкового пакета | Размер payload каждого фейкового UDP-пакета в байтах | 321500 |
| Задержка между сегментами | Задержка между отправкой фейковых и реальных пакетов. Задаётся как диапазон мин–макс - для каждого соединения выбирается случайное значение | 01000 мс |

View file

@ -0,0 +1,22 @@
---
sidebar_position: 7
title: Бэкап
---
# Бэкап
## Скачать резервную копию
Кнопка **Скачать** создаёт архив `.tar.gz` со всей конфигурацией b4. В архив входит содержимое директории конфигурации, кроме файлов `.dat` (GeoSite/GeoIP) и базы OUI (vendor lookup).
![backup](/img/backup/20260323215742.png)
## Восстановить из копии
1. Нажмите **Загрузить** и выберите ранее скачанный `.tar.gz`
2. Файлы конфигурации будут заменены на содержимое архива
3. После восстановления будет предложено перезапустить сервис
:::warning
Восстановление полностью заменяет текущую конфигурацию. Если нужно сохранить текущие настройки - сначала скачайте резервную копию.
:::

View file

@ -0,0 +1,239 @@
---
sidebar_position: 1
title: Основные
---
# Основные настройки
Все изменения на этой вкладке требуют перезапуска сервиса (кроме языка интерфейса).
## Управление
Кнопки в верхней части настроек:
- **Перезапустить сервис** - перезапуск b4 (ожидаемое время простоя: 510 секунд)
:::warning Сброс конфигурации
При сбросе конфигурации сохраняются: домены, категории GeoSite/GeoIP и настройки тестирования. Всё остальное (сеть, обход DPI, протоколы, логирование) сбрасывается.
:::
![restart](/img/core/20260323213113.png)
## Очередь и обработка пакетов
Настройки ядра обработки пакетов через netfilter.
![nfque](/img/core/20260323213159.png)
| Параметр | Описание | Диапазон | По умолчанию |
| --- | --- | --- | --- |
| Начальный номер очереди | Номер NFQUEUE. Изменяйте, если другие программы используют те же номера | 065535 | `537` |
| Метка пакета | Метка netfilter для правил iptables/nftables. b4 использует её для маркировки обработанных пакетов | - | `32768` |
| Рабочие потоки | Количество параллельных воркеров. Больше потоков = выше пропускная способность на многоядерных системах | 116 | `4` |
| Лимит TCP пакетов соединения | Сколько TCP-пакетов на соединение анализировать. Сеты не могут превышать это значение | 1100 | `19` |
| Лимит UDP пакетов соединения | Сколько UDP-пакетов на соединение анализировать. Сеты не могут превышать это значение | 130 | `8` |
:::tip Лимиты пакетов
Эти лимиты - глобальный потолок. В каждом сете можно установить свой лимит, но он не может быть выше глобального. Увеличение значения даёт b4 больше времени на анализ, но повышает нагрузку.
:::
## Функции
### Протоколы
| Параметр | Описание | По умолчанию |
| --- | --- | --- |
| Поддержка IPv4 | Обработка IPv4-трафика | Вкл |
| Поддержка IPv6 | Обработка IPv6-трафика | Выкл |
### Фаервол
![firewall](/img/core/20260323213229.png)
| Параметр | Описание | По умолчанию |
| --- | --- | --- |
| Пропустить настройку IPTables/NFTables | b4 не будет создавать правила firewall. Используйте, если настраиваете правила вручную | Выкл |
| Интервал мониторинга фаервола | Как часто проверять и восстанавливать правила (сек). Если правила удаляются внешними программами, b4 восстановит их | `10` |
| Движок фаервола | Какой backend использовать для правил | Автоопределение |
| NAT Masquerade | Включить NAT-маскарад. Нужен для контейнеров и шлюзов, где b4 перенаправляет трафик | Выкл |
| Интерфейс Masquerade | На каком интерфейсе применять маскарад. Появляется при включении NAT Masquerade | Все |
:::warning Интервал мониторинга
Значение 0 полностью отключает мониторинг правил. Если внешняя программа или скрипт удалит правила b4 - они не будут восстановлены.
:::
Движок фаервола - выбор из:
| Значение | Описание |
| --- | --- |
| Автоопределение | b4 сам определит доступный backend (рекомендуется) |
| nftables | Использовать nftables |
| iptables | Использовать iptables |
| iptables-legacy | Использовать iptables-legacy (для старых систем) |
### Сетевые интерфейсы
Выбор интерфейсов для мониторинга. Интерфейсы отображаются как кликабельные метки - нажмите, чтобы включить/выключить.
:::info
Если не выбран ни один интерфейс - b4 слушает все доступные.
:::
## Настройки логирования
![logs](/img/core/20260323213335.png)
| Параметр | Описание | По умолчанию |
| --- | --- | --- |
| Уровень логирования | Детализация логов | INFO |
| Путь к файлу ошибок | Записывать ошибки в файл | `/var/log/b4/errors.log` |
| Часовой пояс | Часовой пояс для временных меток | Системный (авто) |
| Мгновенный сброс | Сбрасывать буфер после каждой записи. Может влиять на производительность | Вкл |
| Syslog | Дублировать логи в системный syslog | Выкл |
Уровни логирования:
| Уровень | Что отображается |
| --- | --- |
| Ошибка | Только ошибки |
| Инфо | Ошибки + основные события |
| Трассировка | Инфо + детали обработки пакетов |
| Отладка | Всё, включая отладочную информацию |
:::warning Уровень Ошибка
При уровне **Ошибка** разделы **Логи** и **Соединения** в веб-интерфейсе не будут показывать данные - они получают информацию из потока логов, который при этом уровне практически пуст.
:::
:::info Файл ошибок
b4 не ведёт постоянный лог-файл - всё выводится в stdout/stderr (и перехватывается веб-интерфейсом через WebSocket). В файл `errors.log` записываются только критические ошибки и аварийные завершения.
:::
:::tip
Для диагностики проблем используйте **Трассировка** или **Отладка**. Для обычной работы достаточно **Инфо**.
:::
## Веб-сервер
Настройки веб-интерфейса b4.
![webserver](/img/core/20260323213523.png)
| Параметр | Описание | По умолчанию |
| --- | --- | --- |
| Адрес привязки | IP для прослушивания. `0.0.0.0` = все интерфейсы, `127.0.0.1` = только localhost, `::` = все IPv6 | `0.0.0.0` |
| Порт | Порт веб-интерфейса | `7000` |
| TLS Сертификат | Путь к файлу сертификата `.crt` или `.pem` (пусто = HTTP) | - |
| TLS Ключ | Путь к файлу ключа `.key` или `.pem` (пусто = HTTP) | - |
| Язык | Язык интерфейса: English / Русский | English |
### Авторизация
| Параметр | Описание | По умолчанию |
| --- | --- | --- |
| Имя пользователя | Логин для входа в веб-интерфейс | - |
| Пароль | Пароль для входа | - |
:::warning Частичная авторизация
Авторизация работает только когда заполнены **оба** поля. Если указано только имя пользователя или только пароль - авторизация не включится.
:::
:::warning HTTP + авторизация
Если авторизация включена, но TLS не настроен - логин и пароль передаются по незашифрованному HTTP. Настройте TLS-сертификаты для безопасной передачи. Подробнее - в разделе [Безопасность](./security).
:::
## SOCKS5 Прокси
Встроенный SOCKS5-прокси. Приложения могут направлять через него трафик - он будет обработан b4 с применением настроенных сетов.
![sock5](/img/core/20260323213642.png)
| Параметр | Описание | По умолчанию |
| --- | --- | --- |
| Включить | Запустить SOCKS5-сервер | Выкл |
| Адрес привязки | IP для прослушивания. `0.0.0.0` = все, `127.0.0.1` = только localhost | `0.0.0.0` |
| Порт | Порт прокси | `1080` |
| Имя пользователя | Логин для SOCKS5-авторизации (пусто = без авторизации) | - |
| Пароль | Пароль для SOCKS5-авторизации (пусто = без авторизации) | - |
Все поля кроме «Включить» становятся доступны только после включения прокси.
:::info
Изменения настроек SOCKS5 требуют перезапуска сервиса.
:::
## MTProto Прокси
Встроенный Telegram MTProto-прокси с fake-TLS обфускацией. Трафик Telegram оборачивается в TLS-соединение, маскируясь под обычный HTTPS-трафик. Подробное руководство по настройке - в разделе [MTProto Прокси](../mtproto).
![mtproto](/img/core/20260323213811.png)
| Параметр | Описание | По умолчанию |
| --- | --- | --- |
| Включить | Запустить MTProto-сервер | Выкл |
| Адрес привязки | IP для прослушивания | `0.0.0.0` |
| Порт | Порт прокси | `3128` |
| Домен для Fake SNI | Домен, который будет виден в TLS-рукопожатии. DPI увидит этот домен вместо Telegram | `storage.googleapis.com` |
| DC Relay | Адрес внешнего relay-сервера (host:port) для доступа к Telegram DC, если они заблокированы по IP | - |
| Secret | Секрет для подключения клиента Telegram. Вставьте его в настройках прокси в Telegram | - |
Кнопка **Сгенерировать Secret** создаёт секрет на основе текущего домена Fake SNI.
:::info DC Relay
DC Relay нужен, когда b4 установлен на роутере внутри страны с блокировкой, а IP-адреса серверов Telegram заблокированы. В этом случае нужен VPS за пределами блокировки, который будет relay-сервером.
:::
:::info
Изменения настроек MTProto требуют перезапуска сервиса.
:::
## Глобальный MSS Clamping
Ограничение TCP Maximum Segment Size на SYN/SYN-ACK пакетах для трафика на порт 443. Уменьшает размер сегментов, что приводит к естественной фрагментации - DPI не может собрать фрагментированный ClientHello.
![mss](/img/core/20260323213923.png)
| Параметр | Описание | Диапазон | По умолчанию |
| --- | --- | --- | --- |
| Включить | Активировать глобальный MSS Clamping | - | Выкл |
| Размер MSS | Размер MSS в байтах. Меньше значение = больше фрагментация | 101460 | `88` |
:::info Глобальный vs индивидуальный MSS
Глобальный MSS Clamping применяется ко **всему** трафику на порт 443. Если нужно ограничить MSS только для конкретных устройств (например, телевизор с YouTube) - настройте MSS в столбце **MSS** в [таблице устройств](#фильтрация-устройств) ниже. Индивидуальный MSS работает независимо от глобального.
:::
## Фильтрация устройств
Ограничение работы b4 трафиком от конкретных устройств в сети (по MAC-адресу). Полезно, если обход нужен не для всех устройств.
![devices](/img/core/20260323214332.png)
| Параметр | Описание | По умолчанию |
| --- | --- | --- |
| Включить | Активировать фильтрацию по устройствам | Выкл |
| Определение производителя | Скачать базу vendor для определения производителя по MAC (~6 МБ) | Выкл |
| Инвертировать выбор | Переключение между белым и чёрным списком | Выкл |
:::info Режимы фильтрации
- **Белый список** (по умолчанию) - обход DPI работает **только** для выбранных устройств
- **Чёрный список** (инвертировать выбор) - выбранные устройства **исключаются** из обхода DPI
:::
### Таблица устройств
При включении фильтрации появляется таблица обнаруженных устройств:
| Столбец | Описание |
| --- | --- |
| Выбор | Чекбокс для включения/исключения устройства |
| MAC | MAC-адрес |
| IP | Текущий IP-адрес |
| Имя | Псевдоним устройства (можно задать через иконку редактирования) или vendor |
| MSS | Индивидуальный MSS Clamping для этого устройства (101460, пусто = выключен) |
Кнопка **Обновить** перезагружает список устройств из ARP-таблицы.
:::tip Индивидуальный MSS
MSS Clamping можно настроить для каждого устройства отдельно - например, уменьшить MSS только для телевизора с YouTube, не затрагивая остальные устройства.
:::

View file

@ -0,0 +1,51 @@
---
sidebar_position: 6
title: Дискавери
---
# Настройки дискавери
Параметры, влияющие на работу автоматического поиска конфигурации и детектора DPI. Настраиваются в **Настройки → Дискавери**.
![discovery](/img/discovery/20260323220046.png)
## Параметры
| Параметр | Описание | Диапазон | По умолчанию |
| --- | --- | --- | --- |
| Таймаут поиска | Максимальное время ожидания ответа при проверке каждой стратегии | 330 сек | `5` сек |
| Задержка распространения | Время ожидания после применения конфигурации перед тестированием. Нужно, чтобы правила успели активироваться | 5005000 мс | `1500` мс |
| Попыток валидации | Сколько раз стратегия должна сработать подряд, чтобы считаться рабочей. Больше = надёжнее, но дольше | 15 | `1` |
| Эталонный домен | Домен, который заведомо доступен - используется как контрольный при проверке | - | `yandex.ru` |
## DNS-серверы
Список DNS-серверов, используемых при проверке DNS-блокировки. Дискавери сравнивает ответы от этих серверов с ответами провайдерского DNS, чтобы определить подмену.
По умолчанию:
| Сервер | Провайдер |
| --- | --- |
| `9.9.9.9` | Quad9 |
| `1.1.1.1` | Cloudflare |
| `8.8.8.8` | Google |
| `9.9.1.1` | Quad9 (резерв) |
| `8.8.4.4` | Google (резерв) |
Серверы можно добавлять и удалять через интерфейс.
:::tip Когда менять DNS-серверы
Если провайдер блокирует обращения к публичным DNS (например, перехватывает трафик на порт 53), дискавери может давать ложные результаты по DNS. В таком случае добавьте DNS-серверы, доступные в вашей сети, или используйте опцию **Пропустить поиск DNS** при запуске дискавери.
:::
:::info Эталонный домен
Эталонный домен должен быть **незаблокированным** в вашей сети. Он используется для двух целей:
- Проверка базовой связности - если он недоступен, результаты дискавери будут некорректными
- Измерение базовой скорости - скорость загрузки эталонного домена используется как точка отсчёта для сравнения стратегий между собой
:::
:::warning Скорость в результатах дискавери
Скорость, которую показывает дискавери (например, «40 КБ/с»), - это **не реальная скорость** вашего соединения. При тестировании загружается очень маленький объём данных, недостаточный для точного измерения. Эти цифры нужны только для **сравнения стратегий между собой** - какая быстрее, какая медленнее. Не ориентируйтесь на абсолютные значения.
:::

View file

@ -0,0 +1,83 @@
---
sidebar_position: 2
title: Геоданные
---
# Геоданные
## Что такое GeoSite и GeoIP
**GeoSite** и **GeoIP** - это базы данных в формате [V2Ray](https://github.com/v2fly/v2ray-core), которые позволяют работать с целыми категориями сайтов и IP-адресов вместо того, чтобы добавлять их по одному.
- **GeoSite** (`sitedat.dat`) - файл с доменами, сгруппированными по категориям. Например, категория `youtube` содержит все домены, связанные с YouTube (youtube.com, googlevideo.com, ytimg.com и т.д.)
- **GeoIP** (`ipdat.dat`) - файл с IP-диапазонами, сгруппированными по странам и ASN
:::info Зачем это нужно
Вместо того, чтобы вручную добавлять десятки доменов YouTube или Discord, достаточно выбрать нужную категорию в настройках сета. При обновлении базы новые домены подхватываются автоматически.
:::
## Источники
b4 поддерживает несколько предустановленных источников, а также позволяет указать свой URL.
| Источник | Что содержит | Ссылка |
| --- | --- | --- |
| **Loyalsoldier** | Глобальная база доменов и IP (Китай + мир) | [GitHub](https://github.com/Loyalsoldier/v2ray-rules-dat) |
| **RUNET Freedom** | База, оптимизированная для российских блокировок | [GitHub](https://github.com/runetfreedom/russia-v2ray-rules-dat) |
| **b4geoip** | Официальная GeoIP база b4 - IP-диапазоны по ASN (только GeoIP) | [GitHub](https://github.com/DanielLavrushin/b4geoip) |
:::tip Для российских пользователей
Рекомендуется **RUNET Freedom** для GeoSite (домены) и **b4geoip** для GeoIP (IP-диапазоны).
:::
### b4geoip
Официальная GeoIP база проекта b4. Собирается автоматически из данных [RIPE NCC](https://stat.ripe.net/) - реальные анонсированные IP-префиксы по ASN. Содержит категории для:
- **Облачные провайдеры** - AWS, Google Cloud, Azure, DigitalOcean, Hetzner, OVH, Scaleway, Oracle Cloud, Contabo, AEZA
- **CDN** - Cloudflare, Akamai, Fastly, CDN77
- **Игровые компании** - Roblox, Valve/Steam, Sony/PlayStation, Nintendo, EA, Riot Games, Ubisoft, Epic Games, Wargaming, Bungie, Take-Two, CCP
- **Платформы** - Telegram, GitHub, Apple, Adobe, Amazon, Blizzard
В отличие от баз по странам, b4geoip группирует IP именно по сервисам - это позволяет точно маршрутизировать трафик конкретных платформ.
## Настройка
<!-- screenshot: секция геоданных с выбором источника и статусом -->
1. Перейдите в **Настройки → Geodat настройки**
2. Укажите **Директорию назначения** - куда сохранять файлы (по умолчанию `/etc/b4`)
3. Выберите **Источник** из выпадающего списка или укажите URL вручную
4. Нажмите **Скачать**
Статус файла отображается рядом с названием:
- **Active** - файл найден, показывается размер и дата
- **Not Found** - файл отсутствует, нужно скачать
Файлы можно также загрузить вручную через кнопку **Загрузить** (upload `.dat` файла).
:::warning Размер файлов
Файлы GeoSite и GeoIP могут занимать 515 МБ каждый. На роутерах с ограниченной памятью убедитесь, что места достаточно.
:::
## Использование в сетах
После загрузки баз категории становятся доступны в настройках сетов (вкладка **Цели**):
- **Категории GeoSite** - выбрать категории доменов для обхода
- **Категории GeoIP** - выбрать категории IP для обхода
При выборе категории рядом отображается количество доменов/IP в ней. Можно нажать на категорию, чтобы просмотреть содержимое.
## Обновление
Базы обновляются вручную - зайдите в настройки и нажмите **Скачать** повторно. Перезапуск b4 после обновления не требуется - новые данные подхватываются автоматически.
## Инструменты
| Проект | Описание |
| --- | --- |
| [GeodatExplorer](https://github.com/DanielLavrushin/GeodatExplorer) | Веб-приложение для просмотра содержимого `.dat` файлов - категории, домены, IP-диапазоны. Помогает понять, что именно входит в базу, перед тем как использовать категорию в сете |
| [v2dat](https://github.com/DanielLavrushin/v2dat) | CLI-утилита для распаковки `.dat` файлов V2Ray в текстовые списки. Полезно для скриптов и автоматизации |
| [b4geoip](https://github.com/DanielLavrushin/b4geoip) | Официальная GeoIP база b4 (описана [выше](#b4geoip)) |

View file

@ -0,0 +1,17 @@
---
sidebar_position: 5
title: Настройки
---
# Настройки
Настройки b4 разделены на несколько вкладок:
- [Основные](./core) - сеть, очередь, функции, логирование, прокси, устройства
- [Геоданные](./geodata) - базы GeoSite и GeoIP
- [Безопасность](./security) - авторизация, HTTPS
- [Пэйлоады](./payloads) - генерация и управление TLS-пэйлоадами для faking
- [Дискавери](./discovery) - таймауты, DNS-серверы, эталонный домен
- [Бэкап](./backup) - резервное копирование и восстановление
Изменения в настройках применяются после нажатия кнопки сохранения. Некоторые параметры (SOCKS5, MTProto, очередь) требуют перезапуска сервиса.

View file

@ -0,0 +1,105 @@
---
sidebar_position: 4
title: Пэйлоады
---
# Пэйлоады
![payloads](/img/payloads/20260323222921.png)
## Зачем нужны пэйлоады
Одна из стратегий обхода DPI - отправка **фейковых пакетов** (faking). b4 отправляет провайдеру поддельный пакет с подменёнными данными, а настоящий пакет отправляет так, чтобы DPI его не заметила. Для этого фейковый пакет должен содержать какие-то данные - это и есть **пэйлоад**.
```mermaid
flowchart TD
A["Браузер отправляет\nзапрос к сайту"] --> B["b4 перехватывает"]
B --> C["1. Отправляет фейковый пакет"]
C --> D{"DPI провайдера"}
D -->|"DPI видит фейк,\nсчитает соединение\nбезопасным"| E["Пакет умирает\nне дойдя до сайта\n(TTL истёк)"]
B --> F["2. Отправляет настоящий пакет\n(фрагментирован)"]
F --> D
D -->|"DPI уже принял\nрешение по фейку,\nпропускает"| G["Сайт получает\nнастоящие данные"]
style B fill:#e91e63,color:#fff,stroke:none
style D fill:#ff9800,color:#fff,stroke:none
style E fill:#666,color:#fff,stroke:none
style G fill:#4caf50,color:#fff,stroke:none
style C fill:#2196f3,color:#fff,stroke:none
style F fill:#4a9eff,color:#fff,stroke:none
```
Фейковый пакет отправляется с **заниженным TTL** (время жизни). Он проходит через оборудование провайдера (DPI его видит и анализирует), но не доходит до настоящего сервера - пакет «умирает» по дороге. Сервер никогда не получает мусор, а DPI уже принял решение на основе фейка.
## Типы пэйлоадов
b4 поддерживает несколько типов содержимого для фейковых пакетов. Тип выбирается в настройках сета: **TCP → Faking → Тип пэйлоада**.
| Тип | Что содержит | Когда использовать |
| --- | --- | --- |
| **Random** | 1200 случайных байтов | По умолчанию. Работает у большинства провайдеров |
| **Google ClientHello** | Готовый TLS ClientHello от имени Google | Если DPI пропускает трафик к Google |
| **DuckDuckGo ClientHello** | Готовый TLS ClientHello от имени DuckDuckGo | Альтернатива Google |
| **Captured Payload** | Сгенерированный или загруженный пэйлоад | Для продвинутой настройки (см. ниже) |
| **Zeros** | 1200 нулевых байтов (0x00) | Минимальная нагрузка на процессор |
| **Inverted** | Побитовая инверсия оригинального TLS-пакета | Выглядит как повреждённый пакет |
:::tip Какой выбрать
Используйте тот тип, который предложил дискавери. Если настраиваете вручную - начните с **Random** и попробуйте другие варианты, если не сработает. Поведение DPI зависит от провайдера и может меняться со временем.
:::
## Генерация пэйлоада (Captured Payload)
Сгенерированный пэйлоад - это **оптимизированный TLS ClientHello**, который выглядит как настоящее TLS-рукопожатие браузера. В отличие от случайных байтов, DPI распознаёт его как легитимный TLS и применяет другие правила обработки.
### Почему SNI-first
Российские DPI (ТСПУ) используют оптимизацию: если в TLS ClientHello расширение SNI стоит **первым**, система проверяет домен по белому списку и, если домен разрешён - пропускает соединение по ускоренному пути. b4 генерирует ClientHello именно так - SNI на первом месте - чтобы использовать эту особенность.
### Как сгенерировать
1. Введите домен в поле **Домен** (например, `youtube.com`)
2. Нажмите **Сгенерировать**
b4 создаст ClientHello с реалистичным набором TLS-расширений и шифров, SNI на первом месте. Генерация мгновенная - реальное соединение с сайтом не устанавливается. Один домен - один пэйлоад. Повторная генерация не создаст дубликат.
### Загрузка своего пэйлоада
Если у вас есть бинарный файл (`.bin`, до 64 КБ):
1. Укажите **Имя/Домен** - идентификатор пэйлоада
2. Нажмите **Выбрать файл** и выберите `.bin`
3. Нажмите **Загрузить**
:::tip Имя из файла
Если имя файла содержит домен (например, `tls_youtube_com.bin`), поле имени заполнится автоматически.
:::
## Использование в сетах
После генерации пэйлоады становятся доступны в настройках сета:
1. Откройте сет → вкладка **TCP** → секция **Faking**
2. В поле **Тип пэйлоада** выберите **Captured Payload**
3. В появившемся списке выберите нужный пэйлоад по домену
## Использование в дискавери
При запуске дискавери можно указать пэйлоады в **Параметрах поиска → Пользовательские payloads**. Дискавери протестирует каждую стратегию с каждым из указанных пэйлоадов и выберет наиболее эффективную комбинацию.
:::info Когда это полезно
Если стандартный дискавери (с Random-пэйлоадом) не находит рабочую конфигурацию - сгенерируйте пэйлоады для нескольких доменов и запустите дискавери с ними. Некоторые провайдеры реагируют на содержимое фейкового пакета, и реалистичный ClientHello может сработать там, где случайные байты не помогли.
:::
## Управление
Каждый пэйлоад отображается как карточка с доменом, размером и датой создания.
| Действие | Описание |
| --- | --- |
| Просмотр hex | Показать содержимое в hex-формате, скопировать в буфер |
| Скачать .bin | Скачать как бинарный файл |
| Удалить | Удалить пэйлоад |
| Очистить все | Удалить все пэйлоады (кнопка в заголовке) |
Пэйлоады хранятся в директории `captures/` внутри директории конфигурации b4 (обычно `/etc/b4/captures/`).

View file

@ -0,0 +1,44 @@
---
sidebar_position: 3
title: Безопасность
---
# Безопасность
## Авторизация
По умолчанию веб-интерфейс доступен без пароля. Для ограничения доступа задайте логин и пароль:
1. Перейдите в **Настройки → Основные → Веб-сервер**
2. Заполните поля **Имя пользователя** и **Пароль**
3. Сохраните настройки
После этого при открытии веб-интерфейса потребуется ввести учётные данные.
:::warning Доступ извне
Если b4 доступен извне (например, на VPS), настройте авторизацию. Без неё любой, кто знает адрес и порт, получит полный доступ к управлению.
:::
:::danger Авторизация без HTTPS
Если авторизация включена, но HTTPS **не настроен** - логин и пароль передаются по сети **открытым текстом**. Любой, кто может перехватить трафик (например, в публичной Wi-Fi сети), увидит ваши учётные данные. Всегда включайте HTTPS вместе с авторизацией, особенно если b4 доступен не только из локальной сети.
:::
## HTTPS
Для включения HTTPS:
1. Подготовьте файлы сертификата и ключа (`.crt`/`.pem` и `.key`/`.pem`)
2. В настройках веб-сервера укажите пути к файлам:
- **TLS Сертификат** - путь к файлу сертификата (`.crt` или `.pem`)
- **TLS Ключ** - путь к файлу ключа (`.key` или `.pem`)
3. Сохраните и перезапустите
Для самоподписанного сертификата (подходит для локальной сети):
```bash
openssl req -x509 -newkey rsa:2048 -keyout server.key -out server.crt -days 365 -nodes -subj "/CN=b4"
```
Скопируйте файлы в директорию конфигурации (например, `/etc/b4/`) и укажите пути в настройках.
После включения HTTPS веб-интерфейс будет доступен по `https://`.

View file

@ -0,0 +1,57 @@
---
sidebar_position: 8
title: Мониторинг доменов
---
# Мониторинг доменов (Watchdog)
Мониторинг периодически проверяет доступность указанных доменов и при обнаружении блокировки автоматически запускает [дискавери](./discovery) для поиска рабочей конфигурации.
Настройки мониторинга находятся в **Настройки → Дискавери → раздел Мониторинг**.
![](/img/watchdog/20260404234138.png)
## Как это работает
1. Мониторинг с заданным интервалом делает HTTP-запрос к каждому домену из списка
2. Если домен не отвечает или обнаружена страница блокировки - фиксируется ошибка
3. После нескольких последовательных ошибок (настраивается) мониторинг автоматически запускает дискавери для этого домена
4. Найденная конфигурация применяется к существующему сету или создаётся новый
## Параметры
| Параметр | Описание | По умолчанию |
| --- | --- | --- |
| Интервал проверки | Как часто проверять домены, когда всё работает | `300` сек (5 мин) |
| Интервал при ошибке | Как часто проверять, если домен уже в статусе «Проблема» | `60` сек |
| Кулдаун | Пауза после попытки восстановления перед возобновлением обычных проверок | `900` сек (15 мин) |
| Таймаут | Максимальное время ожидания ответа от домена | `15` сек |
| Макс. попыток | Сколько ошибок подряд нужно для запуска автовосстановления | `3` |
![](/img/watchdog/20260404234557.png)
## Статусы доменов
| Статус | Значение |
| --- | --- |
| **Доступен** | Домен отвечает нормально |
| **Проблема** | Зафиксированы ошибки, но порог для восстановления ещё не достигнут |
| **Восстановление** | Запущен дискавери для поиска рабочей конфигурации |
| **В очереди** | Домен ожидает следующей проверки |
## Добавление доменов
Домены можно добавлять двумя способами:
- Через панель «Мониторинг доменов» на главной - поле ввода с кнопкой «+»
- Через **Настройки → Дискавери → раздел Мониторинг**
Можно указать как домен (например, `youtube.com`), так и полный URL (например, `https://youtube.com/watch?v=test`). Если указан URL - мониторинг будет проверять именно этот адрес. Если указан только домен - проверяется `https://домен/`.
:::tip Какие домены добавлять
Добавляйте домены, которые вы реально используете и которые могут быть заблокированы. Мониторинг проверяет именно HTTP-доступность, поэтому домен должен отвечать по HTTP/HTTPS.
:::
:::warning Мониторинг и дискавери
Если дискавери уже запущен вручную, мониторинг не будет запускать параллельный процесс - он дождётся завершения текущего.
:::

View file

@ -0,0 +1,6 @@
{
"copyright": {
"message": "Copyright © {year} B4 Project",
"description": "Footer copyright"
}
}

View file

@ -0,0 +1,18 @@
{
"item.label.Docs": {
"message": "Документация",
"description": "Navbar item for docs"
},
"item.label.API": {
"message": "API",
"description": "Navbar item for Swagger/API"
},
"item.label.GitHub": {
"message": "GitHub",
"description": "Navbar item for GitHub"
},
"logo.alt": {
"message": "B4 Logo",
"description": "Alt text for the navbar logo"
}
}

View file

@ -4,6 +4,8 @@
"private": true,
"scripts": {
"dev": "docusaurus start",
"dev:ru": "docusaurus start --locale ru",
"dev:en": "docusaurus start --locale en",
"docusaurus": "docusaurus",
"start": "docusaurus start",
"build": "docusaurus build",
@ -11,6 +13,7 @@
"deploy": "docusaurus deploy",
"clear": "docusaurus clear",
"serve": "docusaurus serve",
"preview": "docusaurus build && docusaurus serve",
"write-translations": "docusaurus write-translations",
"write-heading-ids": "docusaurus write-heading-ids",
"typecheck": "tsc"

View file

@ -1,60 +1,71 @@
import clsx from "clsx";
import Heading from "@theme/Heading";
import Link from "@docusaurus/Link";
import Translate from "@docusaurus/Translate";
import styles from "./styles.module.css";
import { JSX } from "react";
type DocSection = {
title: string;
titleId: string;
titleDefault: string;
descriptionId: string;
descriptionDefault: string;
link: string;
description: JSX.Element;
};
const DocSections: DocSection[] = [
{
title: "Введение",
titleId: "home.section.intro.title",
titleDefault: "Introduction",
descriptionId: "home.section.intro.desc",
descriptionDefault:
"What b4 is, how censorship bypass works, and what you need to start.",
link: "/docs/intro",
description: (
<>Что такое b4, как работает обход блокировок и что нужно для старта.</>
),
},
{
title: "Установка",
titleId: "home.section.install.title",
titleDefault: "Installation",
descriptionId: "home.section.install.desc",
descriptionDefault:
"Install on Linux, OpenWRT, ASUS Merlin, Keenetic, MikroTik, and Docker.",
link: "/docs/install/",
description: (
<>
Установка на Linux, OpenWRT, ASUS Merlin, Keenetic, MikroTik и Docker.
</>
),
},
{
title: "Быстрый старт",
titleId: "home.section.quickstart.title",
titleDefault: "Quickstart",
descriptionId: "home.section.quickstart.desc",
descriptionDefault:
"From first launch to a working bypass in 5 minutes via the web UI.",
link: "/docs/quickstart",
description: (
<>
От первого запуска до работающего обхода за 5 минут через веб-интерфейс.
</>
),
},
{
title: "Сеты",
titleId: "home.section.sets.title",
titleDefault: "Sets",
descriptionId: "home.section.sets.desc",
descriptionDefault:
"Bypass configuration bundles: targets, TCP/UDP strategies, routing.",
link: "/docs/sets/",
description: (
<>
Наборы настроек обхода: цели, TCP/UDP стратегии, маршрутизация.
</>
),
},
];
function DocCard({ title, link, description }: DocSection) {
function DocCard({
titleId,
titleDefault,
descriptionId,
descriptionDefault,
link,
}: DocSection) {
return (
<div className={clsx("col col--6")}>
<div className={styles.docCard}>
<Heading as="h3">
<Link to={link}>{title}</Link>
<Link to={link}>
<Translate id={titleId}>{titleDefault}</Translate>
</Link>
</Heading>
<p>{description}</p>
<p>
<Translate id={descriptionId}>{descriptionDefault}</Translate>
</p>
</div>
</div>
);
@ -65,7 +76,7 @@ export default function HomepageFeatures() {
<section className={styles.features}>
<div className="container">
<Heading as="h2" className={styles.sectionTitle}>
Документация
<Translate id="home.section.heading">Documentation</Translate>
</Heading>
<div className="row">
{DocSections.map((props, idx) => (

View file

@ -1,5 +1,6 @@
import clsx from "clsx";
import Link from "@docusaurus/Link";
import Translate, { translate } from "@docusaurus/Translate";
import useDocusaurusContext from "@docusaurus/useDocusaurusContext";
import Layout from "@theme/Layout";
import HomepageFeatures from "@site/src/components/HomepageFeatures";
@ -12,24 +13,28 @@ function HomepageHeader() {
<div className="container">
<h1 className="hero__title">{siteConfig.title}</h1>
<p className="hero__subtitle">
Обход блокировок на уровне сетевых пакетов для Linux и роутеров
<Translate id="home.subtitle">
Packet-level censorship bypass for Linux and routers
</Translate>
</p>
<p className={styles.description}>
Веб-интерфейс, автоматический подбор конфигурации, поддержка роутеров
и серверов
<Translate id="home.description">
Web UI, automatic configuration discovery, support for routers and
servers
</Translate>
</p>
<div className={styles.buttons}>
<Link
className="button button--secondary button--lg"
to="/docs/intro"
>
Начать
<Translate id="home.cta.start">Get started</Translate>
</Link>
<Link
className="button button--outline button--secondary button--lg margin-left--md"
to="https://github.com/DanielLavrushin/b4"
>
GitHub
<Translate id="home.cta.github">GitHub</Translate>
</Link>
</div>
</div>
@ -39,7 +44,13 @@ function HomepageHeader() {
export default function Home() {
return (
<Layout title="Документация" description="B4 — обход блокировок для Linux">
<Layout
title={translate({ id: "home.title", message: "Documentation" })}
description={translate({
id: "home.meta.description",
message: "b4 - censorship bypass for Linux",
})}
>
<HomepageHeader />
<main>
<HomepageFeatures />