Как лег Facebook по всему миру

«Facebook не может быть отключен, не так ли?» - на секунду подумали мы.

Сегодня в 1651 UTC мы открыли внутренний инцидент под названием «Поиск DNS в Facebook, возвращающий SERVFAIL», потому что мы беспокоились, что что-то не так с нашим преобразователем DNS 1.1.1.1 . Но когда мы собирались опубликовать сообщение на нашей публичной странице статуса, мы поняли, что происходит кое-что еще более серьезное.

Социальные сети быстро загорелись, сообщая о том, что также быстро подтвердили наши инженеры. Facebook и связанные с ним сервисы WhatsApp и Instagram фактически перестали работать. Их DNS-имена перестали разрешаться, а IP-адреса инфраструктуры были недоступны. Как будто кто-то сразу «выдернул кабели» из своих центров обработки данных и отключил их от Интернета.

Как такое вообще возможно?

Встречайте BGP

BGP означает протокол пограничного шлюза. Это механизм обмена маршрутной информацией между автономными системами (AS) в Интернете. Большие маршрутизаторы, которые заставляют Интернет работать, имеют огромные, постоянно обновляемые списки возможных маршрутов, которые можно использовать для доставки каждого сетевого пакета в их конечные пункты назначения. Без BGP Интернет-маршрутизаторы не знали бы, что делать, и Интернет не работал бы.

Интернет - это буквально сеть сетей, связанных между собой протоколом BGP. BGP позволяет одной сети (например, Facebook) рекламировать свое присутствие другим сетям, образующим Интернет. Поскольку мы пишем, что Facebook не рекламирует свое присутствие, интернет-провайдеры и другие сети не могут найти сеть Facebook, и поэтому она недоступна.

Каждая индивидуальная сеть имеет ASN: номер автономной системы. Автономная система (AS) - это отдельная сеть с единой внутренней политикой маршрутизации. AS может создавать префиксы (скажем, что они контролируют группу IP-адресов), а также транзитные префиксы (скажем, они знают, как достичь определенных групп IP-адресов).

ASN Cloudflare - AS13335 . Каждому ASN необходимо объявить свои префиксные маршруты в Интернет с помощью BGP; иначе никто не узнает, как подключиться и где нас найти.

В нашем учебном центре есть хороший обзор того, что такое BGP и ASN и как они работают.

На этой упрощенной схеме вы можете увидеть шесть автономных систем в Интернете и два возможных маршрута, по которым один пакет может пройти от начала до конца. AS1 → AS2 → AS3 является самым быстрым, а AS1 → AS6 → AS5 → AS4 → AS3 является самым медленным, но его можно использовать, если первый не работает.

В 1658 UTC мы заметили, что Facebook перестал объявлять маршруты для своих префиксов DNS. Это означало, что, по крайней мере, DNS-серверы Facebook были недоступны. Из-за этого DNS-преобразователь Cloudflare 1.1.1.1 больше не мог отвечать на запросы, запрашивающие IP-адрес facebook.com или instagram.com.

route-views>show ip bgp 185.89.218.0/23 % Network not in table route-views> route-views>show ip bgp 129.134.30.0/23 % Network not in table route-views>

Между тем, другие IP-адреса Facebook оставались маршрутизируемыми, но не были особенно полезными, поскольку без DNS Facebook и связанные с ним службы были фактически недоступны:

route-views>show ip bgp 129.134.30.0 BGP routing table entry for 129.134.0.0/17, version 1025798334 Paths: (24 available, best #14, table default) Not advertised to any peer Refresh Epoch 2 3303 6453 32934 217.192.89.50 from 217.192.89.50 (138.187.128.158) Origin IGP, localpref 100, valid, external Community: 3303:1004 3303:1006 3303:3075 6453:3000 6453:3400 6453:3402 path 7FE1408ED9C8 RPKI State not found rx pathid: 0, tx pathid: 0 Refresh Epoch 1 route-views>

Мы отслеживаем все обновления и объявления BGP, которые мы видим в нашей глобальной сети. В нашем масштабе данные, которые мы собираем, дают нам представление о том, как подключен Интернет, и где предполагается, что трафик будет идти от и до любой точки планеты.

Сообщение BGP UPDATE информирует маршрутизатор о любых изменениях, внесенных вами в объявление префикса, или полностью удаляет префикс. Мы ясно видим это по количеству обновлений, которые мы получили от Facebook при проверке нашей базы данных BGP временных рядов. Обычно этот график довольно тихий: Facebook не вносит много изменений в свою сеть ежеминутно.

Но примерно в 15:40 UTC мы увидели пик изменений маршрутизации от Facebook. Вот тогда и начались проблемы

Если мы разделим это представление на объявления о маршрутах и снятие средств, мы получим еще лучшее представление о том, что произошло. Маршруты были отменены, DNS-серверы Facebook отключились, и через минуту после возникновения проблемы инженеры Cloudflare находились в комнате, недоумевая, почему 1.1.1.1 не может разрешить facebook.com, и беспокоясь о том, что это каким-то образом неисправно в наших системах.

Из-за этого отказа Facebook и его сайты фактически отключились от Интернета.

DNS затронут

Как прямое следствие этого, DNS-преобразователи во всем мире перестали разрешать свои доменные имена.

➜ ~ dig @1.1.1.1 facebook.com ;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 31322 ;facebook.com. IN A ➜ ~ dig @1.1.1.1 whatsapp.com ;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 31322 ;whatsapp.com. IN A ➜ ~ dig @8.8.8.8 facebook.com ;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 31322 ;facebook.com. IN A ➜ ~ dig @8.8.8.8 whatsapp.com ;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 31322 ;whatsapp.com. IN A

Это происходит потому, что DNS, как и многие другие системы в Интернете, также имеет свой механизм маршрутизации. Когда кто-то вводит URL-адрес https://facebook.com в браузере, преобразователь DNS, отвечающий за преобразование доменных имен в фактические IP-адреса для подключения, сначала проверяет, есть ли что-то в своем кеше, и использует это. В противном случае он пытается получить ответ от серверов доменных имен, обычно размещенных на сервере, которому он принадлежит.

Если серверы имен недоступны или не отвечают по какой-либо другой причине, возвращается SERVFAIL, и браузер выдает пользователю ошибку.

Опять же, наш учебный центр дает хорошее объяснение того, как работает DNS.

Из-за того, что Facebook перестал объявлять свои маршруты префиксов DNS через BGP, наши и все остальные DNS-преобразователи не могли подключиться к своим серверам имен. Следовательно, 1.1.1.1, 8.8.8.8 и другие основные общедоступные преобразователи DNS начали выдавать (и кэшировать) ответы SERVFAIL.

Но это не все. Теперь вмешивается человеческое поведение и логика приложения, вызывая еще один экспоненциальный эффект. За этим следует цунами дополнительного DNS-трафика.

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

Это увеличение трафика (количества запросов), которое мы видели в 1.1.1.1:

Итак, теперь, поскольку Facebook и их сайты настолько велики, у нас есть DNS-преобразователи по всему миру, которые обрабатывают в 30 раз больше запросов, чем обычно, и потенциально вызывают проблемы с задержкой и тайм-аутом для других платформ.

К счастью, версия 1.1.1.1 была бесплатной, частной, быстрой (как может подтвердить независимый DNS-монитор DNSPerf ) и масштабируемой, и мы смогли продолжать обслуживать наших пользователей с минимальным воздействием.

Подавляющее большинство наших DNS-запросов разрешалось менее чем за 10 мс. В то же время минимальная доля процентилей p95 и p99 увеличила время отклика, вероятно, из-за того, что с истекшим сроком жизни пришлось прибегать к серверам имен Facebook и тайм-ауту. Предел тайм-аута DNS в 10 секунд хорошо известен инженерам.

Влияние на другие службы

Люди ищут альтернативы и хотят узнать больше или обсудить, что происходит. Когда Facebook стал недоступен, мы начали наблюдать увеличение количества DNS-запросов к Twitter, Signal и другим платформам обмена сообщениями и социальным сетям.

Мы также можем видеть еще один побочный эффект этой недоступности в нашем трафике 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 снова работает.

0
2 комментария
Илья Рябыкин

https://habr.com/ru/company/flant/blog/581560/

Вы не содрали последнюю диаграмму о к-й написано в предпоследнем абзаце.

Ответить
Развернуть ветку
Иван Семин
Автор

хабр так же взял с сайта клауда, так что ничего страшного

Ответить
Развернуть ветку
-1 комментариев
Раскрывать всегда