Перейти к содержанию

Ротация путей: клиентский участок

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

Ещё в начале работы над Sigil Gate мы занялись ротацией gRPC-путей на участке Entry→Core — добавили «статистического шума», чтобы постоянный трафик через один и тот же эндпоинт не стал узнаваемым паттерном. Об этом я уже рассказывал. Но аналогичная проблема на участке от клиента до Entry-ноды до сих пор так и оставалась нерешённой.

Сегодня я взялся за неё.

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

Идея простая. Вместо того чтобы выдавать пользователю статичную VLESS-ссылку, мы выдаём ему URL подписки:

https://<DOMAIN>/api/<UUID>

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

Точка входа пользователя при этом — домен, закрепленный за Entry. При замене Entry просто меняется A-запись в DNS, и URL подписки остаётся прежним.

В общем, схема разработана — пока концептуально, зафиксирована в документации. Осталось дело за малым: реализовать.