VPN·HUB·CRACK
Личный кабинет бота (miniapp) за CDN: живёт под «белыми списками» · VPN HUB CRACK
Личный кабинет бота (miniapp) за CDN: живёт под «белыми списками»
Личный кабинет бота (miniapp) за CDN: чтобы работал под «белыми списками»
🛡️ Коротко. Когда провайдер уходит в белый список (работает только горстка «разрешённых» доменов/подсетей), домен твоей панели и мини-аппа блокируется, клиент не откроет кабинет, не продлит подписку, не оплатит. Лечится тем же приёмом, что и сокрытие ноды: прячем кабинет за крупный CDN (сеть-посредник, что прячет реальный IP), чьи адреса в белом списке. Инструкция ниже универсальна (Beeline, Yandex, Selectel, Timeweb): меняются названия галочек, суть одна.
📖 Незнакомые слова? Все термины простыми словами смотрите в Словаре терминов.
1. Зачем это (проблема белых списков)
При веерных отключениях и жёсткой фильтрации мобильный/домашний интернет в РФ переводят в режим whitelisting: пропускаются только «белые» ресурсы (госуслуги, банки, крупные CDN), всё остальное молча дропается. Подробнее про сам режим смотрите в статье «Белые списки мобильного интернета».
Что при этом ломается у тебя:
- домен кабинета / мини-аппа не открывается → клиент не видит подписку, ключи, кнопку продления;
- вход через Telegram (Login Widget) не проходит;
- оплата/продление недоступны → прямой минус к выручке именно в тот момент, когда клиенты паникуют и хотят продлить.
Идея решения: IP-адреса крупных CDN почти всегда в белом списке (через них раздаётся критичная российская инфраструктура). Если поставить кабинет за такой CDN, запросы клиента идут на «белые» адреса CDN, а тот уже тянет ответ с твоего origin (твоего сервера-источника). Кабинет снова доступен.
2. Что это такое: тот же CDN-фронтинг
Механизм идентичен сокрытию ноды за CDN (см. семейство гайдов «Beeline CDN», «Yandex CDN» и др.):
Клиент → «белый» IP CDN → (CDN проксирует) → твой origin (домен кабинета:443)
Разница только в объекте и в наборе правил:
| Фронт ноды (35-cdn-*) | Фронт кабинета (эта статья) | |
|---|---|---|
| Что прячем | VLESS-инбаунд (XHTTP/gRPC) | Веб-кабинет / мини-апп / subpage |
| Ключевое правило | потоковые пути без кэша | /api/ без кэша, разрешить POST/PUT |
| Доп. настройка | отпечаток edge, packet-up | Login Widget + Menu Button в BotFather |
Поэтому: если научился фронтить ноду, фронтишь и кабинет. И наоборот. CDN может быть любой: Yandex ничем не отличается от Beeline по сути, отличается только UI панели.
3. Пошагово (пример Beeline, применимо к любому CDN)
3.1 Создаём ресурс
CDN → Добавить ресурс. Тип: Статика. В адрес источника указываем домен кабинета с портом :443. Жмём Создать.
3.2 Конфигурация ресурса
- Использовать HTTPS при запросе к источникам: 🟢 ВКЛ
- Hostname при запросе к источнику: домен кабинета
- Кэширование: 🟢 ВКЛ (глобально; динамику отключим правилом ниже)
- Желаемый CNAME: по желанию задаём свой + включаем «Раздача HTTPS через CNAME»
🔐 Сертификат для CNAME. К желаемому CNAME нужно привязать TLS-сертификат: либо выпустить его внутри CDN (Beeline/Yandex умеют), либо выпустить свой на VPS (certbot) и загрузить в панель CDN. Порядок выпуска/загрузки смотрите в отдельном материале по сертификату (вложение к гайду).
3.3 Правило на /api/ (самое важное!)
Правила → Создать правило. Путь к директории: /api/.
Открываем конфигурацию правила /api/ → Редактировать:
- Кэширование: ❌ ВЫКЛ
⚠️ Если закэшировать
/api/, кабинет «залипнет» на старых ответах: клиент увидит чужую/устаревшую подписку, оплата не подтвердится. API всегда без кэша.
Возвращаемся в основные настройки правила:
- Сжатие Brotli: ❌ ВЫКЛ
- Сжатие Gzip: ✔️ ВКЛ
- Проверка CORS на стороне CDN: ❌ ВЫКЛ
3.4 Экспертные настройки ресурса
- HTTP/2: ✔️ ВКЛ
- HTTP/3: ❌ ВЫКЛ
- Только HTTPS: ✔️ ВКЛ
- Только современные версии TLS: ✔️ ВКЛ
- Следовать редиректам: ❌ ВЫКЛ
- Проверка CORS на стороне CDN: ❌ ВЫКЛ
- Сжатие Brotli: ❌ ВЫКЛ / Gzip: ✔️ ВКЛ
- Разрешённые HTTP-методы: добавить
PUTPOSTDELETEPATCH(GET/HEAD и так есть)
⚠️ Без
POST/PUT/...отвалится всё, что не «просто чтение»: сохранение, покупка, продление кабинета.
3.5 Прописываем домен в приложении
В .env сервиса добавляем домен CDN-ки / CNAME-домен в Trusted origins (доверенные источники), чтобы бэкенд принимал запросы с нового домена.
3.6 Настройка бота (BotFather)
- Открываем @BotFather → выбираем бота своего VPN → MiniApps → Menu Button и вводим тех-домен CDN / CNAME-домен.
- Возвращаемся в главные настройки бота → Login Widget:
- Redirect URIs → добавить
https://<домен-CDN-или-CNAME>/auth/telegram/callback - Trusted origins → добавить
https://<домен-CDN-или-CNAME>
⭐ Важно: CNAME не заработает в первый же день. Прогрев CNAME + выпуск/привязка сертификата занимают время (обычно до суток). Не паникуй, если сразу «не пингуется», проверь на следующий день.
4. Плюсы
- ✅ Кабинет открывается под белыми списками: клиент входит, продлевает, платит даже во время шатдауна.
- ✅ Реальный IP панели скрыт: заодно защита от блока по IP и от атак на origin.
- ✅ Дёшево или бесплатно: Beeline бесплатен, Yandex и др. берут копейки за трафик кабинета (он лёгкий).
- ✅ Быстрее: HTTPS-терминация на CDN, HTTP/2, современный TLS, gzip.
- ✅ Один приём на всё: то же самое, что фронт ноды; один навык покрывает и кабинет, и подписку, и ноду.
5. Минусы и подводные камни
- ⛔ Сертификат на CNAME: нужно выпустить/загрузить, с первого дня не поднимется.
- ⛔
/api/нельзя кэшировать: забыл правило → кабинет показывает устаревшие данные, оплата «не видится». - ⛔ Методы
POST/PUT/DELETE/PATCH: не разрешил → часть кабинета не работает. - ⛔ CORS на CDN: только ВЫКЛ, иначе двойные заголовки, браузер режет запросы.
- ⛔ Login Widget капризен к домену: Redirect URIs и Trusted origins должны точно совпадать с CDN-доменом, иначе вход через Telegram не сработает.
- ⛔ Зависимость от политики CDN: провайдер может менять правила/резать; держи запасной CDN (Yandex ↔ Beeline) на случай.
6. Почему инструкция универсальна (Yandex, Beeline, любой)
Суть везде одна: клиент → «белый» CDN → origin кабинета. Отличаются только названия галочек в панели:
- Beeline: «Статика», «Раздача HTTPS через CNAME», «Экспертные настройки».
- Yandex Cloud CDN: «Ресурс», «Origin group», «CNAME», «Edge»-настройки; для GET-only-ноды там своя засада (эдж рубит POST), но для кабинета POST мы разрешаем правилом, так что кабинет живёт нормально.
- Selectel / Timeweb / другой используют те же три сущности: ресурс + origin, CNAME + сертификат, правило на
/api/без кэша.
Берёшь любой CDN, чьи IP в белом списке, и повторяешь 6 пунктов. Детали конкретных провайдеров смотрите в гайдах «Yandex CDN» и «Beeline CDN».
7. Чек-лист
- [ ] Ресурс типа Статика, origin =
домен-кабинета:443, HTTPS к источнику ВКЛ - [ ] Hostname = домен кабинета, кэш ВКЛ (глобально)
- [ ] CNAME + «Раздача HTTPS через CNAME» + сертификат привязан
- [ ] Правило
/api/→ кэш ВЫКЛ - [ ] Экспертные: HTTP/2 ВКЛ, только HTTPS, только modern TLS, методы PUT/POST/DELETE/PATCH, Gzip ВКЛ, Brotli/HTTP3/редиректы/CORS ВЫКЛ
- [ ]
.env→ Trusted origins += CDN/CNAME-домен - [ ] BotFather → MiniApps → Menu Button = CDN/CNAME-домен
- [ ] Login Widget → Redirect URIs +=
https://<CDN>/auth/telegram/callback, Trusted origins +=https://<CDN> - [ ] Подождать прогрев CNAME/сертификата (не в первый день)
Готово: кабинет и мини-апп теперь доступны даже когда «обычный» интернет свёрнут в белый список.