mirror of
https://github.com/DanielLavrushin/b4.git
synced 2026-04-28 03:20:35 +00:00
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:
parent
1df5909e62
commit
ef8bedd247
79 changed files with 3545 additions and 3133 deletions
|
|
@ -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).
|
||||
|
|
|
|||
|
|
@ -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).
|
||||
|
|
|
|||
|
|
@ -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).
|
||||
|
|
|
|||
|
|
@ -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).
|
||||
|
|
|
|||
|
|
@ -1,162 +1,6 @@
|
|||
---
|
||||
sidebar_position: 10
|
||||
title: Соединения
|
||||
title: Connections
|
||||
---
|
||||
|
||||
# Соединения
|
||||
|
||||
Раздел отображает TCP/UDP-соединения, проходящие через b4, в реальном времени. Данные поступают через WebSocket — таблица обновляется непрерывно.
|
||||
|
||||

|
||||
|
||||
## Таблица соединений
|
||||
|
||||
### Столбцы
|
||||
|
||||
| Столбец | Описание |
|
||||
| --- | --- |
|
||||
| **Время** | Время соединения (ЧЧ:ММ:СС), моноширинный шрифт |
|
||||
| **Протокол** | Цветная метка: `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).
|
||||
|
|
|
|||
|
|
@ -1,67 +1,6 @@
|
|||
---
|
||||
sidebar_position: 4
|
||||
title: Дашборд
|
||||
title: Dashboard
|
||||
---
|
||||
|
||||
# Дашборд
|
||||
|
||||
Главная страница, которая открывается по умолчанию. Показывает текущее состояние b4, метрики и активность устройств в сети.
|
||||
|
||||
## Состояние системы
|
||||
|
||||
Баннер в верхней части страницы отображает:
|
||||
|
||||
- **Статус** — Работает / Нестабильно / Критично
|
||||
- **NFQueue** — состояние очереди netfilter
|
||||
- **Фаервол** — состояние правил iptables/nftables
|
||||
- **Воркеры** — сколько рабочих потоков активно (например, «3/4 активно»)
|
||||
- **Аптайм** — время работы с последнего запуска
|
||||
- **Версия** — текущая версия b4
|
||||
|
||||
Здесь же есть кнопка **Сброс статистики** для обнуления всех счётчиков.
|
||||
|
||||

|
||||
|
||||
## Метрики
|
||||
|
||||
Три карточки с основными показателями:
|
||||
|
||||
| Метрика | Что показывает |
|
||||
| --- | --- |
|
||||
| **Соединения** | Общее количество соединений и текущая скорость (соед/с) |
|
||||
| **Обход DPI** | Количество соединений, обработанных сетами, и процент от общего |
|
||||
| **Пакеты** | Количество обработанных пакетов и текущая скорость (пак/с) |
|
||||
|
||||
Ниже отображается график **Скорость соединений** — линейный график в реальном времени.
|
||||
|
||||

|
||||
|
||||
## Активные сеты
|
||||
|
||||
Список включённых сетов с количеством целей (доменов + IP). Клик по сету переходит к его редактированию.
|
||||

|
||||
|
||||
## Активность устройств
|
||||
|
||||
Показывает, какие устройства в сети к каким доменам обращаются:
|
||||
|
||||
- **Заголовок устройства** — имя (или MAC/vendor), IP, количество доменов и соединений
|
||||
- **Раскрываемый список доменов** — для каждого домена показано количество соединений
|
||||
|
||||
Если домен ещё не добавлен ни в один сет, рядом с ним отображается кнопка «+» для быстрого добавления.
|
||||
|
||||
:::info Метки TLS
|
||||
Рядом с доменами могут отображаться метки **1.2** или **1.3** — это версия протокола TLS, которую использует соединение. Такие же метки встречаются в разделах Соединения и Дискавери. Версия TLS важна, потому что провайдеры могут блокировать TLS 1.2 и TLS 1.3 разными методами — для них могут потребоваться разные стратегии обхода.
|
||||
:::
|
||||
|
||||

|
||||
|
||||
## Мониторинг доменов
|
||||
|
||||
Если включён [мониторинг доменов](./watchdog), на дашборде отображается панель мониторинга. Она показывает статус каждого отслеживаемого домена, время последней проверки и количество ошибок. Здесь же можно добавить новый домен или запустить принудительную проверку.
|
||||
|
||||
## Домены не в сетах
|
||||
|
||||
Топ-15 доменов, которые обрабатываются b4, но не включены ни в один сет. Отсортированы по количеству соединений. Каждый домен можно добавить в сет через кнопку «+».
|
||||
|
||||

|
||||
English translation is in progress. See the [Russian version](/ru/docs/dashboard).
|
||||
|
|
|
|||
|
|
@ -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).
|
||||
|
|
|
|||
|
|
@ -1,76 +1,6 @@
|
|||
---
|
||||
sidebar_position: 7
|
||||
title: Дискавери
|
||||
title: Discovery
|
||||
---
|
||||
|
||||
# Дискавери
|
||||
|
||||
Дискавери автоматически подбирает рабочую конфигурацию обхода для указанных доменов. b4 перебирает стратегии, тестирует их и находит те, которые работают с вашим провайдером.
|
||||
|
||||
Базовый сценарий использования описан в разделе [Быстрый старт](./quickstart).
|
||||
|
||||
## Параметры поиска
|
||||
|
||||
Перед запуском можно раскрыть панель **Параметры поиска** и настроить:
|
||||
|
||||
| Параметр | Описание |
|
||||
| --- | --- |
|
||||
| **Пропустить поиск DNS** | Не проверять DNS-блокировку. Включите, если используете DoH или сторонний DNS |
|
||||
| **Пропустить кэшированные стратегии** | Не пробовать стратегии, которые уже были найдены ранее |
|
||||
| **Версия TLS** | Авто / TLS 1.2 / TLS 1.3 — ограничить тестирование конкретной версией |
|
||||
| **Попыток валидации** | 1–5 — сколько раз проверить стратегию перед тем, как считать её рабочей |
|
||||
| **Пользовательские 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).
|
||||
|
|
|
|||
|
|
@ -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).
|
||||
|
|
|
|||
|
|
@ -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).
|
||||
|
|
|
|||
|
|
@ -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).
|
||||
|
|
|
|||
|
|
@ -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).
|
||||
|
|
|
|||
|
|
@ -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).
|
||||
|
|
|
|||
|
|
@ -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).
|
||||
|
|
|
|||
|
|
@ -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).
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
:::
|
||||
|
|
|
|||
|
|
@ -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).
|
||||
|
|
|
|||
|
|
@ -1,168 +1,6 @@
|
|||
---
|
||||
sidebar_position: 12
|
||||
title: MTProto Прокси
|
||||
title: MTProto Proxy
|
||||
---
|
||||
|
||||
# MTProto Прокси для Telegram
|
||||
|
||||
B4 включает встроенный прокси для Telegram, который маскирует трафик под обычное HTTPS-соединение к популярному сайту.
|
||||
|
||||
## Два сценария использования
|
||||
|
||||

|
||||
|
||||
### Сценарий 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. Нажать **Готово** и включить прокси
|
||||

|
||||
|
||||
---
|
||||
|
||||
## Сценарий 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).
|
||||
|
|
|
|||
|
|
@ -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://`. Браузер может показать предупреждение о сертификате — это нормально для самоподписанного сертификата, его можно принять.
|
||||
:::
|
||||
|
||||

|
||||
|
||||
При первом запуске дашборд будет пустым — это нормально. Данные появятся после настройки.
|
||||
|
||||
## Запустить обнаружение
|
||||
|
||||
b4 может автоматически подобрать рабочую конфигурацию для вашего провайдера. Для этого используется раздел **Дискавери**.
|
||||
|
||||
### Шаг 1: Перейти в Дискавери
|
||||
|
||||
В боковом меню нажмите **Дискавери**.
|
||||
|
||||

|
||||
|
||||
### Шаг 2: Добавить домены
|
||||
|
||||
В поле **Добавить домен или URL** введите адрес заблокированного сайта и нажмите Enter. Можно добавить несколько доменов через запятую.
|
||||
|
||||
Примеры:
|
||||
|
||||
- `youtube.com`
|
||||
- `googlevideo.com`
|
||||
|
||||

|
||||
|
||||
### Шаг 3: Начать поиск
|
||||
|
||||
Нажмите **Начать поиск**.
|
||||
|
||||
b4 начнёт перебирать стратегии обхода и тестировать их на указанных доменах. Процесс проходит несколько фаз:
|
||||
|
||||
1. **Базовый тест** — проверка, действительно ли сайт заблокирован
|
||||
2. **Поиск стратегий** — перебор методов обхода
|
||||
3. **Оптимизация** — подбор параметров
|
||||
4. **Тест комбинаций** — проверка комбинированных стратегий
|
||||
5. **Проверка DNS** — проверка DNS-блокировки
|
||||
|
||||

|
||||
|
||||
Поиск может занять от 1 до 10 минут в зависимости от провайдера.
|
||||
|
||||
:::tip Пропустить проверку DNS
|
||||
Если вы уверены, что DNS работает нормально (например, используете DoH или сторонний DNS-сервер), включите опцию **Пропустить поиск DNS** в **Параметрах поиска**. Это ускорит процесс и уберёт ложные срабатывания по DNS.
|
||||
:::
|
||||
|
||||
### Шаг 4: Результаты
|
||||
|
||||
После завершения для каждого домена отображается результат:
|
||||
|
||||
- **Успешно** — найдена рабочая конфигурация
|
||||
- **Заблокирован** — сайт заблокирован на уровне DNS или транспорта, нужны дополнительные настройки
|
||||
|
||||

|
||||
|
||||
## Применить конфигурацию
|
||||
|
||||
На карточке успешного результата нажмите **Использовать эту конфигурацию**.
|
||||
|
||||

|
||||
|
||||
В открывшемся диалоге:
|
||||
|
||||
1. Выберите **Создать новый сет** (или **Добавить в существующий похожий сет**, если у вас уже есть настроенные сеты)
|
||||
2. Укажите название сета (или оставьте предложенное)
|
||||
3. Нажмите **Создать сет**
|
||||
|
||||
Сет — это набор настроек обхода, привязанный к списку доменов или ip адресов. Подробнее о сетах — в разделе [Сеты](./sets/).
|
||||
|
||||
## Проверить работу
|
||||
|
||||
### Через браузер
|
||||
|
||||
Откройте сайт, для которого настроен обход. Если всё работает — сайт загрузится.
|
||||
|
||||
### Через раздел Соединения
|
||||
|
||||
В боковом меню нажмите **Соединения**. Здесь отображаются все текущие TCP/UDP-соединения в реальном времени.
|
||||
|
||||

|
||||
|
||||
Если обход работает, в столбце **Сет** напротив соединений с настроенным доменом будет отображаться название вашего сета.
|
||||
|
||||
## Что дальше
|
||||
|
||||
- Добавить другие домены — через Дискавери или вручную в настройках сета
|
||||
|
||||
- Настроить обход по категориям (GeoSite) — чтобы не добавлять домены по одному
|
||||
- Посмотреть раздел [Сеты](./sets/) для подробного описания всех возможностей
|
||||
English translation is in progress. See the [Russian version](/ru/docs/quickstart).
|
||||
|
|
|
|||
|
|
@ -1,138 +1,6 @@
|
|||
---
|
||||
sidebar_position: 6
|
||||
title: Сеты
|
||||
title: Sets
|
||||
---
|
||||
|
||||
# Сеты
|
||||
|
||||
Сет — это набор настроек обхода DPI, привязанный к списку доменов, IP-адресов, UDP-портов или категорий GeoSite/GeoIP. Можно создать несколько сетов с разными стратегиями для разных сайтов.
|
||||
|
||||
## Управление сетами
|
||||
|
||||
На странице **Сеты** отображаются все созданные наборы. Для каждого сета видно:
|
||||
|
||||
- Название и статус (включён/выключен)
|
||||
- Количество доменов и IP
|
||||
- Активные техники (COMBO, DISORDER, HYBRID и т.д.)
|
||||
- Состояние DNS-маршрутизации и SNI Faking
|
||||
|
||||

|
||||
|
||||
Доступные действия:
|
||||
|
||||
- **Создать сет** — новый набор настроек
|
||||
- **Редактировать** — клик по карточке
|
||||
- **Дублировать** — создать копию существующего сета
|
||||
- **Сравнить** — сравнение двух сетов в два столбца
|
||||
- **Удалить** — удаление одного или нескольких сетов (через массовое выделение)
|
||||
- **Перетаскивание** — изменение порядка сетов (порядок влияет на приоритет обработки)
|
||||
|
||||
## Редактор сета
|
||||
|
||||
Редактор содержит 5 вкладок:
|
||||
|
||||
- [Цели](./targets) — домены, IP, GeoSite/GeoIP категории, устройства
|
||||
- [TCP](./tcp/) — фрагментация, faking, desync и другие TCP-стратегии
|
||||
- [UDP](./udp) — обработка UDP-трафика, QUIC, STUN
|
||||
- [Маршрутизация](./routing) — DNS-редирект и маршрутизация трафика через интерфейсы
|
||||
- **Импорт/Экспорт** — JSON-представление конфигурации сета для переноса между устройствами
|
||||
|
||||

|
||||
|
||||
## Как это работает
|
||||
|
||||
```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).
|
||||
|
|
|
|||
|
|
@ -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. Выберите **Выходной интерфейс** — куда направить трафик
|
||||
|
||||

|
||||
|
||||
После включения в верхней части раздела отображается диаграмма потока:
|
||||
|
||||
```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).
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
||||
- Можно добавлять несколько через запятую или перенос строки
|
||||
- При дублировании с другим сетом — появляется предупреждение
|
||||
- Кнопка **Редактировать список** открывает текстовый редактор (по одному домену на строку)
|
||||
|
||||

|
||||
|
||||
## Категории 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).
|
||||
|
|
|
|||
|
|
@ -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, но истёк до сервера | 1–64 |
|
||||
| Смещение Sequence | Сдвиг TCP sequence number (для стратегий pastseq/randseq) | — |
|
||||
| Уменьшение Timestamp | Величина уменьшения TCP timestamp (для стратегии timestamp, по умолчанию 600000) | — |
|
||||
| Количество фейковых пакетов | Сколько фейковых пакетов отправить перед реальными данными | 1–20 |
|
||||
|
||||
:::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 | 0–1200 |
|
||||
| TTL | TTL для фейковых SYN-пакетов | 1–100 |
|
||||
|
||||
---
|
||||
|
||||
## 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 гарантирует истечение фейковых пакетов до сервера | 1–50 |
|
||||
| Количество пакетов | Количество фейковых пакетов на одну атаку десинхронизации | 1–20 |
|
||||
| Post-ClientHello RST | Отправить фейковый RST **после** ClientHello для удаления соединения из таблицы отслеживания DPI | — |
|
||||
|
||||
---
|
||||
|
||||
## Манипуляция окном
|
||||
|
||||
Отправляет фейковые ACK-пакеты с изменёнными размерами TCP-окна **перед** реальным пакетом. Фейки используют низкий TTL — они истекают до сервера, но путают DPI на промежуточных узлах.
|
||||
|
||||
| Режим | Описание |
|
||||
| --- | --- |
|
||||
| **Нулевое окно** | Фейковые пакеты: сначала window=0, затем window=65535 |
|
||||
| **Случайное** | 3–5 фейковых пакетов со случайными размерами окна из заданного списка |
|
||||
| **Осцилляция** | Циклический перебор пользовательских значений окна |
|
||||
| **Эскалация** | Постепенное увеличение: 0 → 100 → 500 → 1460 → 8192 → 32768 → 65535 |
|
||||
|
||||
При режимах **Случайное** и **Осцилляция** можно задать свой список значений окна (0–65535). Если список пуст — используются значения по умолчанию.
|
||||
|
||||
---
|
||||
|
||||
## Обход входящих ответов (Incoming)
|
||||
|
||||
Манипулирует **входящими ответами** сервера. Используется для обхода DPI, который дросселирует (замедляет) соединения после получения определённого объёма данных (~15–20 КБ). 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 гарантирует истечение фейков до сервера | 1–20 |
|
||||
| Количество фейков | Количество фейковых пакетов на одну инжекцию | 1–10 |
|
||||
| Порог мин. | Минимальный объём входящих данных для срабатывания (КБ) | 5–50 |
|
||||
| Порог макс. | Максимальный порог — рандомизируется между мин. и макс. для каждого соединения | 5–50 |
|
||||
|
||||
:::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-расширений вставить | 1–10 |
|
||||
|
||||
**Padding:**
|
||||
|
||||
| Параметр | Описание | Диапазон |
|
||||
| --- | --- | --- |
|
||||
| Размер Padding | Целевой размер ClientHello с padding | 256–16384 байт |
|
||||
|
||||
**Fake Extensions:**
|
||||
|
||||
| Параметр | Описание | Диапазон |
|
||||
| --- | --- | --- |
|
||||
| Количество Fake Extensions | Сколько фейковых TLS-расширений вставить | 1–15 |
|
||||
|
||||
**Fake SNIs:**
|
||||
|
||||
Добавляет дополнительные значения SNI в ClientHello. Введите домены (например, `ya.ru`, `vk.com`) — они будут внедрены в расширение SNI наряду с реальным доменом.
|
||||
|
||||
**Advanced** включает все параметры выше для ручной комбинации.
|
||||
English translation is in progress. See the [Russian version](/ru/docs/sets/tcp/faking).
|
||||
|
|
|
|||
|
|
@ -1,39 +1,6 @@
|
|||
---
|
||||
sidebar_position: 1
|
||||
title: Общее
|
||||
title: General
|
||||
---
|
||||
|
||||
# Общее
|
||||
|
||||
Базовые параметры обработки TCP-трафика в сете.
|
||||
|
||||

|
||||
|
||||
## Лимит TCP пакетов соединения
|
||||
|
||||
Сколько пакетов в начале каждого соединения анализировать. После этого лимита пакеты проходят без модификации. TLS-рукопожатие (ClientHello) обычно происходит в первых 3–5 пакетах, поэтому обрабатывать всё соединение не нужно.
|
||||
|
||||
:::info
|
||||
Значение не может превышать глобальный лимит, заданный в [Настройки → Основные → Очередь](../../settings/core#очередь-и-обработка-пакетов). Если в сете указано больше — будет использован глобальный лимит.
|
||||
:::
|
||||
|
||||
## Задержка между пакетами (Seg2Delay)
|
||||
|
||||
Задержка (мс) между отправкой фрагментов. Задаётся как диапазон **мин–макс** — для каждого соединения b4 выбирает случайное значение из этого диапазона. Если мин и макс одинаковы — задержка фиксированная.
|
||||
|
||||
## Фильтр портов
|
||||
|
||||
Ограничивает, на каких портах назначения этот сет будет применяться. Формат iptables: `443` или `443,80`.
|
||||
|
||||
:::info
|
||||
На уровне фаервола b4 всегда перехватывает трафик на порт 443. Если в сетах указаны дополнительные порты — они добавляются к перехвату. Фильтр портов в сете сужает, к какому трафику **этот конкретный сет** будет применяться, а не то, что b4 обрабатывает глобально.
|
||||
:::
|
||||
|
||||
## Отбросить `SACK`
|
||||
|
||||
Удаляет опцию `Selective Acknowledgment` из TCP-пакетов. `SACK` помогает серверу и клиенту эффективно пересылать потерянные фрагменты — некоторые DPI-системы используют `SACK` для восстановления порядка фрагментов.
|
||||
|
||||
## Дублирование пакетов
|
||||
|
||||
Отправляет каждый пакет несколько раз (1–10 копий). Полезно, если провайдер отбрасывает часть пакетов при обнаружении аномалий.
|
||||

|
||||
English translation is in progress. See the [Russian version](/ru/docs/sets/tcp/general).
|
||||
|
|
|
|||
|
|
@ -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).
|
||||
|
|
|
|||
|
|
@ -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-пакетом и реальным ответом сервера. Диапазон: 1–20, по умолчанию **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).
|
||||
|
|
|
|||
|
|
@ -1,206 +1,6 @@
|
|||
---
|
||||
sidebar_position: 2
|
||||
title: Фрагментация
|
||||
title: Splitting
|
||||
---
|
||||
|
||||
# Фрагментация
|
||||
|
||||
Основной инструмент обхода DPI. Суть: разбить TCP-пакет на части так, чтобы DPI не смог собрать их и прочитать содержимое (в частности, поле SNI в TLS ClientHello).
|
||||
|
||||

|
||||
|
||||
## Метод фрагментации
|
||||
|
||||
| Метод | Описание |
|
||||
| --- | --- |
|
||||
| **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 и разделяет посередине имени хоста. Рекомендуемый вариант — не требует ручной настройки.
|
||||
|
||||
### Фиксированная позиция разделения
|
||||
|
||||
Ручное смещение точки разделения (0–50 байт от начала TLS payload). Используйте, если умное разделение не работает у вашего провайдера. Задаётся как диапазон **мин–макс** — для каждого соединения b4 выберет случайную позицию из диапазона.
|
||||
|
||||
:::info 3 сегмента
|
||||
Если включены оба варианта (умное SNI + фиксированная позиция) — пакет разделяется на **3 сегмента**: на фиксированной позиции и в середине SNI.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## Combo
|
||||
|
||||
Комбинирует несколько точек разделения с приманками и перемешиванием. Самый гибкий метод.
|
||||
|
||||
### Приманка (Decoy)
|
||||
|
||||
Отправляет фейковый ClientHello с разрешённым SNI перед реальным трафиком:
|
||||
|
||||
1. Фейковый пакет (с низким TTL) → DPI видит и анализирует, но пакет не доходит до сервера
|
||||
2. Реальный пакет (фрагментированный) → проходит мимо DPI и доставляется серверу
|
||||
|
||||
### Точки разделения
|
||||
|
||||

|
||||
|
||||
| Параметр | Описание |
|
||||
| --- | --- |
|
||||
| First Byte | Разделение после первого байта (десинхронизация по времени) |
|
||||
| Extension Split | Разделение перед SNI-расширением |
|
||||
| SNI Split | Разделение в середине имени хоста SNI |
|
||||
|
||||
Каждая включённая точка добавляет дополнительный сегмент. Интерфейс показывает количество активных разделений и результирующее число сегментов.
|
||||
|
||||
:::warning
|
||||
Должна быть включена хотя бы одна точка разделения, иначе combo отправит пакет одним сегментом.
|
||||
:::
|
||||
|
||||
### Режим перемешивания
|
||||
|
||||
| Режим | Описание |
|
||||
| --- | --- |
|
||||
| `middle` | Первый и последний сегменты остаются на месте, перемешиваются только средние |
|
||||
| `full` | Все сегменты случайно перемешиваются |
|
||||
| `reverse` | Сегменты отправляются в обратном порядке |
|
||||
|
||||
### Тайминги
|
||||
|
||||

|
||||
|
||||
| Параметр | Описание | Диапазон |
|
||||
| --- | --- | --- |
|
||||
| Задержка первого сегмента | Пауза после отправки первого сегмента | 10–500 мс |
|
||||
| Макс. джиттер | Случайная задержка между остальными сегментами | 100–10000 мкс |
|
||||
|
||||
### Фейк на сегмент (мультидисордер)
|
||||
|
||||
Отправляет фейковые перекрывающие пакеты перед **каждым** реальным сегментом, а не только перед первым. Засоряет реассемблер DPI мусором.
|
||||
|
||||
| Параметр | Описание | Диапазон |
|
||||
| --- | --- | --- |
|
||||
| Фейк на сегмент | Включить фейки между сегментами | — |
|
||||
| Фейков на сегмент | Количество фейковых пакетов перед каждым сегментом | 1–11 |
|
||||
|
||||
---
|
||||
|
||||
## 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. Задаётся как диапазон мин–макс | 1–50 |
|
||||
| OOB байт | Байт, передаваемый через OOB (отображается символ + hex) | — |
|
||||
|
||||
---
|
||||
|
||||
## TLS Record Splitting
|
||||
|
||||
Разделяет ClientHello на несколько TLS-записей внутри одного TCP-пакета. DPI, ожидающий однозаписный хендшейк, не может сопоставить сигнатуру.
|
||||
|
||||
| Параметр | Описание | Диапазон |
|
||||
| --- | --- | --- |
|
||||
| Позиция разделения | Размер первой TLS-записи в байтах. Задаётся как диапазон мин–макс | 1–100 |
|
||||
English translation is in progress. See the [Russian version](/ru/docs/sets/tcp/splitting).
|
||||
|
|
|
|||
|
|
@ -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** — клиент ждёт таймаут (обычно 3–10 секунд) перед переходом на TCP. **Reject** — клиент получает ICMP-ответ и переключается на TCP практически мгновенно.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## Настройки Fake & Fragment
|
||||
|
||||
Доступны при режиме **Fake & Fragment**.
|
||||
|
||||
### Стратегия фейка
|
||||
|
||||
Определяет, как фейковый пакет станет необрабатываемым для сервера:
|
||||
|
||||
| Стратегия | Описание |
|
||||
| --- | --- |
|
||||
| **Нет** | Без стратегии — фейковые пакеты отправляются как есть |
|
||||
| **TTL** | Низкий TTL — фейковые пакеты истекают на промежуточном узле и не доходят до сервера |
|
||||
| **Checksum** | Повреждённая контрольная сумма UDP — сервер отбрасывает пакеты с неверной суммой |
|
||||
|
||||
### Параметры
|
||||
|
||||
| Параметр | Описание | Диапазон |
|
||||
| --- | --- | --- |
|
||||
| Количество фейковых пакетов | Сколько фейковых пакетов отправить перед реальным | 1–20 |
|
||||
| Размер фейкового пакета | Размер payload каждого фейкового UDP-пакета в байтах | 32–1500 |
|
||||
| Задержка между сегментами | Задержка между отправкой фейковых и реальных пакетов. Задаётся как диапазон мин–макс — для каждого соединения выбирается случайное значение | 0–1000 мс |
|
||||
English translation is in progress. See the [Russian version](/ru/docs/sets/udp).
|
||||
|
|
|
|||
|
|
@ -1,22 +1,6 @@
|
|||
---
|
||||
sidebar_position: 7
|
||||
title: Бэкап
|
||||
title: Backup
|
||||
---
|
||||
|
||||
# Бэкап
|
||||
|
||||
## Скачать резервную копию
|
||||
|
||||
Кнопка **Скачать** создаёт архив `.tar.gz` со всей конфигурацией b4. В архив входит содержимое директории конфигурации, кроме файлов `.dat` (GeoSite/GeoIP) и базы OUI (vendor lookup).
|
||||
|
||||

|
||||
|
||||
## Восстановить из копии
|
||||
|
||||
1. Нажмите **Загрузить** и выберите ранее скачанный `.tar.gz`
|
||||
2. Файлы конфигурации будут заменены на содержимое архива
|
||||
3. После восстановления будет предложено перезапустить сервис
|
||||
|
||||
:::warning
|
||||
Восстановление полностью заменяет текущую конфигурацию. Если нужно сохранить текущие настройки — сначала скачайте резервную копию.
|
||||
:::
|
||||
English translation is in progress. See the [Russian version](/ru/docs/settings/backup).
|
||||
|
|
|
|||
|
|
@ -1,239 +1,6 @@
|
|||
---
|
||||
sidebar_position: 1
|
||||
title: Основные
|
||||
title: Core
|
||||
---
|
||||
|
||||
# Основные настройки
|
||||
|
||||
Все изменения на этой вкладке требуют перезапуска сервиса (кроме языка интерфейса).
|
||||
|
||||
## Управление
|
||||
|
||||
Кнопки в верхней части настроек:
|
||||
|
||||
- **Перезапустить сервис** — перезапуск b4 (ожидаемое время простоя: 5–10 секунд)
|
||||
|
||||
:::warning Сброс конфигурации
|
||||
При сбросе конфигурации сохраняются: домены, категории GeoSite/GeoIP и настройки тестирования. Всё остальное (сеть, обход DPI, протоколы, логирование) сбрасывается.
|
||||
:::
|
||||
|
||||

|
||||
|
||||
## Очередь и обработка пакетов
|
||||
|
||||
Настройки ядра обработки пакетов через netfilter.
|
||||
|
||||

|
||||
|
||||
| Параметр | Описание | Диапазон | По умолчанию |
|
||||
| --- | --- | --- | --- |
|
||||
| Начальный номер очереди | Номер NFQUEUE. Изменяйте, если другие программы используют те же номера | 0–65535 | `537` |
|
||||
| Метка пакета | Метка netfilter для правил iptables/nftables. b4 использует её для маркировки обработанных пакетов | — | `32768` |
|
||||
| Рабочие потоки | Количество параллельных воркеров. Больше потоков = выше пропускная способность на многоядерных системах | 1–16 | `4` |
|
||||
| Лимит TCP пакетов соединения | Сколько TCP-пакетов на соединение анализировать. Сеты не могут превышать это значение | 1–100 | `19` |
|
||||
| Лимит UDP пакетов соединения | Сколько UDP-пакетов на соединение анализировать. Сеты не могут превышать это значение | 1–30 | `8` |
|
||||
|
||||
:::tip Лимиты пакетов
|
||||
Эти лимиты — глобальный потолок. В каждом сете можно установить свой лимит, но он не может быть выше глобального. Увеличение значения даёт b4 больше времени на анализ, но повышает нагрузку.
|
||||
:::
|
||||
|
||||
## Функции
|
||||
|
||||
### Протоколы
|
||||
|
||||
| Параметр | Описание | По умолчанию |
|
||||
| --- | --- | --- |
|
||||
| Поддержка IPv4 | Обработка IPv4-трафика | Вкл |
|
||||
| Поддержка IPv6 | Обработка IPv6-трафика | Выкл |
|
||||
|
||||
### Фаервол
|
||||
|
||||

|
||||
|
||||
| Параметр | Описание | По умолчанию |
|
||||
| --- | --- | --- |
|
||||
| Пропустить настройку 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 слушает все доступные.
|
||||
:::
|
||||
|
||||
## Настройки логирования
|
||||
|
||||

|
||||
|
||||
| Параметр | Описание | По умолчанию |
|
||||
| --- | --- | --- |
|
||||
| Уровень логирования | Детализация логов | INFO |
|
||||
| Путь к файлу ошибок | Записывать ошибки в файл | `/var/log/b4/errors.log` |
|
||||
| Часовой пояс | Часовой пояс для временных меток | Системный (авто) |
|
||||
| Мгновенный сброс | Сбрасывать буфер после каждой записи. Может влиять на производительность | Вкл |
|
||||
| Syslog | Дублировать логи в системный syslog | Выкл |
|
||||
|
||||
Уровни логирования:
|
||||
|
||||
| Уровень | Что отображается |
|
||||
| --- | --- |
|
||||
| Ошибка | Только ошибки |
|
||||
| Инфо | Ошибки + основные события |
|
||||
| Трассировка | Инфо + детали обработки пакетов |
|
||||
| Отладка | Всё, включая отладочную информацию |
|
||||
|
||||
:::warning Уровень Ошибка
|
||||
При уровне **Ошибка** разделы **Логи** и **Соединения** в веб-интерфейсе не будут показывать данные — они получают информацию из потока логов, который при этом уровне практически пуст.
|
||||
:::
|
||||
|
||||
:::info Файл ошибок
|
||||
b4 не ведёт постоянный лог-файл — всё выводится в stdout/stderr (и перехватывается веб-интерфейсом через WebSocket). В файл `errors.log` записываются только критические ошибки и аварийные завершения.
|
||||
:::
|
||||
|
||||
:::tip
|
||||
Для диагностики проблем используйте **Трассировка** или **Отладка**. Для обычной работы достаточно **Инфо**.
|
||||
:::
|
||||
|
||||
## Веб-сервер
|
||||
|
||||
Настройки веб-интерфейса b4.
|
||||
|
||||

|
||||
|
||||
| Параметр | Описание | По умолчанию |
|
||||
| --- | --- | --- |
|
||||
| Адрес привязки | 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 с применением настроенных сетов.
|
||||
|
||||

|
||||
|
||||
| Параметр | Описание | По умолчанию |
|
||||
| --- | --- | --- |
|
||||
| Включить | Запустить 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-сервер | Выкл |
|
||||
| Адрес привязки | 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 Clamping | — | Выкл |
|
||||
| Размер MSS | Размер MSS в байтах. Меньше значение = больше фрагментация | 10–1460 | `88` |
|
||||
|
||||
:::info Глобальный vs индивидуальный MSS
|
||||
Глобальный MSS Clamping применяется ко **всему** трафику на порт 443. Если нужно ограничить MSS только для конкретных устройств (например, телевизор с YouTube) — настройте MSS в столбце **MSS** в [таблице устройств](#фильтрация-устройств) ниже. Индивидуальный MSS работает независимо от глобального.
|
||||
:::
|
||||
|
||||
## Фильтрация устройств
|
||||
|
||||
Ограничение работы b4 трафиком от конкретных устройств в сети (по MAC-адресу). Полезно, если обход нужен не для всех устройств.
|
||||
|
||||

|
||||
|
||||
| Параметр | Описание | По умолчанию |
|
||||
| --- | --- | --- |
|
||||
| Включить | Активировать фильтрацию по устройствам | Выкл |
|
||||
| Определение производителя | Скачать базу vendor для определения производителя по MAC (~6 МБ) | Выкл |
|
||||
| Инвертировать выбор | Переключение между белым и чёрным списком | Выкл |
|
||||
|
||||
:::info Режимы фильтрации
|
||||
|
||||
- **Белый список** (по умолчанию) — обход DPI работает **только** для выбранных устройств
|
||||
- **Чёрный список** (инвертировать выбор) — выбранные устройства **исключаются** из обхода DPI
|
||||
|
||||
:::
|
||||
|
||||
### Таблица устройств
|
||||
|
||||
При включении фильтрации появляется таблица обнаруженных устройств:
|
||||
|
||||
| Столбец | Описание |
|
||||
| --- | --- |
|
||||
| Выбор | Чекбокс для включения/исключения устройства |
|
||||
| MAC | MAC-адрес |
|
||||
| IP | Текущий IP-адрес |
|
||||
| Имя | Псевдоним устройства (можно задать через иконку редактирования) или vendor |
|
||||
| MSS | Индивидуальный MSS Clamping для этого устройства (10–1460, пусто = выключен) |
|
||||
|
||||
Кнопка **Обновить** перезагружает список устройств из ARP-таблицы.
|
||||
|
||||
:::tip Индивидуальный MSS
|
||||
MSS Clamping можно настроить для каждого устройства отдельно — например, уменьшить MSS только для телевизора с YouTube, не затрагивая остальные устройства.
|
||||
:::
|
||||
English translation is in progress. See the [Russian version](/ru/docs/settings/core).
|
||||
|
|
|
|||
|
|
@ -1,51 +1,6 @@
|
|||
---
|
||||
sidebar_position: 6
|
||||
title: Дискавери
|
||||
title: Discovery
|
||||
---
|
||||
|
||||
# Настройки дискавери
|
||||
|
||||
Параметры, влияющие на работу автоматического поиска конфигурации и детектора DPI. Настраиваются в **Настройки → Дискавери**.
|
||||
|
||||

|
||||
|
||||
## Параметры
|
||||
|
||||
| Параметр | Описание | Диапазон | По умолчанию |
|
||||
| --- | --- | --- | --- |
|
||||
| Таймаут поиска | Максимальное время ожидания ответа при проверке каждой стратегии | 3–30 сек | `5` сек |
|
||||
| Задержка распространения | Время ожидания после применения конфигурации перед тестированием. Нужно, чтобы правила успели активироваться | 500–5000 мс | `1500` мс |
|
||||
| Попыток валидации | Сколько раз стратегия должна сработать подряд, чтобы считаться рабочей. Больше = надёжнее, но дольше | 1–5 | `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).
|
||||
|
|
|
|||
|
|
@ -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 могут занимать 5–15 МБ каждый. На роутерах с ограниченной памятью убедитесь, что места достаточно.
|
||||
:::
|
||||
|
||||
## Использование в сетах
|
||||
|
||||
После загрузки баз категории становятся доступны в настройках сетов (вкладка **Цели**):
|
||||
|
||||
- **Категории 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).
|
||||
|
|
|
|||
|
|
@ -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).
|
||||
|
|
|
|||
|
|
@ -1,105 +1,6 @@
|
|||
---
|
||||
sidebar_position: 4
|
||||
title: Пэйлоады
|
||||
title: Payloads
|
||||
---
|
||||
|
||||
# Пэйлоады
|
||||
|
||||

|
||||
|
||||
## Зачем нужны пэйлоады
|
||||
|
||||
Одна из стратегий обхода 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).
|
||||
|
|
|
|||
|
|
@ -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).
|
||||
|
|
|
|||
|
|
@ -1,57 +1,6 @@
|
|||
---
|
||||
sidebar_position: 8
|
||||
title: Мониторинг доменов
|
||||
title: Domain Watchdog
|
||||
---
|
||||
|
||||
# Мониторинг доменов (Watchdog)
|
||||
|
||||
Мониторинг периодически проверяет доступность указанных доменов и при обнаружении блокировки автоматически запускает [дискавери](./discovery) для поиска рабочей конфигурации.
|
||||
|
||||
Настройки мониторинга находятся в **Настройки → Дискавери → раздел Мониторинг**.
|
||||
|
||||

|
||||
|
||||
## Как это работает
|
||||
|
||||
1. Мониторинг с заданным интервалом делает HTTP-запрос к каждому домену из списка
|
||||
2. Если домен не отвечает или обнаружена страница блокировки — фиксируется ошибка
|
||||
3. После нескольких последовательных ошибок (настраивается) мониторинг автоматически запускает дискавери для этого домена
|
||||
4. Найденная конфигурация применяется к существующему сету или создаётся новый
|
||||
|
||||
## Параметры
|
||||
|
||||
| Параметр | Описание | По умолчанию |
|
||||
| --- | --- | --- |
|
||||
| Интервал проверки | Как часто проверять домены, когда всё работает | `300` сек (5 мин) |
|
||||
| Интервал при ошибке | Как часто проверять, если домен уже в статусе «Проблема» | `60` сек |
|
||||
| Кулдаун | Пауза после попытки восстановления перед возобновлением обычных проверок | `900` сек (15 мин) |
|
||||
| Таймаут | Максимальное время ожидания ответа от домена | `15` сек |
|
||||
| Макс. попыток | Сколько ошибок подряд нужно для запуска автовосстановления | `3` |
|
||||
|
||||

|
||||
|
||||
## Статусы доменов
|
||||
|
||||
| Статус | Значение |
|
||||
| --- | --- |
|
||||
| **Доступен** | Домен отвечает нормально |
|
||||
| **Проблема** | Зафиксированы ошибки, но порог для восстановления ещё не достигнут |
|
||||
| **Восстановление** | Запущен дискавери для поиска рабочей конфигурации |
|
||||
| **В очереди** | Домен ожидает следующей проверки |
|
||||
|
||||
## Добавление доменов
|
||||
|
||||
Домены можно добавлять двумя способами:
|
||||
|
||||
- Через панель «Мониторинг доменов» на главной — поле ввода с кнопкой «+»
|
||||
- Через **Настройки → Дискавери → раздел Мониторинг**
|
||||
|
||||
Можно указать как домен (например, `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).
|
||||
|
|
|
|||
|
|
@ -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
62
docs/i18n/ru/code.json
Normal 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"
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
```
|
||||
|
|
@ -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 автоматически мигрирует старые конфигурации при запуске - добавляет новые поля с значениями по умолчанию, переименовывает устаревшие. Ручное вмешательство не требуется.
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
---
|
||||
sidebar_position: 13
|
||||
title: Продвинутое
|
||||
---
|
||||
|
||||
# Продвинутое
|
||||
|
||||
Справочные материалы для продвинутых пользователей:
|
||||
|
||||
- [CLI-параметры](./cli) - флаги командной строки
|
||||
- [Конфигурационный файл](./config) - структура `b4.json`
|
||||
- [API](/swagger) - Swagger-документация и REST API
|
||||
- [Как работает ТСПУ](./tspu) - техническое описание российской системы DPI
|
||||
|
|
@ -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 это не обязательно - дискавери автоматически подбирает рабочую конфигурацию.
|
||||
:::
|
||||
|
|
@ -0,0 +1,162 @@
|
|||
---
|
||||
sidebar_position: 10
|
||||
title: Соединения
|
||||
---
|
||||
|
||||
# Соединения
|
||||
|
||||
Раздел отображает TCP/UDP-соединения, проходящие через b4, в реальном времени. Данные поступают через WebSocket - таблица обновляется непрерывно.
|
||||
|
||||

|
||||
|
||||
## Таблица соединений
|
||||
|
||||
### Столбцы
|
||||
|
||||
| Столбец | Описание |
|
||||
| --- | --- |
|
||||
| **Время** | Время соединения (ЧЧ:ММ:СС), моноширинный шрифт |
|
||||
| **Протокол** | Цветная метка: `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** | Очистить таблицу |
|
||||
|
||||
### Кнопка очистки
|
||||
|
||||
Иконка корзины в верхней панели очищает все отображаемые соединения.
|
||||
|
||||
---
|
||||
|
||||
## Метка непросмотренных доменов
|
||||
|
||||
В боковом меню рядом с пунктом **Соединения** может отображаться счётчик - количество новых соединений, которые совпали с сетом, пока вы находились на другой странице. Счётчик сбрасывается при переходе на страницу соединений.
|
||||
|
|
@ -0,0 +1,67 @@
|
|||
---
|
||||
sidebar_position: 4
|
||||
title: Дашборд
|
||||
---
|
||||
|
||||
# Дашборд
|
||||
|
||||
Главная страница, которая открывается по умолчанию. Показывает текущее состояние b4, метрики и активность устройств в сети.
|
||||
|
||||
## Состояние системы
|
||||
|
||||
Баннер в верхней части страницы отображает:
|
||||
|
||||
- **Статус** - Работает / Нестабильно / Критично
|
||||
- **NFQueue** - состояние очереди netfilter
|
||||
- **Фаервол** - состояние правил iptables/nftables
|
||||
- **Воркеры** - сколько рабочих потоков активно (например, «3/4 активно»)
|
||||
- **Аптайм** - время работы с последнего запуска
|
||||
- **Версия** - текущая версия b4
|
||||
|
||||
Здесь же есть кнопка **Сброс статистики** для обнуления всех счётчиков.
|
||||
|
||||

|
||||
|
||||
## Метрики
|
||||
|
||||
Три карточки с основными показателями:
|
||||
|
||||
| Метрика | Что показывает |
|
||||
| --- | --- |
|
||||
| **Соединения** | Общее количество соединений и текущая скорость (соед/с) |
|
||||
| **Обход DPI** | Количество соединений, обработанных сетами, и процент от общего |
|
||||
| **Пакеты** | Количество обработанных пакетов и текущая скорость (пак/с) |
|
||||
|
||||
Ниже отображается график **Скорость соединений** - линейный график в реальном времени.
|
||||
|
||||

|
||||
|
||||
## Активные сеты
|
||||
|
||||
Список включённых сетов с количеством целей (доменов + IP). Клик по сету переходит к его редактированию.
|
||||

|
||||
|
||||
## Активность устройств
|
||||
|
||||
Показывает, какие устройства в сети к каким доменам обращаются:
|
||||
|
||||
- **Заголовок устройства** - имя (или MAC/vendor), IP, количество доменов и соединений
|
||||
- **Раскрываемый список доменов** - для каждого домена показано количество соединений
|
||||
|
||||
Если домен ещё не добавлен ни в один сет, рядом с ним отображается кнопка «+» для быстрого добавления.
|
||||
|
||||
:::info Метки TLS
|
||||
Рядом с доменами могут отображаться метки **1.2** или **1.3** - это версия протокола TLS, которую использует соединение. Такие же метки встречаются в разделах Соединения и Дискавери. Версия TLS важна, потому что провайдеры могут блокировать TLS 1.2 и TLS 1.3 разными методами - для них могут потребоваться разные стратегии обхода.
|
||||
:::
|
||||
|
||||

|
||||
|
||||
## Мониторинг доменов
|
||||
|
||||
Если включён [мониторинг доменов](./watchdog), на дашборде отображается панель мониторинга. Она показывает статус каждого отслеживаемого домена, время последней проверки и количество ошибок. Здесь же можно добавить новый домен или запустить принудительную проверку.
|
||||
|
||||
## Домены не в сетах
|
||||
|
||||
Топ-15 доменов, которые обрабатываются b4, но не включены ни в один сет. Отсортированы по количеству соединений. Каждый домен можно добавить в сет через кнопку «+».
|
||||
|
||||

|
||||
|
|
@ -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: страница детектора с результатами проверок -->
|
||||
|
||||
## Запуск
|
||||
|
||||
Выберите нужные проверки и нажмите кнопку запуска. Каждый тест занимает несколько секунд.
|
||||
|
||||
## История
|
||||
|
||||
Результаты сохраняются с отметкой времени. Можно сравнить результаты в разные моменты - например, до и после смены провайдера или обновления оборудования ТСПУ.
|
||||
|
|
@ -0,0 +1,76 @@
|
|||
---
|
||||
sidebar_position: 7
|
||||
title: Дискавери
|
||||
---
|
||||
|
||||
# Дискавери
|
||||
|
||||
Дискавери автоматически подбирает рабочую конфигурацию обхода для указанных доменов. b4 перебирает стратегии, тестирует их и находит те, которые работают с вашим провайдером.
|
||||
|
||||
Базовый сценарий использования описан в разделе [Быстрый старт](./quickstart).
|
||||
|
||||
## Параметры поиска
|
||||
|
||||
Перед запуском можно раскрыть панель **Параметры поиска** и настроить:
|
||||
|
||||
| Параметр | Описание |
|
||||
| --- | --- |
|
||||
| **Пропустить поиск DNS** | Не проверять DNS-блокировку. Включите, если используете DoH или сторонний DNS |
|
||||
| **Пропустить кэшированные стратегии** | Не пробовать стратегии, которые уже были найдены ранее |
|
||||
| **Версия TLS** | Авто / TLS 1.2 / TLS 1.3 - ограничить тестирование конкретной версией |
|
||||
| **Попыток валидации** | 1–5 - сколько раз проверить стратегию перед тем, как считать её рабочей |
|
||||
| **Пользовательские 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).
|
||||
|
|
@ -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`).
|
||||
|
|
@ -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
|
||||
```
|
||||
|
|
@ -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 обязателен.
|
||||
:::
|
||||
|
|
@ -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
|
||||
```
|
||||
:::
|
||||
|
|
@ -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.
|
||||
|
|
@ -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`
|
||||
|
|
@ -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.
|
||||
80
docs/i18n/ru/docusaurus-plugin-content-docs/current/intro.md
Normal file
80
docs/i18n/ru/docusaurus-plugin-content-docs/current/intro.md
Normal 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
|
||||
При установке на роутер обход работает для всех устройств в сети без настройки на каждом из них.
|
||||
:::
|
||||
36
docs/i18n/ru/docusaurus-plugin-content-docs/current/logs.md
Normal file
36
docs/i18n/ru/docusaurus-plugin-content-docs/current/logs.md
Normal 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.
|
||||
168
docs/i18n/ru/docusaurus-plugin-content-docs/current/mtproto.md
Normal file
168
docs/i18n/ru/docusaurus-plugin-content-docs/current/mtproto.md
Normal file
|
|
@ -0,0 +1,168 @@
|
|||
---
|
||||
sidebar_position: 12
|
||||
title: MTProto Прокси
|
||||
---
|
||||
|
||||
# MTProto Прокси для Telegram
|
||||
|
||||
B4 включает встроенный прокси для Telegram, который маскирует трафик под обычное HTTPS-соединение к популярному сайту.
|
||||
|
||||
## Два сценария использования
|
||||
|
||||

|
||||
|
||||
### Сценарий 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. Нажать **Готово** и включить прокси
|
||||

|
||||
|
||||
---
|
||||
|
||||
## Сценарий 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 не запущен или указан неправильный порт.
|
||||
|
|
@ -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://`. Браузер может показать предупреждение о сертификате - это нормально для самоподписанного сертификата, его можно принять.
|
||||
:::
|
||||
|
||||

|
||||
|
||||
При первом запуске дашборд будет пустым - это нормально. Данные появятся после настройки.
|
||||
|
||||
## Запустить обнаружение
|
||||
|
||||
b4 может автоматически подобрать рабочую конфигурацию для вашего провайдера. Для этого используется раздел **Дискавери**.
|
||||
|
||||
### Шаг 1: Перейти в Дискавери
|
||||
|
||||
В боковом меню нажмите **Дискавери**.
|
||||
|
||||

|
||||
|
||||
### Шаг 2: Добавить домены
|
||||
|
||||
В поле **Добавить домен или URL** введите адрес заблокированного сайта и нажмите Enter. Можно добавить несколько доменов через запятую.
|
||||
|
||||
Примеры:
|
||||
|
||||
- `youtube.com`
|
||||
- `googlevideo.com`
|
||||
|
||||

|
||||
|
||||
### Шаг 3: Начать поиск
|
||||
|
||||
Нажмите **Начать поиск**.
|
||||
|
||||
b4 начнёт перебирать стратегии обхода и тестировать их на указанных доменах. Процесс проходит несколько фаз:
|
||||
|
||||
1. **Базовый тест** - проверка, действительно ли сайт заблокирован
|
||||
2. **Поиск стратегий** - перебор методов обхода
|
||||
3. **Оптимизация** - подбор параметров
|
||||
4. **Тест комбинаций** - проверка комбинированных стратегий
|
||||
5. **Проверка DNS** - проверка DNS-блокировки
|
||||
|
||||

|
||||
|
||||
Поиск может занять от 1 до 10 минут в зависимости от провайдера.
|
||||
|
||||
:::tip Пропустить проверку DNS
|
||||
Если вы уверены, что DNS работает нормально (например, используете DoH или сторонний DNS-сервер), включите опцию **Пропустить поиск DNS** в **Параметрах поиска**. Это ускорит процесс и уберёт ложные срабатывания по DNS.
|
||||
:::
|
||||
|
||||
### Шаг 4: Результаты
|
||||
|
||||
После завершения для каждого домена отображается результат:
|
||||
|
||||
- **Успешно** - найдена рабочая конфигурация
|
||||
- **Заблокирован** - сайт заблокирован на уровне DNS или транспорта, нужны дополнительные настройки
|
||||
|
||||

|
||||
|
||||
## Применить конфигурацию
|
||||
|
||||
На карточке успешного результата нажмите **Использовать эту конфигурацию**.
|
||||
|
||||

|
||||
|
||||
В открывшемся диалоге:
|
||||
|
||||
1. Выберите **Создать новый сет** (или **Добавить в существующий похожий сет**, если у вас уже есть настроенные сеты)
|
||||
2. Укажите название сета (или оставьте предложенное)
|
||||
3. Нажмите **Создать сет**
|
||||
|
||||
Сет - это набор настроек обхода, привязанный к списку доменов или ip адресов. Подробнее о сетах - в разделе [Сеты](./sets/).
|
||||
|
||||
## Проверить работу
|
||||
|
||||
### Через браузер
|
||||
|
||||
Откройте сайт, для которого настроен обход. Если всё работает - сайт загрузится.
|
||||
|
||||
### Через раздел Соединения
|
||||
|
||||
В боковом меню нажмите **Соединения**. Здесь отображаются все текущие TCP/UDP-соединения в реальном времени.
|
||||
|
||||

|
||||
|
||||
Если обход работает, в столбце **Сет** напротив соединений с настроенным доменом будет отображаться название вашего сета.
|
||||
|
||||
## Что дальше
|
||||
|
||||
- Добавить другие домены - через Дискавери или вручную в настройках сета
|
||||
|
||||
- Настроить обход по категориям (GeoSite) - чтобы не добавлять домены по одному
|
||||
- Посмотреть раздел [Сеты](./sets/) для подробного описания всех возможностей
|
||||
|
|
@ -0,0 +1,138 @@
|
|||
---
|
||||
sidebar_position: 6
|
||||
title: Сеты
|
||||
---
|
||||
|
||||
# Сеты
|
||||
|
||||
Сет - это набор настроек обхода DPI, привязанный к списку доменов, IP-адресов, UDP-портов или категорий GeoSite/GeoIP. Можно создать несколько сетов с разными стратегиями для разных сайтов.
|
||||
|
||||
## Управление сетами
|
||||
|
||||
На странице **Сеты** отображаются все созданные наборы. Для каждого сета видно:
|
||||
|
||||
- Название и статус (включён/выключен)
|
||||
- Количество доменов и IP
|
||||
- Активные техники (COMBO, DISORDER, HYBRID и т.д.)
|
||||
- Состояние DNS-маршрутизации и SNI Faking
|
||||
|
||||

|
||||
|
||||
Доступные действия:
|
||||
|
||||
- **Создать сет** - новый набор настроек
|
||||
- **Редактировать** - клик по карточке
|
||||
- **Дублировать** - создать копию существующего сета
|
||||
- **Сравнить** - сравнение двух сетов в два столбца
|
||||
- **Удалить** - удаление одного или нескольких сетов (через массовое выделение)
|
||||
- **Перетаскивание** - изменение порядка сетов (порядок влияет на приоритет обработки)
|
||||
|
||||
## Редактор сета
|
||||
|
||||
Редактор содержит 5 вкладок:
|
||||
|
||||
- [Цели](./targets) - домены, IP, GeoSite/GeoIP категории, устройства
|
||||
- [TCP](./tcp/) - фрагментация, faking, desync и другие TCP-стратегии
|
||||
- [UDP](./udp) - обработка UDP-трафика, QUIC, STUN
|
||||
- [Маршрутизация](./routing) - DNS-редирект и маршрутизация трафика через интерфейсы
|
||||
- **Импорт/Экспорт** - JSON-представление конфигурации сета для переноса между устройствами
|
||||
|
||||

|
||||
|
||||
## Как это работает
|
||||
|
||||
```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-адреса) не экспортируются - их нужно настроить заново на целевом устройстве.
|
||||
|
|
@ -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. Выберите **Выходной интерфейс** - куда направить трафик
|
||||
|
||||

|
||||
|
||||
После включения в верхней части раздела отображается диаграмма потока:
|
||||
|
||||
```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) для удаления возможных остаточных правил.
|
||||
|
|
@ -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.
|
||||
|
||||
- Можно добавлять несколько через запятую или перенос строки
|
||||
- При дублировании с другим сетом - появляется предупреждение
|
||||
- Кнопка **Редактировать список** открывает текстовый редактор (по одному домену на строку)
|
||||
|
||||

|
||||
|
||||
## Категории 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 |
|
||||
|
||||
Если устройства не выбраны - сет применяется ко всему трафику. Если выбраны - только к трафику от этих устройств. Сеты с привязкой к устройствам имеют приоритет над общими.
|
||||
|
|
@ -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, но истёк до сервера | 1–64 |
|
||||
| Смещение Sequence | Сдвиг TCP sequence number (для стратегий pastseq/randseq) | - |
|
||||
| Уменьшение Timestamp | Величина уменьшения TCP timestamp (для стратегии timestamp, по умолчанию 600000) | - |
|
||||
| Количество фейковых пакетов | Сколько фейковых пакетов отправить перед реальными данными | 1–20 |
|
||||
|
||||
:::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 | 0–1200 |
|
||||
| TTL | TTL для фейковых SYN-пакетов | 1–100 |
|
||||
|
||||
---
|
||||
|
||||
## 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 гарантирует истечение фейковых пакетов до сервера | 1–50 |
|
||||
| Количество пакетов | Количество фейковых пакетов на одну атаку десинхронизации | 1–20 |
|
||||
| Post-ClientHello RST | Отправить фейковый RST **после** ClientHello для удаления соединения из таблицы отслеживания DPI | - |
|
||||
|
||||
---
|
||||
|
||||
## Манипуляция окном
|
||||
|
||||
Отправляет фейковые ACK-пакеты с изменёнными размерами TCP-окна **перед** реальным пакетом. Фейки используют низкий TTL - они истекают до сервера, но путают DPI на промежуточных узлах.
|
||||
|
||||
| Режим | Описание |
|
||||
| --- | --- |
|
||||
| **Нулевое окно** | Фейковые пакеты: сначала window=0, затем window=65535 |
|
||||
| **Случайное** | 3–5 фейковых пакетов со случайными размерами окна из заданного списка |
|
||||
| **Осцилляция** | Циклический перебор пользовательских значений окна |
|
||||
| **Эскалация** | Постепенное увеличение: 0 → 100 → 500 → 1460 → 8192 → 32768 → 65535 |
|
||||
|
||||
При режимах **Случайное** и **Осцилляция** можно задать свой список значений окна (0–65535). Если список пуст - используются значения по умолчанию.
|
||||
|
||||
---
|
||||
|
||||
## Обход входящих ответов (Incoming)
|
||||
|
||||
Манипулирует **входящими ответами** сервера. Используется для обхода DPI, который дросселирует (замедляет) соединения после получения определённого объёма данных (~15–20 КБ). 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 гарантирует истечение фейков до сервера | 1–20 |
|
||||
| Количество фейков | Количество фейковых пакетов на одну инжекцию | 1–10 |
|
||||
| Порог мин. | Минимальный объём входящих данных для срабатывания (КБ) | 5–50 |
|
||||
| Порог макс. | Максимальный порог - рандомизируется между мин. и макс. для каждого соединения | 5–50 |
|
||||
|
||||
:::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-расширений вставить | 1–10 |
|
||||
|
||||
**Padding:**
|
||||
|
||||
| Параметр | Описание | Диапазон |
|
||||
| --- | --- | --- |
|
||||
| Размер Padding | Целевой размер ClientHello с padding | 256–16384 байт |
|
||||
|
||||
**Fake Extensions:**
|
||||
|
||||
| Параметр | Описание | Диапазон |
|
||||
| --- | --- | --- |
|
||||
| Количество Fake Extensions | Сколько фейковых TLS-расширений вставить | 1–15 |
|
||||
|
||||
**Fake SNIs:**
|
||||
|
||||
Добавляет дополнительные значения SNI в ClientHello. Введите домены (например, `ya.ru`, `vk.com`) - они будут внедрены в расширение SNI наряду с реальным доменом.
|
||||
|
||||
**Advanced** включает все параметры выше для ручной комбинации.
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
---
|
||||
sidebar_position: 1
|
||||
title: Общее
|
||||
---
|
||||
|
||||
# Общее
|
||||
|
||||
Базовые параметры обработки TCP-трафика в сете.
|
||||
|
||||

|
||||
|
||||
## Лимит TCP пакетов соединения
|
||||
|
||||
Сколько пакетов в начале каждого соединения анализировать. После этого лимита пакеты проходят без модификации. TLS-рукопожатие (ClientHello) обычно происходит в первых 3–5 пакетах, поэтому обрабатывать всё соединение не нужно.
|
||||
|
||||
:::info
|
||||
Значение не может превышать глобальный лимит, заданный в [Настройки → Основные → Очередь](../../settings/core#очередь-и-обработка-пакетов). Если в сете указано больше - будет использован глобальный лимит.
|
||||
:::
|
||||
|
||||
## Задержка между пакетами (Seg2Delay)
|
||||
|
||||
Задержка (мс) между отправкой фрагментов. Задаётся как диапазон **мин–макс** - для каждого соединения b4 выбирает случайное значение из этого диапазона. Если мин и макс одинаковы - задержка фиксированная.
|
||||
|
||||
## Фильтр портов
|
||||
|
||||
Ограничивает, на каких портах назначения этот сет будет применяться. Формат iptables: `443` или `443,80`.
|
||||
|
||||
:::info
|
||||
На уровне фаервола b4 всегда перехватывает трафик на порт 443. Если в сетах указаны дополнительные порты - они добавляются к перехвату. Фильтр портов в сете сужает, к какому трафику **этот конкретный сет** будет применяться, а не то, что b4 обрабатывает глобально.
|
||||
:::
|
||||
|
||||
## Отбросить `SACK`
|
||||
|
||||
Удаляет опцию `Selective Acknowledgment` из TCP-пакетов. `SACK` помогает серверу и клиенту эффективно пересылать потерянные фрагменты - некоторые DPI-системы используют `SACK` для восстановления порядка фрагментов.
|
||||
|
||||
## Дублирование пакетов
|
||||
|
||||
Отправляет каждый пакет несколько раз (1–10 копий). Полезно, если провайдер отбрасывает часть пакетов при обнаружении аномалий.
|
||||

|
||||
|
|
@ -0,0 +1,14 @@
|
|||
---
|
||||
sidebar_position: 2
|
||||
title: TCP
|
||||
---
|
||||
|
||||
# TCP
|
||||
|
||||
Вкладка TCP - основная часть настройки обхода DPI. Содержит три подвкладки, соответствующие трём аспектам обработки пакетов:
|
||||
|
||||
- [Общее](./general) - лимиты, задержки, дублирование
|
||||
- [Фрагментация](./splitting) - разбиение пакетов на части
|
||||
- [Faking](./faking) - отправка ложных пакетов, десинхронизация, мутация
|
||||
|
||||
<!-- screenshot: вкладка TCP с тремя подвкладками -->
|
||||
|
|
@ -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-пакетом и реальным ответом сервера. Диапазон: 1–20, по умолчанию **3**.
|
||||
|
||||
:::tip
|
||||
Значение 3 подходит для большинства сетей. Увеличьте, если b4 ложно отбрасывает легитимные RST (видно в логах).
|
||||
:::
|
||||
|
||||
## Логирование
|
||||
|
||||
Каждый отброшенный RST отображается в [логах](../../logs) с указанием причины: несовпадение TTL, RST до ответа сервера или повторный RST.
|
||||
|
|
@ -0,0 +1,206 @@
|
|||
---
|
||||
sidebar_position: 2
|
||||
title: Фрагментация
|
||||
---
|
||||
|
||||
# Фрагментация
|
||||
|
||||
Основной инструмент обхода DPI. Суть: разбить TCP-пакет на части так, чтобы DPI не смог собрать их и прочитать содержимое (в частности, поле SNI в TLS ClientHello).
|
||||
|
||||

|
||||
|
||||
## Метод фрагментации
|
||||
|
||||
| Метод | Описание |
|
||||
| --- | --- |
|
||||
| **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 и разделяет посередине имени хоста. Рекомендуемый вариант - не требует ручной настройки.
|
||||
|
||||
### Фиксированная позиция разделения
|
||||
|
||||
Ручное смещение точки разделения (0–50 байт от начала TLS payload). Используйте, если умное разделение не работает у вашего провайдера. Задаётся как диапазон **мин–макс** - для каждого соединения b4 выберет случайную позицию из диапазона.
|
||||
|
||||
:::info 3 сегмента
|
||||
Если включены оба варианта (умное SNI + фиксированная позиция) - пакет разделяется на **3 сегмента**: на фиксированной позиции и в середине SNI.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## Combo
|
||||
|
||||
Комбинирует несколько точек разделения с приманками и перемешиванием. Самый гибкий метод.
|
||||
|
||||
### Приманка (Decoy)
|
||||
|
||||
Отправляет фейковый ClientHello с разрешённым SNI перед реальным трафиком:
|
||||
|
||||
1. Фейковый пакет (с низким TTL) → DPI видит и анализирует, но пакет не доходит до сервера
|
||||
2. Реальный пакет (фрагментированный) → проходит мимо DPI и доставляется серверу
|
||||
|
||||
### Точки разделения
|
||||
|
||||

|
||||
|
||||
| Параметр | Описание |
|
||||
| --- | --- |
|
||||
| First Byte | Разделение после первого байта (десинхронизация по времени) |
|
||||
| Extension Split | Разделение перед SNI-расширением |
|
||||
| SNI Split | Разделение в середине имени хоста SNI |
|
||||
|
||||
Каждая включённая точка добавляет дополнительный сегмент. Интерфейс показывает количество активных разделений и результирующее число сегментов.
|
||||
|
||||
:::warning
|
||||
Должна быть включена хотя бы одна точка разделения, иначе combo отправит пакет одним сегментом.
|
||||
:::
|
||||
|
||||
### Режим перемешивания
|
||||
|
||||
| Режим | Описание |
|
||||
| --- | --- |
|
||||
| `middle` | Первый и последний сегменты остаются на месте, перемешиваются только средние |
|
||||
| `full` | Все сегменты случайно перемешиваются |
|
||||
| `reverse` | Сегменты отправляются в обратном порядке |
|
||||
|
||||
### Тайминги
|
||||
|
||||

|
||||
|
||||
| Параметр | Описание | Диапазон |
|
||||
| --- | --- | --- |
|
||||
| Задержка первого сегмента | Пауза после отправки первого сегмента | 10–500 мс |
|
||||
| Макс. джиттер | Случайная задержка между остальными сегментами | 100–10000 мкс |
|
||||
|
||||
### Фейк на сегмент (мультидисордер)
|
||||
|
||||
Отправляет фейковые перекрывающие пакеты перед **каждым** реальным сегментом, а не только перед первым. Засоряет реассемблер DPI мусором.
|
||||
|
||||
| Параметр | Описание | Диапазон |
|
||||
| --- | --- | --- |
|
||||
| Фейк на сегмент | Включить фейки между сегментами | - |
|
||||
| Фейков на сегмент | Количество фейковых пакетов перед каждым сегментом | 1–11 |
|
||||
|
||||
---
|
||||
|
||||
## 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. Задаётся как диапазон мин–макс | 1–50 |
|
||||
| OOB байт | Байт, передаваемый через OOB (отображается символ + hex) | - |
|
||||
|
||||
---
|
||||
|
||||
## TLS Record Splitting
|
||||
|
||||
Разделяет ClientHello на несколько TLS-записей внутри одного TCP-пакета. DPI, ожидающий однозаписный хендшейк, не может сопоставить сигнатуру.
|
||||
|
||||
| Параметр | Описание | Диапазон |
|
||||
| --- | --- | --- |
|
||||
| Позиция разделения | Размер первой TLS-записи в байтах. Задаётся как диапазон мин–макс | 1–100 |
|
||||
126
docs/i18n/ru/docusaurus-plugin-content-docs/current/sets/udp.md
Normal file
126
docs/i18n/ru/docusaurus-plugin-content-docs/current/sets/udp.md
Normal 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** - клиент ждёт таймаут (обычно 3–10 секунд) перед переходом на TCP. **Reject** - клиент получает ICMP-ответ и переключается на TCP практически мгновенно.
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## Настройки Fake & Fragment
|
||||
|
||||
Доступны при режиме **Fake & Fragment**.
|
||||
|
||||
### Стратегия фейка
|
||||
|
||||
Определяет, как фейковый пакет станет необрабатываемым для сервера:
|
||||
|
||||
| Стратегия | Описание |
|
||||
| --- | --- |
|
||||
| **Нет** | Без стратегии - фейковые пакеты отправляются как есть |
|
||||
| **TTL** | Низкий TTL - фейковые пакеты истекают на промежуточном узле и не доходят до сервера |
|
||||
| **Checksum** | Повреждённая контрольная сумма UDP - сервер отбрасывает пакеты с неверной суммой |
|
||||
|
||||
### Параметры
|
||||
|
||||
| Параметр | Описание | Диапазон |
|
||||
| --- | --- | --- |
|
||||
| Количество фейковых пакетов | Сколько фейковых пакетов отправить перед реальным | 1–20 |
|
||||
| Размер фейкового пакета | Размер payload каждого фейкового UDP-пакета в байтах | 32–1500 |
|
||||
| Задержка между сегментами | Задержка между отправкой фейковых и реальных пакетов. Задаётся как диапазон мин–макс - для каждого соединения выбирается случайное значение | 0–1000 мс |
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
---
|
||||
sidebar_position: 7
|
||||
title: Бэкап
|
||||
---
|
||||
|
||||
# Бэкап
|
||||
|
||||
## Скачать резервную копию
|
||||
|
||||
Кнопка **Скачать** создаёт архив `.tar.gz` со всей конфигурацией b4. В архив входит содержимое директории конфигурации, кроме файлов `.dat` (GeoSite/GeoIP) и базы OUI (vendor lookup).
|
||||
|
||||

|
||||
|
||||
## Восстановить из копии
|
||||
|
||||
1. Нажмите **Загрузить** и выберите ранее скачанный `.tar.gz`
|
||||
2. Файлы конфигурации будут заменены на содержимое архива
|
||||
3. После восстановления будет предложено перезапустить сервис
|
||||
|
||||
:::warning
|
||||
Восстановление полностью заменяет текущую конфигурацию. Если нужно сохранить текущие настройки - сначала скачайте резервную копию.
|
||||
:::
|
||||
|
|
@ -0,0 +1,239 @@
|
|||
---
|
||||
sidebar_position: 1
|
||||
title: Основные
|
||||
---
|
||||
|
||||
# Основные настройки
|
||||
|
||||
Все изменения на этой вкладке требуют перезапуска сервиса (кроме языка интерфейса).
|
||||
|
||||
## Управление
|
||||
|
||||
Кнопки в верхней части настроек:
|
||||
|
||||
- **Перезапустить сервис** - перезапуск b4 (ожидаемое время простоя: 5–10 секунд)
|
||||
|
||||
:::warning Сброс конфигурации
|
||||
При сбросе конфигурации сохраняются: домены, категории GeoSite/GeoIP и настройки тестирования. Всё остальное (сеть, обход DPI, протоколы, логирование) сбрасывается.
|
||||
:::
|
||||
|
||||

|
||||
|
||||
## Очередь и обработка пакетов
|
||||
|
||||
Настройки ядра обработки пакетов через netfilter.
|
||||
|
||||

|
||||
|
||||
| Параметр | Описание | Диапазон | По умолчанию |
|
||||
| --- | --- | --- | --- |
|
||||
| Начальный номер очереди | Номер NFQUEUE. Изменяйте, если другие программы используют те же номера | 0–65535 | `537` |
|
||||
| Метка пакета | Метка netfilter для правил iptables/nftables. b4 использует её для маркировки обработанных пакетов | - | `32768` |
|
||||
| Рабочие потоки | Количество параллельных воркеров. Больше потоков = выше пропускная способность на многоядерных системах | 1–16 | `4` |
|
||||
| Лимит TCP пакетов соединения | Сколько TCP-пакетов на соединение анализировать. Сеты не могут превышать это значение | 1–100 | `19` |
|
||||
| Лимит UDP пакетов соединения | Сколько UDP-пакетов на соединение анализировать. Сеты не могут превышать это значение | 1–30 | `8` |
|
||||
|
||||
:::tip Лимиты пакетов
|
||||
Эти лимиты - глобальный потолок. В каждом сете можно установить свой лимит, но он не может быть выше глобального. Увеличение значения даёт b4 больше времени на анализ, но повышает нагрузку.
|
||||
:::
|
||||
|
||||
## Функции
|
||||
|
||||
### Протоколы
|
||||
|
||||
| Параметр | Описание | По умолчанию |
|
||||
| --- | --- | --- |
|
||||
| Поддержка IPv4 | Обработка IPv4-трафика | Вкл |
|
||||
| Поддержка IPv6 | Обработка IPv6-трафика | Выкл |
|
||||
|
||||
### Фаервол
|
||||
|
||||

|
||||
|
||||
| Параметр | Описание | По умолчанию |
|
||||
| --- | --- | --- |
|
||||
| Пропустить настройку 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 слушает все доступные.
|
||||
:::
|
||||
|
||||
## Настройки логирования
|
||||
|
||||

|
||||
|
||||
| Параметр | Описание | По умолчанию |
|
||||
| --- | --- | --- |
|
||||
| Уровень логирования | Детализация логов | INFO |
|
||||
| Путь к файлу ошибок | Записывать ошибки в файл | `/var/log/b4/errors.log` |
|
||||
| Часовой пояс | Часовой пояс для временных меток | Системный (авто) |
|
||||
| Мгновенный сброс | Сбрасывать буфер после каждой записи. Может влиять на производительность | Вкл |
|
||||
| Syslog | Дублировать логи в системный syslog | Выкл |
|
||||
|
||||
Уровни логирования:
|
||||
|
||||
| Уровень | Что отображается |
|
||||
| --- | --- |
|
||||
| Ошибка | Только ошибки |
|
||||
| Инфо | Ошибки + основные события |
|
||||
| Трассировка | Инфо + детали обработки пакетов |
|
||||
| Отладка | Всё, включая отладочную информацию |
|
||||
|
||||
:::warning Уровень Ошибка
|
||||
При уровне **Ошибка** разделы **Логи** и **Соединения** в веб-интерфейсе не будут показывать данные - они получают информацию из потока логов, который при этом уровне практически пуст.
|
||||
:::
|
||||
|
||||
:::info Файл ошибок
|
||||
b4 не ведёт постоянный лог-файл - всё выводится в stdout/stderr (и перехватывается веб-интерфейсом через WebSocket). В файл `errors.log` записываются только критические ошибки и аварийные завершения.
|
||||
:::
|
||||
|
||||
:::tip
|
||||
Для диагностики проблем используйте **Трассировка** или **Отладка**. Для обычной работы достаточно **Инфо**.
|
||||
:::
|
||||
|
||||
## Веб-сервер
|
||||
|
||||
Настройки веб-интерфейса b4.
|
||||
|
||||

|
||||
|
||||
| Параметр | Описание | По умолчанию |
|
||||
| --- | --- | --- |
|
||||
| Адрес привязки | 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 с применением настроенных сетов.
|
||||
|
||||

|
||||
|
||||
| Параметр | Описание | По умолчанию |
|
||||
| --- | --- | --- |
|
||||
| Включить | Запустить 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-сервер | Выкл |
|
||||
| Адрес привязки | 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 Clamping | - | Выкл |
|
||||
| Размер MSS | Размер MSS в байтах. Меньше значение = больше фрагментация | 10–1460 | `88` |
|
||||
|
||||
:::info Глобальный vs индивидуальный MSS
|
||||
Глобальный MSS Clamping применяется ко **всему** трафику на порт 443. Если нужно ограничить MSS только для конкретных устройств (например, телевизор с YouTube) - настройте MSS в столбце **MSS** в [таблице устройств](#фильтрация-устройств) ниже. Индивидуальный MSS работает независимо от глобального.
|
||||
:::
|
||||
|
||||
## Фильтрация устройств
|
||||
|
||||
Ограничение работы b4 трафиком от конкретных устройств в сети (по MAC-адресу). Полезно, если обход нужен не для всех устройств.
|
||||
|
||||

|
||||
|
||||
| Параметр | Описание | По умолчанию |
|
||||
| --- | --- | --- |
|
||||
| Включить | Активировать фильтрацию по устройствам | Выкл |
|
||||
| Определение производителя | Скачать базу vendor для определения производителя по MAC (~6 МБ) | Выкл |
|
||||
| Инвертировать выбор | Переключение между белым и чёрным списком | Выкл |
|
||||
|
||||
:::info Режимы фильтрации
|
||||
|
||||
- **Белый список** (по умолчанию) - обход DPI работает **только** для выбранных устройств
|
||||
- **Чёрный список** (инвертировать выбор) - выбранные устройства **исключаются** из обхода DPI
|
||||
|
||||
:::
|
||||
|
||||
### Таблица устройств
|
||||
|
||||
При включении фильтрации появляется таблица обнаруженных устройств:
|
||||
|
||||
| Столбец | Описание |
|
||||
| --- | --- |
|
||||
| Выбор | Чекбокс для включения/исключения устройства |
|
||||
| MAC | MAC-адрес |
|
||||
| IP | Текущий IP-адрес |
|
||||
| Имя | Псевдоним устройства (можно задать через иконку редактирования) или vendor |
|
||||
| MSS | Индивидуальный MSS Clamping для этого устройства (10–1460, пусто = выключен) |
|
||||
|
||||
Кнопка **Обновить** перезагружает список устройств из ARP-таблицы.
|
||||
|
||||
:::tip Индивидуальный MSS
|
||||
MSS Clamping можно настроить для каждого устройства отдельно - например, уменьшить MSS только для телевизора с YouTube, не затрагивая остальные устройства.
|
||||
:::
|
||||
|
|
@ -0,0 +1,51 @@
|
|||
---
|
||||
sidebar_position: 6
|
||||
title: Дискавери
|
||||
---
|
||||
|
||||
# Настройки дискавери
|
||||
|
||||
Параметры, влияющие на работу автоматического поиска конфигурации и детектора DPI. Настраиваются в **Настройки → Дискавери**.
|
||||
|
||||

|
||||
|
||||
## Параметры
|
||||
|
||||
| Параметр | Описание | Диапазон | По умолчанию |
|
||||
| --- | --- | --- | --- |
|
||||
| Таймаут поиска | Максимальное время ожидания ответа при проверке каждой стратегии | 3–30 сек | `5` сек |
|
||||
| Задержка распространения | Время ожидания после применения конфигурации перед тестированием. Нужно, чтобы правила успели активироваться | 500–5000 мс | `1500` мс |
|
||||
| Попыток валидации | Сколько раз стратегия должна сработать подряд, чтобы считаться рабочей. Больше = надёжнее, но дольше | 1–5 | `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 КБ/с»), - это **не реальная скорость** вашего соединения. При тестировании загружается очень маленький объём данных, недостаточный для точного измерения. Эти цифры нужны только для **сравнения стратегий между собой** - какая быстрее, какая медленнее. Не ориентируйтесь на абсолютные значения.
|
||||
:::
|
||||
|
|
@ -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 могут занимать 5–15 МБ каждый. На роутерах с ограниченной памятью убедитесь, что места достаточно.
|
||||
:::
|
||||
|
||||
## Использование в сетах
|
||||
|
||||
После загрузки баз категории становятся доступны в настройках сетов (вкладка **Цели**):
|
||||
|
||||
- **Категории 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)) |
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
---
|
||||
sidebar_position: 5
|
||||
title: Настройки
|
||||
---
|
||||
|
||||
# Настройки
|
||||
|
||||
Настройки b4 разделены на несколько вкладок:
|
||||
|
||||
- [Основные](./core) - сеть, очередь, функции, логирование, прокси, устройства
|
||||
- [Геоданные](./geodata) - базы GeoSite и GeoIP
|
||||
- [Безопасность](./security) - авторизация, HTTPS
|
||||
- [Пэйлоады](./payloads) - генерация и управление TLS-пэйлоадами для faking
|
||||
- [Дискавери](./discovery) - таймауты, DNS-серверы, эталонный домен
|
||||
- [Бэкап](./backup) - резервное копирование и восстановление
|
||||
|
||||
Изменения в настройках применяются после нажатия кнопки сохранения. Некоторые параметры (SOCKS5, MTProto, очередь) требуют перезапуска сервиса.
|
||||
|
|
@ -0,0 +1,105 @@
|
|||
---
|
||||
sidebar_position: 4
|
||||
title: Пэйлоады
|
||||
---
|
||||
|
||||
# Пэйлоады
|
||||
|
||||

|
||||
|
||||
## Зачем нужны пэйлоады
|
||||
|
||||
Одна из стратегий обхода 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/`).
|
||||
|
|
@ -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://`.
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
---
|
||||
sidebar_position: 8
|
||||
title: Мониторинг доменов
|
||||
---
|
||||
|
||||
# Мониторинг доменов (Watchdog)
|
||||
|
||||
Мониторинг периодически проверяет доступность указанных доменов и при обнаружении блокировки автоматически запускает [дискавери](./discovery) для поиска рабочей конфигурации.
|
||||
|
||||
Настройки мониторинга находятся в **Настройки → Дискавери → раздел Мониторинг**.
|
||||
|
||||

|
||||
|
||||
## Как это работает
|
||||
|
||||
1. Мониторинг с заданным интервалом делает HTTP-запрос к каждому домену из списка
|
||||
2. Если домен не отвечает или обнаружена страница блокировки - фиксируется ошибка
|
||||
3. После нескольких последовательных ошибок (настраивается) мониторинг автоматически запускает дискавери для этого домена
|
||||
4. Найденная конфигурация применяется к существующему сету или создаётся новый
|
||||
|
||||
## Параметры
|
||||
|
||||
| Параметр | Описание | По умолчанию |
|
||||
| --- | --- | --- |
|
||||
| Интервал проверки | Как часто проверять домены, когда всё работает | `300` сек (5 мин) |
|
||||
| Интервал при ошибке | Как часто проверять, если домен уже в статусе «Проблема» | `60` сек |
|
||||
| Кулдаун | Пауза после попытки восстановления перед возобновлением обычных проверок | `900` сек (15 мин) |
|
||||
| Таймаут | Максимальное время ожидания ответа от домена | `15` сек |
|
||||
| Макс. попыток | Сколько ошибок подряд нужно для запуска автовосстановления | `3` |
|
||||
|
||||

|
||||
|
||||
## Статусы доменов
|
||||
|
||||
| Статус | Значение |
|
||||
| --- | --- |
|
||||
| **Доступен** | Домен отвечает нормально |
|
||||
| **Проблема** | Зафиксированы ошибки, но порог для восстановления ещё не достигнут |
|
||||
| **Восстановление** | Запущен дискавери для поиска рабочей конфигурации |
|
||||
| **В очереди** | Домен ожидает следующей проверки |
|
||||
|
||||
## Добавление доменов
|
||||
|
||||
Домены можно добавлять двумя способами:
|
||||
|
||||
- Через панель «Мониторинг доменов» на главной - поле ввода с кнопкой «+»
|
||||
- Через **Настройки → Дискавери → раздел Мониторинг**
|
||||
|
||||
Можно указать как домен (например, `youtube.com`), так и полный URL (например, `https://youtube.com/watch?v=test`). Если указан URL - мониторинг будет проверять именно этот адрес. Если указан только домен - проверяется `https://домен/`.
|
||||
|
||||
:::tip Какие домены добавлять
|
||||
Добавляйте домены, которые вы реально используете и которые могут быть заблокированы. Мониторинг проверяет именно HTTP-доступность, поэтому домен должен отвечать по HTTP/HTTPS.
|
||||
:::
|
||||
|
||||
:::warning Мониторинг и дискавери
|
||||
Если дискавери уже запущен вручную, мониторинг не будет запускать параллельный процесс - он дождётся завершения текущего.
|
||||
:::
|
||||
6
docs/i18n/ru/docusaurus-theme-classic/footer.json
Normal file
6
docs/i18n/ru/docusaurus-theme-classic/footer.json
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"copyright": {
|
||||
"message": "Copyright © {year} B4 Project",
|
||||
"description": "Footer copyright"
|
||||
}
|
||||
}
|
||||
18
docs/i18n/ru/docusaurus-theme-classic/navbar.json
Normal file
18
docs/i18n/ru/docusaurus-theme-classic/navbar.json
Normal 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"
|
||||
}
|
||||
}
|
||||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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) => (
|
||||
|
|
|
|||
|
|
@ -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 />
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue