Примечания к выпуску Chute tvOS

Версия 1.5.1 (90)

Новые возможности:

  • В редакторы добавлены цепочки прокси: теперь политика предлагает underlying-proxy для любого типа прокси, поэтому её соединение устанавливается через названную политику — потоковые протоколы идут по потоку вышестоящего узла, Hysteria2, TUIC, MASQUE и XHTTP поверх HTTP/3 — по его UDP-ретрансляции, WireGuard и AmneziaWG туннелируются через него, а сеансы SSH и AnyTLS открываются поверх него, — а цепочка, замыкающаяся в цикл, длиннее 16 переходов или называющая несуществующую политику, отклоняется при загрузке, а не подключается напрямую. Цепочку поддерживает любой тип прокси, кроме Tailscale, а политики TUIC, Hysteria2, WireGuard, AmneziaWG и ShadowTLS в остальном записываются обратно в точности так, как были прочитаны
  • Добавлен вышестоящий узел уровня группы: редактор группы записывает underlying-proxy= один раз — в кавычках, когда имя содержит запятую или пробел, — так что каждый участник этой группы достигает своего сервера через одну названную там политику
  • В разделе «Дополнительно» добавлена строка «Фронтальный прокси»: она записывает global-underlying-proxy, выбираемый из «Нет» и политик и групп профиля, и охватывает каждый узел, который не задаёт собственный вышестоящий узел; у close-if-proxy-chain-missing строки нет, и он сохраняется в точности как записан
  • В редакторы провайдеров правил и прокси добавлена настройка «Загрузка через»: policy= загружает список через выбранную политику, а «Нет» — напрямую; редактор провайдера прокси также сохраняет underlying-proxy самого провайдера
  • В редактор Shadowsocks добавлен UDP поверх TCP: переключатель udp-over-tcp и, пока он включён, выбор «Версия UoT» (1 или 2; если версия не записана, используется 2), так что UDP этого прокси идёт внутри его TCP-соединений и продолжает работать через вышестоящий узел, который не передаёт UDP. Сервер должен поддерживать UoT, а mihomo использует версию 1. Версия, которую выбор не может показать, сохраняется в записанном виде, пока вы не выберете другую
  • В сведения о соединении добавлена строка «Цепочка прокси»: для соединения, прошедшего через цепочку, рядом с направившей его политикой указан каждый переход — Airport/HK-01 → Landing; подробности запроса и список UDP в веб-консоли показывают тот же путь, а экспорт HAR его сохраняет
  • Добавлены группы ретрансляции (relay, как в Clash и mihomo): участники выстраиваются в цепочку в том порядке, в каком записаны, — к первому подключение идёт напрямую, к каждому следующему — через предыдущих, а последний подключается к цели. Тип Relay есть в выборе типа группы; группа ретрансляции показывает «Имя», «Тип группы» и «Скрытая», хранит участников в этом порядке и не теряет своих параметров при сохранении, а группа, в которой меньше двух участников и нет динамического источника, отклоняется с отдельным сообщением
  • Добавлены случайные группы (random, как в Shadowrocket): для каждого соединения участник выбирается случайно, а для UDP — только среди участников, которые передают UDP. Переключать в такой группе нечего, поэтому её нет там, где выбирается политика группы, а редактор групп сохраняет её именно как случайную группу
  • Добавлен UDP для VMess и VLESS: раньше отправленный в них UDP сразу отклонялся (срабатывал udp-policy-not-supported-behaviour, по умолчанию REJECT); теперь он идёт по отдельному соединению на каждый адрес назначения, как в mihomo, sing-box и Shadowrocket
  • Для провайдера, чей набор правил не удалось загрузить, — загрузка так и не прошла успешно или полезная нагрузка превысила ограничение размера — теперь в его строке красным показывается причина; раньше такой провайдер выглядел точно так же, как рабочий, хотя ни одно ссылающееся на него правило ничего не находило
  • Редакторы больше не теряют то, что не могут показать: правила сохраняют параметры, для которых у них нет строки (notification-text, no-resolve, update-interval и прочие), записывают предварительное сопоставление после политики и только для REJECT, загружают KEY:value правила SUBNET, различают в RULE-SET варианты SYSTEM, LAN, провайдер и URL и умеют составлять подправила AND / OR / NOT, которые корректно разбираются; группы загружают объявленных участников, скрывают провайдера, которого создаёт policy-path, и сохраняют фильтры, include-*, default=, interrupt-exist-connections и неизвестные параметры в исходном порядке; записи хостов сохраняют весь список серверов вместе с #proxy и комментарием, показывают значения DoH / DoT / DoQ / DoH3 и получили тип «Скрипт»; Map Local сохраняет двоичные тела, свой тип данных и код состояния, а также заголовок в стиле Surge, значение которого содержит двоеточие; «Модули» сохраняют свои строки #!system_version и строки для других платформ
  • Добавлены строки для настроек, которые редакторы не могли показать: DoT / DoQ / DoH3, выделенные DNS для прямых соединений, для прокси-серверов и резервный, SVCB, шифрованный DNS, который следует правилам и может пропускать проверку сертификата, UDP без ретрансляции, proxy-test-url / internet-test-url / test-timeout, MitM для HTTP/2 и блокировка QUIC с исключёнными именами хостов, режим фильтра Replica, варианты REJECT и встроенный PROXY в выборе политики, dns-failed для FINAL и IPv6-литералы в качестве хостов политик; в «Перезапись заголовков» добавлено «Заменить заголовок (регулярное выражение)», в «Перезапись URL» — «Отклонить (массив)» и «Отклонить (прозрачный GIF)», в «Скрипты» — тип generic и имя события, а для диапазонов портов, HOSTNAME-TYPE, PROTOCOL и форматов провайдеров появились подсказки с допустимыми значениями
  • Добавлен tun-included-routes: перечисленные CIDR добавляются к маршрутам туннеля после маршрута по умолчанию, поэтому диапазон, который иначе забрала бы собственная подсеть сетевого интерфейса (система предпочитает более конкретный маршрут), идёт через Chute. Записи, которые отрезали бы сам туннель (loopback, собственные подсети туннеля, link-local, многоадресные, широковещательные, длина префикса 0), отклоняются, а причина записывается в журнал, частные диапазоны принимаются с предупреждением, а изменённый список применяется при горячей перезагрузке без перезапуска туннеля
  • В «Перезапись тела» добавлен jq: http-request-jq и http-response-jq, заданные в файле конфигурации, выполняют полноценную программу jq над JSON-телом (редактор «Перезапись тела» на Apple TV их не предлагает); о недопустимой программе сообщается, и её правило пропускается, а если тело не в формате JSON, программа завершается ошибкой или её вывод пуст, тело остаётся без изменений
  • Добавлены общие скрипты: у скрипта type=generic нет автоматического триггера, и он запускается только по требованию — через GET /api/scripts и POST /api/scripts/run
  • Добавлены отдельные пулы DNS: direct-dns-server разрешает домены, которые правило направляет в DIRECT, proxy-dns-server разрешает имена хостов самих ваших прокси-серверов, а к fallback-dns-server обращаются, когда основные серверы не дают ответа; для каждого пула резервом служат глобальные серверы
  • Для вышестоящих DNS-серверов, включая DoQ и DoH3, добавлены #proxy / #proxy=<policy>: QUIC-резолвер работает через UDP-ретрансляцию политики; если политика не может передавать UDP, этот сервер пропускается, а не опрашивается напрямую; обычный резолвер, направленный через политику, переходит на DNS поверх TCP; а для путей, где DNS поверх UDP отбрасывается, принимаются простые серверы tcp://
  • Добавлены encrypted-dns-follow-outbound-mode, allow-dns-svcb — пока он выключен, на запросы HTTPS и SVCB приходит пустой ответ, — и параметры отдельных серверов #h3, #skip-cert-verify, #disable-ipv4, #disable-ipv6 и #disable-qtype=
  • Расширено «Локальное сопоставление DNS»: запись [Host] сохраняет все перечисленные в ней серверы и опрашивает их параллельно, сопоставляет одному домену несколько адресов, может использовать в качестве ключа набор правил (RULE-SET:<url>) и запускает для этого домена скрипт type=dns (script:<name>)
  • Добавлено FINAL,<policy>,dns-failed: если имя не удаётся разрешить, соединение не закрывается, а открывается через политику FINAL с разрешением имени на удалённой стороне
  • Семейство REJECT стало полноценными политиками — REJECT-DROP, REJECT-NO-DROP, REJECT-TINYGIF, REJECT-IMG, REJECT-DICT, REJECT-ARRAY, REJECT-200 и REJECT-VIDEO: каждая отвечает на HTTP-запрос телом, описанным в документации, а хост, отклонённый более 50 раз за 30 секунд, переводится на REJECT-DROP
  • Добавлены встроенные наборы правил: на разделы [Ruleset Name] в файле конфигурации можно ссылаться как RULE-SET,<name>, в том числе друг из друга — до восьми уровней вложенности, циклы отклоняются; список провайдеров правил показывает их, а редактировать их нужно в файле конфигурации
  • Добавлены диапазоны и сравнения для DEST-PORT, SRC-PORT и IN-PORT (80-81, >=50000, списки через /), значения HOSTNAME-TYPE — IPv4, IPv6, DOMAIN и SIMPLE, — а также рабочие правила IN-TYPE, IN-USER и IN-NAME: теперь они срабатывают на реальном трафике, а не только при пробном прогоне
  • Добавлены настройки MitM: расшифровка HTTP/2 (h2), блокировка QUIC к расшифровываемым хостам, чтобы HTTP/3 не обходил расшифровку (auto-quic-block), исключение хостов из расшифровки и ключевые слова списка хостов <ipv4-address>, <ipv6-address> и <simple-hostname>
  • Добавлена маршрутизация QUIC по домену: имя берётся из QUIC Initial клиента, ClientHello, разбитый на несколько пакетов Initial, собирается заново, а поток придерживается, пока имя не станет известно, — поэтому правила DOMAIN работают и для соединений HTTP/3, открытых по адресу без доменного имени
  • Добавлен icmp-auto-reply, включённый по умолчанию: на ping внутри туннеля приходит локальный ответ — по IPv4 и IPv6 — вместо тайм-аута
  • Расширен импорт: правила GEOSITE и категорийные правила GEOIP из mihomo разворачиваются в работающие наборы правил, группы policy-path создают провайдера с update-interval, фильтрами и списками включения, SUB-RULE из mihomo разворачивается в правила AND, detour из sing-box и dialer-proxy из mihomo импортируются как цепочки, allowed-ips WireGuard компилируется и соблюдается, поэтому раздельный туннель больше не забирает себе все адреса назначения, а interface= / allow-other-interface= политики привязывает её соединения к одному сетевому интерфейсу
  • Расширен API скриптов: $httpAPI обращается к собственным маршрутам движка без открытия сокета, $httpClient учитывает policy, read-etc-hosts передаёт файл hosts в DNS, а $event.name сообщает, какое событие сработало на самом деле

Улучшения:

  • Все строки, которые показывает приложение, теперь есть на всех восьми языках: восемь надписей, которые раньше отображались по-английски, в том числе строки Tailscale, переведены, а 88 текстов, где встроенная формулировка приложения расходилась с его языковыми файлами, теперь совпадают
  • Термины теперь одинаковы во всех приложениях Chute: фильтр журнала по уровню и его семь значков используют названия уровней из движка, подписи балансировки нагрузки следуют Chute Mac, а «Веб-консоль», «Запись трафика», «Имитация ответов», «Локальное сопоставление DNS» и «HTTP API управления» называются единообразно в пределах каждого из восьми языков
  • Импорт опубликованного профиля больше не теряет маршрутизацию: dns-server принимает URL шифрованного DNS, строки слушателей принимают пароль, участники группы в кавычках больше не теряются, логические правила sing-box преобразуются так, как описано в документации, участники PASS отбрасываются, а не превращаются в REJECT, а неподдерживаемый протокол или тип группы вызывает предупреждение, а не выводит из строя всю группу, — в импортированных профилях mihomo правил, которые никогда не могут сработать, раньше было большинство, а теперь почти не осталось
  • Наборам правил нужно гораздо меньше памяти: провайдеры загружаются по очереди, а не перестают загружаться совсем после 35-го, пиковое потребление памяти при преобразовании снизилось на 62–73 %, число индексных соединений ограничено, и при нехватке памяти они освобождаются, а полезная нагрузка, слишком большая для Apple TV, отклоняется, и причина показывается в строке её провайдера
  • Ограничения ресурсов не дают слишком большой конфигурации вывести расширение туннеля за предел памяти: на Apple TV ограничены хранилище сертификатов MitM, очередь записи трафика, размер и число скриптов, бюджет запросов консоли, число узлов Tailscale и кэш DNS
  • Проверка задержки использует правильную цель: учитываются test-url и test-timeout группы, proxy-test-url профиля, а также собственные test-url и expected-status участника, а узел в цепочке проверяется через свою цепочку, а не напрямую
  • Веб-консоль и API управления: правило, добавленное во время работы, больше не остаётся после перезагрузки того же профиля, а курсоры журнала только растут, поэтому опрос не пропускает записи
  • ShadowTLS теперь проверяет сертификат сайта-прикрытия, если задан sni=, как это делает sing-box; skip-cert-verify=true отключает проверку (раньше этот параметр игнорировался, и сертификат не проверялся вовсе), а без sni= проверка пропускается с предупреждением

Исправления ошибок:

  • Исправлено исчезновение списка конфигураций после обновления приложения: конфигурации хранятся в папке Caches приложения — единственном месте, куда tvOS разрешает приложению записывать и которое система очищает всякий раз, когда ей нужно освободить место, — поэтому после обновления список мог оказаться пустым, и на экране ничто не объясняло почему. Начиная с этой версии каждая конфигурация хранится ещё и в хранилище настроек приложения, которое система не очищает (её текст — если он не больше 256 КБ, адрес подписки и интервал обновления — всегда); пропавшие файлы записываются обратно при запуске и при возвращении приложения на передний план, конфигурации, от которых остался только адрес, загружаются заново, а главный экран сообщает «Восстановлено конфигураций: N.» Удалённая вами конфигурация забывается и не возвращается. Вернуть нельзя конфигурации, потерянные до первого запуска этой версии, и конфигурацию больше 256 КБ, полученную не по адресу; а если туннель запущен из Пункта управления, когда приложение ещё ни разу не открывали, ничего не восстанавливается
  • Исправлены настройки SSID на Apple TV: открытие «ПРИОСТАНОВКА ПО SSID» вызывало исключение для любой записи без SSID (TYPE:, BSSID: или ROUTER:), список переписывал [SSID Setting] при каждом заходе, а редакторы SSID и подсети отбрасывали участников, для которых у них не было строки. Теперь список показывает только простые записи "<name>" suspend=true и оставляет всё остальное на месте, редактор группы ssid хранит участников в порядке объявления и предлагает выбор «Сопоставлять по», а при сохранении таких настроек появляется сообщение, что на Apple TV они недоступны и сохраняются для использования на iOS и macOS
  • Исправлено: редакторы портили записи, которые не могли показать полностью: запись [Host] с несколькими адресами урезалась до первого из них сразу при открытии, значение [Script] с запятой (cron 0 8,20 * * *, аргумент JSON) обрезалось при каждом сохранении, строка [Body Rewrite] теряла дополнительные пары регулярных выражений, строки правил, групп, хостов, Map Local и перезаписи заголовков теряли параметры, для которых у редактора не было строки, а «Дополнительно» при каждом заходе удаляло пробелы внутри элементов своих списков. Профиль, сохранённый без открытия такой записи, не затрагивался, поэтому ошибка и оставалась незамеченной
  • Исправлена путаница загрузок: теперь каждая загрузка идёт в собственный временный файл, который удаляется после чтения, а также при сбое загрузки или чтения, поэтому управляемое обновление больше не читает бесконечно свою первую загрузку, а два адреса с одинаковым предложенным именем больше не перезаписывают друг друга, — и имя файла, предложенное сервером, больше не может определять, куда записывается файл
  • Исправлено определение формата по имени файла: «Загрузить по URL» и обновление управляемой конфигурации теперь определяют, что отдаёт адрес, по содержимому, поэтому адрес .conf, отдающий Clash, преобразуется при добавлении, а обновление, обнаружившее такой адрес, оставляет файл как есть; преобразование выполняется до добавления заголовка MANAGED-CONFIG, при неудачном преобразовании показывается его первая ошибка, а его уведомления подсчитываются на экране и записываются в журнал
  • Исправлены выгрузка и загрузка на странице Wi-Fi: /up преобразует Clash и sing-box так же, как /upload, обе сохраняют <name>.conf, имя, уже занятое другой конфигурацией, отклоняется, /download больше не создаёт .conf.conf и теперь отправляет закодированный filename*, а /delete сравнивает имена в NFC, начиная с точного совпадения, — поэтому используемую конфигурацию нельзя ни удалить, ни провести мимо проверки на использование, записав то же имя в другой форме Unicode
  • Исправлено: сохранение поверх конфигурации с тем же именем происходило молча; теперь редактор и «Загрузить по URL» сначала спрашивают, а перезапись конфигурации, с которой работает туннель, перезагружает её
  • Исправлено: скрытые группы политик появлялись в списке групп туннеля и в списке «Глобальный»; скрытая группа, которая сейчас используется, остаётся в списке, а «Глобальный», указывающий на группу select, показывается, отмечается и восстанавливается по имени
  • Исправлена передача по QR-коду на странице выгрузки по Wi-Fi: передача chute://tv?url= снова встроена прямо в страницу, поэтому сканирование кода открывает приложение Chute iOS, как и обещает страница; iPad тоже выполняет передачу, потому что iPadOS представляется настольным браузером, которого проверка «только для телефона» не распознавала; а браузер, не открывающий пользовательскую схему без нажатия, теперь получает кнопку «Открыть в Chute», переведённую на девять языков страницы
  • Исправлено несколько сбоев: в «Настройки › Сессии», в редакторе конфигурации для профиля с loglevel = none, на сессии, которую туннель оставил недописанной (открыть её потом было невозможно), при каждом запуске после неожиданного ответа сервера лицензий, при запуске и в «Просмотр лицензии», когда лицензию не удавалось прочитать, и при каждом открытии списка конфигураций, если в общей папке оказывался посторонний системный файл. Очистка поля в настройках теперь действительно его очищает
  • Исправлено: обновление подписки, срок которого подошёл, задерживало список конфигураций и сохранение правок на время до 30 секунд; теперь обновление продолжается, когда завершается его загрузка, и ничего не задерживает
  • Исправлены сбои из-за того, что два потока одновременно изменяли одни и те же данные, — при холодном запуске, во время чтения журнала сессии и во время обновления списка сессий
  • Исправлено: перезапущенный туннель повторно использовал первый локальный порт и номера последовательности TCP прошлого запуска, и пир WireGuard, ещё державший старое соединение, отвечал на них сбросом; теперь TCP-стек туннеля инициализируется из системного источника случайных чисел и выбирает начальные номера последовательности так, как описывает RFC 6528
  • Исправлено: XHTTP через туннель зависал после первой записи приложения, поэтому рукопожатие TLS не завершалось, а выгрузка отправляла только один фрагмент; теперь каждая запись завершается по порядку, а если выгрузки ждут больше 1 МБ, следующая запись ожидает, пока очередь не освободится
  • Исправлено: PROTOCOL,TCP и PROTOCOL,UDP никогда не срабатывали; теперь транспорт определяется для каждого входящего соединения, так что привычный способ блокировать QUIC правилом AND работает
  • Исправлено: RULE-SET и DOMAIN-SET внутри AND / OR / NOT всегда давали «ложь» — из-за чего NOT,((RULE-SET,…)) отклонял и местный трафик, — а SCRIPT внутри логического правила всегда давал «истину»
  • Исправлено: RULE-SET,<name>,<policy>,no-resolve терял no-resolve при записи по имени, GEOIP и IP-ASN UNKNOWN никогда не срабатывали, status-code= в Map Local игнорировался при HTTP/2, а перезапись заголовков ответа при обычном HTTP сравнивалась только с путём, поэтому шаблон, написанный для полного URL, не мог сработать никогда
  • Исправлено: block-quic принимал только одно из значений Surge, а любое другое значение означало, что QUIC вообще не блокируется
  • Исправлен API скриптов: $klne.getPolicyGroups() и selectPolicy() больше не выбрасывают исключение при первом вызове, reloadConfiguration() действительно перезагружает, getActiveConnections() сообщает настоящие хост, порт и id, closeConnection() действительно закрывает, а скрипт перед отправкой с requires-body наконец получает тело
  • Исправлено: [Replica] keyword-filter сравнивал имя хоста целиком, вместо того чтобы проверять, содержит ли оно ключевое слово, поэтому keyword-filter = google не охватывал www.google.com
  • Исправлено: правила PROCESS-PATH и PROCESS-NAME-REGEX на Apple TV сравнивались с именем, которое не является именем процесса; как и PROCESS-NAME, они работают только на macOS и здесь никогда не срабатывают
  • Различные улучшения стабильности и производительности

Версия 1.4 (75)

Новые возможности:

  • В панель управления добавлена строка «Адрес веб-консоли»: она появляется, как только слушатель консоли действительно поднят, и при открытии показывает QR-код, URL которого несёт токен доступа — достаточно отсканировать его телефоном, чтобы войти, не переписывая пультом адрес и 32 шестнадцатеричных символа
  • В Настройки добавлен «Офлайн-диагностический пакет», который приложение собирает без работающего туннеля: сведения об устройстве и приложении, VPN-профиль в том виде, в каком его хранит tvOS, сводка выбранной конфигурации и её ошибок разбора, раздел о сети (доступность, тип канала, серверы DNS, локальные адреса и интерфейсы), очищенное начало конфигурации, то, как завершился предыдущий запуск, части журнала последнего сеанса и ожидающие отправки отчёты о сбоях. Поскольку в tvOS нет меню «Поделиться», архив отдаёт одноразовый локальный HTTP-сервер по неугадываемому пути и показывает его в виде QR-кода; после выхода с экрана ссылка перестаёт работать
  • В журнал сеанса добавлен фильтр по уровню — «Все», Notify+, Warning+, Fatal — так что «покажи предупреждения» умещается в одно нажатие вместо поиска, набранного на экранной клавиатуре; строки, уровень которых разборщик не распознал, никогда не скрываются
  • В сведения о сеансе добавлена атрибуция перезаписи: раздел «REWRITES» рядом с правилом и политикой, направившими запрос, называет правило перезаписи URL, заголовков или тела либо имитации ответов, которое его изменило
  • В редактор конфигурации добавлена строка «Разрешить доступ по Wi-Fi» — ключ, который появляется при импорте http-listen = 0.0.0.0:… из Surge или allow-lan из sing-box и который редактор раньше вообще не мог показать; пока он включён, обе строки слушателей показывают «Вкл.» и заблокированы, поскольку движок сам расширяет оба слушателя
  • Добавлен французский как встроенный язык, и все восемь встроенных языков объявлены в App Store
  • В веб-консоль добавлены вкладки «Текущие» и «История», вид подробностей (совпавшее правило, источник правила, политика, адаптер, источник DNS, причина закрытия, тела запроса и ответа), страница «Правила», показывающая, какие правила перезаписи срабатывали, и страница «Диагностика» (объём памяти, CPU, время работы, потоки, как завершился предыдущий запуск, счётчик отказов, журнал событий, снимок Tailscale и пробы ping / DNS / выход / URL-тест); консоль теперь полностью переведена на все девять языков — и поскольку самому телевизору некуда положить файл, именно там пользователь tvOS скачивает диагностический пакет среды выполнения и экспорт HAR
  • Добавлены точки входа HTTP-API управления: /api/health, /api/events, /api/tailscale, пробы под /api/diagnostics/, /api/connections/export?format=har, /api/diagnostics/bundle, управление правилами перезаписи и хостами MitM через /api/rewrites и /api/mitm/hosts, POST /api/rules/match для пробного прогона запроса по таблице правил (сообщаются оба прохода DNS), GET|PUT /api/loglevel для смены уровня журнала и разделов подсистем без перезагрузки и POST /api/config/validate для проверки профиля без его применения

Улучшения:

  • HTTP-API управления больше не открыт без аутентификации, когда в конфигурации нет external-http-secret: движок генерирует токен, который несёт QR-код адреса веб-консоли; чтобы сохранить анонимный доступ, задайте external-http-secret = none; кроме того, адрес прослушивания с подстановкой больше не считается loopback
  • Сопоставление правил на больших списках стало значительно быстрее: содержимое RULE-SET и DOMAIN-SET индексируется при загрузке или восстановлении вместо потокового просмотра на каждое соединение, а таблица правил, состоящая только из доменных правил, сопоставляется по хешированному плану — для списка в 50 тысяч строк один поиск сокращается примерно с 94 мс до менее 2 мс при около 100 КБ памяти на индекс
  • UDP-потоки сопоставляются один раз: решение по потоку запоминается на 60 секунд, так что последующие датаграммы пропускают оба прохода сопоставления и DNS-запрос между ними
  • Лучшее восстановление после смены сети: туннели, исходный адрес которых больше не существует ни на одном интерфейсе, закрываются, а не держат приложения до тайм-аута простоя, а путь, который принимает соединения, но не передаёт данные, сообщается как «чёрная дыра»
  • Журналы сеансов записываются частями по 8 МБ (до восьми на запуск, самые старые удаляются); экран журнала берёт самые новые части в объёме одной части вместо того, чтобы читать в память весь запуск, сообщает, когда более старые части опущены, и продолжает следить за пишущейся частью через ротацию
  • Движок держит маркер запуска во время работы и при следующем старте сообщает, завершился ли предыдущий запуск штатно или был убит — в заголовке журнала, в /api/status и в обоих диагностических пакетах
  • Экспорт HAR теперь собирается движком из записанных кадров, поэтому коды состояния, метки времени и тайминги реальны, а каждая запись несёт под _kl выбранную политику, совпавшее правило и срабатывания перезаписи
  • Лицензия нужна только для трёх функций, которые продаёт страница покупки, — Несколько конфигураций, Управление локальным прокси-сервером и Запись трафика; переключатели HTTP API и веб-консоли, Определение протокола, Optimus DNS, «Очистить кэш DNS» и строка «Адрес веб-консоли» её больше не требуют, а пользователю без лицензии с остановленным туннелем предлагается запустить туннель, а не страница покупки
  • Консоль, привязанная к адресу loopback, теперь сообщает, что открывается только на этом Apple TV, и что следует задать вместо этого, вместо того чтобы предлагать QR-код, который никуда не ведёт; токен доступа больше не выводится на экран, который видит вся комната
  • Текст о покупке теперь говорит, что одна покупка покрывает три Apple TV и три iPhone или iPad; если «Восстановить покупку IAP» ничего не находит, предупреждение предлагает «Открыть руководство» и показывает QR-код с кроссплатформенными инструкциями по лицензии на языке приложения
  • При loglevel = info объёмный поток, передавший не менее 1 МиБ, при закрытии пишет одну строку о том, сколько он ждал удалённую сторону и сколько — приложение

Исправления ошибок:

  • Исправлен MitM в режиме TUN: хост, совпавший с правилом MitM, зависал до тайм-аута, поэтому перезапись заголовков, перезапись тела, имитация ответов и расшифрованные записи для HTTPS никогда не применялись к трафику приложений (трафик через локальный HTTP/SOCKS5-прокси не затрагивался)
  • Исправлено бездействие allow-wifi-access: локальные слушатели HTTP и SOCKS5 оставались на loopback, и ничто в Wi-Fi не могло до них достучаться; теперь флаг (и allow-lan sing-box при импорте) расширяет оба слушателя, а его отключение перепривязывает их
  • Исправлен сбой приложения при переключении любого выключателя во втором разделе панели управления после того, как строка «Адрес веб-консоли» смогла появляться: число строк таблицы менялось под перезагрузкой отдельной строки
  • Исправлено: после того как движок стал ротировать журнал по фиксированному размеру, экран сеанса показывал произвольный отрезок запуска, а сеанс терял дату после восьмой ротации; части теперь упорядочены по номеру, и живой просмотр больше не замирает на ротации
  • Исправлено чтение всех частей журнала сеанса в память разом — до 64 МБ текста на Apple TV — и фильтр по уровню, пропускавший строки-продолжения многострочной записи, саму запись при этом скрывая
  • Исправлена перезапись заголовка ответа через MitM HTTP/1.1, которая записывалась как применённая, тогда как клиент получал исходный заголовок, и никогда не совпадала с правилом, написанным по полному URL
  • Исправлен Mock Response, который строил ответ из заголовка запроса — строка запроса вместо строки состояния, перенесённые заголовки запроса, неверный Content-Length — и в открытом HTTP отправлял перед ним заголовок исходного сервера
  • Исправлены IP-правила с no-resolve (IP-CIDR, GEOIP, IP-ASN), пропускавшие соединение к IP-литералу, когда определение протокола подставляло для него заголовок Host или имя из обратного DNS; определённый IP-литерал больше не совпадает и с правилами DOMAIN
  • Исправлены строки RULE-SET с опциями после содержимого (GEOIP,CN,no-resolve, DOMAIN,example.com,force-remote-dns), которые отбрасывались или ни с чем не совпадали, и подправила AND/OR/NOT, терявшие no-resolve
  • Исправлено правило HOSTNAME-TYPE, которое никогда не совпадало: тип записи теперь A для соединения, установленного по IPv4, и AAAA по IPv6. Подсказка в редакторе правил показывала для него http | https — значения PROTOCOL, — а для IN-TYPE TCP | UDP; теперь обе называют то, что правило действительно принимает
  • Исправлено чтение IPv6-литерала в квадратных скобках в определённом заголовке Host ([2001:db8::1]:8080) как имени хоста [2001
  • Исправлено: запуск туннеля с группой select, установленной не на первого участника, публиковал уведомление «группа политик переключена», а перестроения после запуска вызывали предупреждение о дребезге; группа без запомненного выбора теперь следует default= профиля, а не принудительно ставится на первого участника
  • Исправлено отклонение external-http-controller = *:9090 и :::9090 — обоих документированных написаний, — из-за чего контроллер молча не запускался
  • Исправлен редкий сбой транспорта XHTTP под нагрузкой
  • Исправлен экран лицензии, помечавший сертификат другого продукта как пакет Chute; то, чем это приложение не может законно владеть, теперь отображается как «Неизвестно», и добавлена метка Android
  • Исправлено: QR-код «Chute iOS» на экране «О программе» вёл на несуществующий идентификатор App Store, а «Оценить» открывало страницу iOS-версии вместо этого приложения
  • Исправлена вёрстка страницы загрузки по Wi-Fi
  • Исправлены китайские и тайские названия семейств перезаписи, чтобы они совпадали с руководством и названиями разделов самого файла конфигурации
  • Различные улучшения стабильности и производительности

Версия 1.3 (62)

Новые возможности:

  • Добавлен транспорт XHTTP в редактор политик — переключатель, режим (auto, packet-up, stream-up, stream-one), путь и хост — для Trojan, VMess и VLESS
  • Добавлены методы шифрования Shadowsocks AEGIS-128L и AEGIS-256
  • Добавлены отсутствовавшие методы шифрования Shadowsocks 2022 (SS2022): 2022-blake3-aes-128-gcm, 2022-blake3-aes-256-gcm и 2022-blake3-chacha20-poly1305
  • Добавлены настройки ECH (Encrypted Client Hello) для TLS-политик — переключатель, закреплённая конфигурация ECH (ech-config) и переопределение прикрывающего имени (ech-public-name)
  • Добавлен отпечаток клиента (uTLS) для каждой политики, а также значение по умолчанию для всего профиля
  • Добавлена поддержка AmneziaWG, варианта WireGuard с обфускацией трафика
  • Добавлен экран отчёта об ошибках конфигурации с поддержкой навигации фокуса tvOS вместо блокирующего предупреждения
  • Добавлен постквантовый гибридный обмен ключами X25519MLKEM768 для TLS 1.3

Улучшения:

  • При сохранении редактор политик теперь сохраняет существующие параметры, недоступные для редактирования в текущем интерфейсе (ECH, ALPN, закрепление сертификата, test-url, udp-relay)

Исправления ошибок:

  • Исправлен сбой туннеля из-за некорректных правил IP-CIDR
  • Исправлены настройки SSH idle-timeout и REALITY spiderx, которые записывались под неверными ключами и отбрасывались при сохранении
  • Исправлен сбой при переключении языка
  • Исправлены проблемы отображения экранных элементов управления
  • Различные улучшения стабильности и производительности

Версия 1.2 (45)

Новые возможности:

  • Добавлен Tailscale как встроенный тип прокси: настройте учётную запись Tailscale, присоединитесь к tailnet и направьте трафик Apple TV через узлы Tailscale — без отдельного клиента
  • Добавлена панель управления Tailscale: отображает состояние узла в реальном времени (онлайн/офлайн, IP, последний раз замечен) и позволяет переключать узел выхода с пульта
  • Добавлены полноэкранные панели Dashboard и Sessions с тёмным журналом сессий по уровням
  • Добавлена панель сведений о туннеле для проверки активных туннелей
  • Добавлен тип прокси MASQUE в редакторе политик

Улучшения:

  • Увеличена пропускная способность TUN на Apple TV
  • Улучшены стабильность соединения и пропускная способность Tailscale и WireGuard
  • Улучшена навигация фокуса на главном экране по спискам, кнопке питания и строке About — стала более предсказуемой
  • Компоновка настроек приведена в соответствие с iOS (удалён пункт Always On, Twitter→X, доработаны строки APNs, Rate и Language)
  • IP устройства отображается в правом списке главного экрана только при выключенном VPN

Исправления ошибок:

  • Исправлены ложный статус «VPN не запущен» и зависшие метки «Выполняется» на панели Dashboard
  • Исправлена потеря фокуса и скачки при открытии Dashboard/Sessions и возврате из списка узлов Tailscale
  • Исправлено поведение кнопки Menu: надёжно закрывает списки и корректно возвращает фокус
  • Исправлен текст в нижнем колонтитуле списка сессий: «смахнуть для удаления» заменено на «долгое нажатие для удаления»
  • Различные улучшения стабильности и производительности

Версия 1.0 (35)

  • Первый выпуск
S. Smart Rabbit LLC © All Rights Reserved            updated 2026-10-01 17:54:51

Эта страница — перевод английской версии. При расхождениях приоритет имеет английская версия.

results matching ""

    No results matching ""