Skip to main content

Instalacion

Paso 1 - Actualizar el servidor

sudo apt update
sudo apt upgrade -y

Paso 2 - Instalar dependencias

sudo apt install -y curl wget gnupg unzip jq

Paso 3 - Crear un usuario para Headscale

No me gusta ejecutar servicios como root.

sudo useradd \
    --system \
    --create-home \
    --home-dir /var/lib/headscale \
    --shell /usr/sbin/nologin \
    headscale

Paso 4 - Crear directorios

sudo mkdir -p /etc/headscale
sudo mkdir -p /var/lib/headscale
sudo mkdir -p /var/run/headscale

sudo chown -R headscale:headscale /etc/headscale
sudo chown -R headscale:headscale /var/lib/headscale
sudo chown -R headscale:headscale /var/run/headscale

Paso 5 - Crear usuario en PostgreSQL

Entramos a PostgreSQL:

sudo -u postgres psql

Creamos el usuario:

CREATE USER headscale WITH PASSWORD 'ElegiUnaPasswordSegura';

Paso 6 - Crear la base

CREATE DATABASE headscale
    OWNER headscale
    ENCODING 'UTF8'
    TEMPLATE template0;

Paso 7 - Conectarse

\c headscale

Paso 8 - Probar el acceso

Desde el servidor:

psql \
    -h 127.0.0.1 \
    -p 7543 \
    -U headscale \
    -d headscale

Debería pedir la contraseña y entrar sin problemas.

Paso 9 - Descargar Headscale

Primero creemos un directorio temporal.

mkdir -p ~/downloads
cd ~/downloads

Descargar la última versión

En lugar de usar apt, descargaremos el binario oficial desde GitHub.

Primero obtenemos la última versión:

curl -s https://api.github.com/repos/juanfont/headscale/releases/latest | jq -r .tag_name


Debería devolver algo similar a:

v0.xx.x

Luego descargamos el binario correspondiente a Linux AMD64.

Por ejemplo (reemplazando la versión):

wget https://github.com/juanfont/headscale/releases/download/v0.xx.x/headscale_0.xx.x_linux_amd64

Verificar el binario

chmod +x headscale_*
./headscale_* version


Deberías ver algo como:

Headscale v0.xx.x

Paso 10 - Instalar HeadScale

sudo mv headscale_* /usr/local/bin/headscale
sudo chmod 755 /usr/local/bin/headscale

Comprobar:

headscale version

Paso 11. Descargar el archivo de ejemplo de la versión exacta

cd /etc/headscale

sudo wget -O config.yaml \
https://raw.githubusercontent.com/juanfont/headscale/v0.29.3/config-example.yaml


Así nos aseguramos de que todos los parámetros coincidan exactamente con la versión 0.29.3.


2. Hacer un backup

sudo cp config.yaml config.yaml.original



3. Editarlo

sudo nano /etc/headscale/config.yaml


Y solo modificaremos lo necesario.

Valores que vamos a cambiar

URL pública

server_url: https://main.zyronet.us



Escuchar solo en localhost

listen_addr: 127.0.0.1:8080



Métricas

metrics_listen_addr: 127.0.0.1:9090



gRPC

grpc_listen_addr: 127.0.0.1:50443



Socket Unix

unix_socket: /var/run/headscale/headscale.sock



PostgreSQL

Buscamos:

database:


y reemplazamos la sección por:

database:
  type: postgres

  postgres:
    host: 127.0.0.1
    port: 7543
    name: headscale
    user: headscale
    pass: TU_PASSWORD
    ssl: disable



DNS

Más adelante configuraremos MagicDNS correctamente.

Por ahora podemos dejar:

dns:
  magic_dns: false


Cuando tengas el config.yaml editado, no inicies el servicio todavía.

Primero ejecutaremos:

sudo headscale configtest

Paso 11:crear el servicio systemd

Creamos:

sudo nano /etc/systemd/system/headscale.service

Con este contenido:

[Unit]
Description=Headscale
After=network-online.target postgresql.service
Wants=network-online.target

[Service]
Type=simple
User=headscale
Group=headscale

ExecStart=/usr/local/bin/headscale serve

Restart=always
RestartSec=5

WorkingDirectory=/var/lib/headscale

AmbientCapabilities=CAP_NET_BIND_SERVICE
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
NoNewPrivileges=true

[Install]
WantedBy=multi-user.target

Luego:

sudo systemctl daemon-reload
sudo systemctl enable headscale
sudo systemctl start headscale