Tailscale Alternative einrichten Teil 3 / 4

Teil 3: Geräte hinzufügen

Der Weg unterscheidet sich zwischen Geräten mit Terminal-Zugriff (Computer, Server) und Mobilgeräten (iOS/Android). Lange Zeit unterstützten die mobilen Tailscale-Apps keine Kombination aus benutzerdefiniertem Server und Preauth-Key, das ist seit einem App-Update (Changelog: "Auth keys can be used for connecting to a custom coordination server") behoben, siehe Weg B.

Weg A: Computer und Server (mit Terminal)

1. Preauthkey erzeugen

Terminal
docker exec headscale headscale users list

Die ID des gewünschten Users notieren, dann:

Terminal
docker exec headscale headscale preauthkeys create --user <USER_ID> --expiration 24h --reusable

2. Tailscale installieren und verbinden

Auf dem Zielgerät zunächst die offizielle Tailscale-App installieren, dann:

Terminal
tailscale up --login-server=https://vpn.example.com --authkey=<KEY>

Auf macOS, falls tailscale nicht im PATH ist:

Terminal
/Applications/Tailscale.app/Contents/MacOS/Tailscale up --login-server=https://vpn.example.com --authkey=<KEY>

3. Kontrollieren

Terminal
docker exec headscale headscale nodes list

Weg B: Mobilgeräte (iOS/Android)

Aktueller Weg: Preauthkey, genau wie bei Weg A

1. Preauthkey erzeugen:

Terminal
docker exec headscale headscale users list
docker exec headscale headscale preauthkeys create --user <USER_ID> --expiration 24h --reusable

2. In der Tailscale-App: 1. Account-Symbol antippen → Add Account… 2. Optionen-Symbol oben rechts → Advanced Login Options 3. "Use a custom coordination server" wählen, https://vpn.example.com eintragen 4. Im selben Menü "Use an auth key" wählen, den Preauthkey einfügen 5. Bestätigen — das Gerät verbindet sich direkt, ganz ohne manuelle Freigabe

3. Kontrollieren:

Terminal
docker exec headscale headscale nodes list

Ob Android bereits denselben Stand hat, ist nicht sicher (die Ankündigung war iOS-spezifisch). Falls "Advanced Login Options" bei dir fehlt oder die App-Version älter ist, hilft der Fallback-Weg unten.

Fallback: Manuelle Freigabe (ältere App-Versionen)

1. Custom-Server eintragen

iOS/iPadOS: 1. In den iOS-Systemeinstellungen (nicht in der App selbst) zur Tailscale-App scrollen 2. Feld "Alternate Coordination Server URL": https://vpn.example.com 3. Tailscale-App komplett schließen und neu öffnen 4. Regulären "Sign in" wählen (nicht SSO)

Android: 1. App öffnen, oben rechts das Drei-Punkte-Menü mehrfach öffnen/schließen, bis "Change server" erscheint 2. https://vpn.example.com eintragen 3. App neu starten, regulären "Sign in" wählen

2. Registrierung abschließen

Nach dem Sign-in-Tap zeigt das Gerät einen Befehl wie:

Terminal
headscale auth register --auth-id hskey-authreq-XXXXXXXXXXXX --user USERNAME

Führe ihn so auf dem Server aus (der Username, nicht die ID!):

Terminal
docker exec headscale headscale auth register --auth-id hskey-authreq-XXXXXXXXXXXX --user mama

3. Gerät sinnvoll umbenennen

Neu registrierte Mobilgeräte tauchen oft mit einem unpraktischen Namen wie localhost auf:

Terminal
docker exec headscale headscale nodes list
docker exec headscale headscale nodes rename -i <NODE_ID> iphone-mama

Komfort-Skript für den Fallback-Weg

Terminal
#!/bin/bash
# ~/headscale/hsuserreg.sh
set -euo pipefail

usage() {
    echo "Usage: hsuserreg <auth-id> <device-name> <user>"
    exit 1
}

if [[ $# -lt 3 ]]; then
    usage
fi

AUTH_ID="$1"
DEVICE_NAME="$2"
HS_USER="$3"

docker exec headscale headscale auth register --auth-id "$AUTH_ID" --user "$HS_USER"

NODE_ID=$(docker exec headscale headscale nodes list --output json \
    | jq -r --arg user "$HS_USER" \
    '[.[] | select(.user.name == $user)] | sort_by(.id | tonumber) | last | .id')

docker exec headscale headscale nodes rename -i "$NODE_ID" "$DEVICE_NAME"
docker exec headscale headscale nodes list
Terminal
chmod +x ~/headscale/hsuserreg.sh
echo "alias hsuserreg='~/headscale/hsuserreg.sh'" >> ~/.bashrc
source ~/.bashrc

Nutzung:

Terminal
hsuserreg hskey-authreq-XXXXXXXXXXXX iphone-mama mama

Der user-Parameter ist bewusst verpflichtend, ohne Standardwert, damit ein Gerät nicht versehentlich unter deinem eigenen Account landet, falls du ihn vergisst.

Aufräumen: doppelte oder verwaiste Geräte

Terminal
docker exec headscale headscale nodes list
docker exec -it headscale headscale nodes delete -i <NODE_ID>

Das -it ist wichtig, sonst kann die Ja/Nein-Bestätigung nicht beantwortet werden und der Befehl bricht ab.

Weiter geht's in Teil 4, wie du eigene Dienste erreichbar machst.