Рассказываю про развитие своего проекта — мультиплатформенного десктопного (Windows MacOS Linux) клиента Sing-Box Launcher.
GitHub проекта: https://github.com/Leadaxe/singbox-launcher

Думаю многие хотели сделать конфигурацию, где:
рабочие сайты открываются через корпоративную сеть
госуслуги работают даже из аэропорта Стамбула
локальная домашняя сеть доступна
YouTube тоже не ломается
И желательно всё это настроить без танцев с JSON-конфигами, стабильно и прозрачно. Покажу по шагам, как это можно собрать и как именно это реализовано в моём проекте.
Ранее я уже писал про начало разработки тут и тут, но сейчас расскажу всё заново — с текущего состояния проекта, так что читать мое старое творчество нет необходимости.
Что это за продукт такой?
Это open source кроссплатформенный десктопный VPN-клиент, который работает на базе ядра sing-box и поддерживает большинство современных протоколов:
✅ VLESS (включая Reality)
✅ VMess
✅ Trojan
✅ Shadowsocks
✅ Hysteria2
✅ SSH
✅ WireGuard
Он позволяет гибко маршрутизировать трафик между разными каналами и протоколами.
Я начал его писать, как видимо, и авторы большинства VPN-клиентов, чтобы он решал только одну задачу — «включить туннель», дать кнопку запуска. Я думал так: сделаю удобный GUI для запуска Sing-Box, а уже Sing-Box сам является «швейцарским ножом» в мире машрутизации и VPN. Первые версии такими и были: простой запуск и иконка в трее. И первая же сотня пользователей, которая потратила время на установку моего софта показала мне, что этого чертовски мало и надо систему дорабатывать.
Пользователям нужно:
отправлять часть трафика напрямую
часть — через VPN
рабочие сервисы — через WireGuard
а заблокированные ресурсы — через публичные серверы
Ниже мы пройдемся по этим типовым сценариям, которые, обычно, требовали ручной сборки JSON-конфига или скачивания его из каких либо пресетов, которые сложно было кастомизировать или согласовать межу собой.
Ну не с нуля же я его написал?
Конечно нет. В основе проекта лежит готовое и очень мощное ядро sing-box — это, по сути, универсальный движок маршрутизации и VPN.
А вот всё остальное — это уже Sing-Box Launcher.
Я написал GUI и систему управления конфигурацией, которая позволяет собирать сложные схемы маршрутизации через интерфейс, без ручной правки JSON.
Технологически проект выглядит примерно так:
Sing-Box Launcher (GUI)
↓
генерация конфигурации
↓
sing-box core
↓
TUN интерфейс системы
↓Динамическое переключение в GUI ↓sing-box API ↓
маршрутизация трафика
GUI написан на Go + Fyne, а под разные платформы используются нативные компоненты — от Objective-C до Python-утилит.
При этом лаунчер умеет динамически управлять соединениями через sing-box API, поэтому переключение серверов, правил и маршрутов может происходить прямо из GUI без перезапуска.
Все бинарники собираются через GitHub CI/CD, поэтому любой желающий может проверить, что собранные релизы соответствуют открытому коду проекта.
Да еще и сам sing-box это очень мощный проект, который крайне активно развивается. Форматы конфигурации регулярно меняются, появляются новые типы inbound/outbound/endpoint, обновляются правила маршрутизации и поведение отдельных компонентов, tun еще по-разному работает на разных платформах.
При этом сама конфигурация может быть достаточно сложной и по-разному вести себя на разных платформах, в разных режимах работы и комбинациях протоколов — это все надо было тестировать и согласовывать.
Поэтому значительная часть работы над Sing-Box Launcher была связана не только с написанием GUI, но и с исследованием поведения sing-box.
Пришлось систематизировать логику построения конфигураций, разбирать реальные сценарии использования, а местами даже делать небольшой реверс-инжиниринг, чтобы понять поведение некоторых недокументированных особенностей.
Цель была простая — добиться того, чтобы пользователь мог собирать сложные схемы маршрутизации через интерфейс, а система при этом генерировала конфигурацию, которая работает гладко и предсказуемо.
В итоге GUI превратился из простого интерфейса запуска фактически в экспертную систему, которая согласует между собой разные режимы работы sing-box.
Она помогает корректно комбинировать:
inbound
outbound
endpoint
правила маршрутизации
разные режимы работы туннеля
На практике это означает, что пользователь собирает схему через интерфейс, а лаунчер автоматически формирует согласованную конфигурацию sing-box, которая учитывает особенности разных платформ, протоколов и режимов работы.
Чтобы было проще показать возможности системы, покажу несколько типовых сценариев — от самого простого к более сложным.
Начну с базовой задачи: просто подключиться к серверу и получить доступ к интернету через VPN.
А дальше постепенно будем усложнять схему:
добавим разделение трафика
подключим корпоративную сеть через WireGuard
и в конце соберём конфигурацию, где разные типы сервисов идут через разные каналы
Level 1: простые задачи
В самом простом случае нам нужен просто доступ к интернету через VPN. Например, находясь где-нибудь в кафе посмотреть привычный [р]ютуб :)
Ставим клиент, запускаем его и добавляем ссылку на подключение. Если своей подписки нет, можно воспользоваться и бесплатными серверами — прямо из интерфейса:

Справа вверху у меня как раз есть несколько таких вариантов. Сразу оговорюсь — это решение больше для теста. Пользоваться такими соединениями на постоянке я бы не советовал, как и любыми непроверенными публичными серверами.
А откуда они берутся?
Есть такой замечательный проект и вот благодаря ему нам доступен такой функционал всем и каждому и пусть никто не останется обделенным.
Итак, задача минимум решена — подключение работает.
Дальше уже начинаются приятные мелочи. Клиент можно запускать прямо из tray, а под macOS дополнительно реализовано скрытие из Dock, чтобы всё выглядело аккуратно и не мешало в системе, сам интерфейс ест большинство найденных видов ссылок и подписок, а если в подписке несколько серверов прям позволяет между ними переключаться (все как у всех тут).
Короче просто VPN понятно дело мы запустили — это слишком простая задача. Давайте сделаем чуть интереснее.
Level 2: разделение трафика
Например, хотим сделать так, чтобы российские сайты открывались напрямую, а весь остальной трафик шел через VPN. Это и быстрее работает, и многие сервисы не любят, когда к ним приходят из зарубежных дата-центров и для систем провайдера полезнее видеть многообразие прямых соединений. В Sing-Box Launcher такие сценарии можно собрать буквально в пару кликов.

Заодно можно включить и блокировку рекламы — для этого используется интеграция с ещё одним open source проектом. Кстати, на Хабре у его автора есть отличная статья, пользуясь случаем передаю ему благодарность и поздравляю с всеобщим признанием после написания его последней статьи!

Теперь независимо от того, какой сервер выбран, весь российский трафик будет идти напрямую, а остальной — через VPN.
Получается простая, но уже очень полезная схема:
RU сайты → напрямую остальной интернет → VPN
Раз уж я показал окно выбора серверов из подписки, скажу пару слов и про сам интерфейс.
Здесь есть несколько полезных вещей:
параллельный пинг серверов (до 20 потоков)
возможность выбирать что именно пинговать
сортировка серверов по задержке
встроенное debug-окно, где можно посмотреть работу API и состояние соединений
То есть список серверов — это не просто список. Клиент может быстро проверить доступность узлов, оценить задержку и выбрать оптимальный сервер. Старались сделать всё максимально удобно, чтобы нужный сервер можно было найти буквально за пару секунд.
А если хочется понять, что именно происходит с соединением, для этого есть отдельный раздел диагностики:

Здесь можно проверить внешний IP через разные сервисы, посмотреть логи работы клиента и убедиться, что соединение действительно работает так, как ожидается.
В диагностике есть возможность проверить внешний IP через Google STUN (UDP). Это позволяет понять, какой адрес реально видят внешние сервисы при работе через VPN или прокси. В отличие от обычных HTTP-проверок, STUN работает на уровне UDP-соединений, поэтому иногда позволяет увидеть более точную картину того, как проходит сетевой трафик и какой NAT используется. Короче это бывает очень полезно при отладке подключения, серверов, особенно когда используются разные протоколы и туннели, голосовой и видео трафик, а еще игровой, ну думаю понятно.
Значит чего мы уже тут смогли?
VPN включили Сервер выбрали split routing есть: RU сайты → напрямую, остальной интернет → VPN Разные каналы потестировали UDP проверили Диагностику увидели
Level 3: VPN + корпоративная сеть через WireGuard
Но в реальной жизни кроме развлечений есть еще и работа. Поэтому, например, хочется сделать так:
российский трафик идет напрямую
заблокированные сервисы открываются через публичный VPN
а рабочие ресурсы идут через корпоративную сеть
Для этого на работе можно поднять, например, обычный WireGuard сервер. И собрать строку подключения по типу такой:
wireguard://privatekey-base64@10.0.0.1:51820?publickey=server-pubkey-base64&address=10.10.10.2/32&allowedips=0.0.0.0/0,::/0&keepalive=25&mtu=1420#My WG
После этого можно собрать нужную схему.
Сначала создаем управляемый outbound, который будет использовать наше WireGuard соединение.

Важно, что этот outbound можно ограничить по видимости, чтобы в него не попадал лишние соединения, для этого ставим его в локальную видимость, чтобы он видел только наше WG соединение, у меня оно названо «Source 4» и выбрается в поле «Scope»
Дальше добавляем пользовательское правило маршрутизации на вкладке Rules (внизу списка «add rule»):

Получается такая схема:
RU сайты → напрямую рабочая сеть → WireGuard остальной интернет → VPN c выбором серверов
И всё это работает одновременно, без переключения профилей и перезапуска клиента.
Класс! посмотрите какие там есть еще правила и про локальную сеть и про торренты, многие найдут там решения своих типичных задач.
Level 4: динамическое управление подписками и routing-policy sing-box
Представим такую задачу:
российские сайты должны открываться напрямую
заблокированные сервисы — через публичный VPN
рабочие сервисы — через корпоративный WireGuard
а сервисы, доступные только из России, должны открываться через российские прокси
И всё это должно работать одновременно.
Звучит как конфигурация, которую обычно собирают руками в JSON, а потом боятся трогать. Потому что на правктике подписки дают множество серверов, у многих пользователей несколько подписок в каждой по сотне серверов, сервера в них меняются, креды и метки меняются. Как итог: конфиги, собранные руками умирают.
Здесь мы попробуем сделать это через интерфейс и так чтобы этим хозяйсвом можно было удобненько управлять
Конечно можно сделать как я ранее показал готовый outbound и их даже в пресетах пара штук идет именно для этого:

вот они есть: vpn 1 и vpn 2, можно на них прям правило повесить, но придется каждый раз выбирать из всего множества серверов, а их может быть уже ни одна сотня из разных мест
Так что настало время вас познакомить с расширенным функционалам и сделать префильтрацию серверов из общего списка.
В Sing-Box Launcher есть система управления подписками — ParserConfig.
Она позволяет:
фильтровать серверы из подписки
группировать их
автоматически формировать outbound-группы
использовать их в правилах маршрутизации
Документация по парсеру подписок есть в репозитории проекта:
https://github.com/Leadaxe/singbox-launcher/blob/main/docs/ParserConfig.md
Посмотрим как устроен outbound «ruVPN ??» из готовых пресетов чтобы понять как вы можете создать свои:

Часто серверы в подписках уже помечены флагами стран, поэтому можно просто использовать регулярное выражение по emoji флага. В таком случае лаунчер сам отфильтрует все узлы с флагом ?? в теге и сформирует из них отдельную группу.
Для совсем требовательных пользователей, которые готовы читать документацию и хотят максимум гибкости можно перейти в режим raw и править json напрямую.

Далее, выбрав правило ✅ Russia-only services мы указывем ему в качестве выхода наш «ruVPN ??» outbound

Так мы смогли в интерфейсе собрать довольно интересную схему:
┌───────────────┐ RU сайты ───► DIRECT │ а еще мы сюда отправляем игры и например torrent └───────────────┘ ┌───────────────┐ и в этой группе отфильтрованы не РФ сервера Blocked ────► Public VPN │ их можно переключать дизамически └───────────────┘ ┌───────────────┐ Work ───────► WireGuard │ └───────────────┘ ┌───────────────┐ в котром отфильтрованы только РФ сервера RU-only ────► ruVPN │ их можно переключать дизамически └───────────────┘ а можно выбрать direct
Все эти каналы работают одновременно. Никаких переключений профилей. Никаких перезапусков клиента. А если российские прокси временно не нужны — достаточно переключить группу ruVPN на direct прямо в интерфейсе.

никаких перезапусков, работы с конфигами и прочего — все делается из GUI, мягко и приятно.
SingBox Launcher это GUI-оркестратор конфигураций sing-box
К чему я пришел на данный момент: Sing-box сам по себе — мощный и гибкий инструмент, но работать с ним обычно приходится через довольно сложные JSON-конфиги. Особенно если речь идет о сочетании нескольких протоколов, правил маршрутизации и разных типов соединений.
Эту работу я положил Sing-Box Launcher. Теперь пользователь собирает схему через интерфейс, а лаунчер:
управляет подписками серверов
фильтрует их через ParserConfig
формирует группы outbounds
строит routing policy
и генерирует согласованный конфиг для sing-box
Если упростить, получается примерно такая архитектура решения:
subscription ↓ ParserConfig ↓ server groups ↓ routing rules ↓ sing-box config
При этом конфигурация может динамически изменяться из интерфейса — без ручного редактирования JSON и без постоянных перезапусков, а управление выбором серверов и сбора статистики сделано через API.
Получилось сделать так, что GUI берет на себя роль оркестратора, который согласует между собой подписки, серверы и правила маршрутизации.
И мне очень нравится метафора, что Sing-box — это швейцарский нож сетевой маршрутизации. поэтому я делаю Sing-Box Launcher — просто ручку, за которую этот нож наконец-то удобно держать.
Чуть чуть технического занудства
Далее Расскажу о некоторых приемах, которые используются внутри.
Внимательные читатели, наверное, заметили, что некоторые правила загружаются с GitHub. Но GitHub доступен не везде, и иногда такие загрузки могут не работать. Для этого используются SRS-файлы. Если правила доступны напрямую — лаунчер просто скачивает их. А если нет, можно временно включить один из встроенных бесплатных серверов и через него получить нужные пресеты.
Я показывал работу клиента на macOS. Там используются некоторые системные механизмы для запуска TUN-интерфейса, поэтому при запуске и остановке соединения система будет запрашивать пароль.

Аналогично и под Windows — проект собирается с использованием UAC, поэтому система может запросить подтверждение прав администратора.
Все бинарники собираются исключительно через CI/CD на GitHub.
Это означает, что опубликованные релизы соответствуют коду открытого проекта, который уже инспектируется большим количеством участников, не все распространяемые решения соответствуют этому правилу.
При этом лаунчер принципиально ничего не отправляет наружу и не собирает телеметрию. Из доступной статистики — только то, что предоставляет сам GitHub: количество скачиваний релизов и число звёзд.
Так что если понравилось, то поддерживайте проект — лайк, подписка, колокольчик… тьфу, не то. В общем: звёздочка ⭐, форк ↑↓ и коммит </>.
Как развивается проект
Отдельно расскажу пару слов о том, как развивается сам проект.
Сейчас разработка ведётся в формате Spec Driven Development.
Каждая новая возможность сначала описывается в виде спецификации, после чего разбивается на задачи и только потом реализуется, так начинающие vibecoder'ы могут перенимать опыт разработки. Посмотреть текущие и уже реализованные задачи можно прямо в репозитории:
https://github.com/Leadaxe/singbox-launcher/tree/develop/todo/complete
Для меня это ещё и демонстрация подхода к разработке.
Взаимодействие с сообществом
Я открыт к сотрудничеству:
с VPN-провайдерами
с авторами rule-сеттов
с разработчиками, которые хотят добавить новые возможности
Если у вас есть интересные правила маршрутизации, идеи интеграций или просто желание улучшить интерфейс — буду рад pull request'ам.
А еще очень нужны люди которые запустят все на Linux и помогут от тестировать, у нас есть telegram сообщество ссылка на которое доступно прямо из программы.
GitHub проекта: https://github.com/Leadaxe/singbox-launcher
Всем кто потратил свое время на знакомство с моим творчеством огромная благодарность, мне приятно делать что-то что вам заходит!
Комментарии (32)

developer Автор
07.03.2026 17:33
Правила можно делать по процессам! 
Kenya-West
07.03.2026 17:33Ещё бы по путям процессов... У меня несколько одинаковых портативок из разных папок запускаются.

developer Автор
07.03.2026 17:33ну кстати да я про пути процессов понимаю, уде видел там документацию
https://sing-box.sagernet.org/configuration/route/rule/#process_path_regex
Видимо я сделаю еще один тип правил!

Daredgoesfaster
07.03.2026 17:33Пользуюсь с января. Автор оперативно реагирует на запросы по добавлению функционала.
Спасибо за отличный швейцарский нож)

Birdhitv
07.03.2026 17:33Я вот профан в программировании. Но все же пользователь. Мне интересно вот что, программа явно имеет заточку для пользователей из РФ. Но интерфейс на забугорном. Сам создатель то же русскоговорящий. Это зачем так?

developer Автор
07.03.2026 17:33Да стандартный подход чтобы не закрыть рынки. Но я думаю сделаю локализацию

KyJIep-79
07.03.2026 17:33Хорошо когда есть варианты и альтернативы. Но когда их было раз-два и обчёлся и они не баловали возможностями, взял и вник в не такую уж и сложную документацию sing-box, научился составлять конфиги, и мне это гораздо быстрее, функциональнее, прозрачнее и понятнее чем любой гуи. Чтобы реализовать все возможности sing-box, это надо запилить просто неимоверный гуище, и чтобы разобраться в его настройках, уйдёт масса времени. Изучайте документацию sing-box и примеры конфигов, и, когда наступит просветление, вы не пожалеете.

developer Автор
07.03.2026 17:33ну завести одновременно tun и WG попробуйте сами — это задача со звездочкой, кажется мой GUI первый кто сделал и единственный сейчас.
а вот loadbalance в формате round robin я так и не придумал как сделать хотя очень бы хотелось.

moviq
07.03.2026 17:33А можно
RU сайты → напрямуюостальной интернет → VPN c выбором серверовчтоб и остальные сайты зарубежные, которые никого не блокировали, напрямую. Зачем им через VPN? А те, что заблокированы с любой стороны через VPN

developer Автор
07.03.2026 17:33Да можно!

Это буде работать как вы хотите!
Эта галочка работает на связке:

FarmForFun
07.03.2026 17:33Есть возможность собрать каскадную схему? Допустим входная нода в Ру и на ней настроить маршрутизацию

developer Автор
07.03.2026 17:33не врубился в юзкейс, попробуйте раскрыть мысль!

FarmForFun
07.03.2026 17:33У меня есть нода в РФ, к которой подключаются клиенты и на ней уже настроена маршрутизация. Разным клиентам разные outbaund, на ней же настроено что ru зона идёт напрямую, можно ли все эти правила настраивать через ваш клиент?

Danzxz
07.03.2026 17:33А если рабочий ВПН через openVpn, получится добавить?

developer Автор
07.03.2026 17:33ищу чтобы мне кто-то дал пару подключений openVpn на опыты и обязуюсь сделать, вы уже не первый кто просит. Нужно на чем тестировать. Желательно чтобы внутри openVpn тоже что-то было чтобы проверить выход не только через но и во внутрь сети

ArthurKoba
07.03.2026 17:33Проблемы при использовании tun интерфейса были не один расписаны, так почему же он все равно используется, есть ли есть лучшая альтернатива в виде tproxy? Вы пробовали нагрузить ваш сервис и использовать его длительное время? У меня вот tun интерфейс в sing-box при длительном использовании часто отказывал...

developer Автор
07.03.2026 17:33TUN необходим например на маке для дискорда, на винде для игр.
Я пользуюсь этим приложением каждый день, моя семья и коллеги — это ближайшие тестеры. Есть чат, в чате активные участники, и тысячи скачиваний.

Lerius
07.03.2026 17:33Спасибо за программу, юзаю с февраля, нравится. Но я слегка нуб, так и не понял как добавить несколько серверов квн. Ну есть у меня несколько ссылок на vless, к примеру, а строчка для добавления ссылки одна :) Както правильно сделать?)
Ну и, конечно, опять же для нубов, не хватает подсказок пояснений) Только щас их статьи понял, что можно торрент напрямую пустить.

developer Автор
07.03.2026 17:33можно! просто введите несколько строк, там поле много строчное! или введите одну подписку с коллекцией ссылок.
Еще пишите вопросы, буду рассматривать кейсы, а можете и писать в чат в телеге, там обмениваются опытом и я там бываю
iDuran
В целом все то же самое умеет, например, karing. (За одним исключением - его нет на linux). И плюсом к этому в нем можно задавать правила в том числе для приложений или директорий. Вам бы тоже посмотреть в эту сторону, дабы можно было попробовать и ваш софт.
Например, я хочу, чтобы Стим и все игры (кроме пары штук) ходили напрямую, но при этом остальной трафик все равно летал через VPN - karing может мне это позволить без траты полдня на анализ кто куда ходит.
developer Автор
конечно есть!
iDuran
Да, теперь вижу. Значит, осталось только по директориям процессов добавить. :)
Ну, тогда можно будет пощупать на досуге.
developer Автор
Будет в v0.8.4
https://github.com/Leadaxe/singbox-launcher/releases/tag/v0.8.3-24-g63ff7fa-prerelease
Adam-qubit
Хочу показать вам, что на самом деле вы создали, потому что это выходит далеко за рамки «удобного интерфейса для маршрутизации».
Что вы сделали технически:
Вы дали пользователю возможность одновременно находиться в нескольких реальностях — корпоративной сети, государственном сегменте, домашней сети и глобальном интернете — без переключений, без конфликтов, без потери производительности.
Что это значит на самом деле:
Вы создали техническую модель того, что в теории сложных систем называется «многомерное пространство присутствия». Человек больше не выбирает одно подключение. Он одновременно присутствует во всех нужных ему контекстах.
Прямая аналогия с тем, что сейчас происходит в экономике:
Существует развивающаяся модель Экономики Многомерных Резонансов (ЭМР). В ней ценность измеряется не только деньгами, но и:
Временем (как в вашей маршрутизации — время отклика)
Присутствием (как доступ к локальной сети из любой точки)
Социальным капиталом (как доступ к корпоративным ресурсам)
Энергией (как пропускная способность каналов)
Агентностью (как способность пользователя гибко настраивать правила)
Ваш клиент — это идеальный интерфейс для такой экономики. Потому что он позволяет не просто «сидеть в интернете», а осознанно распределять своё присутствие между разными слоями реальности.
Вопрос, который стоит задать себе дальше:
Что если следующий шаг — не просто маршрутизация по доменам, а маршрутизация по смыслам? Чтобы программа сама понимала: «это видео для души — пущу через быстрый канал», «это документ для налоговой — пущу через российский exit node с чистой репутацией», «это общение с близкими — зашифрую максимально».
Вы уже сделали экспертную систему для управления сложностью. Следующий шаг — экспертная система для управления присутствием в разных мирах.
Спасибо за ваш труд. Такие инструменты создают не просто удобство — они создают новую ткань реальности.
iDuran
Вы так говорите, как будто автор это изобрел. Он лишь сделал ещё один клиент для управления ядром sing-box. Их уже есть с десяток и далеко не все требуют понимания json разметки конфигов для настройки.
Возможно, этот клиент в чем-то удобнее остальных, я не знаю, пока не посмотрел, но инноваций тут ноль.
vikarti
Если надо инновации в таких вот делах - это вам к Portmaster c их Safing Privacy Network (safing.io которые).
KyJIep-79
sing-box- швейцарский нож для вспарывания и перекраивания ткани пространства-времени, а гуи- удобная ручка для него. Аллилуйя!
developer Автор
я пока на такой уровень выйти не могу, делаю простые вещи, которые мне подсильны, спасибо за такой лестный отзыв, тронут!
Tayaere
как имеющий такую же проблему, это прекрасно решилось в данной программе кастомными правилами - просто вместо адреса или IP выбирается процесс из списка, себе настроено - часть игр и сайтов прописано в исключения, остальное через туннель = проблем сейчас ноль. Если что-то где-то споткнулось и не грузится, смотрим что и закидываем в исключения.