نویسنده : نیما دباغی، مهدی شادی
ما فکر میکردیم «فیس بوک نمی تواند خراب شود»
5اکتبر 2021 یعنی امروز در ساعت 15:51 ساعت محلی UTC ، یک حادثه داخلی تحت عنوان "جستجوی DNS در فیس بوک برای بازگرداندن SERVFAIL" را، cloudflare باز کرد چون نگران بود که مشکلی در resolver DNS 1.1.1.1 آنها وجود نداشته باشد. اما cloudflare، متوجه شد مشکل جدی تر در حال رخ دادن است.
رسانه های اجتماعی به سرعت آتش گرفتند و آنچه مهندسان cloudflare نیز به سرعت آن را تأیید کردند گزارش کردند. در واقع فیس بوک و سرویس های وابسته به آن از جمله واتس اپ و اینستاگرام از کار افتاده اند. DNS name ها برای resolving متوقف شد و IP های زیرساختی غیرقابل دسترسی بود. انگار شخصی کابل ها را از مراکز داده آن ها بیرون کشیده و آنها را از اینترنت قطع کرده بود".
به روز رسانی از فیس بوک
فیس بوک در حال حاضر یک پست وبلاگی منتشر کرده است که جزئیات آنچه در داخل اتفاق افتاده است را ارائه کرده است. در خارج ، مشکلات BGP و DNS را که در این پست بیان شده است مشاهده شد ، اما مشکل در واقع با تغییر پیکربندی استارت خورد که کل backbone داخلی را تحت تأثیر قرار داد.
حالا به آنچه که از بیرون دیدیم بپردازیم.
اصلا BGP چیست؟
مخفف Protocol Gateway Protocol است. مکانیزمی برای تبادل اطلاعات مسیریابی بین autonomous systems (AS) در اینترنت است. مسیریاب های بزرگی که باعث می شوند اینترنت کار کند ، دارای لیست های عظیم و دائماً به روز شده از مسیرهای ممکن است که می توان از آنها برای تحویل هر بسته شبکه به مقصد نهایی خود استفاده کرد. بدون BGP ، روترهای اینترنتی نمی دانند چه کاری کنند و اینترنت کار نمی کند.
اینترنت به معنای واقعی کلمه یک شبکه از شبکه ها است و توسط BGP به هم متصل می شوند. BGP به یک شبکه (مثلاً فیس بوک) اجازه می دهد تا حضور خود را در شبکه های دیگر اینترنت اعلام کند. بنابراین در این اتفاق فیس بوک حضور خود را به سایر شبکه ها نشان نداده و در نتیجه ISP ها و سایر شبکه ها نتوانستند شبکه فیس بوک را پیدا کنند و اینگونه فیسبوک از دسترس خارج شد.
شبکه های جداگانه هریک دارای ASN هستند: یک autonomous systems number، یک AS شبکه فردی با یک policy مسیریابی داخلی یکپارچه است. AS می تواند پیشوندهایی را ایجاد کند (مثلاً گروهی از آدرس های IP را کنترل می کند) ، و همچنین پیشوندهای ترانزیتی ( می دانند چگونه به گروه های خاصی از آدرس های IP دسترسی پیدا کنند).
این ASN مربوط به Cloudflare دارای شناسه AS13335 است. هر ASN باید مسیرهای پیشوند خود را با استفاده از BGP به اینترنت اعلام کند. در غیر این صورت ، هیچ کس نمی داند چگونه وصل شود و از کجا Cloudflare را پیدا کند.
در این نمودار ساده ، می توانید شش autonomous systems در اینترنت و دو مسیر ممکن را مشاهده کنید که یک بسته می تواند از ابتدا تا انتها از آنها استفاده کند. AS1 → AS2 → AS3 سریع ترین و AS1 → AS6 → AS5 → AS4 → AS3 کندترین هستند ، اما در صورت عدم موفقیت اولی می توان از آن استفاده کرد.
در 15:58 ساعت محلی UTC متوجه شدیم که فیس بوک اعلام مسیرهای مربوط به پیشوندهای DNS خود را متوقف کرده است. این بدان معناست که حداقل سرورهای DNS فیس بوک در دسترس نیست. به این دلیل resolver DNS 1.1.1.1 Cloudflare دیگر نمی توانست به درخواست آدرس 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 فیس بوک همچنان route شده بودند اما کاربرد خاصی نداشتند زیرا بدون DNS فیس بوک و خدمات مربوطه عملاً در دسترس نبود:
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 روتر را از هرگونه تغییری که در advertisement پیشوند ایجاد کرده ا مطلع می کند یا prefix به طور کامل حذف میشود. این را می توان به وضوح در تعدادی از به روزرسانی هایی که از فیس بوک هنگام بررسی پایگاه داده BGP سری های زمانی خود دریافت شده ، مشاهده کرد. معمولاً این نمودار نسبتاً بی صدا است: فیس بوک دقیقه به دقیقه تغییرات زیادی در شبکه خود ایجاد نمی کند.
اما در حدود ساعت 15:40 ساعت محلی UTC شاهد اوج تغییرات مسیریابی از سوی فیس بوک بودیم.
آن موقع بود که دردسر شروع شد
اگر این دیدگاه را با اعلان ها و حذف مسیر ها جداسازی کنیم ، حتی تصور بهتری از آنچه اتفاق افتاده است می گیریم. مسیرها حذف شد ، سرورهای DNS فیس بوک آفلاین شد و یک دقیقه پس از بروز مشکل ، مهندسان Cloudflare در اتاقی بودند که می پرسیدند چرا 1.1.1.1 نمی تواند facebook.com را resolve کند و نگران بودند که به نوعی خطای سیستم های آنها باشد.
با این حذف ها ، فیس بوک و سایت های آن عملاً خود را از اینترنت قطع کرده بودند.
به عنوان پیامدی مستقیم ، resolver های DNS در سراسر جهان resolve نام دامنه خود را متوقف کردند.
➜ ~ 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.
این جریان اتفاق می افتد چون DNS ، مانند بسیاری از سیستم های دیگر در اینترنت ، مکانیسم مسیریابی خود را دارد. وقتی شخصی آدرس https://facebook.com را در مرورگر تایپ می کند ، resolver های DNS که مسئول ترجمه نام دامنه به آدرس IP واقعی برای اتصال است ، ابتدا بررسی می کند که آیا چیزی در cache خود دارد و از آن استفاده می کند. در غیر این صورت ، سعی می کند پاسخ را از سرورهای نام دامنه ، که معمولاً توسط نهادی که صاحب آن است میزبانی می شود ، بگیرد.
اگر nameserver ها غیرقابل دسترسی باشند یا به دلایل دیگر پاسخ ندهند ، SERVFAIL بازگردانده می شود و مرورگر خطایی را برای کاربر صادر می کند.
به دلیل توقف اعلام فیس بوک از مسیرهای پیشوند DNS خود از طریق BGP ، resolver های DNS ما و دیگران هیچ راهی برای اتصال به nameserver ها نداشتند. در نتیجه ، 1.1.1.1 ، 8.8.8.8 و سایر resolver های اصلی DNS عمومی شروع به انتشار (و ذخیره سازی) پاسخ های SERVFAIL کردند.
اما این همه ماجرا نیست. در حال حاضر رفتار و منطق کاربرد انسان شروع می شود و باعث ایجاد یک اثر نمایی دیگر می شود. سونامی ترافیک DNS اضافی پی در پی می آید.
این امر به این دلیل اتفاق افتاد که برنامه ها خطایی را برای پاسخ نمی پذیرند و مجدداً سعی می کنند به پاسخی برسند ، گاهی اوقات به صورت تهاجمی ، و به این دلیل است که کاربران نهایی نیز در انتظار پاسخ نمانده و بارگذاری مجدد صفحات را شروع می کنند ، یا آنها را بسته و دوباره راه اندازی می کنند .
این افزایش ترافیک (در تعداد درخواست ها) است که در 1.1.1.1 مشاهده شد:
بنابراین در حال حاضر ، از آنجا که فیس بوک و سایت های آنها بسیار بزرگ هستند ، cloudflare دارای resolver های DNS در سراسر جهان است که 30 برابر بیشتر از حالت عادی پرس و جو را انجام می دهند و به طور بالقوه باعث ایجاد تاخیر و زمان پایان در سایر سیستم عامل ها می شود.
cloudflare اضافه کرد :
خوشبختانه 1.1.1.1 به صورت رایگان ، خصوصی ، سریع و مقیاس پذیر ساخته شد و ما توانستیم خدمات کاربران خود را با حداقل تأثیر ادامه دهیم.
اکثریت قریب به اتفاق درخواستهای DNS ما در کمتر از 10 میلی ثانیه حل می شود. در همان زمان ، درصد کمی از صدک های p95 و p99 زمان پاسخگویی را افزایش دادند ، احتمالاً به دلیل این که TTL های منقضی شده مجبور به مراجعه به nameserver فیس بوک بودند و timeout شده اند. محدودیت زمانی 10 ثانیه DNS در بین مهندسان به خوبی شناخته شده است.
مردم به دنبال جایگزین هستند و می خواهند بیشتر بدانند یا درباره آنچه در جریان است بحث کنند. وقتی فیس بوک غیرقابل دسترسی شد ، ما شاهد افزایش درخواست های DNS در توییتر ، سیگنال و دیگر بسترهای پیام رسانی و رسانه های اجتماعی بودیم.
می توان عوارض جانبی دیگری از این عدم دسترسی را در ترافیک WARP خود به ASN 32934 تحت تأثیر فیس بوک مشاهده کرد. این نمودار نشان می دهد که چگونه ترافیک از 15:45 UTC به 16:45 UTC در مقایسه با سه ساعت قبل در هر کشور تغییر کرده است. در سراسر جهان ترافیک WARP از شبکه فیس بوک به سادگی از بین رفت.
رویدادهای امروز یک یادآوری ملایم است که اینترنت یک سیستم بسیار پیچیده و وابسته به هم است که میلیون ها سیستم و پروتکل با هم کار می کنند. این اعتماد ، استانداردسازی و همکاری بین نهادها در مرکز ایجاد آن برای تقریباً پنج میلیارد کاربر فعال در سراسر جهان است.
حدود ساعت 21:00 UTC شاهد فعالیت مجدد BGP از شبکه فیس بوک بودیم که در ساعت 21:17 ساعت محلی UTC به اوج خود رسید.
این نمودار در دسترس بودن نام DNS 'facebook.com' در resolver های DNS Cloudflare 1.1.1.1 را نشان می دهد. در حدود 15:50 UTC در دسترس قرار نگرفت و در 21:20 UTC برگشت.
بدون شک خدمات فیس بوک ، واتس اپ و اینستاگرام به زمان بیشتری نیاز دارد اما از ساعت 21:28 به وقت محلی UTC به نظر می رسد فیس بوک دوباره به اینترنت جهانی متصل شده و DNS دوباره کار می کند.