Подписка через домен-фронтинг¶
Домен-фронтинг (Domain Fronting) позволяет обращаться к серверу подписки через «фронт» — крупный CDN/облачный домен, который не блокируется. Соединение устанавливается с IP-адресом фронта, но HTTP-запрос идёт с Host-заголовком настоящего сервера. Провайдер видит подключение к «белому» домену, а не к домену VPN-панели.
Формат ссылки¶
Фронтинг-параметры передаются в фрагменте ссылки подписки (после #имя?):
| Часть | Значение | Пример |
|---|---|---|
<front-domain> |
Домен-фронт в самой ссылке (authority) — виден провайдеру как цель подключения | cdn.imsel.dev |
resolve-address |
Домен, который клиент резолвит и подключается по IP напрямую (обычно тот же фронт) | cdn.imsel.dev |
host |
Настоящий Host-заголовок — домен, на который CDN маршрутизирует запрос | backend.imsel-api.com |
resolve-address и host можно комбинировать с любым front-domain: адрес подключения определяется фронт-доменом (resolve-address), а маршрутизация на сервер — заголовком host.
Пример: три зеркала¶
Первый URL без метки, последующие — с метками url:N=, в конце fallback-url=:
https://cdn.imsel.dev/subpath/token#MySub?resolve-address=cdn.imsel.dev&host=backend.imsel-api.com|url:1=https://fallback.imsel.dev/subpath/token#MySub?resolve-address=fallback.imsel.dev&host=backend.imsel-api.com|url:2=https://route.imsel.dev/subpath/token#MySub?resolve-address=route.imsel.dev&host=backend.imsel-api.com|fallback-url=https://backup.imsel.dev/token
Клиент пробует зеркала по порядку: cdn.imsel.dev → fallback.imsel.dev → route.imsel.dev. Каждый резолвится отдельно, соединение идёт на IP соответствующего фронта, Host-заголовок всегда backend.imsel-api.com. Если все три недоступны — используется fallback-url. Тот же список без меток (просто через |) тоже работает.
Управление фронтинг-зеркалами из подписки¶
Команды управления (см. подробнее) работают с фронтинг-зеркалами через помеченные позиции: первый URL — позиция 0, url:1 — второй, url:N — позиция N:
new-url: https://mirror.imsel.dev/subpath/token#MySub?resolve-address=mirror.imsel.dev&host=backend.imsel-api.com
new-url-1: https://fallback.imsel.dev/subpath/token#MySub?resolve-address=fallback.imsel.dev&host=backend.imsel-api.com
new-url-1: resolve-address=198.51.100.15
new-url-1: host=backend.imsel-api.com
new-domain: mirror.imsel.dev
new-url-2: 0
fallback-url: https://route.imsel.dev/subpath/token#MySub?resolve-address=route.imsel.dev&host=backend.imsel-api.com
new-url— заменить только первый URL (позиция 0);new-url-N: <url>— заменить зеркало на позиции N целиком (обычный или фронтинг-URL); N = количество — добавить в конец;0— удалить;new-url-N: resolve-address=<домен|IP>— точечно заменить толькоresolve-address(IP-адрес разрешён: фронт резолвится заранее и подключение идёт на указанный IP);new-url-N: host=<домен>— точечно заменить толькоhost(Host-заголовок фронтинга);new-domain/new-domain-N— заменить фронт-домен: меняется host ссылки иresolve-address(если совпадал со старим фронтом);host=не трогается — CDN-маршрутизация сохраняется;fallback-url— запасной фронтинг-URL на случай, когда все зеркала недоступны.
Ограничения¶
- Резолв
resolve-addressвыполняется системным DNS: если домен фронта резолвится на «заглушку», соединение не состоится — выбирайте живые фронты. - Фронт должен поддерживать маршрутизацию по Host-заголовку на ваш сервер (типично для Google/Cloudflare/AWS-инфраструктур); иначе CDN вернёт ошибку.
- HTTP/2-мультиплексирование на некоторых CDN игнорирует Host-заголовок после установления соединения — при странном поведении попробуйте другой фронт.