Пользователь
0,0
рейтинг
5 августа 2014 в 21:34

Разработка → Сбой в DNS у регистратора R01 и несколько роковых случайностей

Сегодня один из старейших регистраторов R01 объявил о сбое в DNS.
В связи с этим хочу рассказать вам маленькую поучительную историю о том, как это едва не убило нашу компанию.

По роду деятельности мы saas-аналитика для веба. Наше основное оружие — javascript файл, который собирает статистику. Файл раздается на множество сайтов наших пользователей, поэтому мы обязаны обеспечить его безупречную стабильность, недоступность нашего сайта не должна никак влиять на сайты наших клиентов. И мы потратили много сил на то чтобы обеспечить полную стабильность: положили скрипт в отличный мощный CDN, сделали свой домен, чтобы абстрагировать этот CDN (чтобы можно было в любой момент сменить CDN, если он даст сбой или станет слишком дорогим). Но не учли одну мелочь: DNS-сервер находился у регистратора.

Сбой в DNS у R01 заключался в том, что все домены резолвились в один конкретный IP-адрес, который на HTTP-запросы показывал обычную страницу «парковки» домена с рекламой. Либо не показывал ничего, потому что на этот IP пришлась спонтанная DoS атака от всех людей, которые пытались зайти на привычные сайты, которые держали DNS у R01. Но только не в нашем случае. На запросы /somescript.js сервер отвечает скриптом. И не просто скриптом, а динамически сгенерированным, вот таким:

var redir_url = 'http://домен, который резолвился в роковой IP/';
if (window != top) {
top.location.href = redir_url;
} else {
window.location = redir_url;
}


Скрипт отрезал параметры запроса (еще на сервере) и делал редирект на базовый домен. Все наши пользователи, подключившие аналитику, вместо нашего скрипта на своих сайтах получали чужой, который запускал редирект с их сайта на левую страницу.

Частично спасло нас только то, что почти все время сервер, который отзывался по тому IP, находился под DDoS из-за количества запросов к нему, из-за чего у подавляющего большинства пользователей запросы к нашему скрипту отваливались по таймауту (в случае недоступности скрипта мы, разумеется, никак не влияем на чужие сайты). Но те доли процента, которым «посчастливилось» получить ответ от сервера, получали редирект.

Роковое стечение обстоятельств, как это часто бывает, едва не стоило нам 2 лет работы проекта. Просто недоступный DNS; доступный DNS, который направляет запросы на недоступный сервер; доступный DNS + доступный сервер, но который не отвечает скриптом на запросы к скриптам; все предыдущее, но скрипт, который не делает редиректа — это все помогло бы избежать катастрофического эффекта на сайты наших пользователей. Не знаю, сумеем ли мы выкарабкаться после такого удара по нашему сервису, но многие клиенты, конечно же, заметили жалобы своих пользователей на непонятные редиректы. Да и мы не скрывали, тут же провели email-рассылку с просьбой отключить наш сервис до тех пор, пока не обновится кэш DNS по всему миру.

Мораль истории проста: невозможно предусмотреть все, и даже таким надежным и привычным вещам, как DNS-сервера, доверять нельзя.

Крайне сложно было предусмотреть такую ситуацию: слишком многое сложилось не в нашу пользу. Конечно же мы сменим провайдера DNS, и даже поставим свои сервера, если это будет надежнее. Но сломаться может и DNS, и CDN, все что угодно. Единственное, что можно сделать, чтобы минимизировать шанс влететь так же сильно, как мы: убедиться что в каждой точке вашей системы использовано лучшее, самое надежное из возможных решений. Даже если это выбор DNS-сервера или регистратора.
Андрей Мима @amima
карма
62,9
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Разработка

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

  • +8
    Что называется «не подфартило».
    А регистратор как-нибудь должен возместить ущерб в таком случае?

    Сам пользуюсь оным регистратором, но первым делом всегда переношу все домены на DNS от Яндекса.
    • +2
      Если пользоваться бесплатными DNS, в том числе и Яндекса, то в принципе ни кто ни кому ни чего не должен вообще и это зачастую оговаривается в оферте.
      • 0
        В точку
    • +2
      Вынос DNS на стороннюю площадку тоже не панацея. Я рекомендую сменить Регистратора. Нам почти на полсуток лишь вывели из строя домен на наших собственных DNS прописав мусор в корневую зону: www.stableit.ru/2013/12/r01ru.html
  • +3
    Сделать DNS-хостинг очень просто. Сделать его надёжным — невероятно сложно. То есть следующий шаг за «несколько серверов за LB» — это «несколько анонсируемых IP (то есть /24) с разных AS — и тут надо просто выложиться на 100%, чтобы из этого получить более стабильное нечто (синхронизация и т.д.), чем просто „несколько за одним IP“.
  • 0
    До меня только час назад дошло что происходит с моими серверами, пока не взялся разбираться. До этого несколько клиентов отправил вирусы с систем выковыривать, думал заразились, раз у них не тот айпи резолвится. Про глюк у р01 подумал уже в последнюю очередь :)
  • +2
    Как-то раз был сбой у nic.ru — часов 8 все домены, купленные через них потеряли NS-записи у SOA.
    Так что, свои NS тоже могут не помочь.
    • 0
      В такой ситуации свои DNS тоже спасут.
      Почему нет?
      • +2
        Может потому что whois запрос на регистратора зафейлиться, не получится получить NS записи и узнать авторитетные (свои) DNS. Не? И уже не важно, свои DNS не свои, имеется два DNS сервера или десяток (для отказоустойчивости).
        • 0
          > Не?
          Не.
          Whois и DNS никак не связаны и не взаимодействуют.
          Если у вас свои DNS, то вы зависите только от серверов доменной зоны, а регистратор тут вообще не участвует.
          • +2
            Регистратор управляет тем, какие DNS указаны в корневой зоне для домена. Поверьте, даже в такой простейшей операции можно накосячить — пример в моем комментарии выше.
            • 0
              Только на момент изменения DNS-записей в регистратуре.
              Это даже не DNS-протокол.

              После изменения записей регистратор не участвует в работе DNS…
              • +1
                А кто говорит, что это DNS протокол? Мы обсуждаем возможность косяка. В частности протокол там DRTP.

                А вот при продлении/изменении списка DNS домена как раз регистратор может зафигачить мусор в реестр. И тут начинается дивное! Реестр зоны ру пушится 3-4 раза в сутки с интервалом 6-8 часов. Если Вас оттуда стерли — ждать 6-8 часов, заранее обновить — невозможно.
                • 0
                  1. Обсуждаемый здесь сбой не повлек изменений записей в реестре;
                  2. Речь о .net домене, т.е. домен международный;
                  3. Там протокол EPP.
                  • 0
                    1. Возможно, но на нашем примере я хочу показать, что от регистратора проблем ждать столько не только со стороны DNS
                    2. Также были затронуты .ru домены инфа 100%
                    3. Это не меняет сути возможности наличия там ошибки
                    • 0
                      Ну может и ICANN налажать и положить всю корневую зону.
                      Все может быть, но вероятность разных событий сильно варьируется.
                      • 0
                        Ну откуда и мораль всего моего повествования — выбирайте контрагентов внимательнее, чтобы не устраивать себе приключений на пустом месте.
                  • 0
                    У нас .ru домен слетел. Причем 5-ого числа техсупорт божился, что проблем с их стороны нет.
          • +1
            Регистратор участвует. Ведь он имеет право писать на сервера доменной зоны. Поэтому даже если сервера координационного центра и не лягут, но регистратор вполне может записать туда некорректные NS-ы.
            • –1
              Может, но зачем?
              • +3
                Тех. сбой, человеческий фактор. Эти двух причин обычно за глаза.
                • –1
                  Вообще-то речь шла о том что свои DNS помогли бы избежать проблем в данной ситуации.
                  Т.к. проблема была на DNS регистратора
                  Остальное домыслы.
      • +3
        Потому что в этом случае до ваших NS-ов запрос просто не дойдет.
        • 0
          Неправильно.
          От DNS-серверов регистратора не зависит работа вашего домена.
          Используйте свои DNS и доменная зона сразу будет направлять на них, без участия регистратора.
          • +1
            В компании, в которой я работал, были свои DNS. Легло вообще всё, что регалось через nic.ru.
            Домены просто разделегировались.

            Но вроде так: SOA хранилась у регистратора. Теряется SOA — теряем информацию о NS-серверах домена.

            Возможно, я не прав.
            • 0
              Такое могло произойти только в случае если легли DNS-доменной зоны, т.е. и все остальные домены в ней.
              Что мягко говоря маловероятно.
              Либо регистратор изменил ваши DNS в регистратуре доменной зоны.

              В любом случае если у вас свои DNS, то DNS-сервера регистратора в работе домена никак не участвуют.
              Просто по граф запроса по ним не пройдет.
              • +1
                Было так: легло только то, что регалось через этого регистратора. В WHOIS была какая-то фигня, NS-запросы отвечали мусором.
                Выглядело так, будто домены просто разделегировали.
                • 0
                  Имело смысл сделать dig +trace и посмотреть какие именно DNS отвечают мусором.
  • +4
    Тоже поимели неприятности с одноименным провайдером по той же причине. Но удивило другое — абослютная тишина на протяжении почти 18 часов от регистратора. Ни новостей ни официальных комментариев.
    Под тяжестью клиентов они разродились на скудную новость к вечеру r01.ru/about/news/detail.php?ID=4548
    Да к чему я это? Да все просто — качество сервиса ниже плинтуса!
    оперативно устранили проблему
    в их понимании восстанавливать критичный сервис несколько часов.
    P.s. тоже увел свои домены на более дружелюбный хостинг
  • –4
    DNS — это очень редкие, но канонические грабли.
    Могу порекомендовать dyndns, если можете выбирать забугорные решения.
    Вроде бы самый надежный, или распиаренный.
    nic.ru — если ограничены контрагентами из этой страны — у них вроде несколько dns slave по стране.
    • 0
      Буду рад услышать критику своего комментария, правда.
      • 0
        Пользовался dyndns в продакшне для нескольких сайтов. В компании, где я работал, не было денег на свою DNS-инфраструктуру.
        Всё устраивало, пока они не начали клянчить денег: «перейдите, мол, на новый тариф — к вашим доменам слишком много запросов в месяц». На вопрос «Зачем?», ничего внятного от них не услышал. Мониторинг рапортовал что все работает отлично, лагов нет и мы можем спокойно продолжать юзать тариф за 30$ в год.

        Что касается сбоев dyndns — за 5 лет был всего 1 на моей памяти, и длился он минут 5: сервера не отвечали на запросы.

        Из главных плюшек:
        — можно менять TTL для домена на очень низкий для быстрого переключения на другой (резервный) сервер.
        — можно рулить зонами через их API GET-запросами.
    • 0
      На самом деле многие регистраторы озабочены надежностью предоставляемых услуг.

      Те же DNS Slaves и в России, и за пределами, есть и у REG.RU.
      • 0
        Но нем не менее ни один из DNS не закрыт от DDoS. OVH тут не в счет — их защита спасет лишь от несерьезного флуда. Обратите на это внимание. А лучше внедрите anycast, я думаю, бюджеты и тех возможности под это у Вас есть.

        В этом плане образец для подражания — схема работы корневой зоны .ru, там очень грамотные ребята это все дело проектировали. 25 машин раскиданых по миру — это супер.
  • +4
    При встраивании чужих скриптов в свой сайт было бы неплохо иметь цифровую подпись.
    Примерно так это представляю:
    1. Загружаем скрипт в переменную.
    2. Проверяем хэш для статических скриптов или подпись с открытым ключом для скриптов, которые могут меняться.
    3.…
    4. Eval

    Реально ли такое?
    • 0
      Загрузчик с хжшем как подключать? Если «по старому» то смысла в этом усложнении нет, если хардкодить в обновляемом коде, то как обновлять? Подойдёт только асимметричное шифрование, но мне кажется достаточно использовать https.
      • 0
        Тотальный https для данного конкретного топикстартера тоже не вариант. На мобильных соединениях https-хендшейк ухудшит сбор статистики от тех, кто недогрузился(

    • 0
      Проверять подпись (RSA + DES) на JS, да при каждой загрузке скрипта… Тяжеловато грузиться будем, имхо.
      • 0
        Можно проверять не подпись, а наличие, например, строки копирайта своей. Дёшево и сердито, так сказать.
  • +1
    Собственно выглядело это так:
    image
    С учётом недельного ttl, который отдавался во время «сбоя» некоторые DNS-ники до сих пор ресолвят «сбойный» 209.222.14.6
    А первого ответа от техподдержки r01 мы дождались только через 12 часов.

    Но ещё больше «порадовало», то что, в то время пока мы ожидали каких-то разъяснений, одному из наших клиентов r01 отключили 69 доменов на основании того что он не подтвердил e-mail — support.reghouse.ru/knowledgebase.php?article=22

    В общем чУдной регистратор…
    • 0
      Но ещё больше «порадовало», то что, в то время пока мы ожидали каких-то разъяснений, одному из наших клиентов r01 отключили 69 доменов на основании того что он не подтвердил e-mail — support.reghouse.ru/knowledgebase.php?article=22


      Это gTLD-домены .com, .net, .org, .biz, .info и правила ICANN

      Многие регистраторы отключают, а не только r01
      • +1
        Отключают, конечно. Но стоит ли делать подобные отключения в тот момент когда по вине самого регистратора не работает ресолвинг? Как клиенту угадать, что это отключение за неподвтерждение почты в тот момент когда у него сначала всё отключилось по вине самого регистратора, а техподдержка либо заявляет что проблем нет, либо просто не отвечает по полсуток?
        Может таки надо сначала решать собственные проблемы, а не махать шашкой?
  • +2
    Тоже нарвался у них, хотя DNS свои, просто у нескольких доменов вторичная зона (а по факту — вообще третий или четвертый DNS-сервер) показывали на сервер R01.

    Как оказалось, тактика «разместим зоны на как можно большем числе серверов по всему миру» тоже может фейлить! Обнаружил сначала факт, что один из доменов ведет на какую-то левую заглушку припаркованного домена. офигел. Потом увидел в почте письмо от регистратора (реселлер R01 — Reghouse). Звонки регистратору ни к чему не привели — по отчетам сотрудников, суппорт ломал дурочку. Типа, «у нас все ОК, поменяйте пароль от ЛК». Самое обидное, что проблемы было невозможно решить — личный кабинет был недоступен, то есть, даже выкинуть эти NSы было невозможно! И так до вечера.

    Короче, очень мне эта картина не понравилась. Пока не готов делать выводы, но…

    А ведь уже почти было решено переносить все наши домены от nic.ru к R01… 2 года хорошей работы, хорошие цены — и вот такая бомба. Вот был бы я владельцем — я б убился извиняясь и компенсируя! Кружки бы какие рассылал, да ручки, да бонусы… Эти — не, нормалды. Даже на вшивое индивидуальное письмишко не расщедрились.

    В разгар злобствований вчерашних, конечно же, нашелся человек, который сказал, мол, «а я говори-и-ила!» на тему того, что нна все эти .ru, давно пора все выпихнуть в .com…

    Сидим, пытаемся понять, как определить, кто из клиентов увидел это порно вместо сервиса (а сервис имиджОвый, клиенты — люди серьезные), и как перед ними извиняться… И чсх: личный кабинет реселлера до сих пор у нас доступен только через USA прокси. То есть, из РФ — болт. Это значит, что и часть наших посетителей вполне может видеть черт знает что, и мы об этом никак узнать не можем, и никак на это повлиять не в состоянии! Короче, надо на все забить, и ехать на рыбалку, нервы дороже 8-)
  • 0
    На тему ответственности, у меня есть официальный ответ Координационного Центра Зоны РУ именно в контексте R01.

    Вот выдержка из договора Гарант Парка:
    6.7. Размер ответственности Исполнителя не может превышать суммы, равной стоимости неоказанной, оказанной не в полном объеме либо с ненадлежащим качеством услуги в соответствии с действующими на момент заказа услуги Тарифами.
    То есть за любую проблему с доменом мы получаем максимум компенсацию в размере 450 рублей — стоимость домена в год.
    КЦ уточнил мою догадку вот так:
    В соответствии с Соглашением об аккредитации, аккредитованные регистраторы обязаны страховать профессиональную ответственность, связанную с деятельностью по регистрации доменных имен, на сумму не менее 15`000`000 (пятнадцать миллионов) рублей или 500000 (пятьсот тысяч) долларов США;

    Указанная минимальная сумма страховки определяется не для конкретного страхового случая, а по их совокупности. Регистратор вправе страховать свою профессиональную ответственность и на бОльшую сумму.

    Размер причиненного ущерба для каждого конкретного случая определяется в судебном порядке в случае, если Сторона, посчитавшая себя обиженной, обратится в суд.

    Во внесудебном порядке разногласия разрешаются в соответствии с условиями договора, заключенного между Регистратором и Пользователем.

    С уважением,
    Любовь Виданова

    АНО «Координационный центр национального домена сети Интернет»
    — 123242, Москва, ул. Зоологическая, д. 8
    телефон (499) 254-88-94, факс (499) 254-89-63
    сайт: www.cctld.ru

    Иными словами, если Вы хотите получить компенсацию за их косяк — то без суда получите лишь 450 рублей и-то после разборок на месяцы. Хотите больше — обращайтесь в суд.
  • 0
    Недавно у них сканы документов утекли (нагуглилась только такая ссылка, с забра НЛО потёрло hi-tech.mail.ru/news/r01-leak.html).
    Еще раньше, подняли цены в три раза просто так habrahabr.ru/post/151458/
  • 0
    Аналогично провел несколько «приятных» часов, в поте выясняя почему домен стал резолвиться на американский айпи. Причем у r01.ru первичный днс выдавал неверный айпи, а вторичный — правильный. Попытки что либо поменять в личном кабинете к успеху не привели — задания на смену данных вставали в очередь и не выполнялись.
  • 0
    У нас newrelic чуть с ума не сошел, за ночь при попытках пинга около 40 алертов пришло, учитывая что при unable to ping алерте получаю смс — ночка была та еще
  • 0
    А чем плохо использование cloudflare в кач-ве днс провайдера? Без проксирования и прочее. Денег за это не просят вроде бы, а серверов у них несколько больше чем «несколько slave»
    • +1
      Разве он частично не в списке «запрещенных» сайтов в России?

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