- El 7 de marzo de 2024, tailscale.com estuvo fuera de servicio durante unos 90 minutos debido a un certificado TLS vencido, aunque el impacto se limitó principalmente a la documentación y al sitio de marketing
- El problema salió a la luz unos 90 días después del rediseño del sitio web y la migración a un nuevo hosting en diciembre de 2023; una configuración de proxy propio para compensar entornos sin soporte de IPv6 impidió la renovación automática
- El prober de monitoreo de vencimiento de certificados revisaba solo la ruta IPv6 y pasaba por un proxy con un certificado válido aparte, por lo que no detectó que los certificados reales de tailscale.com y www.tailscale.com estaban por vencer
- La mayoría del uso habitual de Tailscale no se interrumpió, pero sí se vieron afectados la documentación, el blog, install.sh y el flujo de acceso a la consola de administración para usuarios que no conocían la URL directa
- Tailscale se recuperó eliminando registros AAAA adicionales y renovando manualmente el certificado; pasará por un esquema de renovación manual de corto plazo y verificaciones separadas para IPv4/IPv6, con el objetivo de ofrecer soporte IPv6 más directo
Por qué se pasó por alto el vencimiento del certificado
- El 7 de marzo de 2024 vencieron los certificados TLS de tailscale.com y www.tailscale.com, lo que interrumpió el acceso al sitio durante unos 90 minutos
- En diciembre de 2023, Tailscale migró a un nuevo proveedor de hosting junto con una renovación importante de su sitio web
- Como el nuevo proveedor de hosting no ofrecía soporte IPv6 de forma predeterminada, Tailscale operó su propio proxy para procesar solicitudes IPv6 y configuró registros AAAA adicionales
- El proveedor de hosting consideró esta configuración como una “misconfiguration” y envió una alerta, pero en esa alerta no se indicaba que dicha configuración impediría completar la renovación automática del certificado
- El prober para monitorear el vencimiento de certificados solo revisaba la ruta IPv6
- El prober pasaba por el proxy propio
- El proxy tenía un certificado válido administrado por separado
- Por eso, el vencimiento real de los certificados de tailscale.com y www.tailscale.com no quedó expuesto de antemano
Impacto visible para los usuarios
- El impacto se concentró en recursos y flujos de instalación que dependen del sitio web
- La documentación de Tailscale, el blog y otros materiales de referencia basados en el sitio web no estuvieron accesibles durante la caída
- La consola de administración y las páginas de configuración en sí no se vieron afectadas, pero los usuarios que no sabían cómo ir directamente a
https://login.tailscale.com/podían pensar que esa página estaba offline - El script de instalación rápida no estaba disponible, lo que afectó algunas instalaciones e instalaciones automatizadas
- Los dominios que efectivamente sirven la instalación de paquetes de Tailscale sí estaban accesibles, y se considera que la interrupción de la resolución mediante el mecanismo
go getde Go fue mínima gracias al caching - Por el diseño de Tailscale, la mayoría de los usuarios no sufrió interrupciones en la mayoría de los casos de uso durante este incidente, y gracias al principio de conexión directa la red depende menos de la disponibilidad inmediata de endpoints específicos como tailscale.com
Recuperación y prevención de recurrencias
- Tras identificar el problema, Tailscale eliminó temporalmente los registros AAAA “adicionales” y renovó manualmente los certificados relacionados
- Con esta medida, la interrupción visible para los usuarios se resolvió de inmediato, y los registros se restauraron poco después para ofrecer el sitio y los servicios por IPv6
- El problema de renovación automática sigue pendiente, por lo que a corto plazo planean renovar directamente los certificados con recordatorios de calendario redundantes y una ventana designada de renovación manual
- La infraestructura de prober se actualizará para verificar por separado los endpoints IPv4 e IPv6
- A largo plazo, el objetivo es dar soporte a IPv6 de forma más directa en la infraestructura del sitio web, con una estructura que no requiera un proxy propio
1 comentarios
Opiniones en Hacker News
Ahora veo los certificados que expiran como el nuevo DNS de las caídas
Aun así, todavía me sorprende lo bien hecho que está Tailscale. Soy más bien un usuario ligero, pero accedo con Tailscale a dos lugares: algunos servidores on-premises y un entorno de producción en AWS
Puedo trabajar desde cualquier lugar. Un fin de semana intentaba desplegar un contenedor ECS, pero el wifi local era tan lento que el despliegue seguía agotando el tiempo de espera
Así que entré por SSH a una máquina de desarrollo on-premises, hice
git pulldel código más reciente y desplegué desde ahí. Tanto on-premises como AWS estaban seguros, sin puertos abiertos, y con solo levantar un agente de Tailscale en una EC2 pequeña de AWS también puedo probar la base de datos Aurora de producción sin puertos abiertosCuando hay que darle acceso de red a otro desarrollador, Tailscale también lo hace muy fácil, y revocar permisos igual. Este despliegue podría haberse manejado con algo como GitHub Actions para evitar el problema de una mala conexión a internet, pero quería hacerlo manualmente y Tailscale lo hizo posible
A futuro queremos usar esta action para que cualquier worker de GHA pueda acceder a la máquina de despliegue sin exponer puertos: https://github.com/tailscale/github-action
Otro incidente causado por un certificado vencido
Como parte del postmortem, recomiendo separar el script de instalación del sitio de marketing o tener alguna ruta alternativa. Así, las actividades del sitio de marketing quedan fuera del camino crítico de las operaciones de los clientes. Estas cosas pasan con frecuencia, por eso da más pena cuando ya estaban tan cerca de mantener un aislamiento razonable
Si uno sigue el uptime de varios proveedores, es más común de lo esperado que se caigan partes de sitios como GitHub o Zendesk. Y aun así, ellos están entre los buenos ejemplos
Cloudflare parece encargarse bastante de esto si alojas el dominio con ellos, pero eso implica tener que usar Cloudflare
Es el mismo error que cometimos en una empresa anterior. En la home del sitio de marketing
www.foo.compusimos un enlace a la página de login de la app webapp.foo.comRecién cuando se cayó por primera vez el sitio de marketing nos dimos cuenta de que el plan de hosting de 40 dólares al mes no era solo un sitio de marketing, sino infraestructura crítica. Literalmente era un hosting de 40 dólares soportando carga. La app no estaba caída, pero los usuarios pensaban que sí
Aprendimos que los usuarios simplemente siguen el camino que les preparamos; muchas veces no saben que existe otro, y si quitas ese único camino, algunos usuarios quedan completamente perdidos
tailscaleen el navegador, el primer resultado estailscale.com. Como no uso tan seguido la consola de administración de Tailscale, no me molesto en memorizar otra URLAntes, al escribir
cloudflare, el navegador autocompletabadash.cloudflare.com, pero después de visitar una sola vez el sitiocloudflare.com, ese pasó a ser el primer resultado, y terminé haciendo lo mismo con CloudflareEste equipo es realmente bueno, pero me parece que el precio es demasiado alto. Es casi imposible venderle a la gerencia un control de acceso decente para una VPN que cuesta 18 dólares al mes, y los tiers bajos son difíciles de vender sin esa función
Me pregunto cuáles son las opciones más baratas y si también ofrecen funciones de SSH, autenticación de red OAuth para servicios automatizados, configuración de un balanceador de carga para nodos VPN dentro de un clúster Kubernetes y automatización de solicitudes de certificados ACME vía Let’s Encrypt
Solo enumerando algunas funciones que uso en el tier gratuito, hay muchas que normalmente uno no consideraría parte del rol de un servicio VPN. Además siguen agregando funciones, así que me parece una opción bastante interesante y competitiva. Más bien me sorprende lo mucho que ofrecen en el tier barato, por eso me intriga más esa evaluación
También hay productos competidores que se solapan en parte con Tailscale, aunque quizá no encajen exactamente con lo que quieres
De todos modos, en cuestión de minutos varias partes del proyecto empezaron a encajar mucho mejor que antes
Para lo que hace, es una de esas herramientas raramente simples, y el tier gratuito también es bastante generoso, con 100 dispositivos y 3 usuarios
Claro, por mi rol tenía bastante influencia para convencer a la gerencia en estos temas, pero el precio no fue un problema
Somos clientes satisfechos desde abril del año pasado y todos usamos el tier premium, es decir, el caro. La velocidad de desarrollo también es impresionante. Algunas funciones que dijeron que podían tardar años ya salieron el año pasado
Cloudflare One también pudo haber sido una alternativa, pero habría sido más caro
Me pregunto qué proveedor usan para el sitio web. Casi todos los demás proveedores tienen soporte para IPv6, así que suena raro que tengan que hacer tantos rodeos por IPv6
$ host www.tailscale.com, la dirección IPv476.76.21.21dewww.tailscale.comes de Vercel, y las direcciones IPv6 son de AmazonIPv4 usa un certificado de Let’s Encrypt, e IPv6 usa un certificado de Amazon
En verdad da envidia que tengan un CI/CD y monitoreo tan sólidos como para confiar en hacer un despliegue masivo en diciembre. Su cultura de ingeniería se ve bastante fuerte.
Aun así, todavía hay preguntas sin responder. Si la configuración de IPv6 rompió la renovación automática del certificado de IPv4, me pregunto por qué no les pasó mucho antes. También me pregunto por qué tardaron 90 minutos en resolver la caída. Es una publicación de blog y no un postmortem real, pero habría estado bien tener aunque fuera una cronología breve.
También me pregunto por qué no se mudan a un proveedor de DNS que soporte IPv6 de forma nativa. Me pregunto si vale la pena la carga operativa de tener dominios separados para scripts o paquetes. Excluyendo terceros como repositorios de paquetes, me pregunto si otros también lo hacen así.
No entiendo por qué el proxy tenía que terminar TLS. Si hubiera sido simplemente un proxy TCP, al menos el monitoreo no habría asumido erróneamente que el certificado no estaba por expirar.
Además, si estaban haciendo la validación del dominio con un desafío TLS-ALPN, un proxy TCP también podría haber permitido la renovación automática.
Si no necesitas para nada la IP del usuario, no es un problema, pero suele ser útil para logs y detección de abuso.
https://www.haproxy.org/download/1.8/doc/proxy-protocol.txt
Cuando descubrimos por primera vez que IPv6 estaba roto, levantamos un proxy a toda prisa, y quienes lo hicieron en ese momento no sabían cómo funcionaba ACME.
Vamos a cambiarlo a un proxy TCP simple.
Por lo que veo, Tailscale parece usar NetActuate para
pkgs.tailscale.com. Creo que NetActuate podría ayudar a ofrecer proxies no terminales en varias ubicaciones a un precio razonable. No hay precios en su sitio web, pero no parece una empresa que le meta un margen de 50 veces al tráfico saliente.Si una organización como Tailscale comete aunque sea un solo tropiezo en un área mínimamente relacionada con la seguridad, para alguien apenas paranoico como yo se siente demasiado riesgoso.
Necesitan una mejor explicación sobre esta parte.
Ya que seguramente tienen monitoreo de infraestructura, basta con agregar 50 líneas de código que accedan a todos los dominios públicos por IPv4 e IPv6 y alerten si el certificado expira en menos de 19 días. La renovación automática se ejecuta 20 días antes y listo.
Después de que en los inicios de una empresa pequeña se nos pasaran algunas renovaciones de SSL, escribí este código hace años, y desde entonces no tuvimos incidentes relacionados con SSL.
No hace falta una invitación de calendario; la única corrección necesaria es esta. La parte clave es “actualizaremos la infraestructura del prober para verificar por separado los endpoints IPv4 e IPv6”.
Dice que “esa configuración era considerada una mala configuración por ese proveedor, por lo que recibimos advertencias continuamente desde que se desplegó”.
Entonces, ¿recibieron advertencias relacionadas con el certificado durante 90 días y luego el certificado falló?
Como no vi la advertencia real, no sé si esa advertencia lo indicaba claramente.