← к загрузке

Что нового

TrustTunnel для Android — изменения по версиям, новые сверху. Для Windows — отдельная страница.

1.2.0-mf211.21 — 26.08.2026

Служебное, на работу приложения не влияет. Версия движка в отчётах перестала считаться признаком, по которому события делятся на разные записи. Движок меняется редко, но при каждом обновлении все обычные события — «подключено», «восстанавливаюсь» — оказывались бы новыми записями, и разработчику приходило бы уведомление о пачке бед, которых нет. Сравнивать версии движка между собой это по-прежнему не мешает.

1.2.0-mf211.20 — 26.08.2026

В отчётах об обрывах теперь видно, отчего они случились. Раньше все обрывы считались вместе, и сводка выглядела страшнее, чем есть: связь пропала в метро, сеть переключилась с Wi-Fi на мобильную, туннель порвался сам — три разные вещи в одной куче.

Теперь у каждого обрыва помечена причина. Приложение при этом никуда не ходит и ничего не проверяет: всё нужное система сообщает сама — есть ли связь, какая она и сменилась ли с тех пор, как туннель поднялся.

Оговорка, которую честнее сказать: система знает, подключена ли сеть, но не знает, проходят ли через неё данные. Если Wi-Fi подключён, а интернета за ним нет, обрыв будет отнесён к туннелю. Пометка отделяет очевидное, а не выносит приговор.

1.2.0-mf211.19 — 26.08.2026

Вернулась настройка «подключаться при запуске». В прошлой версии она пропала: в выпуске 1.2.0 весь раздел «Запуск и подключение» спрятали везде, кроме macOS — потому что два переключателя из трёх там действительно макосные.

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

1.2.0-mf211.18 — 26.08.2026

Сборка перешла на выпуск 1.2.0. Прежние собирались от ночной ветки трёхнедельной давности, и нужное к тому времени разошлось по двум веткам: часть в самом выпуске, часть — уже после него.

Из выпуска приходят исправления, которых у нас не было: приложение больше не падает, если удалить профиль маршрутизации; вылечено двойное включение-выключение туннеля; появилась подсказка в поле импорта сертификата. Отдельно взято исправление, вышедшее уже после выпуска, — защита от обращения к освобождённой памяти при подключении к серверу с несколькими адресами. То же самое было исправлено в движке неделей раньше; теперь оно есть и в самом приложении.

В отчёты добавлена версия движка. Без неё нельзя было ответить на простой вопрос — какой движок работает у людей на руках.

Длительности подключения считаются часами, которые не идут, пока телефон спит. Раньше туннель, оборвавшийся вечером и восстановленный утром, показывал время входа в девять часов — число, означавшее только продолжительность сна.

1.2.0-nightly.2-mf211.17 — 26.08.2026

Приложение не берётся собирать обновление, если для этого не хватит места. Сборке нужно место под саму сборку и ещё столько же под распакованную разницу. На телефоне с забитой памятью это упиралось бы в нехватку уже на середине — потратив время впустую и оставив мусор. Теперь место проверяется заранее, и если его мало, приложение просто скачивает сборку целиком: ей нужно меньше.

И это первый выпуск, который придёт разницей по-настоящему: собирать её будет версия с исправленным переносом работы в сторону.

1.2.0-nightly.2-mf211.16 — 26.08.2026

Сборка обновления из разницы наконец работает на телефоне. До этой версии она срывалась всегда, а приложение молча скачивало сборку целиком — сто мегабайт вместо нескольких. Внешне всё выглядело исправным, потому что запасной путь честно доводил дело до конца.

Причина оказалась не в самой сборке. Работа выносится в сторону, чтобы не морозить приложение, и вместе с ней туда утаскивалось лишнее из окружения — то, что вынести нельзя. На рабочей машине это сходило с рук, на телефоне не проходило никогда. Теперь в сторону уезжает только то, что нужно.

Проверить это можно будет на следующем выпуске: разницу для него будет собирать уже исправленная версия.

1.2.0-nightly.2-mf211.15 — 26.08.2026

Обновление больше не запирает вас в окне. Раньше, согласившись обновиться, вы оставались в окне с полосой на всё время загрузки и сборки — минуты, в течение которых приложением нельзя было пользоваться. Хотя мешать ему было нечем: туннель работает, экраны открываются.

Теперь работа идёт сама, а ход виден строкой под «Проверить обновления» в настройках: сначала загрузка, потом сборка, потом «готово к установке». Когда сборка готова, приложение спросит про установку отдельно — ставить без спроса нельзя, установка перезапустит приложение и оборвёт туннель.

Ответите «позже» — собранное останется на месте, качать заново не придётся.

1.2.0-nightly.2-mf211.14 — 26.08.2026

Обновление больше не растягивается на минуты. Разница между версиями состоит из десятков тысяч мелких кусочков — по килобайту каждый, — и приложение брало каждый отдельным обращением к диску: почти триста тысяч раз. На рабочей машине это незаметно, на телефоне превращалось в десять минут ожидания. Теперь чтение и запись идут крупными порциями, обращений стало в тысячу раз меньше.

И не срывается на ровном месте. Собранная из разницы сборка и скачанная целиком складывались в один и тот же файл. Когда сборка срывалась, запасная полная загрузка принимала недособранный файл за недокачанный и просила сервер продолжить с места за концом файла. Сервер отказывал, попытка повторялась четырежды с тем же запросом, и обновление падало с невнятным «не удалось». Теперь это разные файлы, а отказ по диапазону означает «начать заново», а не «повторить то же самое».

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

1.2.0-nightly.2-mf211.13 — 26.08.2026

Обновление стало быстрее в разы. Раньше на него уходили минуты, и почти всё это время приложение считало контрольные суммы: сначала у установленной сборки — чтобы понять, какая разница подойдёт, — потом у собранной, чтобы убедиться в подлинности. Сто мегабайт дважды, причём собственными силами.

Теперь этот расчёт делает система, у которой он ускорен на уровне железа. А сумма установленной сборки запоминается: она меняется только вместе с самой сборкой, а пересчитывалась при каждой проверке обновлений — впустую по нескольку раз на дню. Проверок при этом не убавилось ни одной: и подпись, и обе суммы сверяются как прежде.

Приложение теперь засекает, сколько занял каждый шаг, и присылает это разработчику. Прежняя оценка «несколько секунд» была сделана на глазок, на рабочей машине, и оказалась неверной — вместо догадок теперь будут числа.

1.2.0-nightly.2-mf211.12 — 26.08.2026

Обновление больше не выглядит зависшим на последнем проценте. Сборка обновления из разницы — работа не быстрая, несколько секунд, и всё это время приложение раньше стояло неподвижно: полоса показывала сто процентов, насос замирал, и понять, идёт дело или всё сломалось, было нельзя. Ровно тогда, когда работа шла полным ходом.

Теперь она вынесена в сторону и приложению отвечать не мешает, а на экране появился второй этап со своим ходом: сначала «качаю», потом «собираю». Это разные вещи и ведут себя по-разному — загрузка зависит от связи и может подолгу стоять на месте, сборка идёт ровно.

1.2.0-nightly.2-mf211.11 — 26.08.2026

Обновлён движок туннеля — до той же версии, что уже работает в клиенте для Windows. Главное в ней: исправлено обращение к освобождённой памяти при подключении по QUIC, когда у сервера несколько адресов. Это ровно наш случай — у сервера есть и обычный адрес, и IPv6, — а выглядит такая поломка как внезапный обрыв связи без всякой причины, в случайный момент. Все обрывы, что мы видели за сутки, шли именно по QUIC и ни одного по HTTP/2. Заодно поправлена работа сетевого менеджера на Android — той части, что удерживает туннель.

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

Само обновление приехало разницей в один мегабайт — при том что менялась библиотека на десять. Разница считается по байтам, а не по файлам: в библиотеке поменялась небольшая часть, она одна в неё и попала.

1.2.0-nightly.2-mf211.10 — 26.08.2026

Первое обновление, пришедшее одной разницей. Четыре мегабайта вместо ста — остальное приложение собрало на телефоне из того, что уже установлено, и сверило с подписанной суммой. Дальше так будет всегда, а полная загрузка останется на случай, когда разница не подошла.

Загрузка перестала выглядеть замершей. Раньше это была серая полоса, и пока мегабайты ехали по мобильной сети, экран казался застывшим — а доля и правда подолгу стоит на месте, стоит связи задуматься. Теперь там насос, накачивающий туннель: заполнение показывает долю, бегущие внутри полосы — что байты идут, рукоятка — что приложение живо. Замрёт что-то одно, и сразу понятно, что именно застряло. Если в системе выключены анимации, насос стоит смирно.

1.2.0-nightly.2-mf211.9 — 26.08.2026

Приложение готово получать обновления одной только разницей. Сборка весит около ста мегабайт, но между версиями меняется от силы пара: почти весь объём — неизменные части движка и Flutter. Начиная с этой версии приложение умеет забирать только разницу и собирать из неё новую сборку прямо на телефоне. По замерам на настоящих версиях это два-три мегабайта вместо ста — обновиться в дороге становится делом секунд, а не поводом искать Wi-Fi.

Проверки от этого строже, а не слабее. Список разниц подписан отдельно от самого обновления и привязан к конкретной сборке — предъявить его к другой не выйдет. Разница считается не «от версии такой-то», а от конкретного файла, который у вас установлен: если он хоть чем-то отличается, она не подойдёт и не будет применена. Собранный файл сверяется с той же подписанной суммой, что и скачанный целиком, поэтому подсунуть через разницу подделку невозможно — она просто не сойдётся.

Если что-то пошло не так — приложение молча скачает полную сборку. Не обновиться из-за разниц нельзя: это ускорение, а не условие.

Сами разницы появятся со следующего выпуска: получать их умеет только эта версия и новее, поэтому её саму приходится ставить целиком — в последний раз.

1.2.0-nightly.2-mf211.8 — 25.08.2026

Приложение не сдаётся, если производитель телефона спрятал нужный экран настроек. Разрешение на установку обновлений выдаётся на системном экране, но он обязателен не для всех прошивок: Huawei, Xiaomi и другие вправе его переставить или убрать. Раньше приложение на этом месте просто падало. Теперь оно пробует три пути по очереди, а если не открылось ничего — прямо говорит об этом и подсказывает выдать разрешение вручную, вместо того чтобы молча ждать экрана, которого не будет.

Заодно проверено, что приложению не нужны сервисы Google: их нет в сборке ни в каком виде, так что телефоны без них ничем не хуже остальных. Сборка по-прежнему одна на все процессорные архитектуры — и на новых 64-битных телефонах, и на старых 32-битных.

1.2.0-nightly.2-mf211.7 — 25.08.2026

Загрузка обновления переживает обрыв связи. Раньше оборвавшаяся закачка выбрасывалась целиком и начиналась заново — для файла в сто мегабайт с телефона это означало, что обновиться в дороге почти невозможно. Первая же живая попытка так и кончилась: связь пропала на середине, и всё скачанное пропало вместе с ней. Теперь загрузка продолжается с того места, где оборвалась, и повторяется несколько раз, прежде чем сдаться. Подлинность от этого не страдает: склеенный из кусков файл сверяется с подписанной контрольной суммой ровно так же, как скачанный за один раз, — неудачная склейка её не пройдёт.

1.2.0-nightly.2-mf211.6 — 25.08.2026

Отчёты о подключениях перестали дробиться. Одно и то же событие попадало в разные записи только потому, что менялся тип сети — а он меняется сам собой в момент подъёма туннеля, когда система начинает считать VPN отдельным каналом. Из-за этого одна и та же вещь выглядела тремя разными. Теперь тип сети по-прежнему виден, но события по нему не расходятся; по серверу и протоколу расходятся как раньше — там это нужно.

Ничего из этого не видно на экране и на работу туннеля не влияет.

1.2.0-nightly.2-mf211.5 — 25.08.2026

Обновление при запуске наконец работает. До этой сборки приложение исправно находило новую версию, но показать окно с предложением не могло и молча падало — снаружи это выглядело как «обновлений нет», и все прошлые версии приходилось ставить вручную. Нашлось это по отчёту об ошибке с телефона: проверка обновлений жила выше того места, где приложение умеет открывать окна. Теперь она внутри. Если такое повторится, в отчёте будет прямо написано, в чём дело, а не загадочная строка про пустое значение.

1.2.0-nightly.2-mf211.4 — 25.08.2026

В настройках появилась кнопка «Проверить обновления». Раньше приложение смотрело канал только при запуске, и проверить наличие свежей версии по своей воле было нельзя — только закрыть приложение и открыть заново. Теперь кнопка отвечает в любом случае: либо предлагает обновиться, либо говорит, что версия и так последняя. Молчать в ответ на нажатие нельзя — это читается как поломка.

1.2.0-nightly.2-mf211.3 — 25.08.2026

Время входа в туннель считалось неверно. В прошлой сборке оно отсчитывалось от первого подключения за запуск, а не от текущей попытки: к четвёртому часу работы вместо секунды там стояло восемьдесят минут. Верным было только первое значение за сеанс. Нашлось это на живых данных — по тому, что число росло монотонно и совпадало со временем с запуска. Теперь отсчёт идёт от начала той попытки, о которой идёт речь, и рядом сказано, была она первым подключением или восстановлением после обрыва: это разные вещи, и складывать их в одно число нельзя.

В отчёт попадает тип сети. Обрыв в метро и обрыв дома по Wi-Fi выглядели одинаково, и различить их можно было только спросив человека, где он был. Теперь рядом с каждым событием видно, была сеть мобильной, Wi-Fi или её не было вовсе — «рвётся только в дороге» и «рвётся дома» это разные беды с разным лечением.

Замеры стали пригодны для разбора. Раньше числа лежали только в тексте сообщения: их нельзя было ни отфильтровать, ни сложить — только прочитать глазами. Теперь они едут отдельными полями.

Ничего из этого не видно на экране и не влияет на работу туннеля.

1.2.0-nightly.2-mf211.2 — 25.08.2026

Приложение рассказывает, как проходят подключения, а не только когда ломается. Раньше отчёт уходил лишь при ошибке, и по нему нельзя было понять, почему туннель не поднялся: причина обрыва почти никогда не видна в самом обрыве — она видна в том, что ему предшествовало. Теперь каждое подключение оставляет след: к какому серверу и каким протоколом шли, сколько секунд занял вход в туннель, сколько он прожил до обрыва, восстановился ли сам и по чьей воле отключился — по вашей или потому что связь пропала.

Нажатие «отключиться» больше не выглядит как сбой. По одним состояниям туннеля отличить сорванное подключение от обычного отключения невозможно — и то и другое кончается словом «отключено». Приложение теперь помнит, просили его об этом или нет, и не поднимает тревогу там, где всё шло по плану.

Петля переподключений не забивает отчёты. Когда связь рвётся раз за разом, повторы одного и того же схлопываются в одну запись со счётчиком, и она честно говорит, сколько раз это повторилось. Сама петля при этом остаётся видна — ради неё всё и затевалось.

На то, что видно на экране, и на работу туннеля это не влияет: те же отчёты, только подробнее. Адреса, логины и правила маршрутизации по-прежнему вычищаются перед отправкой.

1.2.0-nightly.2-mf211.1 — 24.08.2026, первая сборка

Своя сборка для Android. В Google Play лежит версия 1.1.1, выпущенная 31 марта. С тех пор в ветке разработки накопилось 39 изменений, которые до магазина не дошли, — эта сборка сделана из неё. Среди них два по безопасности: перестала пропускаться проверка сертификата сервера при подключении по QUIC, и закрыт локальный прокси, через который трафик обходил ваши же правила маршрутизации и смешивал профили между собой. Кроме них — починенные загрузки по QUIC, увеличенный размер пакета (MTU 1350 вместо 1280) и вылеченное подвисание приложения намертво.

Ставится рядом с версией из Play, а не поверх неё. Подписана она другим ключом, поэтому обновлением магазинной быть не может, и Android такое не разрешает. В списке приложений это отдельная иконка с именем «TT». Настройки и серверы у них раздельные: перенести их из магазинной версии нельзя, придётся ввести заново. Магазинная при этом продолжает жить и обновляться как раньше.

Обновляется сама. Раньше обновлять эту сборку было нечем: она ставится файлом, мимо магазина, и о новых версиях узнать было негде. Теперь при запуске приложение смотрит этот канал и предлагает поставить свежую. Подлинность проверяется так же, как у версии для Windows: сведения об обновлении подписаны ключом, а сам ключ заверен корневым, встроенным в приложение. Сервер раздаёт файлы, но не решает, что подлинно, — подменить их по дороге или на самом сервере не выйдет. Текст этой страницы к подписи не относится, а вот текст, который приложение показывает при обновлении, подписан тоже: иначе сервер мог бы говорить с вами от нашего имени.

Установку подтверждаете вы. Ставить приложения молча Android не позволяет никому, кроме системных, поэтому в конце всегда системный вопрос «установить?». Первый раз он ещё попросит разрешить установку из TrustTunnel — это разовое разрешение, дальше его не спрашивают.

Сбои теперь видны разработчику. Приложение отправляет ошибки на наш сервер разбора вместе с шагами, которые к ним привели. Адреса серверов, логины, домены и правила маршрутизации из отчётов вычищаются до отправки; отчёт уходит только при ошибке, при обычной работе не отправляется ничего.

Из настроек убраны два переключателя, которые ничего не делали. «Запускать при входе в систему» и «Открывать главный экран автоматически» существуют только в версии для macOS, но показывались и здесь: нажатие не давало ничего, зато каждое открытие этого экрана записывало в журнал ошибку.

Ссылка на этот канал — в настройках, рядом со ссылкой на GitHub. Оттуда видно, какая версия сейчас выложена, и что в ней изменилось.

Это сборка из ветки разработки, а не выпуск. Она не проходила проверок, которыми выпуск отличается от ночной сборки. Исправления доходят раньше — новые поломки тоже.