Импорт из другого инструмента
b4 читает командную строку byedpi или zapret и превращает её в сеты. Откройте страницу Сеты и нажмите Импорт.
Это не то же самое, что вкладка Импорт/Экспорт в редакторе сета, которая переносит готовый сет b4 между установками b4 в виде JSON, и не то же самое, что общий сет - форма для передачи сета другому человеку.
b4 - самостоятельная реализация. Она не разделяет с byedpi и zapret ни кода, ни формата конфигурации, ни движка обхода, и одинаково эти три инструмента не называют почти ничего. Импорт - это перевод, а не перенос: что-то ложится точно, что-то приближённо, а для чего-то соответствия нет вовсе. По каждой опции указано, что именно с ней произошло.
Что можно вставить
Импорт принимает командную строку в тех видах, в которых ею обычно делятся:
- голый список опций:
-Ku -a1 -An -s1+s - вместе с именем программы:
ciadpi -s1+sилиnfqws --dpi-desync=fake - юнит systemd: его строки
ExecStart=иEnvironment= - переменная из конфигурационного файла:
NFQWS_OPT="--dpi-desync=fake ..." - конфигурационный файл целиком, без правок:
/opt/zapret/config,/opt/etc/nfqws/nfqws.confили.bat, запускающийwinwsв Windows
Конфигурационный файл читается так же, как его читает штатный скрипт запуска. Значения, занимающие несколько строк, ссылки $VAR и %VAR%, переносы через \ и ^, комментарии #, rem и :: разбираются до того, как что-либо будет распознано. Переменные, в которых нет опций, например USER, TCP_PORTS или CONFIG_VERSION, не разбираются как аргументы.
Как конфигурационный файл превращается в профили
В конфигурации zapret редко бывает одна командная строка. nfqws-keenetic хранит стратегии для TCP, QUIC, UDP, ipset и пользовательскую в отдельных переменных и склеивает их в фиксированном порядке, вставляя между ними --new. Импорт воспроизводит этот порядок, поэтому сеты соответствуют профилям, которые реально работают на исходной машине. В отчёте указано, какая раскладка распознана и какие переменные использованы.
Три вещи из того же файла попадают в отчёт, но не конвертируются:
- Закомментированные альтернативы. Обычно над активной строкой в конфигурации лежит несколько вариантов
#NFQWS_ARGS=. Отчёт их считает. Если раскомментировать нужный и разобрать заново, импортируется он. - Переменные другого демона.
TPWS_OPTиTPWS_SOCKS_OPTнастраивают tpws, у которого свой синтаксис опций. В конвертацию nfqws они не попадают и перечисляются в отчёте. - Заполнители списков хостов.
<HOSTLIST>и<HOSTLIST_NOAUTO>подставляются скриптами zapret до запуска nfqws. Они превращаются в список хостов, который импорт прочитать не может, и сет запрашивает для него домены.
Понимаются только byedpi и zapret. Командная строка другого инструмента отклоняется с сообщением, называющим этот инструмент, а не разбирается по наиболее похожей таблице опций. zapret2 распознаётся и отклоняется по имени: стратегии обхода он хранит в Lua-скриптах (--lua-desync, --payload), а не в опциях, поэтому переводить в командной строке нечего.
Поддерживаемые инструменты:
| Инструмент | Версии |
|---|---|
byedpi (ciadpi) | 0.13, а также 0.15 - 0.17 |
zapret (nfqws) | текущая |
Инструмент и версия определяются по использованным опциям. Между 0.13 и 0.15 byedpi поменял значение нескольких букв, поэтому, когда в строке нет ничего, что указывает на версию, импорт сообщает, что версия определена предположительно, и её можно выбрать вручную.
Порядок действий
- Вставьте командную строку и нажмите Разобрать. На этом шаге ничего не сохраняется.
- Прочитайте отчёт. Каждый профиль исходной конфигурации становится отдельным сетом, и для него перечислены все входившие в него опции.
- Заполните домены для каждого сета (см. ниже).
- Нажмите Создать сеты.
Домен работает только в одном сете. Если импортированный сет забирает домен, уже указанный во включённом сете, домен удаляется оттуда, а в сообщении после импорта перечислены сеты, потерявшие домены. Импортированные сеты также помещаются перед существующими в порядке сетов.
Профили становятся сетами
И byedpi, и zapret делят конфигурацию на профили. Каждый становится отдельным сетом b4 в том же порядке.
Профили эти два инструмента используют по-разному, и импорт следует каждому:
- byedpi начинает профиль опцией
-A/--auto, что означает «попробовать это, если предыдущая попытка не удалась». Это цепочка повторов, поэтому сеты связываются через эскалацию. b4 эскалирует по повторяющимся RST; у триггеров byedpi по HTTP-редиректу и ошибке TLS соответствия нет, и они отмечаются как приближённые. - zapret начинает профиль опцией
--new, что означает «альтернатива, выбираемая по собственным фильтрам». Такие сеты независимы, эскалации между ними нет.
Профиль byedpi, ограниченный только UDP и без собственных фильтров, объединяется с сетом, обрабатывающим остальной трафик: один сет b4 покрывает оба протокола.
Домены
Сет b4 работает по заданным ему целям. В командной строке byedpi списка хостов обычно нет вовсе, а в zapret он, как правило, указывает на файл той машины, где инструмент запущен, поэтому импорт запрашивает домены для каждого сета, а сет без целей создаёт выключенным.
Отчёт опирается на два правила:
- У сета, существующего только как подстраховка другого, поля доменов нет. Он включается по связи эскалации, а не по совпадению. С теми же доменами он стал бы конкурентом сета, который должен подстраховывать.
- По одному домену может работать только один сет. b4 выбирает один сет на назначение и не переходит к следующему, когда фильтр портов не совпал. Там, где несколько профилей делят список хостов и различаются только фильтруемым портом, более поздние сеты создаются выключенными и называются в отчёте. Задайте каждому те домены, которые он должен обрабатывать, или удалите ненужные.
Файлы со списками хостов
--hostlist=/opt/zapret/ipset/zapret-hosts-user.txt и -H /etc/byedpi/hosts.txt указывают на файлы машины, где работает тот инструмент. Импорт прочитать их не может. У сета, чей профиль ссылался на файл, путь показан рядом с полем доменов. Откройте этот файл на той машине и вставьте его содержимое сюда.
То же касается фейкового пэйлоада, загружаемого из файла (--dpi-desync-fake-tls=/opt/.../tls_clienthello.bin). Вместо него используется встроенный пэйлоад. Чтобы задействовать исходный, загрузите файл в разделе Настройки -> Пэйлоады.
Пэйлоад, заданный шестнадцатеричным шаблоном, читается там, где в b4 есть то же самое: --dpi-desync-fake-tls=0x00000000 становится нулевым фейковым пэйлоадом b4, а нулевой --dpi-desync-fake-quic - заполнением нулями, которое сет использует, когда UDP-пэйлоад не задан. Другому шаблону соответствия нет: b4 умеет сгенерированный ClientHello, пресет, нулевой пэйлоад и загруженный дамп.
Отчёт
Для каждой опции есть строка о том, во что она превратилась.
| Результат | Значение |
|---|---|
| Перенесено | В b4 есть то же самое. Заданные поля b4 перечислены под пояснением |
| Приближённо | Использовано ближайшее поведение b4. В строке сказано, чем оно отличается |
| Нет аналога | b4 такое выразить не может |
| Неприменимо | Опция настраивает сам процесс другого инструмента (порт прослушивания, размеры буферов, режим демона) и для b4 ничего не значит |
| Без эффекта | Опция разобрана, но ничего не меняет. Либо она ничего не делает и в исходном инструменте, например --md5sig в профиле byedpi, который не отправляет фейковых пакетов, либо та же опция встречается дальше ещё раз и применяется только последнее значение |
| Не распознано | Неизвестная опция для этого инструмента и версии |
| Ошибка | Значение прочитать не удалось |
Процент над отчётом полностью учитывает перенесённые опции и частично - приближённые. Опции со статусом Неприменимо в него не входят: отброшенный порт прослушивания прокси не является потерей точности.
Что не переносится
Наиболее заметные пробелы, в обе стороны:
- Автоматический TTL (
--dpi-desync-autottl, замер числа хопов в byedpi). b4 использует фиксированный TTL для фейковых пакетов: он берётся из--dpi-desync-ttl, если тот задан в источнике, и не меняется, если не задан. Задайте его вручную или найдите через Дискавери. - Изменение открытого HTTP (
--hostcase,--domcase,--mod-httpв byedpi). b4 открытый HTTP не модифицирует. - Списки исключений (
--hostlist-exclude,--ipset-exclude). Просто не добавляйте эти записи в цели сета. - Диапазоны пакетов (
--dpi-desync-start,--dpi-desync-cutoff,--roundв byedpi). b4 использует лимит пакетов на соединение на вкладке TCP. - Отрицание в фильтрах портов (
--filter-tcp=~80). Фильтр портов b4 перечисляет порты, на которых работать. - Работа прокси. byedpi - это SOCKS5-прокси, поэтому его адрес прослушивания, размеры буферов, лимиты соединений и опции демона описывают процесс, которого у b4 нет.
После импорта
Результат - отправная точка, а не проверенная конфигурация. Провайдер, маршрут и способ блокировки на машине, откуда взята конфигурация, и на этой отличаются.
Запустите Дискавери по импортированным доменам, чтобы убедиться, что стратегия здесь работает, и найти другую, если нет.