Entendiendo cómo desapareció Facebook: qué son los protocolos BGP y por qué afectó a todo el mundo

Publicado por: Adrián Ruiz
You've been Zucked

Durante el día de ayer, lunes 4 de octubre, Facebook vivió una de sus mayores crisis. Lo que al principio parecía otra caída habitual de WhatsApp acabó siendo algo mucho más serio: Facebook dejó de existir durante horas. Rápidamente se registraron picos de actividad en otras webs y servicios de Internet, propiciando un extraño día en el que todo el mundo se preguntaba qué demonios estaba pasando.

Cloudflare, una de las compañías más grandes de la red que provee soluciones de hospedaje, seguridad y sistemas DNS, siguió de cerca el caso creyendo que fue un fallo de sus propias DNS. Pero al poco de investigarlo descubrieron que lo que pasaba era algo mucho más gordo, tal como explican un extenso artículo en su blog que lo detalla todo.

El principal problema: los protocolos BGP.

Border Gateway Protocol

BGP son las siglas de Border Gateway Protocol, algo así como protocolos de puertas de enlace. Se trata de un mecanismo habitual para intercambiar información del enrutamiento entre los sistemas autónomos (ASOC) de Internet. Existen grandes enrutadores que son los que permiten a Internet funcionar tal y como lo conocemos, y estos suelen actualizar constantemente sus rutas para que puedan circular por la red y llegar a destino los paquetes de datos que todos enviamos, ya sean mensajes, multimedia y solicitudes.

Sin estos protocolos, dichos enrutadores no sabrían qué hacer e Internet no funcionaría.

Border Gateway Protocol

Simplificándolo un poco, Internet es una red de redes unida por protocolos BGP. Gracias a estos protocolos los servicios como Facebook pueden anunciar su presencia en otras redes y por ello los enrutadores saben que está ahí, accesible para nosotros. En cambio, sin BGP es como si Facebook no anunciara nada y por lo tanto deja de estar disponible en esa enorme red de redes.

Todas las redes tienen un número de sistema autónomo, denominado ASN. Los sistemas autónomos son redes individuales (formadas de prefijo) que se encargan de anunciar a Internet cuál es su ruta mediante protocolos BGP; de lo contrario, nadie sabría cómo conectarse a tu servicio y mucho menos encontrarte.

En el caso de Facebook ha sido exactamente lo que ha sucedido: habían dejado de anunciar las rutas de su prefijo, cortando de este modo toda conexión con el exterior. A consecuencia de ello los sistemas de resolución de DNS no podían responder consultas al solicitar la dirección IP de los dominios de Facebook, como facebook.com o 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>

Literalmente, es como si hubieran cerrado sus servidores y posteriormente desconectado el cable.

Como curiosidad, de acuerdo con los datos de Cloudflare Facebook no suele a realizar muchas actualizaciones de sus enrutamientos, pero minutos antes de #FacebookDown hubo una inusual subida de cambios en sus protocolos. Fue entonces cuando comenzaron los problemas.

Actualización BGP de Facebook

Fallos de DNS y daños colaterales

Uno de los problemas más directos los vimos en los sistemas DNS de todo el mundo. Los DNS son los que se encargan de traducir cualquier dirección web en direcciones IP para poder conectarnos al servicio. En caso de no lograrlo primero intenta obtener una vista desde la caché disponible, y si no hay busca una respuesta desde el servidor del dominio. Si esta falla, devuelve un SERVFAIL y el navegador muestra un error al usuario.

➜  ~ 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.	

Y aquí viene el primer cuello de botella. Como Facebook dejó de anunciar las rutas de su prefijo a través del protocolo BGP, los sistemas DNS no tenían forma de conectarse al servidor de dichos nombres (facebook.com). En consecuencia, los DNS públicos más populares como el 1.1.1.1 de Cloudflare o el 8.8.8.8 de Google comenzaron a almacenar en caché respuestas SERVFAIL.

Después entra el segundo problema de la ecuación: el factor humano. Ante una caída, crece inmensurablemente el número de peticiones de forma exponencial, lo que se traduce en un enorme tráfico de peticiones DNS. Especialmente cuando hablamos de aplicaciones, estas suelen estar diseñadas para no aceptar un error como respuesta y reintentar constantemente la conexión. Por otro lado, también suele ser el usuario quien lo reintenta, a veces de manera compulsiva.

Esto ha provocado que el número de solicitudes a través de 1.1.1.1 creciera en todo el mundo hasta 30 veces más de lo habitual. A consecuencia, Cloudflare ha experimentado problemas de latencia, tiempos de espera y sobrecarga, lo que a su vez ha afectado a miles de webs y servicios de todo el mundo. Por suerte las consecuencias no han sigo graves más allá de experimentar conexiones más lentas de lo habitual.

El daño más grave lo ha vivido Facebook con perdidas de hasta 5.000 millones de dólares por el el apagón, todo en medio de una polémica tras la filtración de una ex-empleada. Polémicas que no dejan en buena posición a la compañía.

Para entrada la noche, alrededor de las 21:00 horas, Facebook todavía seguía inactiva pero empezaba a mostrar actividad en sus protocolos BGP y los sistemas DNS ya mostraban la disponibilidad de facebook.com sin mayor problema. A lo largo del resto de la noche han ido reconectándose poco a poco en todo el mundo, aunque todavía se muestran fallos puntuales en algunos de sus servicios.

Fuente: Cloudflare
Imagen: Unsplash
Publicado en:
¡Síguenos!

Si te ha gustado el artículo síguenos para no perderte nuestras publicaciones:

Deja un comentario:

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *