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:
# Whether to use MagicDNS
magic_dns: false
# Defines the base domain to create the hostnames for MagicDNS.
# This domain _must_ be different from the server_url domain.
# `base_domain` must be a FQDN, without the trailing dot.
# The FQDN of the hosts will be
# `hostname.base_domain` (e.g., _myhost.example.com_).
base_domain: main.mesh.zyronet.us
# Whether to use the local DNS settings of a node or override the local DNS
# settings (default) and force the use of Headscale's DNS configuration.
override_local_dns: true
Cuando tengas el config.yaml editado, no inicies el servicio todavía.
Primero ejecutaremos:
sudo headscale configtest
luego:
sudo chown headscale:headscale /var/lib/headscale/noise_private.key
sudo chmod 600 /var/lib/headscale/noise_private.key
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