Der eigene Server dazu
Mac, iPad und Windows-PC arbeiten schon zusammen. Jetzt kommt ein gemieteter Linux-Server dazu, der nie schläft. Er vermittelt, nimmt Aufträge an, hält Dateien bereit und meldet, ob zu Hause alles läuft. In zwölf Stufen richtest Du ihn so ein, dass jeder neue Weg ins Heimnetz eng begrenzt ist und sich wieder schließen lässt.
Worum geht's?
Im Kurs „Mac, iPad und 3090-PC“ hast Du den PC über Tailscale erreicht, ihn aus der Ferne geweckt und auf seiner Grafikkarte gerechnet. Das klappt, solange Du selbst am Mac sitzt und der PC mitspielt. Schläft der PC, kommt nichts an. Willst Du vom iPad aus einen Auftrag abgeben, während Du im Zug sitzt, fehlt jemand, der ihn annimmt.
Diese Lücke füllt ein Server: eine kleine gemietete Maschine im Rechenzentrum, mit fester Adresse und Docker. Sie hat keine Grafikkarte und soll auch keine haben. Sie ist Vermittler, Briefkasten und Wächter.
Das Beispiel aus den Vorgängerkursen zieht sich weiter durch: Ein Tipp auf das iPad-Pult schickt den Render-Auftrag für die Nordwerk-Figur an den Server. Der weckt den PC, reicht den Auftrag weiter, passt auf die Temperatur auf und legt das Ergebnis in den Sync-Ordner, auch wenn Mac und iPad gerade unterwegs sind.
Selbstlern-Kurs zum Mitmachen. Dein Fortschritt wird nur in Deinem Browser gespeichert.
? Für wen ist das interessant?
↗ Was Du brauchst
- Den Aufbau aus Kurs 3: Mac, iPad und Windows-PC, verbunden über Tailscale, OpenSSH-Server auf dem PC mit Schlüssel-Anmeldung, Syncthing-Ordner „Nordwerk-Figur“. Der Kurs ist Mac, iPad und 3090-PC. Wer ihn nicht gemacht hat, kommt mit Kenntnissen aus SSH von Anfang an und Docker trotzdem zurecht.
- Einen Linux-Server (VPS) mit Ubuntu oder Debian, Root- oder sudo-Zugang per SSH-Schlüssel, Docker mit Compose und eine eigene Domain, unter der Du eine Subdomain anlegen darfst. Wie man so einen Server mietet und einrichtet, zeigt Self-Hosting & VPS. 2 GB Arbeitsspeicher reichen für diesen Kurs.
- Einen Reverse Proxy mit TLS auf dem Server (Caddy, Nginx Proxy Manager oder Traefik). Er bekommt in Stufe 3 genau einen neuen Eintrag.
- Für Stufe 7 (freiwillig): n8n auf dem Server, wie im Kurs n8n eingerichtet. Ohne n8n geht die Übung auch mit einem kleinen Skript.
- Für Stufe 6 (freiwillig): einen Raspberry Pi oder ein anderes kleines Linux-Gerät, das zu Hause dauerhaft am Netz hängt.
- Zeit: etwa 6 bis 8 Stunden, am besten auf mehrere Abende verteilt. Jede Stufe endet in einem Zustand, in dem Du aufhören kannst.
📚 Die zwölf Stufen
ℹ Stand der Dinge
Geschrieben im Oktober 2026 für einen Ubuntu-Server mit Docker, macOS 27, iPadOS 27 und Windows 11. Die Befehle für Headscale, Syncthing, n8n und RustDesk sind gegen deren Dokumentation geschrieben. Versionen ändern sich schnell; jede Stelle mit Versionsbezug trägt einen Hinweis, wo Du den aktuellen Stand nachsiehst.
Bilder mit dem Hinweis „KI-Bild“ sind Symbolbilder. Sie zeigen die Situation, nicht die echte Oberfläche. Die echten Bildschirmfotos folgen, sobald der Aufbau steht.
Ein viertes Gerät
Der Server ist immer an und immer erreichbar. Er hat keine Grafikkarte und steht offen im Internet. Aus diesen zwei Sätzen folgt fast alles, was er tun soll und was nicht.
1 Vier Geräte, vier Rollen
| Gerät | Stärke | Schwäche | Rolle |
|---|---|---|---|
| Mac | Bildschirm, Akku, Schnitt, Code | schwache GPU für große KI-Modelle | Arbeitsplatz |
| iPad | Stift, Touch, leicht | kein Blender, kein Terminal-Alltag | Tablett, Pult, Skizzenblock |
| Windows-PC | GPU, viel Arbeitsspeicher | steht zu Hause, schläft oft | Rechenwerk |
| Server | immer an, feste Adresse | keine GPU, öffentlich erreichbar | Vermittler, Briefkasten, Wächter |
Was auf den Server gehört: alles, was ständig erreichbar sein muss, aber wenig rechnet. Koordination des VPN, ein Briefkasten für Aufträge und Dateien, eine Statusseite, Benachrichtigungen. Was nicht auf den Server gehört: Sprachmodelle, Rendern, Videoexport. Ein Server mit Grafikkarte kostet im Monat schnell so viel wie die Grafikkarte selbst.

2 Was geht wohin?
Ordne jede Aufgabe dem Gerät zu, das sie übernehmen sollte. Danach siehst Du die Begründung.
3 Wege zählen, bevor ein neuer dazukommt
Jeder Dienst, über den jemand von außen an Deinen PC kommt, ist ein Weg ins Heimnetz. Viele Haushalte haben mehr davon, als ihnen klar ist: eine Fernwartungs-App von früher, Windows-Remotedesktop, das VPN des Routers, das Tailnet aus Kurs 3. Kreuze an, was bei Dir läuft.
4 Was der Kurs nie tut
- Keine Portfreigabe im Router. Der PC zu Hause bleibt von außen unsichtbar. Alles läuft über Verbindungen, die von innen nach außen aufgebaut werden.
- Geräte, die nicht ins Netz gehören, bleiben ausgesperrt. Ein 3D-Drucker, eine Heizungssteuerung, eine Kamera: nicht im Tailnet, nicht auf dem Pult, nicht in einem Webhook. Wer heizen oder drucken kann, braucht jemanden daneben.
- Keine GPU-Volllast ohne Aufsicht. Ein Render-Auftrag aus der Ferne läuft nur mit einem Wächter, der bei zu hoher Temperatur oder zu langer Laufzeit abbricht, und nicht über Nacht in einem leeren Haus.
✓ Kurz geprüft
Den Server absichern
Bevor ein einziger neuer Dienst dazukommt: Anmeldung nur mit Schlüssel, Firewall mit drei offenen Ports, automatische Sicherheitsupdates. Und die eine Falle, an der die meisten scheitern.
1 Rückweg zuerst
2 SSH nur mit Schlüssel
Wie Du einen Schlüssel erzeugst und auf den Server bringst, steht in SSH von Anfang an. Hier geht es nur noch darum, die Passwort-Anmeldung abzuschalten. Auf aktuellen Ubuntu-Versionen legst Du dafür eine eigene Datei an, statt die Hauptdatei zu bearbeiten:
PasswordAuthentication no KbdInteractiveAuthentication no PermitRootLogin prohibit-password
prohibit-password erlaubt Root nur noch mit Schlüssel. Wer einen eigenen sudo-Benutzer hat, setzt hier no. Danach mit sudo sshd -t die Syntax prüfen und mit sudo systemctl reload ssh übernehmen (der Dienst heißt unter Ubuntu ssh, unter Debian teils sshd).50-cloud-init.conf mit PasswordAuthentication yes an. Deine Datei beginnt deshalb mit 10-, damit sie vorher gelesen wird. Kontrolle: sudo sshd -T | grep -i passwordauth muss no zeigen.3 Firewall mit drei offenen Ports
sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw allow 22/tcp sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw enable sudo ufw status verbose
allow 22, dann enable, sonst sperrst Du Dich aus. In Stufe 9 kommen die RustDesk-Ports dazu, und nur die.Automatische Sicherheitsupdates: sudo apt install unattended-upgrades und sudo dpkg-reconfigure -plow unattended-upgrades. Auf vielen Ubuntu-Servern ist das schon aktiv; systemctl status unattended-upgrades zeigt es.
4 Die Falle: Docker umgeht ufw
Startest Du einen Container mit -p 8080:8080 oder ports: - "8080:8080", trägt Docker eigene Regeln in die Firewall des Systems ein, und zwar vor denen von ufw. Der Port ist dann aus dem Internet erreichbar, obwohl ufw status ihn nicht nennt. Probier es aus:
Die Regel daraus: Jeder Container bindet seine Ports an 127.0.0.1 (dann erreicht ihn nur der Reverse Proxy auf demselben Server) oder an die Tailnet-Adresse (Stufe 4). Dienste, die nur andere Container brauchen, bekommen gar keine ports:-Zeile.
Vertiefung: ufw und Docker doch zusammenbringen
Docker wertet vor seinen eigenen Regeln die Kette DOCKER-USER aus. Dort lassen sich Regeln eintragen, die auch für veröffentlichte Container-Ports gelten. Das Projekt ufw-docker automatisiert das. Beides ist mehr Pflegeaufwand als die einfache Regel oben und gehört in die Docker-Dokumentation („Packet filtering and firewalls“), nicht in diesen Kurs.
5 Übung: von außen scannen
nmap installiert (brew install nmap, Homebrew aus Kurs 1).nmap -Pn -p 1-65535 dein-server.example. Dauert einige Minuten. Statt dein-server.example die Adresse Deines Servers.open stehen nur 22, 80 und 443. Alle anderen sind filtered oder fehlen in der Liste.sudo ss -tlnp | grep :<port> zeigt, welcher Prozess lauscht, meist docker-proxy. In der Compose-Datei dieses Dienstes die Portzeile auf 127.0.0.1: umstellen, docker compose up -d, neu scannen.
✓ Kurz geprüft
Headscale statt Konto
Tailscale besteht aus zwei Teilen: den Apps auf Deinen Geräten und einem Koordinationsserver beim Anbieter. Headscale ersetzt den zweiten Teil durch einen eigenen. Die Apps bleiben dieselben.
1 Was sich ändert und was nicht
- Die Tailscale-Apps auf Mac, iPad und PC
- Die Verbindungen selbst laufen direkt zwischen den Geräten, verschlüsselt mit WireGuard
- Die Regeln, wer welchen Port erreicht (ACL)
- Wer die Geräte kennt und Schlüssel verteilt: Dein Server statt des Anbieters
- Anmeldung per Befehl am Server statt per Google- oder Apple-Konto
- Updates und Ausfälle betreffen Dich: Ist Headscale weg, kommen keine neuen Geräte dazu, bestehende Verbindungen halten eine Weile
2 Headscale starten
Headscale braucht eine eigene Subdomain mit TLS, etwa vpn.dein-server.example. Lege den DNS-Eintrag an, bevor Du startest.
services:
headscale:
image: headscale/headscale:<version> # feste Version, z. B. die neueste stabile
container_name: headscale
command: serve
restart: unless-stopped
ports:
- "127.0.0.1:8085:8080" # nur für den Reverse Proxy
volumes:
- ./config:/etc/headscale
- ./data:/var/lib/headscale
<version> die aktuelle stabile Version von der Release-Seite (github.com/juanfont/headscale/releases) eintragen, nicht latest. Der Port hängt an 127.0.0.1 (Stufe 2). Der Reverse Proxy leitet https://vpn.dein-server.example auf 127.0.0.1:8085 weiter.Die Konfigurationsdatei holst Du Dir als Vorlage aus dem Repository (config-example.yaml passend zu Deiner Version) und speicherst sie als config/config.yaml. Ändern musst Du nur wenige Zeilen:
server_url: https://vpn.dein-server.example listen_addr: 0.0.0.0:8080 dns: magic_dns: true base_domain: heim.intern # darf nicht die Domain von server_url sein policy: mode: file path: /etc/headscale/acl.hujson
listen_addr ist die Adresse im Container; nach außen schützt die 127.0.0.1-Bindung aus der Compose-Datei. Versionsstand: Schlüsselnamen geprüft gegen die Beispielkonfiguration der 0.2x-Reihe, Oktober 2026. Ändert ein Update die Namen, gilt die Vorlage Deiner Version.3 Die Regeln mitnehmen
Die ACL aus Kurs 3 ziehst Du in eine Datei auf dem Server um. Headscale versteht dasselbe Format wie Tailscale (HuJSON: JSON mit Kommentaren). So sieht die Fassung aus, die nur erlaubt, was die Reihe braucht:
{
"tagOwners": {
"tag:pc": ["ich@"],
"tag:server": ["ich@"],
"tag:weck": ["ich@"]
},
"acls": [
// Mac und iPad (Benutzer ich) erreichen am PC: SSH, LM Studio, Moonlight
{ "action": "accept", "src": ["ich@"],
"dst": ["tag:pc:22,1234,47984,47989,47998-48010"] },
// Mac und iPad erreichen am Server: SSH und die Verwaltungsoberflächen (Stufe 4)
{ "action": "accept", "src": ["ich@"], "dst": ["tag:server:22,5678,8090"] },
// Der Server darf den PC per SSH erreichen (Aufträge, Stufe 7) und den Weck-Knoten (Stufe 6)
{ "action": "accept", "src": ["tag:server"], "dst": ["tag:pc:22", "tag:weck:22"] }
]
}
ich@ ist die Schreibweise für einen Benutzer in neueren Headscale-Versionen; ältere schreiben den Namen ohne @. Prüfe die Syntax gegen die ACL-Seite der Headscale-Doku Deiner Version. Die Moonlight-Ports gelten nur, wenn Du den PC-Bildschirm aus Kurs 3 auch unterwegs holen willst.4 Die Geräte umziehen
Jedes Gerät meldet sich einmal bei Tailscale ab und bei Headscale an. Fang mit dem Gerät an, an dem Du nicht gerade sitzt, damit Du die Verbindung zum Server behältst.
| Gerät | So meldest Du es an |
|---|---|
| Windows-PC | Eingabeaufforderung als Administrator: tailscale logout, dann tailscale up --login-server https://vpn.dein-server.example --advertise-tags=tag:pc. Im Browser öffnet sich eine Seite mit einem Befehl. |
| Mac | Terminal: tailscale logout, dann tailscale up --login-server https://vpn.dein-server.example. Fehlt der Befehl, ist die App aus dem App Store installiert: In deren Einstellungen gibt es einen Eintrag für einen eigenen Koordinationsserver (Ort je nach Version verschieden). |
| iPad | In der Tailscale-App abmelden. Den eigenen Server trägst Du je nach App-Version entweder in der App beim Anmelden ein oder in den iPad-Einstellungen bei Tailscale. Danach die App neu starten und anmelden. |
| Server | Tailscale auf dem Host installieren (Anleitung auf tailscale.com/download/linux), dann sudo tailscale up --login-server https://vpn.dein-server.example --advertise-tags=tag:server. |
Die Seite, die sich beim Anmelden öffnet, zeigt einen Befehl der Form headscale nodes register … --key … bzw. headscale auth register …. Den führst Du auf dem Server mit docker exec headscale davor aus. Die genaue Form hängt von der Version ab; nimm die von der Seite.
https://vpn.dein-server.example/apple eine Seite mit der Anleitung für Apple-Geräte aus. Die gilt für Deine Server-Version und geht im Zweifel vor.tailscale logout bzw. in der App abmelden und wieder normal bei Tailscale anmelden. Die ACL aus Kurs 3 liegt bei Tailscale noch, solange Du sie dort nicht löschst. Headscale stoppen: docker compose down in /opt/headscale, Proxy-Eintrag und DNS-Eintrag entfernen.5 Übung: alle im eigenen Tailnet
pass, die ACL-Datei liegt im Konfigurationsordner.tailscale status. Danach versuchen, vom Mac aus einen Port am PC zu erreichen, der nicht in der ACL steht, z. B. nc -vz pc 3389.100.64.0.0/10. ssh pc klappt, der Test auf 3389 läuft in eine Zeitüberschreitung.docker exec headscale headscale nodes list prüfen. Alles ist erreichbar: Die ACL wird nicht geladen. Ohne Richtlinie erlaubt Headscale alles. policy.path in config.yaml prüfen und docker logs headscale lesen (oft ein Komma in der Datei). Namen lösen nicht auf: magic_dns prüfen.
tailscale status mit allen Geräten im eigenen Tailnet.✓ Kurz geprüft
Der Server im Tailnet
Der Server ist jetzt selbst ein Knoten im Tailnet. Damit kann alles, was nur Du brauchst, aus dem öffentlichen Netz verschwinden: n8n, Portainer, die Oberfläche des Reverse Proxy.
1 Zwei Arten von Diensten
- Deine Website
- Headscale selbst (die Geräte müssen es von überall finden)
- Webhooks, die fremde Dienste aufrufen
- Verwaltungsoberflächen: n8n-Editor, Portainer, Proxy-Admin
- Webhooks für Dein eigenes Pult (Stufe 10)
- Statusseite (Stufe 11)
Ein Dienst „nur im Tailnet“ bindet seinen Port an die Tailnet-Adresse des Servers statt an 0.0.0.0. Die Adresse zeigt tailscale ip -4 auf dem Server, z. B. 100.64.0.5.
ports:
- "100.64.0.5:5678:5678" # vorher: "5678:5678" oder hinter dem öffentlichen Proxy
http://server:5678 von Mac und iPad, aber nicht aus dem Internet. Die Verbindung ist durch WireGuard verschlüsselt, TLS ist hier keine Pflicht.restart: unless-stopped versucht es erneut, sobald Tailscale da ist. Wer sicher gehen will, lässt den Docker-Dienst per systemd erst nach tailscaled starten.Vertiefung: tailscale serve statt Portbindung
Tailscale bringt mit tailscale serve eine eigene Weiterleitung mit, die einen lokalen Port ins Tailnet stellt, sogar mit Zertifikat. Mit Headscale funktionieren nicht alle Funktionen davon; die Portbindung oben ist der einfachere, überall gleiche Weg.
2 Übung: eine Oberfläche umziehen
docker compose up -d. Dann am iPad im Tailnet http://server:<port> öffnen, und zum Vergleich mit Tailscale aus.tag:server:…). Container startet nicht: siehe Startreihenfolge oben. n8n meldet falsche Webhook-Adressen: WEBHOOK_URL in der .env anpassen.127.0.0.1:… und Proxy-Eintrag wieder anlegen.✓ Kurz geprüft
Der Rückkanal
Manchmal soll ein Dienst des PCs auf dem Server auftauchen, als liefe er dort, aber nur für einen einzigen Empfänger. Dafür baut der PC selbst eine SSH-Verbindung zum Server auf und gibt genau einen Port frei.
1 Zwei Wege zum PC
| Direkt im Tailnet | Rückkanal per SSH | |
|---|---|---|
| Wer baut auf? | beide über Headscale | der PC, von innen nach außen |
| Was wird sichtbar? | alles, was die ACL erlaubt | genau ein Port, an genau einer Adresse auf dem Server |
| Wer kann zugreifen? | Geräte laut ACL | nur, wer auf dem Server an diese Adresse kommt (z. B. ein Container) |
| Braucht Tailscale auf dem PC? | ja | nein |
| Gut für | SSH, Moonlight, alles Interaktive | einen Dienst, den ein Server-Programm nutzen soll |
Hauptweg in diesem Kurs ist das Tailnet. Den Rückkanal lernst Du trotzdem, weil er ohne VPN auskommt und sich auf den Port genau begrenzen lässt. Beispiel: Ein Container auf dem Server soll das Sprachmodell des PCs nutzen (LM Studio, Port 1234), und sonst nichts vom PC sehen.

2 Ein eigenes Konto ohne Shell
Auf dem Server legst Du ein Konto an, das nichts darf außer diesem einen Rückkanal. Der PC bekommt ein eigenes Schlüsselpaar dafür, nicht Deinen normalen Schlüssel.
restrict,port-forwarding,permitlisten="127.0.0.1:11234" ssh-ed25519 AAAA…Inhalt von rueckkanal.pub… rueckkanal@pc
restrict verbietet alles: Shell, Terminal, Weiterleitungen, Agent. port-forwarding erlaubt Weiterleitungen wieder, und permitlisten beschränkt sie auf genau einen Port auf dem Server, den der PC öffnen darf. Danach sudo chown rueckkanal: /home/rueckkanal/.ssh/authorized_keys und chmod 600. Versionsstand: permitlisten gibt es seit OpenSSH 7.8; jeder aktuelle Server hat es.permitlisten gilt für Weiterleitungen, die auf dem Server einen Port öffnen (ssh -R), also für den Rückkanal. permitopen gilt für die Gegenrichtung (ssh -L). Wer die beiden verwechselt, bekommt eine Verbindung, die zwar steht, aber nichts weiterleitet.3 Der PC öffnet den Kanal
ssh -N -i $HOME\.ssh\rueckkanal `
-o ExitOnForwardFailure=yes -o ServerAliveInterval=15 -o ServerAliveCountMax=3 `
-R 127.0.0.1:11234:127.0.0.1:1234 rueckkanal@dein-server.example
-N: keine Befehle, nur der Kanal. -R 127.0.0.1:11234:127.0.0.1:1234: Port 11234 auf dem Server führt zu Port 1234 auf dem PC. ExitOnForwardFailure beendet die Verbindung, wenn die Weiterleitung verweigert wird, statt still weiterzulaufen. Die Keepalive-Optionen merken nach etwa 45 Sekunden, dass die Gegenseite weg ist.Damit der Kanal nach einem Neustart oder Abbruch wiederkommt, legst Du in der Windows-Aufgabenplanung eine Aufgabe an: Trigger „Bei Anmeldung“, Aktion ein kleines PowerShell-Skript, das den Befehl oben in einer Schleife mit 30 Sekunden Pause neu startet.
Vertiefung: Der Rückkanal für einen Container
Ein Port auf 127.0.0.1 des Servers ist für Container nicht sichtbar, die haben ihr eigenes 127.0.0.1. Soll ein Container den Dienst nutzen, setzt man einen winzigen sshd-Container ins selbe Docker-Netz und lässt den PC dorthin verbinden, per ProxyJump über den Host. In dessen sshd_config stehen dann AllowTcpForwarding remote, GatewayPorts clientspecified und PermitTTY no, und in authorized_keys ein permitlisten="0.0.0.0:11234". Der Container erreicht den PC-Dienst dann über den Namen des Tunnel-Containers. Das ist mehr Aufwand als das Tailnet und lohnt sich, wenn auf dem PC kein VPN laufen soll.
4 Übung: genau ein Dienst, genau ein Empfänger
curl -s http://127.0.0.1:11234/v1/models. Dann am Mac (außerhalb des Tailnet): nc -vz dein-server.example 11234. Zum Schluss am PC versuchen, einen zweiten Port weiterzuleiten, z. B. -R 127.0.0.1:12222:127.0.0.1:22.ExitOnForwardFailure bricht die Verbindung mit einer Fehlermeldung ab.Permission denied: Rechte von .ssh (700) und authorized_keys (600), Besitzer rueckkanal. remote port forwarding failed beim ersten Port: Tippfehler in permitlisten, oder der Port ist noch von einer alten Sitzung belegt (45 Sekunden warten). curl hängt: LM Studio hört nur auf einer anderen Adresse, in den Server-Einstellungen prüfen.authorized_keys entfernen, das Konto mit sudo deluser --remove-home rueckkanal löschen.✓ Kurz geprüft
Den PC wecken lassen
Ein schlafender PC hört nur auf ein Signal im eigenen Netzwerk, das „magische Paket“. Der Server steht aber im Rechenzentrum. Er braucht also einen Helfer zu Hause, der das Paket für ihn abschickt.
1 Warum der Server nicht direkt wecken kann
Wake-on-LAN schickt ein Paket an die Broadcast-Adresse des Heimnetzes. Router leiten so etwas nicht ins Internet weiter, und auch das Tailnet transportiert keine Broadcasts. Wer wecken will, muss im selben Netz stehen wie der PC. Dafür gibt es zwei Wege:
- Ein Raspberry Pi oder anderes kleines Gerät, dauerhaft an, im Tailnet
- Der Server meldet sich per SSH an und ruft
wakeonlanauf - Funktioniert mit jedem Router
- Viele FRITZ!Boxen können Geräte über ihre Schnittstelle TR-064 wecken
- Der Server müsste dafür ins VPN der FRITZ!Box oder die Schnittstelle aus dem Internet erreichen
- Kein Zusatzgerät, aber eine weitere Tür in den Router
Voraussetzung in beiden Fällen ist, was Kurs 3 in der Stufe „PC aufwecken“ eingerichtet hat: Wake-on-LAN im BIOS und im Netzwerkadapter eingeschaltet, Windows-Schnellstart aus.
2 Der Weck-Knoten
Statt AA:BB:CC:DD:EE:FF die MAC-Adresse der Netzwerkkarte des PCs (am PC: getmac /v, die Zeile mit dem Kabel-Adapter). Damit der Server nur wecken und sonst nichts tun darf, bekommt sein Schlüssel auf dem Weck-Knoten einen festen Befehl:
restrict,command="/usr/bin/wakeonlan AA:BB:CC:DD:EE:FF" ssh-ed25519 AAAA…Schlüssel des Servers… wecken@server
Auf dem Server weckst Du dann mit ssh -i ~/.ssh/wecken weck-knoten. Ob der PC wach ist, zeigt tailscale ping pc oder ssh pc echo wach.

ssh pc echo wach notieren.Vertiefung: Wecken über die FRITZ!Box (TR-064)
Die FRITZ!Box bietet über ihre Schnittstelle TR-064 im Dienst Hosts eine Aktion zum Wecken eines Geräts per MAC-Adresse an (bei AVM als X_AVM-DE_WakeOnLANByMACAddress dokumentiert). Dafür braucht der Server einen eigenen FRITZ!Box-Benutzer mit genau dieser Berechtigung und einen Weg zur Box, am saubersten als Teilnehmer im WireGuard-VPN der Box. Die Schnittstelle aus dem Internet freizugeben ist eine Portfreigabe und damit gegen die Regel dieses Kurses. Prüfe die Aktion gegen die TR-064-Dokumentation von AVM für Dein Modell und Deine FRITZ!OS-Version.
3 Übung: über den Server wecken
ssh -i ~/.ssh/wecken weck-knoten, dann alle zehn Sekunden ssh pc echo wach.wach. Notier Dir, wie lange es gedauert hat; diese Zahl braucht der Auftrag in Stufe 7 als Wartezeit.tag:server → tag:weck:22 fehlt.authorized_keys des Weck-Knotens löschen, den Knoten mit docker exec headscale headscale nodes delete … aus dem Tailnet nehmen.✓ Kurz geprüft
Aufträge an die GPU
Jetzt kommt alles zusammen: Ein Auftrag kommt beim Server an, der weckt den PC, startet den Render und wartet auf das Ergebnis. Auf dem PC passt ein Wächter auf, dass die Grafikkarte nicht unbeaufsichtigt überhitzt.
1 Der Ablauf
- Webhook mit Token kommt bei n8n an
- n8n fragt: Ist der PC wach? Wenn nicht, Weck-Knoten aufrufen
- Warten, bis der PC antwortet (höchstens die gemessene Aufwachzeit plus Reserve)
- n8n startet per SSH den Wächter auf dem PC, der startet Blender
- Wächter prüft alle 10 Sekunden Temperatur, Laufzeit und Stopp-Datei
- Blender schreibt das Bild in den Sync-Ordner
- n8n meldet „fertig“ ans iPad
2 Der Wächter auf dem PC
Der Wächter ist ein PowerShell-Skript im Übungsordner C:\Nordwerk. Er startet Blender ohne Oberfläche, beobachtet die Grafikkarte und bricht ab, wenn eine von drei Grenzen erreicht ist: Temperatur, Laufzeit oder eine Stopp-Datei, die das Pult anlegen kann (Stufe 10).
param([int]$MaxGrad = 83, [int]$MaxMinuten = 20)
$blender = 'C:\Program Files\Blender Foundation\Blender 5.2\blender.exe'
$stopp = 'C:\Nordwerk\STOPP'
Remove-Item $stopp -ErrorAction SilentlyContinue
$liste = '-b', 'C:\Nordwerk\figur.blend', '-o', 'C:\Nordwerk\Sync\render\figur_####', '-F', 'PNG', '-f', '1'
$p = Start-Process -FilePath $blender -ArgumentList $liste -PassThru -WindowStyle Hidden
$start = Get-Date
while (-not $p.HasExited) {
$grad = [int](nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader,nounits)
$min = ((Get-Date) - $start).TotalMinutes
if ($grad -ge $MaxGrad) { Stop-Process -Id $p.Id -Force; "ABBRUCH Temperatur $grad Grad"; exit 2 }
if ($min -gt $MaxMinuten) { Stop-Process -Id $p.Id -Force; "ABBRUCH Laufzeit"; exit 3 }
if (Test-Path $stopp) { Stop-Process -Id $p.Id -Force; "ABBRUCH Stopp-Datei"; exit 4 }
Start-Sleep -Seconds 10
}
"FERTIG Exitcode $($p.ExitCode)"
-f 1 rendert genau ein Bild (Frame 1); für das Turntable-Video aus Kurs 2 wäre es -a. C:\Nordwerk\Sync ist der Syncthing-Ordner. Die Grenze von 83 Grad ist ein Beispiel; nimm die Warnschwelle, die für Deine Karte gilt. nvidia-smi liegt mit dem NVIDIA-Treiber im Pfad.3 Der Auftrag in n8n
Der Workflow besteht aus wenigen Knoten. Bau ihn im n8n-Editor (jetzt im Tailnet, Stufe 4) nach:
- Webhook, Methode POST, Pfad
figur-rendern, Authentifizierung Header Auth mit einem Zugang, dessen NameX-Pult-Tokenist und dessen Wert eine lange Zufallszeichenkette (openssl rand -hex 32). Antwortmodus: sofort antworten („Auftrag angenommen“). - SSH (Befehl ausführen) auf dem Weck-Knoten, Zugang mit dem Weck-Schlüssel aus Stufe 6. Der Befehl ist egal, ausgeführt wird ohnehin
wakeonlan. - Wait so lange wie Deine gemessene Aufwachzeit plus eine Minute.
- SSH auf dem PC (Tailnet-Adresse, Benutzer und Schlüssel aus Kurs 3), Befehl:
powershell -NoProfile -ExecutionPolicy Bypass -File C:\Nordwerk\waechter.ps1. - IF: Enthält die Ausgabe
FERTIG? Ja → Nachricht „fertig“, nein → Nachricht mit dem Abbruchgrund (beides in Stufe 11).
100.64.…), nicht den Namen. Ob ein Container auf dem Server die Tailnet-Namen auflösen kann, hängt davon ab, wie Docker das DNS des Hosts übernimmt. Mit der Adresse gibt es die Frage nicht.curl -X POST -H "X-Pult-Token: $PULT_TOKEN" http://server:5678/webhook/figur-rendern
export PULT_TOKEN=…, damit der Token nicht im Verlauf der Shell landet. http://server:5678 geht nur im Tailnet, und genau so soll es sein. Versionsstand: Knotennamen nach n8n 2.4x, Oktober 2026.
4 Übung: Render per Webhook
figur.blend aus Kurs 2 (oder aus dessen demo/) liegt in C:\Nordwerk. Du bist zu Hause oder siehst den PC über Moonlight. Der PC schläft.curl-Befehl oben absenden. In n8n unter „Executions“ zusehen. Danach einmal mit -MaxMinuten 0 im SSH-Befehl wiederholen, um den Abbruch zu sehen.figur_0001.png in Sync\render und kurz darauf auch am Mac. Der zweite Lauf endet mit ABBRUCH Laufzeit.401/403 beim curl: Token oder Header-Name falsch. SSH-Knoten läuft in eine Zeitüberschreitung: PC noch nicht wach, Wartezeit erhöhen. nvidia-smi nicht gefunden: vollen Pfad eintragen. Der SSH-Knoten wird beim Abbruch rot: Der Wächter endet dann mit Exitcode 2 bis 4; in den Knoteneinstellungen „On Error: Continue“ wählen, damit der IF-Knoten den Grund auswerten kann. Bild fehlt am Mac: Syncthing (Stufe 8 und Kurs 3).✓ Kurz geprüft
Der Datei-Briefkasten
Syncthing gleicht Dateien direkt zwischen Geräten ab, aber nur, wenn zwei davon gleichzeitig online sind. Ein Server, der immer da ist, schließt die Lücke. Und er bekommt die Dateien nur verschlüsselt zu sehen.
1 Das Problem aus Kurs 3
Du exportierst unterwegs die Nordwerk-Figur aus Nomad Sculpt und legst sie in den Sync-Ordner auf dem iPad bzw. dem Mac. Der PC zu Hause schläft. Klappst Du den Mac zu, bevor der PC aufwacht, liegt die Datei nirgends außer auf dem Mac. Mit dem Server als drittem Teilnehmer geht sie sofort dorthin, und der PC holt sie ab, sobald er wach ist.
| Wer | Ordnertyp in Syncthing | Sieht die Inhalte? |
|---|---|---|
| Mac, PC | Senden & Empfangen | ja |
| Server | Verschlüsselt empfangen (Receive Encrypted) | nein, nur verschlüsselte Blöcke ohne lesbare Dateinamen |
Syncthing nennt das „nicht vertrauenswürdige Geräte“. Das Passwort für die Verschlüsselung kennen nur Mac und PC. Wird der Server übernommen, findet der Angreifer dort nur Datensalat.
2 Syncthing auf dem Server
services:
syncthing:
image: syncthing/syncthing:<version> # feste Version von der Release-Seite
container_name: syncthing
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
ports:
- "100.64.0.5:8384:8384" # Oberfläche nur im Tailnet
- "22000:22000/tcp" # Abgleich
- "22000:22000/udp"
volumes:
- ./daten:/var/syncthing
sudo ufw allow 22000 (TCP und UDP). Alternativ bindest Du auch 22000 an die Tailnet-Adresse, dann läuft der Abgleich nur über das Tailnet. Das ist enger, aber dann müssen alle Geräte im Tailnet sein.In der Oberfläche unter http://server:8384 zuerst unter „Aktionen → Einstellungen → GUI“ einen Benutzer und ein Passwort setzen.
3 Den Ordner verschlüsselt teilen
- Auf dem Mac in Syncthing den Server als Gerät hinzufügen (Geräte-ID aus der Server-Oberfläche, „Aktionen → ID anzeigen“).
- Beim Ordner „Nordwerk-Figur“ auf „Bearbeiten → Teilen“ gehen, den Server anhaken und im Feld daneben ein Verschlüsselungspasswort eintragen. Dieses Passwort gibst Du auf dem PC beim selben Ordner für den Server ebenfalls ein, genau gleich.
- Auf dem Server erscheint die Anfrage, den Ordner anzunehmen. Als Ordnertyp „Verschlüsselt empfangen“ wählen.

4 Und das iPad?
Syncthing gibt es nicht von den Entwicklern für iPadOS. Zwei Wege, die Datei vom iPad in den Ordner zu bekommen:
- Export aus Nomad per AirDrop auf den Mac, dort in den Sync-Ordner ziehen
- Kostet nichts, klappt immer, wenn der Mac in der Nähe ist
- Eine kostenpflichtige iPad-App mit Syncthing im Inneren, Ordner über die Dateien-App erreichbar
- Das iPad wird ein eigenes Gerät im Abgleich, unabhängig vom Mac
5 Übung: abgeben, während der PC schläft
figur-v2.obj) am Mac in den Ordner legen. Warten, bis Syncthing am Mac „Aktuell“ für den Server zeigt. Mac zuklappen. Dann den PC wecken (Stufe 6)./opt/syncthing/daten/ nur Ordner mit kryptischen Namen, keine .obj-Datei.docker compose down, ufw-Regel für 22000 löschen.✓ Kurz geprüft
Eigener Fernzugriff
Für Fernhilfe und den schnellen Blick auf den PC gibt es RustDesk. Den Vermittlungsserver, über den sich die Geräte finden, kannst Du selbst betreiben. Und dafür einen fremden Weg abschalten.
1 Was der Vermittler tut
RustDesk besteht aus zwei Server-Diensten: hbbs vermittelt (welche ID ist gerade wo erreichbar) und hbbr leitet weiter, wenn zwei Geräte nicht direkt zueinander finden. Die Sitzung selbst ist Ende-zu-Ende verschlüsselt; der Vermittler sieht nicht, was auf dem Bildschirm passiert.
| Wofür | Weg |
|---|---|
| Am PC arbeiten wie davor sitzend (Blender, Stift) | Moonlight im Tailnet (Kurs 3). Läuft direkt, nicht über den Server. |
| Schnell etwas nachsehen, jemandem helfen, Notfall | RustDesk über den eigenen Vermittler |
| Befehle, Skripte, Aufträge | SSH im Tailnet |
2 hbbs und hbbr starten
services:
hbbs:
image: rustdesk/rustdesk-server:<version>
command: hbbs -r 203.0.113.10:21117 -k _
restart: unless-stopped
ports:
- "21115:21115"
- "21116:21116"
- "21116:21116/udp"
volumes:
- ./data:/root
depends_on: [hbbr]
hbbr:
image: rustdesk/rustdesk-server:<version>
command: hbbr -k _
restart: unless-stopped
ports:
- "21117:21117"
volumes:
- ./data:/root
-k _ lädt beim ersten Start ein Schlüsselpaar bzw. erzeugt es und lässt nur Geräte mit dem passenden öffentlichen Schlüssel zu. Beide Dienste brauchen es. Bei -r trägst Du die öffentliche IP Deines Servers ein (hier die Beispieladresse 203.0.113.10), nicht den Namen: Kann hbbs einen Namen beim Start nicht auflösen, verwirft es ihn ohne Fehlermeldung. Die Ports 21118/21119 (Web-Client) bleiben bewusst ungemappt.data/ enthält den privaten Schlüssel. Nie in ein Git-Repository, aber sichern (Stufe 11). Geht er verloren, muss jedes Gerät neu eingerichtet werden.3 Die Geräte umstellen
In RustDesk auf PC, Mac und iPad unter Einstellungen → Netzwerk (am PC mit „Netzwerkeinstellungen entsperren“) eintragen: ID-Server und Relay-Server rd.dein-server.example (ein DNS-Eintrag auf die Server-IP), API-Server leer, Key der öffentliche Schlüssel aus id_ed25519.pub.
Am PC zusätzlich in den Sicherheitseinstellungen: Dateiübertragung und TCP-Tunnel aus, wenn Du sie nicht brauchst, und ein festes, langes Passwort für den unbeaufsichtigten Zugriff, oder besser gar keinen unbeaufsichtigten Zugriff.

4 Ein Weg weniger
Mit dem eigenen Vermittler brauchst Du eine Fernwartungs-App eines Anbieters nicht mehr. Deinstalliere sie, statt sie nur zu beenden: Viele starten als Dienst bei jedem Hochfahren. Prüfe danach im Weg-Zähler aus Stufe 1, wie viele Wege übrig sind.
docker compose logs --tail 20 hbbs. Dann auf einem Gerät den Key absichtlich falsch eintragen und erneut verbinden.relay-servers leer ist. Falscher Key wird angenommen: -k _ fehlt bei einem der beiden Dienste.docker compose down und die ufw-Regeln für 21115–21117 löschen.✓ Kurz geprüft
Ein Pult für überall
Das Bedienpult aus Kurs 2 und 3 schickte Tastenkürzel an Mac oder PC. Jetzt bekommt es eine Seite, deren Tasten Webhooks auf dem Server aufrufen. Die funktionieren auch im Zug, solange das iPad im Tailnet ist.
1 Vier Tasten
| Taste | Ruft auf | Was passiert |
|---|---|---|
| PC wecken | POST /webhook/pc-wecken | n8n ruft den Weck-Knoten auf (Stufe 6) |
| Figur rendern | POST /webhook/figur-rendern | der Ablauf aus Stufe 7 |
| Render abbrechen | POST /webhook/render-stopp | n8n legt per SSH C:\Nordwerk\STOPP an, der Wächter bricht ab |
| GPU-Status | POST /webhook/gpu-status | n8n fragt per SSH nvidia-smi ab und antwortet mit Temperatur und Last |
Jeder Webhook bekommt einen eigenen Token. Wer den Token für „GPU-Status“ kennt, kann damit keinen Render starten.
powershell -NoProfile -Command "New-Item -ItemType File -Force C:\Nordwerk\STOPP | Out-Null; 'STOPP gesetzt'"
nvidia-smi --query-gpu=temperature.gpu,utilization.gpu,memory.used --format=csv,noheader
45, 3 %, 1024 MiB. Mit einem Knoten „Respond to Webhook“ gibst Du sie als Antwort zurück, dann zeigt das Pult sie an. Der Webhook braucht dafür den Antwortmodus „Using ‚Respond to Webhook‘ Node“.2 Die Tasten auf dem iPad
Das Pult-Programm aus Kurs 2 muss Webhooks aufrufen können. Wenn Deines das nicht kann, nimm die App Kurzbefehle, die auf jedem iPad ist:
- Neuer Kurzbefehl, Aktion „Inhalte von URL abrufen“.
- URL
http://server:5678/webhook/pc-wecken, Methode POST, unter Header einen EintragX-Pult-Tokenmit dem Token. - Danach Aktion „Ergebnis anzeigen“, damit Du die Antwort siehst.
- Kurzbefehl benennen, Symbol wählen, „Zum Home-Bildschirm“. Das wiederholst Du für die anderen drei Tasten.

3 Was nie aufs Pult kommt
- Nichts, was heizt, druckt oder bewegt. Kein Webhook startet einen 3D-Drucker, eine Heizung, eine Maschine. Ein Fehlklick in der Hosentasche darf nichts Gefährliches auslösen.
- Kein Webhook im öffentlichen Netz. Die Pult-Webhooks gehen nur über die Tailnet-Adresse. Ein Token schützt, aber ein Token, den niemand aus dem Internet erreicht, schützt besser.
- Kein „alles erlaubt“-Knoten. Kein Webhook, der einen beliebigen Befehl aus der Anfrage per SSH ausführt. Jede Taste hat einen festen Befehl.
4 Übung: vier Tasten von unterwegs
ABBRUCH Stopp-Datei.401/403: Header-Name oder Token im Kurzbefehl. „Render abbrechen“ wirkt nicht: Wächter prüft die Datei erst nach bis zu zehn Sekunden.✓ Kurz geprüft
Wächter und Nachrichten
Wer aus der Ferne rendert, muss wissen, was zu Hause passiert. Eine Statusseite zeigt es auf einen Blick, und Nachrichten aufs iPad melden das Wichtige von selbst.
1 Die Statusseite
Die einfachste Statusseite ist ein weiterer n8n-Workflow: Ein Webhook mit Methode GET, der per SSH Temperatur und Last abfragt, den letzten Auftrag aus einer Data table liest und als kleine HTML-Seite zurückgibt. Er läuft auf der Tailnet-Adresse wie die Pult-Webhooks.
| Anzeige | Quelle |
|---|---|
| PC an oder aus | SSH-Knoten mit kurzer Zeitüberschreitung, echo wach |
| GPU-Temperatur und -Last | nvidia-smi wie in Stufe 10 |
| Letzter Auftrag und Ergebnis | Data table auftraege, die der Render-Workflow am Ende beschreibt |
| Zeitpunkt der Abfrage | {{ $now }} |
Auf dem iPad öffnest Du die Seite in Safari und wählst „Teilen → Zum Home-Bildschirm“. Dann liegt sie wie eine App neben dem Pult.
Vertiefung: fertige Überwachung statt Eigenbau
Werkzeuge wie Uptime Kuma prüfen regelmäßig, ob Dienste antworten, und zeigen Verläufe. Für die Frage „Läuft der Server, antwortet Headscale, ist der Rückkanal da?“ lohnt sich das. Die GPU-Werte des PCs kennt so ein Werkzeug nicht ohne Zusatzarbeit; dafür bleibt der n8n-Weg.
2 Nachrichten aufs iPad
Drei Ereignisse sollen sich von selbst melden: Render fertig, Render abgebrochen (mit Grund) und PC nicht wach geworden. Dafür brauchst Du einen Dienst, der Push-Nachrichten schickt. Zwei übliche Wege:
- Kleine App fürs iPad, Nachrichten per einfacher HTTP-Anfrage
- Öffentlicher Dienst mit geheimem Thema oder selbst auf dem Server betrieben
- n8n-Knoten: HTTP Request, POST an das Thema
- Telegram-Bot oder Matrix-Raum, n8n hat Knoten dafür
- Nachrichten landen dort, wo Du ohnehin liest
- Ein weiterer Anbieter, der die Inhalte sieht
curl -d "Render fertig: figur_0001.png" https://ntfy.sh/dein-geheimes-thema-7f3a9c
docs.ntfy.sh.
3 Den Server selbst sichern
Auf dem Server liegen jetzt Dinge, deren Verlust weh tut: die Headscale-Datenbank (alle Geräte), der RustDesk-Schlüssel, die n8n-Workflows und Zugänge. Die Syncthing-Daten nicht, die sind auf Mac und PC vollständig.
#!/bin/sh
set -e
ziel=/root/sicherung/$(date +%F)
mkdir -p "$ziel"
tar czf "$ziel/headscale.tgz" -C /opt/headscale config data
tar czf "$ziel/rustdesk.tgz" -C /opt/rustdesk data
# n8n: Export nach der Anleitung aus dem n8n-Kurs (Workflows, Zugänge, Volume, .env)
find /root/sicherung -maxdepth 1 -type d -mtime +14 -exec rm -rf {} +
scp von Hand oder mit einem Zeitplan auf dem PC. Für Headscale vorher kurz anhalten oder die Doku zur Sicherung der Datenbank lesen, damit die SQLite-Datei nicht mitten im Schreiben kopiert wird.4 Übung: Render mit Nachricht
-MaxGrad 30 setzen und erneut rendern.✓ Kurz geprüft
Betrieb und Abschluss
Was typischerweise kaputtgeht, was das Ganze im Monat kostet und wie Du alles wieder zumachst. Am Ende steht derselbe Scan wie in Stufe 2.
1 Fehlerbilder
Ordne jedem Symptom die wahrscheinlichste Ursache zu.
2 Was es kostet
| Posten | Größenordnung |
|---|---|
| Kleiner Linux-Server (2–4 GB RAM) | einige Euro im Monat, je nach Anbieter |
| Domain | wenige Euro im Monat bzw. ein Jahresbetrag |
| Weck-Knoten (Raspberry Pi) | einmalig, Strom wenige Watt |
| Headscale, Syncthing, RustDesk-Server, n8n, ntfy | keine Lizenzkosten |
| Möbius Sync (optional) | einmaliger App-Kauf, Preis im App Store |
| Deine Zeit | Updates aller Dienste, etwa einmal im Monat nachsehen |
Preise ändern sich; die Tabelle nennt bewusst keine Beträge, die morgen falsch sind. Der größte Posten ist meist die Zeit für Updates.
3 Alles wieder schließen
Jede Stufe hatte ihren Rückweg. Hier gesammelt, in der richtigen Reihenfolge, falls Du das Viereck wieder abbauen willst:
- n8n-Workflows für Pult, Aufträge und Status deaktivieren, Tokens löschen, Kurzbefehle auf dem iPad löschen.
- Rückkanal: Aufgabe am PC löschen, Konto
rueckkanalauf dem Server löschen. - Weck-Knoten: Schlüssel des Servers entfernen, Knoten aus dem Tailnet nehmen.
- Syncthing: Server aus dem Ordner entfernen, Container stoppen, ufw-Regel 22000 löschen.
- RustDesk: Clients zurückstellen oder deinstallieren, Container stoppen, ufw-Regeln 21115–21117 löschen.
- Headscale: Geräte zurück zu Tailscale oder ganz abmelden, Container stoppen, Proxy- und DNS-Eintrag löschen.
- Zum Schluss der Scan von außen.
4 Abschluss-Übung: der Scan von außen
nmap -Pn -p 1-65535 dein-server.example und für UDP sudo nmap -sU -p 21116,22000 dein-server.example. Schreib Dir zu jedem offenen Port den Dienst dazu.ss -tlnp suchen. Meist ein Container mit einer Portzeile ohne 127.0.0.1: oder Tailnet-Adresse.5 Rückblick: vier Geräte
| Gerät | Vorher (Kurs 3) | Jetzt |
|---|---|---|
| Mac | startet Aufträge selbst per SSH | startet sie per Webhook, auch wenn der PC schläft; Dateien gehen sofort in den Briefkasten |
| iPad | Pult für Mac und PC im selben Netz | Pult und Statusseite, die von überall funktionieren; Meldungen kommen von selbst |
| Windows-PC | muss wach sein, wenn Du etwas willst | wird geweckt, rechnet unter Aufsicht des Wächters, holt Dateien nach |
| Server | gab es nicht | koordiniert das VPN, vermittelt Fernzugriff, nimmt Aufträge an, hält verschlüsselte Dateien |
Damit ist die Mac-Reihe durch. Wer weiterbauen will: Der Kurs n8n zeigt Freigaben und Sicherungen genauer, Self-Hosting & VPS den Betrieb mehrerer Dienste auf einem Server.
✓ Kurz geprüft
Das Viereck auf einer Seite
Befehle, Ports und Fehlerbilder aus dem Kurs. Zählt nicht zum Fortschritt.
⌨ Befehle
| Was | Befehl | Wo |
|---|---|---|
| Wirksame SSH-Einstellung prüfen | sudo sshd -T | grep -i passwordauth | Server |
| Firewall-Regeln ansehen | sudo ufw status verbose | Server |
| Wer lauscht auf welchem Port | sudo ss -tlnp | Server |
| Von außen scannen | nmap -Pn -p 1-65535 dein-server.example | Mac, außerhalb des Tailnet |
| Headscale: Geräte auflisten | docker exec headscale headscale nodes list | Server |
| Gerät bei Headscale anmelden | tailscale up --login-server https://vpn.dein-server.example | jedes Gerät |
| Tailnet-Adresse des Servers | tailscale ip -4 | Server |
| Rückkanal öffnen | ssh -N -R 127.0.0.1:11234:127.0.0.1:1234 rueckkanal@… | PC |
| Rückkanal testen | curl -s http://127.0.0.1:11234/v1/models | Server |
| PC wecken | ssh -i ~/.ssh/wecken weck-knoten | Server |
| Ist der PC wach? | ssh pc echo wach | Server, Mac |
| GPU-Werte | nvidia-smi --query-gpu=temperature.gpu,utilization.gpu --format=csv,noheader | PC |
| Render abbrechen | Datei C:\Nordwerk\STOPP anlegen | PC (über Pult) |
| Auftrag per Webhook | curl -X POST -H "X-Pult-Token: $PULT_TOKEN" http://server:5678/webhook/figur-rendern | Mac, Tailnet |
| Token erzeugen | openssl rand -hex 32 | Mac oder Server |
| RustDesk-Schlüssel anzeigen | cat /opt/rustdesk/data/id_ed25519.pub | Server |
| Testnachricht | curl -d "Test" https://ntfy.sh/dein-geheimes-thema | Server |
Kein Treffer. Anderes Wort probieren, z. B. „Port“ oder „PC“.
🔌 Ports
| Port | Dienst | Erreichbar |
|---|---|---|
| 22 | SSH Server | öffentlich, nur Schlüssel |
| 80, 443 | Reverse Proxy (Website, Headscale) | öffentlich |
| 21115–21117 (21116 auch UDP) | RustDesk hbbs/hbbr | öffentlich, nur mit Schlüssel |
| 22000 TCP/UDP | Syncthing-Abgleich | öffentlich oder nur Tailnet |
| 5678 | n8n (Editor und Pult-Webhooks) | nur Tailnet |
| 8384 | Syncthing-Oberfläche | nur Tailnet |
| 8085 | Headscale intern | nur 127.0.0.1 (Proxy) |
| 11234 | Rückkanal zu LM Studio | nur 127.0.0.1 auf dem Server |
🩺 Fehlerbilder
| Du siehst | Wahrscheinliche Ursache | Stufe |
|---|---|---|
| Passwort-Anmeldung geht trotz Einstellung | Eine Datei mit kleinerer Nummer in sshd_config.d setzt yes | 2 |
| Port offen, obwohl ufw ihn nicht erlaubt | Docker-Portzeile ohne 127.0.0.1: | 2 |
| Alle Ports im Tailnet erreichbar | ACL nicht geladen (Pfad in policy.path oder Syntaxfehler); ohne Richtlinie ist alles erlaubt | 3 |
| Container startet nach Server-Neustart nicht | bindet an die Tailnet-Adresse, Tailscale war noch nicht da | 4 |
remote port forwarding failed | permitlisten passt nicht, oder Port noch belegt | 5 |
| Paket gesendet, PC bleibt aus | WoL in BIOS/Adapter aus, Schnellstart an, WLAN statt Kabel | 6 |
| Webhook antwortet 401/403 | Header-Name oder Token falsch | 7, 10 |
| Datei kommt am PC nicht an | verschiedene Verschlüsselungspasswörter auf Mac und PC | 8 |
| RustDesk zeigt weiter fremde Server | Netzwerkeinstellung nicht gespeichert (am PC entsperren) | 9 |
| Pult geht im WLAN, nicht im Hotspot | Tailscale auf dem iPad nicht verbunden | 10 |
Quiz
Zehn Situationen aus der Praxis. Ab acht richtigen Antworten ist das Quiz bestanden. Die Antworten stehen jedes Mal in anderer Reihenfolge.
Deine Teilnahmebestätigung
Sie bestätigt, was Du wirklich getan hast: die Übungen gemacht und das Quiz bestanden.