Como instalar una VPN MESH con Headscale y Tailscale

headscale y Tailscale selfhosted vpn mesh

Pasa el tiempo y claramente contar con una VPN para llegar a tus servicios es super importante. Asi que les voy a hablar de Tailscale y Headscale que sinceramente son servicios excelentes que permiten crear una red mesh entre tus dispositivos!

Primero vamos con unos conceptos para que tengas en claro que son estos servicios y por que decidi convinar las tecnolgias.

Tailscale basicamente es un servicio de red privada virtual (VPN) moderno, basado en el protocolo WireGuard, que permite conectar dispositivos de forma segura y directa (peer-to-peer o p2p) sin necesidad de configurar firewalls o abrir puertos en el router. Crea una red «mesh» privada (Tailnet) que conecta equipos en distintas ubicaciones como si estuvieran en la misma red local. Asi que, tener una vpn p2p suena muy genial!!

Para usar tailscale entras a su https://tailscale.com/ te registras, configuras el servicio, instalas los clientes y listo! no necesitas nada más. ¿y por que no lo explico? por que si estas en el camino del #sysadmin va a ser muy intuitivo! Claramente no todo es color de rosas, al usar sus servicios tiene restricciones en cantidad de usuarios y equipos, pero tal vez para un par de cosas te sirva.

Headscale, por su parte, es una implementación de código abierto y autohospedada del servidor de control de Tailscale. Permite crear redes VPN seguras basadas en WireGuard sin depender de los servicios en la nube de terceros, ideal para gestionar dispositivos propios con control total, privacidad y sin restricciones de usuarios. Headscale lo pondras en tu servidor y luego usas los clientes de tailscale hacia tu servidor headscale elminando todas las restricciones. Claramente tener un servidor vpn p2p no iba a ser tan facil ini todo color de rosas…tiene sus requermientos.

tailscale vs headscale

Al usar como servidor web a Caddy se encargara de autogestionar con letencrypt para bajar los SSL que se utilizarán en la conexion requiere de un DNS y una ip publica. EL dns lo vamos a implementar con una herramienta que les va a volar la cabeza por la facil que es pero la ip publica la tienen que tener uds. Si, si…. la baja un poco, pero nada que no puedas conseguir contratando un server baratito en cualquier lado. Si queres hacer una prueba en digital ocean te dejo mi codigo para que puedas usar un mes gratis y hacer pruebas de estas!! Segui este enlace: https://m.do.co/c/2976779cc979

DigitalOcean Referral Badge

Vamos a hacer la instalación sobre docker con lo cual te dejo un tutorial viejito pero que sigue funcionando sobre la instalación de Docker!

Si ya tenes tu servidorsito funcional con docker nos ponemos manos a la obra.

Vamos a crear una carpeta headscale y dentro vamos a crear algunos archivos. La estructura final va a quedar asi:

estructura de carpeta headscale y archivos importantes de configuracion.

docker-compose.yml

services:

  headscale:
    image: headscale/headscale:latest
    container_name: headscale
    command: serve --config /etc/headscale/config.yaml
    restart: unless-stopped
    volumes:
      - ./config:/etc/headscale
      - ./data:/var/lib/headscale
    networks:
      - headscale-net

  caddy:
    image: caddy:latest
    container_name: headscale-caddy
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - caddy_data:/data
      - caddy_config:/config
    networks:
      - headscale-net

networks:
  headscale-net:

volumes:
  caddy_data:
  caddy_config:

Caddyfile

ippublicadetuservidor.sslip.io {
 reverse_proxy headscale:8080
}

La gran revelación! como dijimos necesitamos un «dominio», no sirve solamente tener una ip publica. Como ven el archivo Caddyfile, sin extención ni nada, es el que se usa para configurar el servidor web caddy. La primera linea dice ippublicadetuservidor pero le sigue sslip.io el cual es un servicio más que interezante ¿Que hace? solo le pasas tu ip publica con .sslip.io y ya se autoconfigura como DOMINIO, sin registros, sin publicidad, sin nada de nada!

Ahora creamos la carpeta config y dentro el archivo config.yaml

server_url: https://tuippublica.sslip.io

listen_addr: 0.0.0.0:8080

private_key_path: /var/lib/headscale/private.key

noise:
  private_key_path: /var/lib/headscale/noise_private.key

prefixes:
  v4: 100.64.0.0/10

database:
  type: sqlite
  sqlite:
    path: /var/lib/headscale/db.sqlite

dns:
  magic_dns: true
  base_domain: headscale.local
  override_local_dns: false

derp:
  urls:
    - https://controlplane.tailscale.com/derpmap/default

log:
  level: info

Ahora a la altura de docker-compose.yml vamos a ejecutar el comando para que levante todos los contenedores (la magia de docker)

docker compose up -d

Si todo salio bien ya tendras tus contenedores corriendo y procederemos a crear un usuario con el comando:

docker exec headscale headscale users create NombreDeUsuario

Una vez creado podras ver la lista de usuarios (para adminsitrar) de esta manera:

docker exec headscale headscale users list

Ahora que ya sabes listar usuarios es importante saber que cada usuario tiene un ID o INDICE y lo necesitamos para crearle una clave. Si es este es el primer usuario creado va a ser el 1, por lo cual seguirá este comando:

docker exec headscale headscale preauthkeys create \ --user 1 \ --reusable

Te va a devolver una clave larga y la vas a necesitar para conectarte!! guardala bajo mil llaves! (cuak)

Ahora necesitamos los clientes de tailscale, si tuvieras una notebook con windows necesistarias descargar de https://tailscale.com/download el cliente que como ves es multiplataforma:

clientes de tailscale multiplaforma

Una vez que bajaste lo instalas como todo en windows con siguiente y siguiente… hasta finalizar y lo cerras.

En la misma notebook vas a tomar la terminal y ejecutas lo siguiente (teniendo en cuenta que hskey-XXXXX es tu clave que generaste anteriormente)

tailscale up --login-server https://TU_IP.sslip.io --authkey hskey-XXXXX

Hasta aca solo tenes en la mesh tu notebook!!

Queres instalar en otra? adelante… metele en todos los servidores windows que quieras!

Y si lo queres instalar en linux tambien es muy sencillo:

curl -fsSL https://tailscale.com/install.sh | sh

y luego con tu clave:

sudo tailscale up \
 --login-server https://tuippublica.sslip.io \
 --authkey hskey-XXXX

Ahora cuando listes tus nodos vas a tener todos los que pusiste con un rango de ip 100.64.0.0/10 .

Gracias por pasar por este tutorial que denominamos Como instalar una VPN MESH con Headscale y Tailscale

Ya tenes una red entre tus equipos, hosteada en tu propio servidor y con certificados ssl! decime que no queda genial? hay muchas cosas más para hacer y aprender sobre headscale y tailscale pero serán para otro tutorial!! gracias por pasar!

Deja una respuesta

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