Yandex Cloud лежит с воскресенья 11 октября. На нём стояли все формы моего сайта: заявки, запись на звонок, подписка. В понедельник вечером перестал открываться и сам сайт. Я в этот день приехал в Екатеринбург, интернет у меня один, раздача с телефона через МегаФон.

Рабочее место на эти дни: ноутбук, второй ноутбук, телефон на проводе. Фото 15 октября, тот же стол
Рабочее место на эти дни: ноутбук, второй ноутбук, телефон на проводе. Фото 15 октября, тот же стол

За три дня я прошёл путь от «наверное, это Яндекс» до работающего сайта и работающих форм на другом облаке. Ниже эта история по часам, со скриншотами и таблицей, у кого что сломалось.

Я веду vibecoding.ru, карту рынка ИИ на русском, и помогаю компаниям внедрять ИИ. Запись на такую помощь стоит на странице /services, она лежала вместе с остальными формами.

Витрина сайта стоит у зарубежного хостинга, данные людей по 152-ФЗ лежат на сервере в России. До 11 октября этот российский сервер был набором функций в Yandex Cloud. Поэтому переезжала только российская часть, витрину я не трогал. Клики по панелям и замеры в этой истории делал ИИ-агент, я принимал решения и платил. Дальше «я» значит мы вдвоём.

Как прошли эти дни

когда

что

вс 11.10, ~04:00

Yandex Cloud падает. Формы сайта молчат

пн 12.10, 20:59

«сайт не открывается». Замер: открывается у 4 провайдеров из 28

21:12

сменил адрес у хостинга. Через час домашние провайдеры открывают сайт

21:43

МегаФон режет по-прежнему. Решил спать

вт 13.10, 08:02

МегаФон режет. Начал переезд

09:00–11:00

VK Cloud: аккаунт, 12 000 ₽ бонусов, ноль публичных адресов

12:30

ожил старый запасной вход на Яндексе, МегаФон открывает сайт

14:00–15:40

Рег.облако: сервер за час, обрыв соединения на 16 КБ

16:00–19:05

Selectel: сервер, база, вход для России

19:30

запись на звонок снова работает

20:12

Яндекс выключен

ср 14.10, утро

письма с нового сервера не уходят. Чиню

Понедельник, 20:59. Сайт режут по адресу

Витрина через Яндекс не ходит, только формы, и должна была открываться. Первая мысль всё равно была про Яндекс, слишком удобно всё сходилось по времени.

Мерить я стал через Globalping. Это бесплатный сервис, который открывает сайт с компьютеров обычных людей в разных городах и показывает, у кого открылось. Команда видна на скриншоте замера 15 октября ниже, повторить можно за минуту. Запросил 30 домашних провайдеров России, ответили 28. Сайт на своём адресе открылся у 4. Из Германии, США и Казахстана он открылся у всех 10 из 10. Соседние адреса того же хостинга с заголовком Host: vibecoding.ru открылись у 27 и 28 из 28. По этим цифрам я понял, что сайт режут по адресу на уровне TCP, ещё до рукопожатия TLS, и по имени никто не фильтрует.

Замер 12 октября, 20:59. Слева что проверяли, справа сколько провайдеров открыли. Старый адрес хостинга открыли 4 из 28, соседние адреса того же хостинга — 27 из 28
Замер 12 октября, 20:59. Слева что проверяли, справа сколько провайдеров открыли. Старый адрес хостинга открыли 4 из 28, соседние адреса того же хостинга — 27 из 28

Первый ход простой, переставить домен на другой адрес того же хостинга. Свежий замер перед кликом показал 27 из 28 на новом адресе. В 21:12 я поменял три A-записи в кабинете reg.ru. Корень домена вышел у ns1.reg.ru за минуты. Поддомены www и app сохранил в 21:32, вышли они только в 22:16. Контрольный замер в 22:34 дал 19 из 20 домашних провайдеров. Единственная осечка была в Оренбурге, у провайдера «Стройтехсервис»: там закрыт и новый адрес.

По дороге отпал план «на будущее», два адреса в DNS сразу. Chromium перебирает адреса по очереди и ждёт таймаут TCP на закрытом, это десятки секунд. Safari перебирает быстро, но в России основная доля у Chromium. Мёртвый адрес всё равно пришлось бы убирать из DNS руками.

21:43. МегаФон режет по имени

Домашние провайдеры открывали сайт, а у меня на мобильном интернете он по-прежнему не открывался. Я снял замер мимо VPN, с интерфейса мобильной сети.

что проверял

итог

TCP до нового адреса, порт 443

соединение есть

TLS с именем vibecoding.ru на тот же адрес

таймаут

TLS с именами react.dev, ui.shadcn.com на тот же адрес

200

TLS с именем vibecoding.ru на российский адрес (ya.ru)

рукопожатие проходит

У МегаФона работало другое правило: имя сайта × направление на зарубежный хостинг. Если имя в списке, адрес уже не важен. Такое правило уже было в июле и прожило меньше суток. Так же устроены «белые списки» мобильного интернета. Поэтому мне нужен был вход с российским адресом, за которым стоит зарубежная витрина.

Такой вход у меня был, две виртуалки и балансировщик в Yandex Cloud, собранные 28 сентября на этот случай, но лёг он вместе с облаком. На ночь я решил ничего не покупать, потому что правило у оператора могло исчезнуть само, как в июле. Утром 13 октября в 08:02 проверил. МегаФон резал по-прежнему.

Вторник, 08:06. Что вообще висело на Яндексе

Инвентарь по коду занял полчаса.

Страница инцидента № 2136 на статус-панели Yandex Cloud: с 4:00 11 октября недоступны почти все сервисы, в том числе Cloud Functions, API Gateway, YDB и Postbox, на которых стояли формы сайта
Страница инцидента № 2136 на статус-панели Yandex Cloud: с 4:00 11 октября недоступны почти все сервисы, в том числе Cloud Functions, API Gateway, YDB и Postbox, на которых стояли формы сайта

что

что делает

куда девать

API Gateway + Cloud Functions + YDB, 21 таблица

заявки, запись на звонок, подписка, вход в курс, оплата, письма

российский сервер + Postgres

4 служебные функции

сборщики почты, прогрев ящиков

туда же

Postbox

отправка писем

другой отправитель

Object Storage

картинки сайта

жив, не трогаю

2 ВМ + балансировщик + Certificate Manager

вход для МегаФона

российский сервер

Метрика, Wordstat, Вебмастер

данные о спросе и поиске

это продукты Яндекса, не облако. Жду

Функции обошлись в сентябре в 232 ₽. Запасной вход на двух ВМ с балансировщиком стоил около 4 000 ₽ в месяц. Он две недели стоял «в запасе», не включённый в работу, и про эти 4 000 ₽ я узнал только 13 октября. Агент записал цену в свои заметки и мне не сказал.

09:00. VK Cloud: 12 000 ₽ бонусов и ноль публичных адресов

Первым кандидатом стал VK Cloud. Аккаунту ИП кабинет даёт 12 000 ₽ бонусов без проверки документов: 5 000 ₽ после подтверждения телефона, 7 000 ₽ промокодом сразу после ввода ИНН. Плюс программа для стартапов до 2 млн ₽.

Регистрация заняла два часа, с 09:00 до 11:00. Письмо с подтверждением почты пришло только после кнопки «Отправить ссылку ещё раз», через 40 минут. Вкладки «Доступ по API» в кабинете нет, файл openrc.sh для OpenStack CLI пришлось собирать руками по стандартным адресам VK. Ключ ed25519 VK не принял, прошёл RSA 4096.

Кабинет VK Cloud 13 октября, 10:20. Сразу после ввода ИНН кабинет сам показывает промокод на 7 000 ₽
Кабинет VK Cloud 13 октября, 10:20. Сразу после ввода ИНН кабинет сам показывает промокод на 7 000 ₽

В 10:45 создание первой виртуалки упало с ошибкой Maximum number of ports exceeded. У нового аккаунта квота публичных адресов 0, внешних портов тоже 0. Окно «Добавить квоты» предлагает два пути: через менеджера или автоматически после 10 000 ₽ оплат. Тикет в поддержку ушёл в 10:58. Персональный менеджер тем же днём написала, что заявку на адреса подала, сроков нет, а программа для стартапов приостановлена. На следующий день поддержка ответила «направьте запрос в контактный центр» на отдельную почту, с описанием задачи и телефоном, инженер перезвонит в будни с 9 до 18.

Ответ поддержки VK 14 октября: расширение квот только через контактный центр, инженер перезвонит в рабочие часы
Ответ поддержки VK 14 октября: расширение квот только через контактный центр, инженер перезвонит в рабочие часы
Переписка с менеджером VK Cloud 13 октября: заявка на публичные адреса ушла в 12:53, сроков нет. Имена и фото скрыты
Переписка с менеджером VK Cloud 13 октября: заявка на публичные адреса ушла в 12:53, сроков нет. Имена и фото скрыты

На 15 октября адресов так и не дали, квота по-прежнему 0. Аккаунт с бонусами есть, сервер с публичным адресом на нём поднять нельзя. А сайт у МегаФона к 11 утра всё ещё не открывался.

12:30. Старый запасной вход ожил на полдня

Одна из двух зон Яндекса вернулась. Виртуалка запасного входа в ней отвечала, но ходила к витрине по старому закрытому адресу. Я переставил её на новый адрес. МегаФон открыл сайт в 6 пробах из 6, домашние провайдеры в 20 из 20, и я перевёл домен на этот вход.

Так у меня появилось полдня на переезд. Вторая зона лежала, и 4 000 ₽ в месяц за запас платить не хотелось, так что оставаться на этом входе я не собирался.

14:00. Рег.облако: сервер за час и обрыв на 16 КБ

Второй кандидат reg.ru: кабинет у меня и так открыт из-за домена, аренда сервера там стоит 745 ₽ в месяц. Пополнил на 500 ₽, оплата почасовая. За час собрал nginx с сертификатом, скопировав конфиг с яндексовой виртуалки. Потом замер показал, что из дата-центра reg.ru в Петербурге соединение с зарубежным хостингом обрывается на 16 КБ.

куда, с каким именем в рукопожатии

итог

любой из четырёх адресов хостинга, имя vibecoding.ru

первый байт за 0,12 с, обрыв на 13–16 КБ

то же, имена наших соседних доменов

обрыв на 16 КБ

тот же адрес, имя react.dev или vercel.com, Host vibecoding.ru

200, вся страница около 350 КБ за 0,2–0,3 с

react.dev, github.com, speed.cloudflare.com напрямую

целиком

то же самое с виртуалки в дата-центре Яндекса

целиком, 0,2 с

На выходе из дата-центра стоит фильтр, который душит TLS к адресам этого хостинга после 16 КБ для «неизвестных» имён. Популярные имена проходят. Из дата-центра Яндекса такого нет, из Selectel, как выяснилось вечером, тоже. Почему так, снаружи не видно.

Замер 13 октября, 15:42, с сервера в Рег.облаке. Наше имя обрывается на 16 КБ, чужое популярное имя на тот же адрес проходит целиком
Замер 13 октября, 15:42, с сервера в Рег.облаке. Наше имя обрывается на 16 КБ, чужое популярное имя на тот же адрес проходит целиком

Можно было замаскироваться под популярное имя в рукопожатии. Я отказался: это хрупко, и это уже обход фильтра. Сервер удалил в тот же вечер, на балансе осталось 495 ₽.

16:00. Selectel за 908 ₽ в месяц

Третий кандидат Selectel. Бонусов для новых нет, все акции закрылись 9–12 октября. Конфигуратор при первом заходе поставил диску 11 000 IOPS, это плюс 2 948 ₽ в месяц к серверу. Переключил на обычный SSD, вышло около 104 ₽. Кнопка «Создать» после нажатия становится серой и не возвращается, а сервер при этом уже создан. Я чуть не создал второй.

Shared-сервер 1 vCPU на 10 %, 1 ГБ памяти, 5 ГБ диска, с адресом и роутером стоит 908 ₽ в месяц. С него зарубежный хостинг отдаёт страницу целиком, те же 350 КБ за 0,23–0,36 с, по любому своему адресу. МегаФон через него открывает сайт за 0,5 с. Домашние провайдеры открыли 20 из 20.

Контрольный замер 15 октября в 10:57. Сайт открылся у всех 20 домашних провайдеров России, в том числе в Оренбурге, где 12 октября не открывались оба адреса хостинга
Контрольный замер 15 октября в 10:57. Сайт открылся у всех 20 домашних провайдеров России, в том числе в Оренбурге, где 12 октября не открывались оба адреса хостинга
Сервер Elisabeth в Selectel: 1 vCPU на 10 %, 1 ГБ, 5 ГБ, 908 ₽ в месяц. На нём вход для России, Postgres и запись на звонок
Сервер Elisabeth в Selectel: 1 vCPU на 10 %, 1 ГБ, 5 ГБ, 908 ₽ в месяц. На нём вход для России, Postgres и запись на звонок

В 19:05 я переставил три A-записи на Selectel. На том же сервере поднял Node 20 и Postgres 18, перенёс запись на звонок с YDB на Postgres, выпустил сертификат, настроил ночной pg_dump. В 19:30 календарь записи снова работал, 160 свободных окон.

Страница /services вечером 13 октября: календарь записи снова показывает окна, впервые за три дня
Страница /services вечером 13 октября: календарь записи снова показывает окна, впервые за три дня

20:12. Яндекс выключен

К 20:12 на старый вход заходили только роботы. Я удалил балансировщик и остановил виртуалки. Одна не остановилась: её зона лежала, и команда ушла в пустоту с ответом Service is overloaded. Вечером того же дня Яндекс написал клиентам, что все сервисы будут бесплатными с 8 по 31 октября. Виртуалка в лежащей зоне до ноября денег не стоит.

Письмо Yandex Cloud от 13 октября: использование всех сервисов бесплатно с 8 по 31 октября для текущих клиентов
Письмо Yandex Cloud от 13 октября: использование всех сервисов бесплатно с 8 по 31 октября для текущих клиентов

Среда. Письма не уходят

Ещё одни грабли Selectel нашлись утром 14 октября: с нового сервера закрыты исходящие почтовые порты 465 и 587 ко всем почтовикам. Письма с подтверждением подписки не уходили. Обращение в поддержку висит без ответа больше суток, над ним плашка «время ответа увеличено».

С сервера Selectel: порты 465 и 587 до smtp.yandex.ru закрыты, обычный 443 открыт
С сервера Selectel: порты 465 и 587 до smtp.yandex.ru закрыты, обычный 443 открыт

Пока жду, письма складываются в очередь в Postgres и уйдут сами, когда порты откроют. Форма отвечает человеку за секунду. В первой версии она 11 секунд ждала почтовый сервер.

Очередь писем на сервере: сколько ждёт, сколько ушло, последняя ошибка. Снято 15 октября
Очередь писем на сервере: сколько ждёт, сколько ушло, последняя ошибка. Снято 15 октября

Какой хостинг в России я рассматривал

вариант

что это

плюс

минус

на чём споткнулся

итог

ждать Яндекс

ничего не делать

бесплатно

срок неизвестен, формы лежат третий день

ни в одном письме нет оценки восстановления

нет

сменить адрес у хостинга

три A-записи на открытый адрес

20 минут работы, 0 ₽

помогает только там, где режут адрес

МегаФон режет по имени

да, как первый шаг

два адреса в DNS

A-записи на оба адреса

«само переключится»

Chromium ждёт таймаут на мёртвом адресе

не пробовал, отверг по поведению браузеров

нет

запасной вход на ВМ Яндекса

nginx перед хостингом

уже собран

лежит вместе с облаком, 4 000 ₽/мес

ожил на полдня, когда одна зона вернулась

временно

Timeweb Cloud

VPS

300 ₽ по реферальной ссылке

подводил нас раньше

второй раз не рассматривал

нет

VK Cloud

VPS, аккаунт ИП

12 000 ₽ бонусов сразу

публичных адресов 0, квота только через контактный центр

Maximum number of ports exceeded

аккаунт есть, серверов нет

Рег.облако

VPS за 745 ₽

тот же кабинет, что у домена; сервер за час

фильтр на выходе из дата-центра

обрыв на 16 КБ к зарубежному хостингу

удалён в тот же день

Selectel

Shared VPS за 908 ₽

страница целиком за 0,3 с, МегаФон открывает

бонусов нет; IOPS-ловушка в конфигураторе; закрытая исходящая почта

поддержка молчит сутки

да, живу здесь

Что я бы сделал иначе

Держал бы российский вход в работе каждый день. Мой запасной стоял выключенным и лёг вместе с облаком, а правило «имя × направление» у МегаФона возвращается без предупреждения.

Мерил бы из России с первого дня. Мои машины работают через VPN и видят сайт всегда. Что видят люди в России, показали только Globalping с фильтром «домашние провайдеры России» и curl с интерфейса мобильной сети мимо туннеля. У Globalping бесплатный лимит 250 проб в час, и тело ответа режется на 10 КБ, поэтому обрыв на 16 КБ я поймал только curl с собственного сервера в Рег.облаке.

Требовал бы от агента цену сервера до того, как он его создаст.

Продумал бы почту с самого начала. У VK Cloud нет транзакционного почтового API, у Selectel порты закрыты по умолчанию. Очередь писем в базе с повторной отправкой у меня появилась только после первой потерянной подписки.

Три вопроса

Почему не CDN или прокси-сервис, а свой сервер? Любой зарубежный сервис перед сайтом попадает под то же правило «имя × направление». Помогает только российский адрес, а российский адрес с управляемым прокси у меня один, свой nginx.

Почему не подождать Яндекс? Ждал двое суток. Ни в одном письме Яндекса не было срока восстановления, а формы всё это время не принимали заявки.

Что со старыми данными в YDB? Пока облако лежит, выгрузить их нельзя. Новая база стартовала пустой. Когда Яндекс вернётся, старые записи дольются в Postgres, и людям, которые успели войти заново, вернут их прежние номера учеников.

Если ваш оператор режет сайты по имени или ваш дата-центр душит соединения наружу, напишите в комментариях город, оператора и что не открывается. Замер через Globalping занимает минуту, команда есть на скриншоте выше.

Если вы сейчас сидите с лежащим Яндексом, пишите в Telegram @shilovevgeny, расскажу, как сделал, и помогу переехать. Разборы вроде этого я выкладываю в канале @shilovtech.

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

Комментарии (0)