Ротация путей: клиентский участок
В прошлый раз я писал про технический долг. Видимо, эта тема настолько меня триггернула, что решил взяться за одну из давно отложенных задач.
Ещё в начале работы над Sigil Gate мы занялись ротацией gRPC-путей на участке Entry→Core — добавили «статистического шума», чтобы постоянный трафик через один и тот же эндпоинт не стал узнаваемым паттерном. Об этом я уже рассказывал. Но аналогичная проблема на участке от клиента до Entry-ноды до сих пор так и оставалась нерешённой.
Сегодня я взялся за неё.
Провёл довольно плотное обсуждение с друзьями. Узнал много нового — в частности, про механизм подписки, который поддерживают почти все VPN-клиенты.
Идея простая. Вместо того чтобы выдавать пользователю статичную VLESS-ссылку, мы выдаём ему URL подписки:
https://<DOMAIN>/api/<UUID>
Клиент периодически обращается к этому адресу и сам забирает актуальную конфигурацию. Поменялся serviceName на Entry-ноде — следующий запрос клиента вернёт уже обновлённую ссылку. Пользователь ничего не делает, ничего не перенастраивает. Просто обращается к микросервису, размещенному на входном узле.
Точка входа пользователя при этом — домен, закрепленный за Entry. При замене Entry просто меняется A-запись в DNS, и URL подписки остаётся прежним.
В общем, схема разработана — пока концептуально, зафиксирована в документации. Осталось дело за малым: реализовать.