Xray, sing‑box, WireGuard и DNS‑туннель в одном процессе: как устроен YPtun изнутри
Проект начинался как Olcbox, маленький конфигуратор для одного экспериментального транспорта. Следы того времени до сих пор живут в коде: версия передаётся в Gradle флагом -Polcbox.version, пакеты называются org.olcbox.app, а главный сервис называется OlcboxVpnService. Переименовывать всё это ни у кого не поднимается рука, и ниже будет понятно почему: одно только переименование applicationId заняло два релиза.
Сейчас это YPtun, открытый сетевой клиент под Android, Windows и Linux, версия для iOS в бете. Внутри Xray и sing‑box, Hysteria2, AmneziaWG, TrustTunnel, TURN‑транспорт, DNS‑туннель и ещё несколько экспериментальных протоколов. Лицензия GPL-3.0, на момент написания актуальна версия 3.6.9.
Сравнивать протоколы по скорости мы не будем. Эта статья про внутренности: как заставить полдюжины Go‑библиотек жить в одном процессе, почему десктопная сборка весила четверть гигабайта, как bsdiff упёрся в предел массива Java на 2 ГиБ, почему пинг в уведомлении всегда показывал ноль и как мы переносили данные пользователей между двумя разными applicationId так, чтобы этим не смогло воспользоваться чужое приложение.