Перейти к основному содержимому

Импорт из другого инструмента

b4 читает командную строку byedpi или zapret и превращает её в сеты. Откройте страницу Сеты и нажмите Импорт.

Это не то же самое, что вкладка Импорт/Экспорт в редакторе сета, которая переносит готовый сет b4 между установками b4 в виде JSON, и не то же самое, что общий сет - форма для передачи сета другому человеку.

b4 - не форк

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 поменял значение нескольких букв, поэтому, когда в строке нет ничего, что указывает на версию, импорт сообщает, что версия определена предположительно, и её можно выбрать вручную.

Порядок действий​

  1. Вставьте командную строку и нажмите Разобрать. На этом шаге ничего не сохраняется.
  2. Прочитайте отчёт. Каждый профиль исходной конфигурации становится отдельным сетом, и для него перечислены все входившие в него опции.
  3. Заполните домены для каждого сета (см. ниже).
  4. Нажмите Создать сеты.
Импорт забирает домены у существующих сетов

Домен работает только в одном сете. Если импортированный сет забирает домен, уже указанный во включённом сете, домен удаляется оттуда, а в сообщении после импорта перечислены сеты, потерявшие домены. Импортированные сеты также помещаются перед существующими в порядке сетов.

Профили становятся сетами​

И 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 нет.

После импорта​

Результат - отправная точка, а не проверенная конфигурация. Провайдер, маршрут и способ блокировки на машине, откуда взята конфигурация, и на этой отличаются.

Запустите Дискавери по импортированным доменам, чтобы убедиться, что стратегия здесь работает, и найти другую, если нет.