From 540a55e7ed516009ca80f0e01390cdc7ed7cdea1 Mon Sep 17 00:00:00 2001 From: alf Date: Wed, 12 Aug 2026 07:16:51 +0000 Subject: [PATCH] =?UTF-8?q?handbuch.md=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- handbuch.md | 198 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 198 insertions(+) create mode 100644 handbuch.md diff --git a/handbuch.md b/handbuch.md new file mode 100644 index 0000000..bef851b --- /dev/null +++ b/handbuch.md @@ -0,0 +1,198 @@ +# Wiederherstellungs-Handbuch: Headscale in Google Cloud (Free Tier) +Dieses Handbuch enthält alle bereinigten Schritte und Konfigurationen, um Ihr Headscale-Setup auf der Domain `netz.wralto.org` im Projekt `rcloneprojekt` jederzeit fehlerfrei neu aufzusetzen. + +--- + +## Teil 1: Google Cloud Infrastruktur (Cloud Shell) + +Führen Sie diese Befehle in der **Google Cloud Shell** aus: + +```bash +# 1. Standard-Netzwerk erstellen (falls gelöscht) +gcloud compute networks create default --project="rcloneprojekt" --subnet-mode=auto + +# 2. Firewall-Regeln anlegen +gcloud compute firewall-rules create allow-http \ + --project="rcloneprojekt" --network=default --allow=tcp:80 --target-tags=http-server + +gcloud compute firewall-rules create allow-https \ + --project="rcloneprojekt" --network=default --allow=tcp:443 --target-tags=https-server + +gcloud compute firewall-rules create allow-ssh-iap \ + --project="rcloneprojekt" --network=default --allow=tcp:22 --source-ranges=35.235.240.0/20 + +gcloud compute firewall-rules create allow-headscale-stun \ + --project="rcloneprojekt" --network=default --allow=udp:3478 + +# 3. Die Gratis-VM erstellen (Optimiert für Free Tier) +gcloud compute instances create headscale-free-vm \ + --project="rcloneprojekt" \ + --zone="us-central1-a" \ + --machine-type="e2-micro" \ + --network-interface="network=default,network-tier=STANDARD" \ + --metadata="startup-script=sudo apt-get update && sudo apt-get install -y docker.io docker-compose" \ + --maintenance-policy="MIGRATE" \ + --provisioning-model="STANDARD" \ + --tags="http-server,https-server" \ + --create-disk="auto-delete=yes,boot=yes,device-name=headscale-free-vm,image=projects/debian-cloud/global/images/family/debian-12,mode=rw,size=30,type=projects/rcloneprojekt/zones/us-central1-a/diskTypes/pd-standard" +``` +*Wichtig: Nach Erstellung die `EXTERNAL_IP` auslesen und beim Domain-Anbieter den A-Record für `netz.wralto.org` auf diese IP setzen.* + +--- + +## Teil 2: Konfiguration auf der VM (Per SSH eingeloggt) + +Verbinden Sie sich per **"SSH"-Button** mit der VM und führen Sie folgende Befehle aus: + +```bash +# 1. Ordnerstruktur vorbereiten +mkdir -p ~/headscale/config ~/headscale/data ~/caddy +touch ~/headscale/config/config.yaml ~/headscale/data/db.sqlite ~/caddy/Caddyfile +``` + +### 2. Caddyfile befüllen +```bash +nano ~/caddy/Caddyfile +``` +Inhalt einfügen: +```text +netz.wralto.org { + reverse_proxy headscale:8080 +} +``` + +### 3. Headscale config.yaml befüllen +```bash +nano ~/headscale/config/config.yaml +``` +Inhalt einfügen (Syntax für v0.29.3+): +```yaml +server_url: https://wralto.org +listen_addr: 0.0.0.0:8080 +metrics_listen_addr: 127.0.0.1:9090 + +prefixes: + v4: 100.64.0.0/10 + v6: fd7a:115c:a1e0::/48 + +database: + type: sqlite3 + sqlite: + path: /var/lib/headscale/db.sqlite + +private_key_path: /var/lib/headscale/private.key +noise: + private_key_path: /var/lib/headscale/noise_private.key + +tls_cert_path: "" +tls_key_path: "" + +dns: + magic_dns: true + base_domain: headscale.net + nameservers: + global: + - 1.1.1.1 + - 8.8.8.8 + search_domains: [] + extra_records: [] + +logtail: + enabled: false + +derp: + server: + enabled: true + region_id: 999 + region_code: "headscale-free" + region_name: "Google Cloud Free Relais" + stun_listen_addr: "0.0.0.0:3478" + private_key_path: /var/lib/headscale/derp_server_private.key + urls: [] + paths: [] + auto_update_enabled: false +``` + +### 4. Docker Compose Datei befüllen +```bash +nano ~/docker-compose.yml +``` +Inhalt einfügen: +```yaml +version: '3.8' + +services: + headscale: + image: headscale/headscale:latest + container_name: headscale + ports: + - "3478:3478/udp" + volumes: + - ./headscale/config:/etc/headscale + - ./headscale/data:/var/lib/headscale + command: serve + restart: unless-stopped + + caddy: + image: caddy:latest + container_name: caddy + restart: unless-stopped + ports: + - "80:80" + - "443:443" + volumes: + - ./caddy/Caddyfile:/etc/caddy/Caddyfile + - caddy_data:/data + - caddy_config:/config + depends_on: + - headscale + +volumes: + caddy_data: + caddy_config: +``` + +### 5. System starten +```bash +sudo docker-compose up -d + +# Checken, ob alles läuft (Keine FTL/FATAL Fehler) +sudo docker logs headscale +``` + +--- + +## Teil 3: Administration & Geräteregistrierung + +### 1. Benutzer verwalten (Auf der VM) +```bash +# Benutzer erstellen +sudo docker exec -it headscale headscale users create privat + +# Geräte auflisten +sudo docker exec -it headscale headscale nodes list +``` + +### 2. Gerät per Express-Verfahren (Pre-Auth-Key) hinzufügen +```bash +# 1. Auf der VM einen Schlüssel generieren (24h gültig): +sudo docker exec -it headscale headscale preauthkeys create --user privat --expiration 24h + +# 2. Auf dem Linux-Endgerät ausführen (tritt sofort automatisch bei): +sudo tailscale up --login-server=https://wralto.org --auth-key=mkey:IHR_SCHLÜSSEL --reset +``` + +### 3. Manuelle Methode (Falls ohne Key gearbeitet wird) +* Auf dem Endgerät: `sudo tailscale up --login-server=https://wralto.org --reset` +* URL im Browser öffnen, den angezeigten Befehl (`headscale auth register...`) kopieren. +* Auf der VM mit vorangestelltem Docker-Befehl ausführen (User `privat` anhängen): + ```bash + sudo docker exec -it headscale headscale auth register --auth-id hskey-authreq-xxx --user privat + ``` + +--- + +## Teil 4: Wartungsbefehle +* **Container stoppen:** `sudo docker-compose down` +* **Änderungen anwenden:** `sudo docker-compose down && sudo docker-compose up -d` +* **Backup:** Den Ordner `~/headscale/data` (enthält DB und Schlüssel) sichern.