Сегодня в 15:51 UTC мы открыли внутренний инцидент под названием "DNS-поиск для Facebook возвращает SERVFAIL", поскольку забеспокоились, что что-то не так с нашим DNS-резолвером 1.1.1.1. Мы уже собирались сделать пост на нашей публичной странице состояния, но тут стало ясно, что происходит нечто более серьезное.
Социальные сети взорвались сообщениями, которые и наши инженеры быстро подтвердили. Facebook, а также принадлежащие ему сервисы WhatsApp и Instagram, действительно упали. Их DNS-имена перестали разрешаться, а IP-адреса инфраструктуры стали недоступны. Словно кто-то разом «выдернул кабели» из их центров обработки данных и отключил их от Интернета.
Это не было проблемой DNS, однако сбой DNS стал первым симптомом более масштабного сбоя в работе Facebook.
Facebook опубликовал у себя в блоге сообщение с некоторыми подробностями того, что произошло внутри компании. Со стороны мы наблюдали проблемы с BGP и DNS, описанные в данном посте, но на самом деле проблема началась с изменения конфигурации, которое затронуло всю внутреннюю магистральную сеть. Это вызвало целую цепочку последствий, Facebook и другие ресурсы исчезли из сети, при этом собственные сотрудники Facebook столкнулись с трудностями, пытаясь восстановить работу сервиса.
Facebook опубликовал еще одну запись в блоге с гораздо более подробной информацией о том, что произошло. В их посте – взгляд изнутри, в нашем – взгляд со стороны.
Теперь перейдем к тому, что мы увидели со своей стороны.
BGP расшифровывается как Border Gateway Protocol (Протокол граничного шлюза). Это механизм обмена информацией о маршрутизации между автономными системами (AS) в Интернете. Крупные маршрутизаторы, обеспечивающие работу Интернета, имеют огромные, постоянно обновляемые списки возможных маршрутов, по которым каждый сетевой пакет может быть доставлен в конечный пункт назначения. Без BGP маршрутизаторы Интернета не знали бы, что им делать, и Интернет не смог бы работать.
Интернет – это в буквальном смысле сеть сетей, и они связаны между собой при помощи BGP. BGP позволяет одной сети (скажем, Facebook) анонсировать свое присутствие другим сетям, образующим Интернет. В данный момент Facebook не анонсирует свое присутствие, интернет-провайдеры и другие сети не могут найти сеть Facebook, и поэтому она недоступна.
Каждая отдельная сеть имеет свой ASN: Autonomous System Number (Номер автономной системы). Автономная система (AS) – это отдельная сеть с единой политикой внутренней маршрутизации. AS может формировать собственные префиксы (означающие, что она контролирует группу IP-адресов), а также транзитные префиксы (означающие, что она знает путь к определенной группе IP-адресов).
Cloudflare имеет ASN AS13335. Каждый ASN должен анонсировать в Интернете маршруты к своим префиксам с помощью BGP, иначе никто не будет знать, как подключиться и где нас найти.
На этой упрощенной схеме изображены шесть автономных систем в Интернете и два возможных маршрута, по которым пакет может пройти от начала до конца. AS1 → AS2 → AS3 – наиболее быстрый маршрут, а AS1 → AS6 → AS5 → AS4 → AS3 – наиболее медленный, но его можно использовать, если первый не сработает.
В 15:58 UTC мы заметили, что Facebook перестал анонсировать маршруты к своим префиксам DNS. Это означало, что, как минимум, DNS-серверы Facebook недоступны. Поэтому DNS-резолвер Cloudflare 1.1.1.1 больше не мог отвечать на запросы, требующие сообщить IP-адрес домена facebook.com.
Тем временем другие IP-адреса Facebook по-прежнему маршрутизировались, но от них не было особой пользы, поскольку без DNS Facebook и связанные с ним сервисы были фактически недоступны:
\n \n \n \n \n
Мы отслеживаем все обновления и анонсы BGP, поступающие в нашу глобальную сеть. Благодаря масштабу нашей сети собираемые данные дают нам представление о связях в Интернете и о том, откуда и куда должен направляться трафик в любой точке планеты.
\n
route-views>show ip bgp 185.89.218.0/23\n% Network not in table\nroute-views>\n\nroute-views>show ip bgp 129.134.30.0/23\n% Network not in table\nroute-views>
\n
Сообщение BGP UPDATE информирует маршрутизатор о любых изменениях в анонсе префикса или полностью отзывает префикс. Если обратиться к нашей базе данных временных рядов BGP, хорошо видно количество обновлений, полученных нами от Facebook. Обычно этот график довольно спокойный: Facebook не вносит изменения в свою сеть ежеминутно.
\n
route-views>show ip bgp 129.134.30.0 \nBGP routing table entry for 129.134.0.0/17, version 1025798334\nPaths: (24 available, best #14, table default)\n Not advertised to any peer\n Refresh Epoch 2\n 3303 6453 32934\n 217.192.89.50 from 217.192.89.50 (138.187.128.158)\n Origin IGP, localpref 100, valid, external\n Community: 3303:1004 3303:1006 3303:3075 6453:3000 6453:3400 6453:3402\n path 7FE1408ED9C8 RPKI State not found\n rx pathid: 0, tx pathid: 0\n Refresh Epoch 1\nroute-views>
\n
Но примерно в 15:40 UTC мы увидели резкий всплеск изменений маршрутизации со стороны Facebook. Тогда-то и начались проблемы.
Если разбить этот график на анонсы и отзывы маршрутов, станет еще яснее, что произошло. Маршруты были отозваны, DNS-серверы Facebook ушли в офлайн, и уже через минуту после возникновения проблемы инженеры Cloudflare сидели и недоумевали, почему 1.1.1.1 не выдает IP для facebook.com, и беспокоились, что это вызвано каким-то сбоем в наших системах.
В результате отзыва маршрутов Facebook и его сайты фактически отключились от Интернета.
Прямым следствием произошедшего стало то, что DNS-резолверы по всему миру перестали выдавать IP-адреса этих доменных имен.
Это произошло потому, что DNS, как и многие другие системы в Интернете, также имеет свой механизм маршрутизации. Когда кто-либо набирает в браузере URL https://facebook.com, DNS-резолвер, отвечающий за преобразование доменных имен в IP-адреса, с которыми устанавливается соединение, сначала проверяет, нет ли IP-адреса у него в кэше, и если есть, использует его. Если нет, он пытается получить ответ от сервера имен соответствующего домена, расположенного, как правило, в организации, которой домен принадлежит.
Если серверы имен недоступны или не отвечают по какой-либо другой причине, возвращается ответ SERVFAIL, и браузер выдает пользователю ошибку.
Опять-таки, в нашем учебном центре имеется подробное объяснение принципа работы DNS.
Поскольку Facebook перестал анонсировать по BGP маршруты к своим префиксам DNS, наши и все прочие DNS-резолверы утратили возможность подключаться к его серверам имен. Соответственно, 1.1.1.1, 8.8.8.8 и другие крупные публичные DNS-резолверы начали выдавать (и кэшировать) ответы SERVFAIL.
Но это еще не все. Теперь в дело вступает человеческий фактор и логика работы приложений, вызывая еще один экспоненциальный эффект. Возникает цунами дополнительного DNS-трафика.
\n \n \n \n \n
Это происходит отчасти потому, что приложения не принимают ошибку за ответ и начинают повторять попытки, порой очень интенсивно, а отчасти потому, что конечные пользователи также не принимают ошибку за ответ и начинают перезагружать страницы или закрывать и перезапускать приложения, иногда тоже весьма интенсивно.
Вот рост трафика (по числу запросов), который мы наблюдали на 1.1.1.1:
Таким образом, поскольку Facebook и его сайты привлекают огромный трафик, DNS-резолверы по всему миру теперь вынуждены обрабатывать в 30 раз больше запросов, чем обычно, что чревато задержками и таймаутами для других платформ.
К счастью, 1.1.1.1 — бесплатный, приватный, быстрый (что может подтвердить независимый DNS-монитор DNSPerf) и масштабируемый сервис, что позволило нам продолжать обслуживать пользователей практически в штатном режиме.
\n \n \n \n \n
Время ответа на подавляющее большинство наших DNS-запросов составило менее 10 мс. В то же время у крайне небольшой части перцентилей p95 и p99 время отклика увеличилось — вероятно, из-за того, что истекшие TTL вынуждали обращаться к серверам имен Facebook с последующим таймаутом. 10-секундный таймаут в системе DNS хорошо известен инженерам.
Пользователи начинают искать альтернативы, хотят узнать подробности или обсудить происходящее. Когда Facebook стал недоступен, мы увидели рост числа DNS-запросов к Twitter, Signal и другим платформам обмена сообщениями и социальным сетям.
\n \n \n \n \n
Еще один побочный эффект недоступности сказался на нашем WARP-трафике к сети Facebook (ASN 32934) и обратно. Этот график показывает, как изменился трафик в каждой стране с 15:45 UTC до 16:45 UTC по сравнению с тремя часами ранее. По всему миру WARP-трафик к сети Facebook и обратно просто исчез.
Сегодняшние события – мягкое напоминание о том, что Интернет представляет собой очень сложную и взаимозависимую систему, состоящую из миллионов систем и протоколов, работающих вместе. Доверие, стандартизация и сотрудничество между организациями являются ключевыми факторами, обеспечивающими его работоспособность для почти пяти миллиардов активных пользователей по всему миру.
Примерно в 21:00 UTC мы заметили возобновление активности BGP со стороны сети Facebook, она достигла пика в 21:17 UTC.
На данном графике показана доступность DNS-имени facebook.com на DNS-резолвере Cloudflare 1.1.1.1. Доступность пропала примерно в 15:50 UTC и восстановилась в 21:20 UTC.
Сервисам Facebook, WhatsApp и Instagram наверняка потребуется еще какое-то время, чтобы вернуться в строй, но по состоянию на 21:28 UTC Facebook, похоже, восстановил подключение к глобальному Интернету, и его DNS вновь работает.
\n \n \n \n \n \n \n \n \n \n "],"published_at":[0,"2021-10-04T22:08:52.000+01:00"],"updated_at":[0,"2024-11-06T16:48:17.817Z"],"feature_image":[0,"https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7y9jJTgSukF7V3DIHZyBPK/2387ab2641e6b8c0da2402279321b0f7/october-2021-facebook-outage.png"],"tags":[1,[[0,{"id":[0,"3yArjf0gLKZy8ObEDxbNNi"],"name":[0,"Trends"],"slug":[0,"trends"]}],[0,{"id":[0,"4yliZlpBPZpOwBDZzo1tTh"],"name":[0,"Outage"],"slug":[0,"outage"]}],[0,{"id":[0,"5O7yCWW0RgXMAc5MVjwcGS"],"name":[0,"BGP"],"slug":[0,"bgp"]}],[0,{"id":[0,"5fZHv2k9HnJ7phOPmYexHw"],"name":[0,"DNS"],"slug":[0,"dns"]}],[0,{"id":[0,"1v34FA6NHiaP8hePFi3CZc"],"name":[0,"Facebook"],"slug":[0,"facebook"]}]]],"relatedTags":[0],"authors":[1,[[0,{"name":[0,"Celso Martinho"],"slug":[0,"celso"],"bio":[0,"From when Mosaic took over Gopher. Engineering Director at Cloudflare."],"profile_image":[0,"https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2pzgat1zmt1oF1byi7hskH/7b25e8e00117ee44afe36ad27d7d8032/celso.png"],"location":[0,"Portugal, Lisbon"],"website":[0,"https://celso.io/"],"twitter":[0,"@celso"],"facebook":[0,null]}],[0,{"name":[0,"Tom Strickx"],"slug":[0,"tom-strickx"],"bio":[0,"Principal network engineer"],"profile_image":[0,"https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4WM06S2SGZ2gLRjQWh3eMA/12e0fcb787bc3206936957472d291b9c/4UUTxNu__400x400.jpg"],"location":[0,null],"website":[0,null],"twitter":[0,"@tstrickx"],"facebook":[0,null]}]]],"meta_description":[0,"Today at 1651 UTC, we opened an internal incident entitled \"Facebook DNS lookup returning SERVFAIL\" because we were worried that something was wrong with our DNS resolver 1.1.1.1. But as we were about to post on our public status page we realized something else more serious was going on."],"primary_author":[0,{}],"localeList":[0,{"name":[0,"Understanding how Facebook disappeared from the Internet Config"],"enUS":[0,"English for Locale"],"zhCN":[0,"Translated for Locale"],"zhHansCN":[0,"No Page for Locale"],"zhTW":[0,"Translated for Locale"],"frFR":[0,"Translated for Locale"],"deDE":[0,"Translated for Locale"],"itIT":[0,"Translated for Locale"],"jaJP":[0,"Translated for Locale"],"koKR":[0,"Translated for Locale"],"ptBR":[0,"Translated for Locale"],"esLA":[0,"No Page for Locale"],"esES":[0,"Translated for Locale"],"enAU":[0,"No Page for Locale"],"enCA":[0,"No Page for Locale"],"enIN":[0,"No Page for Locale"],"enGB":[0,"No Page for Locale"],"idID":[0,"No Page for Locale"],"ruRU":[0,"Translated for Locale"],"svSE":[0,"No Page for Locale"],"viVN":[0,"No Page for Locale"],"plPL":[0,"No Page for Locale"],"arAR":[0,"No Page for Locale"],"nlNL":[0,"No Page for Locale"],"thTH":[0,"No Page for Locale"],"trTR":[0,"No Page for Locale"],"heIL":[0,"No Page for Locale"],"lvLV":[0,"No Page for Locale"],"etEE":[0,"No Page for Locale"],"ltLT":[0,"No Page for Locale"]}],"url":[0,"https://blog.cloudflare.com/october-2021-facebook-outage"],"metadata":[0,{"title":[0,"Как Facebook исчез из Интернета"],"description":[0,"Today at 1651 UTC, we opened an internal incident entitled \"Facebook DNS lookup returning SERVFAIL\" because we were worried that something was wrong with our DNS resolver 1.1.1.1. But as we were about to post on our public status page we realized something else more serious was going on."],"imgPreview":[0,"https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7FF5ywOATCoy5Vas8RKNdN/6741b108a0a12755ce8de2444e894e90/october-2021-facebook-outage-G0Rabk.png"]}]}],"locale":[0,"ru-ru"],"translations":[0,{"posts.by":[0,"Автор"],"footer.gdpr":[0,"GDPR"],"lang_blurb1":[0,"Другие языки, на которых доступна эта публикация: {lang1}."],"lang_blurb2":[0,"Другие языки, на которых доступна эта публикация: {lang1} и {lang2}."],"lang_blurb3":[0,"Другие языки, на которых доступна эта публикация: {lang1}, {lang2} и {lang3}."],"footer.press":[0,"Пресса"],"header.title":[0,"Блог Cloudflare"],"search.clear":[0,"Очистить"],"search.filter":[0,"Фильтр"],"search.source":[0,"Источник"],"footer.careers":[0,"Карьера"],"footer.company":[0,"Компания"],"footer.support":[0,"Поддержка"],"footer.the_net":[0,"theNet"],"search.filters":[0,"Фильтры"],"footer.our_team":[0,"Наша команда"],"footer.webinars":[0,"Вебинары"],"page.more_posts":[0,"Больше публикаций"],"posts.time_read":[0,"{time} мин. чтения"],"search.language":[0,"Язык"],"footer.community":[0,"Сообщество"],"footer.resources":[0,"Ресурсы"],"footer.solutions":[0,"Решения"],"footer.trademark":[0,"Товарный знак"],"header.subscribe":[0,"Подписаться"],"footer.compliance":[0,"Соответствие нормативным требованиям"],"footer.free_plans":[0,"Бесплатные планы"],"footer.impact_ESG":[0,"Воздействие / экологичность, социальная ответственность и корпоративное управление"],"posts.follow_on_X":[0,"Подписаться на X"],"footer.help_center":[0,"Центр помощи"],"footer.network_map":[0,"Карта сети"],"header.please_wait":[0,"Подождите"],"page.related_posts":[0,"Связанные публикации"],"search.result_stat":[0,"Результатов {search_range} из {search_total} для {search_keyword}"],"footer.case_studies":[0,"Примеры"],"footer.connect_2024":[0,"Подключение 2024"],"footer.terms_of_use":[0,"Условия предоставления услуг"],"footer.white_papers":[0,"Справочная документация"],"footer.cloudflare_tv":[0,"Cloudflare TV"],"footer.community_hub":[0,"Центр сообщества"],"footer.compare_plans":[0,"Сравнить планы"],"footer.contact_sales":[0,"Связаться с отделом продаж"],"header.contact_sales":[0,"Связаться с отделом продаж"],"header.email_address":[0,"Адрес эл. почты"],"page.error.not_found":[0,"Страница не найдена"],"footer.developer_docs":[0,"Документы для разработчиков"],"footer.privacy_policy":[0,"Политика конфиденциальности"],"footer.request_a_demo":[0,"Запросить демо"],"page.continue_reading":[0,"Продолжить чтение"],"footer.analysts_report":[0,"Аналитические отчеты"],"footer.for_enterprises":[0,"Для организаций"],"footer.getting_started":[0,"Начало работы"],"footer.learning_center":[0,"Учебный центр"],"footer.project_galileo":[0,"Проект «Галилео»"],"pagination.newer_posts":[0,"Новые сообщения"],"pagination.older_posts":[0,"Старые сообщения"],"posts.social_buttons.x":[0,"Обсудить на X"],"search.icon_aria_label":[0,"Поиск"],"search.source_location":[0,"Источник/местоположение"],"footer.about_cloudflare":[0,"О компании Cloudflare"],"footer.athenian_project":[0,"Афинский проект"],"footer.become_a_partner":[0,"Стать партнером"],"footer.cloudflare_radar":[0,"Cloudflare Radar"],"footer.network_services":[0,"Сетевые сервисы"],"footer.trust_and_safety":[0,"Доверие и безопасность"],"header.get_started_free":[0,"Начать работу бесплатно"],"page.search.placeholder":[0,"Искать в Cloudflare"],"footer.cloudflare_status":[0,"Состояние Cloudflare"],"footer.cookie_preference":[0,"Настройки файлов cookie"],"header.valid_email_error":[0,"Необходимо ввести верный адрес эл. почты."],"search.result_stat_empty":[0,"Результаты {search_range} из {search_total}"],"footer.connectivity_cloud":[0,"Connectivity cloud"],"footer.developer_services":[0,"Сервисы для разработчиков"],"footer.investor_relations":[0,"Связи с инвесторами"],"page.not_found.error_code":[0,"Код ошибки: 404"],"search.autocomplete_title":[0,"Укажите запрос. Нажмите Enter, чтобы отправить"],"footer.logos_and_press_kit":[0,"Логотипы и пресс-кит"],"footer.application_services":[0,"Сервисы для приложений"],"footer.get_a_recommendation":[0,"Получить рекомендацию"],"posts.social_buttons.reddit":[0,"Обсудить на Reddit"],"footer.sse_and_sase_services":[0,"Сервисы SASE и SSE"],"page.not_found.outdated_link":[0,"Возможно, вы использовали устаревшую ссылку или неправильно ввели адрес."],"footer.report_security_issues":[0,"Сообщить о проблемах с безопасностью"],"page.error.error_message_page":[0,"Извините, мы не можем найти страницу, которую вы ищете."],"header.subscribe_notifications":[0,"Подпишитесь, чтобы получать уведомления о новых публикациях:"],"footer.cloudflare_for_campaigns":[0,"Cloudflare for Campaigns"],"header.subscription_confimation":[0,"Подписка подтверждена. Благодарим за подписку!"],"posts.social_buttons.hackernews":[0,"Обсудить на Hacker News"],"footer.diversity_equity_inclusion":[0,"Разнообразие, справедливость и инклюзивность"],"footer.critical_infrastructure_defense_project":[0,"Проект защиты критической инфраструктуры"]}]}" ssr="" client="load" opts="{"name":"PostCard","value":true}" await-children="">
Сегодня в 15:51 UTC мы открыли внутренний инцидент под названием "DNS-поиск для Facebook возвращает SERVFAIL", поскольку забеспокоились, что что-то не так с нашим DNS-резолвером 1.1.1.1. Мы уже собирались сделать пост на нашей публичной странице состояния, но ...