VPN·HUB·CRACK
План Б: запасной контур и переключение клиентов за пятнадцать минут · VPN HUB CRACK
План Б: запасной контур и переключение клиентов за пятнадцать минут
План Б: запасной контур и переключение клиентов за пятнадцать минут
Разбор аварии, когда она уже случилась, лежит в статье «Заблокировали IP». Эта статья про то, что должно быть сделано до.
Начнём с наблюдения, которое ломает привычную логику резерва. Вот что реально происходило у сервисов за последние месяцы:
| Что случилось | Ноды | Клиенты |
|---|---|---|
| РКН закрыл подсеть, где стояли две ноды | живы и здоровы | без связи |
| Страница подписки висела на выключенном CDN | живы | не могут получить новый конфиг |
| CDN переписал путь подписки, отдавал HTML вместо конфига | живы | приложение показывает пустой список |
| Сертификат панели протух | живы | подписка не открывается |
| A-запись входа смотрела на выбывший адрес | жив запасной вход | «пинг есть, коннекта нет» |
Ни в одном случае нода не падала. Падал путь, по которому клиент забирает конфиг. Запасная нода в такой аварии не помогает: клиент про неё не узнает.
Подписка как единственная точка переключения
Клиент, получивший ссылку на подписку, обновляет конфиги сам. Вы меняете хост в панели, приложение подтягивает изменения при следующем обновлении, и никого уведомлять не нужно.
Клиент, получивший голую ссылку vless://, зафиксирован на конкретном адресе навсегда. Меняете адрес — идёте в личку к каждому.
Отсюда правило, которое стоит поставить раньше выбора протоколов: сервис раздаёт только подписки. Голые конфиги допустимы для собственной отладки и ни для чего больше. Как собрать нормальную страницу подписки со своим доменом, разобрано в «Странице подписки».
Второе следствие важнее первого. Домен подписки становится вашей единственной точкой отказа, и обращаться с ним нужно соответственно.
Что подготовить заранее
Второй домен подписки с выпущенным сертификатом
Домен покупается заранее, DNS настраивается заранее, сертификат выпускается заранее. Причина простая: выпуск сертификата требует, чтобы домен резолвился и порт был доступен снаружи. В момент аварии у вас может не быть ни того, ни другого.
Держите его в другой зоне и у другого регистратора. Второй домен на том же аккаунте, что и первый, закрывается вместе с первым, если проблема в аккаунте.
Проверяйте раз в месяц, что он жив:
curl -sI --http1.1 https://sub2.example.com/ | head -3
⚠️ Флаг
--http1.1здесь не украшение. Через HTTP/2 большие ответы обрываются на части соединений, и здоровая подписка выглядит сломанной. Проверять всегда снаружи, не с самого сервера: локальныйcurlк странице подписки Remnawave отдаёт 502 по замыслу, там стоит проверка источника запроса.
Резервная нода в другой AS и другой стране
Блокируют подсетями. Две ноды у одного провайдера в соседних адресах выключаются одной строкой в реестре.
Резерв должен отличаться по трём признакам: другой хостер, другая автономная система, другая страна. Совпадение хотя бы по одному оставляет вас в той же корзине.
Резервная нода стоит денег и большую часть времени простаивает. Держите её на минимальном тарифе, но поднятой и заведённой в панель. Нода, которую надо ещё установить, это не резерв, а план купить резерв.
Резервный протокол
Reality на 443 порту работает, пока его не начали активно проверять. Когда начнут, вам понадобится что-то, устроенное иначе: AmneziaWG или NaiveProxy, Hysteria2 на UDP, XHTTP за CDN.
Резервный протокол должен быть поднят на резервной ноде и добавлен в отдельный сквад. Не в основной: иначе он раздастся всем клиентам сразу и вы получите поддержку по протоколу, который никому пока не нужен.
Способ докричаться до клиентов
Канал в Telegram, где вы публикуете статус. Он должен существовать до аварии и быть известен клиентам: ссылка в боте, в письме после покупки, на странице подписки.
Второй бот на другом токене занимает полчаса и однажды окупается целиком.
Куда нельзя ставить подписку
Одна ошибка встречается чаще остальных: страницу подписки размещают там же, где ноду, или прячут за тем же CDN.
Один IP с нодой. Заблокировали адрес ноды, и вместе с ней уехала страница, откуда клиент забрал бы адрес запасной.
Тот же CDN, что у ноды. Отвалился CDN, и клиент теряет оба пути разом. Отдельная ловушка: CDN умеет переписывать путь запроса, и /sub/uuid превращается в корень сайта. Приложение получает честные 200 и HTML вместо конфига, а в логах панели всё выглядит нормально.
Тот же домен, что у панели. Панель — самая заметная часть инфраструктуры и первый кандидат на блокировку.
Правильно: подписка живёт на отдельном домене, за отдельным адресом, желательно за Cloudflare. Заблокировать её тогда сложнее, чем ноду.
Первые пятнадцать минут
Порядок, а не паника. Каждый шаг занимает минуту или две.
1. Определите, что именно сломалось. Ноды и подписка проверяются разными командами:
# нода: отвечает ли TLS на 443 с нужным именем
echo | openssl s_client -connect НОДА:443 -servername ВАШ_SNI 2>/dev/null | head -12
# подписка: отдаёт ли она вообще что-то похожее на конфиг, а не страницу сайта
curl -s --http1.1 -A "Happ/1.0" https://sub.example.com/ССЫЛКА | head -c 200
Если TLS не отвечает, а ping идёт, адрес заблокирован по TCP: это ровно тот случай, когда «сервер пингуется, а не работает».
⛔ Второй командой можно поймать только грубую поломку: вместо конфига приходит HTML страницы, то есть путь подписки переписал CDN или сабка отдаёт не то. Доказательством работоспособности она не является. Remnawave без заголовка
x-hwidотдаёт клиентскому UA заглушку, которая на глаз похожа на конфиг, и такая проверка пройдёт при реально сломанной выдаче. Подставлятьx-hwidтоже нельзя: проверка займёт слот устройства живого клиента. Единственная честная проверка — настоящее приложение с настоящей подпиской.
2. Проверьте, не протух ли сертификат. Строка notAfter в выводе выше.
3. Переключите хосты в панели на резервную ноду. Адрес хоста нельзя менять в одиночку: вместе с ним меняются sni и привязка к инбаунду резервной ноды. Хост, у которого адрес от одной ноды, а инбаунд от другой, отдаёт клиенту конфиг, который никуда не подключается.
4. Убедитесь, что изменения дошли до клиента. Правки шаблонов подписки через базу напрямую не применяются: бэкенд держит их в памяти. Меняйте через API панели, иначе увидите старый шаблон при верной записи в базе.
5. Напишите в канал. Одно сообщение: что случилось, что делать клиенту (обновить подписку в приложении), когда ждать нормализации. Молчание порождает вал обращений, который съест остаток вечера.
Учения
План Б, который ни разу не проверяли, планом не является.
Раз в месяц, в спокойное время, проделайте это на себе:
- Переключите свой аккаунт на резервный домен подписки и обновите конфиг в приложении.
- Подключитесь через резервную ноду. Проверьте скорость и то, что сайты открываются.
- Верните обратно.
Двадцать минут раз в месяц. За это время выясняется всё то, что иначе выясняется в аварию: протухший сертификат, забытая A-запись, резервная нода с версией ядра старше панели, сквад без единого хоста.
⭐ Отдельно проверьте, что резервная нода вообще принимает клиентов. Нода, поднятая полгода назад и с тех пор не тронутая, часто оказывается новее панели по версии образа: панель и нода перестают договариваться по TLS, и в логах появляется ошибка рукопожатия вместо понятного сообщения. Версию образа ноды стоит зафиксировать под версию панели, а не тянуть
latest.
Что должно быть в готовности
| Пункт | Как проверить, что готово |
|---|---|
| Второй домен подписки | curl -sI --http1.1 снаружи отдаёт 200 |
| Сертификат на нём | notAfter дальше, чем через месяц |
| Резервная нода | Заведена в панель, онлайн, версия образа под панель |
| Резервный протокол | Поднят, лежит в отдельном скваде |
| Канал статуса | Существует, ссылка на него есть в боте |
| Второй бот | Токен получен, лежит в заметках |
| Учения | Проводились в этом месяце |
Шесть строк из семи делаются за один вечер. Седьмая делается раз в месяц и стоит двадцати минут.