He migrado mi VPN

He migrado mi VPN

·

6 min read

TL;DR: He cambiado mi VPN de ZeroTier a una instancia de Headscale, la alternativa a Tailscale de código abierto. Y se encuentra alojada en un VPS español.

Realmente esto no me ha llevado quince días, pero ha sido lo más destacable que he hecho en este tiempo. Y como no tengo nada más reseñable que contar, ahí va mi experiencia.

Antecedentes

Llevaba tiempo usando ZeroTier One en mis diferentes dispositivos: un Windows de sobremesa, un par de MacBook Pro del trabajo y mi móvil, sobre todo para poder tener acceso remoto sin tener que usar TeamViewer, ya que tiene un límite de tiempo y es más para algo puntual (cuando tienes que echar un cable a alguien que tiene poca idea de informática y quiere que le ayudes a instalar el Office, siempre de manera legal, por supuesto).

Y si bien no tenía (ni he tenido) problemas con ZeroTier, me incomoda el hecho de dejar en manos de un tercero el acceso a mi red personal de dispositivos, y más aún después de una noticia que hubo este pasado septiembre, donde se ponían de manifiesto múltiples vulnerabilidades en el servidor raíz de identidad, causando la posibilidad de filtrar datos de las redes privadas de los usuarios (más detalles aquí).

Así que decidí emprender mi camino hacia nuevos horizontes en el campo de las redes privadas virtuales.

WireGuard

Una de las soluciones VPN más populares y modernas es WireGuard. Tal es su popularidad que se incluyó en el propio núcleo de Linux en la versión 5.6. Esto me hizo investigar sobre software VPN basado en WireGuard y me topé con varias soluciones:

Tailscale

¿Te acuerdas de Hamachi? En su tiempo fue muy popular entre los jugadores de Minecraft que querían compartir su servidor con sus amigos y no querían complicarse pagando por el alojamiento de un servidor funcionando 24/7.

Pues Tailscale es parecido a Hamachi pero basado en WireGuard. Además de que incluye un montón de cosas más como:

  • Magic DNS: Resolución de nombres fácil, sencilla y para toda la familia.
  • Listas de control de accesos: configuración de permisos muy completa, tanto entre dispositivos como subredes.
  • Nodos de salida: Por si te interesa usar algún dispositivo como proxy.
  • Taildrop: Compartir archivos entre dispositivos de manera simple.

...y alguna otra funcionalidad más que me dejo seguro. Ahora bien, Tailscale tiene el mismo inconveniente que ZeroTier: es un servicio de terceros, el cual es gratuito hasta 20 dispositivos por usuario (limitado además a un único usuario) y sólo una subred. Si se quiere saltar estos límites, Tailscale lo permite a partir de 5$/mes/usuario. Entonces encontré dos alternativas a Tailscale:

Innernet

Conocí Innernet a través de una publicación en Hacker News, y me llamó mucho la atención: puedes tener una red muy grande y compartimentada de muchas maneras a través de una herramienta simple y robusta. Lo más bonito de todo es que es de código abierto y además está escrita en Rust. Me hubiera quedado con esta opción si no me hubiera costado tanto configurarla, ya que no conseguía de ninguna manera conectar los nodos al servidor. Pero estoy seguro de que estaba haciendo algo mal y no creo que fuera culpa de la propia herramienta. (A lo mejor en un futuro se puede automatizar a través de un orquestador como Kubernetes o alguien desarrolla un panel de administración que facilite el despliegue).

En la entrada del blog en la que se presenta Innernet se habla también de Nebula, una herramienta similar escrita en Go por el equipo de ingeniería de Slack. También intenté desplegarla, pero la configuración me pareció muy poco intuitiva y poco reactiva (es decir, Innernet y Headscale –de la cual hablaré más adelante– utilizan una base de datos SQL para almacenar los datos de la red y sincronizar los cambios hacia sus nodos, mientras que Nebula lo gestiona todo a través de un fichero de configuración en el que, si quieres añadir, modificar o eliminar un nodo, o cambiar sus accesos, tienes que interrumpir la ejecución del servidor, guardar las modificaciones y volver a levantar los cambios. En una infraestructura clásica esto es una 💩, pero si se utiliza, por ejemplo, con Kubernetes y su mecanismo de rollout no habría ningún problema).

Headscale

Envío todo mi amor eterno a Juan Font y su empeño en crear una implementación en Go del servidor de control de Tailscale. Headscale es prácticamente una versión compatible 1 a 1 con Tailscale y además de código abierto. Tienes todo lo que ofrece Tailscale en sus planes de pago en un único ejecutable que se configura de manera sencilla y además usando los clientes oficiales de Tailscale sin mucha complicación (salvo en iOS, que a día de hoy creo que no existe todavía la posibilidad; y en Android, que tienes que modificar el código fuente del cliente y compilar una versión que apunte a tu servidor).

Llevo usando Headscale menos de dos días y estoy encantado con la facilidad de uso y todo lo que ofrece. Sin duda es, para mí, la mejor opción a día de hoy si quieres tener una VPN fácil de configurar, controlada por uno mismo y no quieres pagar los planes que ofrece Tailscale.

Alojamiento

La idea principal que tenía era haber instalado Headscale en una Raspberry Pi a la que no le estaba dando ningún uso y usar el reenvío de puertos del router. Me llevé una sorpresa al descubrir que mi proveedor de Internet usa una NAT a gran escala (CGNAT): es decir, que mi IP pública no es solo mía, sino que la comparto con parte de los usuarios del mismo proveedor. Esto ocurre por el agotamiento de direcciones IPv4 y como parte de la transición hacia la versión 6 del protocolo de Internet, en el que hay unas 2128 direcciones posibles. Casi nada.

Al encontrarme con esto, tenía dos opciones:

  1. Pedirle a mi ISP que me diera una IPv4 pública, la cual suponía un incremento en la factura de 2€/mes, o
  2. Contratar un VPS en el que alojar el servidor.

Tuve la suerte de encontrar una oferta de Black Friday en un proveedor español que me permitía tener un VPS por... 2€/mes. Así que mi razonamiento fue:

Si tuviera una IPv4 pública podría tener más cosas conectadas en casa expuestas hacia fuera, con el riesgo que ello conlleva. Pero entre la oferta del VPS y la posibilidad de tener un servidor para mí para hacer lo que me dé la gana (dentro de lo legal y de las condiciones del servicio, por supuesto), prefiero tener esa opción y si cambio de proveedor de internet no modificar nada en la configuración del VPS.

Esa es mi disonancia cognitiva, y si no te gusta me dejas un comentario y lo debatimos.

En fin, gracias por llegar hasta aquí y espero que te haya gustado; si no ha sido así, coméntamelo abajo o en mis redes sociales (arriba).

¡Hasta luego!

Foto de portada por Taylor Vick en Unsplash