Сегодня SingLinkLabs, команда, которая создаёт SingLinkVPN, опубликовала на GitHub под лицензией Apache-2.0 исходный код первого прототипа приложения SingLinkVPN. Это VPN-приложение для обычных пользователей под Windows, macOS, Android и iOS, собранное из единой кодовой базы на основе только что открытого протокола SingLink.

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

Репозиторий: SingLinkLabs / singlink-vpn-app · Статус: первый прототип · Лицензия: Apache-2.0 · Технологии: Flutter (Dart) для интерфейса, Go для ядра

Это не то приложение, которое вы скачиваете с нашего сайта

Официальные приложения SingLinkVPN, которые вы скачиваете с нашего сайта и из магазинов приложений, — это отдельные продукты. Они работают на наших рабочих протоколах, в том числе на SingLink 2.0, и их основной исходный код в этот релиз не входит. Для существующих пользователей ничего не меняется.

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

Что умеет приложение

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

  • Статус защиты («Not protected» или «Protected») и таймер подключения.

  • Ваш IP: после подключения приложение показывает выходной IP-адрес, который видят сайты.

  • Выбор локации: серверы перечислены с флагами стран, а вверху списка — «Quick connect (auto)». При смене локации во время подключения приложение автоматически переподключается.

  • Честная задержка: показываются только измеренные значения. У серверов, которые ещё не измерялись, вместо выдуманного числа стоит «—».

  • Скорость в реальном времени: скорость загрузки и отдачи, а также объём данных за текущий сеанс.

  • Понятные сообщения об ошибках, которые подсказывают, что делать дальше, а технические подробности доступны в одно касание.

  • Светлая и тёмная тема в соответствии с настройками системы.

Два режима подключения

На телефонах — VPN для всего устройства. Android использует системный VpnService, а iOS — Network Extension. Трафик всех приложений идёт через туннель, и DNS-запросы тоже выполняются внутри него.

На компьютерах — режим системного прокси. При подключении приложение настраивает системный прокси, а при отключении или выходе возвращает ваши прежние настройки. Если приложение было принудительно закрыто во время подключения, оно восстановит настройки при следующем запуске. Браузеры и большинство приложений следуют системному прокси; немногие программы, которые игнорируют настройки прокси, — нет. Следующий запланированный шаг — VPN на уровне пакетов для компьютеров (Network Extension на macOS, Wintun на Windows).

Как оно устроено

  • Единая кодовая база Flutter даёт все четыре приложения с одинаковым интерфейсом на каждой платформе. Интерфейс на английском языке.

  • Ядро на Go содержит протокол SingLink и компилируется в нативную библиотеку для каждой платформы, которую приложение вызывает напрямую.

  • На телефонах ядро дополняется сетевым стеком gVisor от Google (Apache-2.0), работающим в пространстве пользователя, — он превращает трафик всего устройства в подключения SingLink.

  • Написано с нуля. Помимо пустого шаблона, который Flutter создаёт для нового проекта, весь код новый. Никакой код, иконки или изображения не взяты из других VPN-приложений.

Состояние на каждой платформе

  • macOS 13 или новее (Apple silicon): режим системного прокси. Собрано и проверено на реальном подключении.

  • Android 7 или новее: VPN для всего устройства. APK собран и проверен на реальном подключении в эмуляторе Android.

  • iOS 15 или новее: VPN для всего устройства. Собирается и запускается в симуляторе iOS; симулятор не может создать VPN-туннель, а для запуска на реальном iPhone нужен аккаунт Apple Developer.

  • Windows 10 и 11 (x64): режим системного прокси. Библиотека ядра собрана; само приложение нужно компилировать на Windows, и в репозитории есть рабочий процесс GitHub Actions, который это делает.

Честные ограничения

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

  • Распространение требует дополнительных шагов. Для публичного релиза на Mac нужны подпись и нотаризация Apple, для реального iPhone — аккаунт Apple Developer, а сборки для Android подписаны тестовым ключом.

  • Поддержка macOS сейчас означает macOS 13 или новее на компьютерах Mac с Apple silicon (M-series).

  • На компьютерах используется режим системного прокси, поэтому программы, игнорирующие настройки прокси, пока не охвачены.

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

  • Названия серверов показываются так, как их передаёт сервер. Чтобы интерфейс был полностью на английском, называйте серверы по-английски.

Соберите и присоединяйтесь

Как собрать ядро и приложение для каждой платформы, описано в README репозитория. Ядро протокола находится в отдельном репозитории SingLinkLabs / singlink-protocol.

Вопросы, сообщения об ошибках и Pull Request приветствуются на GitHub. Об уязвимостях безопасности, пожалуйста, сообщайте конфиденциально, а не в публичном Issue — порядок описан в SECURITY.md в репозитории протокола.

Лицензия и товарные знаки

Код распространяется под лицензией Apache-2.0: его можно использовать, изменять и распространять, в том числе в коммерческих целях, на условиях лицензии. Названия «SingLink» и «SingLinkVPN», их китайские названия и логотип являются товарными знаками SingLinkLabs, и лицензия не даёт права их использовать. Форки обязаны использовать собственное название и иконку. Приложение включает сетевой стек gVisor, который также распространяется под лицензией Apache-2.0.

Читайте также