Installation
Node64 ist ein einzelner Docker-Container. Du startest ihn mit einem Befehl oder einer kleinen Compose-Datei – auf einem Linux-Server, einer VM, deinem NAS oder einem Raspberry Pi.
Das Image ghcr.io/ipv64net/node64:latest wird gerade für die Veröffentlichung vorbereitet. Alle Befehle auf dieser Seite funktionieren, sobald es öffentlich ist.
Voraussetzungen
- Docker Engine unter Linux. Für die Compose-Beispiele zusätzlich Docker Compose (
docker compose). - Architektur:
amd64(x86-64),arm64(aarch64) oderarmv7(32-Bit-ARM). - Ein Volume für
/data. Darin liegen Datenbank, Schlüssel und Zertifikate. Der Rest des Containers kann schreibgeschützt laufen. - Port 8080 auf dem Host frei. Für DNS64 kommen Port 53 (und je nach Verschlüsselung 443/853) dazu, für PROXY64 die Ports 80 und 443.
- Kein ipv64.net-Account nötig. Node64 läuft komplett standalone. Was ein Account zusätzlich bringt, steht unter Mit ipv64.net verknüpfen.
Plattformen
| Plattform | Architektur | Hinweis |
|---|---|---|
| Linux-Server, PC, Mini-PC, VM | linux/amd64 | Der Normalfall. Jede aktuelle Linux-Distribution mit Docker. |
| Raspberry Pi | linux/arm64, linux/arm/v7 | Mit 64-Bit-Betriebssystem läuft arm64, mit 32-Bit-Raspberry-Pi-OS (z. B. ältere Modelle) armv7. Docker wählt selbst. |
| NAS | amd64, arm64 oder armv7 | Überall, wo der NAS-Hersteller Docker bzw. Container mit Compose-Datei anbietet. Lege das Volume für /data auf einen dauerhaften Speicher. |
| Proxmox & Co. | amd64 | Typischerweise in einer Linux-VM oder einem Container mit installiertem Docker. Danach wie auf jedem Linux-Server. |
Das Image wird als Multi-Arch-Image für linux/amd64, linux/arm64 und linux/arm/v7 gebaut. Docker holt automatisch die passende Variante.
Installation mit docker run
Der schnellste Weg. Ein Befehl, fertig:
docker run -d --name node64 \
-p 8080:8080 \
-v node64-data:/data \
--restart unless-stopped \
ghcr.io/ipv64net/node64:latest
| Teil | Bedeutung |
|---|---|
-d --name node64 | Im Hintergrund starten, Containername node64. |
-p 8080:8080 | Weboberfläche und API auf Port 8080 – HTTP und HTTPS auf demselben Port. |
-v node64-data:/data | Benanntes Volume für alle Daten. Bleibt bei Updates erhalten. |
--restart unless-stopped | Wichtig: Nach einer Wiederherstellung oder einem Zurücksetzen beendet sich Node64 selbst, Docker startet ihn dann neu. |
Installation mit docker compose
Für den Dauerbetrieb empfehlen wir eine compose.yaml. Wähle die Variante, die zu deinen Modulen passt. Gestartet wird immer mit docker compose up -d im Ordner der Datei.
Für Healthchecks, Benachrichtigungen und DynDNS reicht das normale Bridge-Netz von Docker. Schreibgeschütztes Dateisystem und unprivilegiertes Ping sind schon eingestellt.
services:
node:
image: ghcr.io/ipv64net/node64:latest
container_name: node64
restart: unless-stopped
ports:
- "8080:8080"
# - "8443:8443" # optional reiner HTTPS-Port, dazu NODE64_HTTPS_PORT=8443
volumes:
- node64-data:/data
environment:
NODE64_LOG_LEVEL: info
read_only: true
tmpfs:
- /tmp
sysctls:
- net.ipv4.ping_group_range=0 65535 # ICMP-Checks ohne Root
volumes:
node64-data:
Mit dem Host-Netz sieht DNS64 die echten IP-Adressen deiner Geräte und findet den Router für lokale Namen selbst. PROXY64 kann Streams auf beliebigen Ports öffnen, ohne dass du jeden Port einzeln freigibst. Auch der IPv6-Modus „Interface“ von DynDNS braucht das Host-Netz.
services:
node:
image: ghcr.io/ipv64net/node64:latest
container_name: node64
restart: unless-stopped
network_mode: host # statt ports: – Oberfläche auf NODE64_HTTP_PORT (8080)
volumes:
- node64-data:/data
environment:
NODE64_LOG_LEVEL: info
read_only: true
tmpfs:
- /tmp
cap_add:
- NET_RAW # ICMP-Checks (sysctls sind im Host-Netz nicht möglich)
volumes:
node64-data:
Im Host-Netz entfällt ports:. Node64 belegt die Ports direkt auf dem Host – nur die, die ein eingeschaltetes Modul wirklich braucht. Docker lässt im Host-Netz keine net.*-sysctls im Container zu; für ICMP-Checks nimmst du deshalb cap_add: NET_RAW.
Der Check-Typ Docker-Container fragt die Docker-API nach dem Zustand deiner Container. Dafür bekommt Node64 den Socket und die Gruppe, der der Socket gehört.
services:
node:
image: ghcr.io/ipv64net/node64:latest
container_name: node64
restart: unless-stopped
ports:
- "8080:8080"
volumes:
- node64-data:/data
- /var/run/docker.sock:/var/run/docker.sock:ro
group_add:
- "996" # Gruppe des Sockets: stat -c %g /var/run/docker.sock
environment:
NODE64_LOG_LEVEL: info
read_only: true
tmpfs:
- /tmp
sysctls:
- net.ipv4.ping_group_range=0 65535
volumes:
node64-data:
Die Gruppen-ID ist auf jedem System anders. So findest du sie heraus:
stat -c %g /var/run/docker.sock
Wer den Socket hat, kann den Host steuern – auch mit :ro, denn das schützt nur die Datei, nicht die API. Node64 sendet ausschließlich lesende GET-Anfragen. Willst du das Risiko weiter begrenzen, setze einen docker-socket-proxy mit CONTAINERS=1 davor und trage NODE64_DOCKER_HOST=tcp://socket-proxy:2375 ein (Beispiel unter Konfiguration).
Alle Umgebungsvariablen findest du unter Konfiguration.
Was im Volume /data liegt
/data ist das einzige Verzeichnis, in das Node64 schreibt. Sicherst du dieses Volume, hast du alles.
| Pfad | Inhalt |
|---|---|
/data/node64.db | SQLite-Datenbank: Einstellungen, Benutzer, Checks, Kanäle, verschlüsselte Zertifikatsschlüssel und mehr. |
/data/secret.key | 32-Byte-Schlüssel (AES-256-GCM), mit dem Geheimnisse in der Datenbank verschlüsselt sind. Wird beim ersten Start erzeugt. |
/data/backups/ | Automatische Sicherungen vor jeder Datenbank-Migration (die letzten 5) und die alten Daten nach einer Wiederherstellung. |
/data/tls/ | Selbstsigniertes Zertifikat der Oberfläche (cert.pem, key.pem), beim ersten Start erzeugt. |
/data/dns64/ | DNS64: Abfrage-Log (dns64.db), Freigaben (allowlist.txt), Blocklisten (lists/). |
/data/cdn64/cdn64.db | PROXY64: Statistik und Zugriffs-Log. |
/data/acme, /data/certs, /data/cache | Arbeitsverzeichnisse für Zertifikate, ACME und Cache. |
Ohne /data/secret.key lassen sich Kanal-Tokens, SMTP-Passwörter, der ipv64-API-Key und Zertifikatsschlüssel nicht mehr entschlüsseln. Wie du richtig sicherst, steht unter Update & Backup.
Ports
| Port | Wofür | Wann offen |
|---|---|---|
8080/tcp | Weboberfläche und API – HTTP und HTTPS auf demselben Port | immer (einstellbar über NODE64_HTTP_PORT) |
8443/tcp | zusätzlicher reiner HTTPS-Port | nur mit NODE64_HTTPS_PORT |
53/udp, 53/tcp | DNS64 | nur mit Modul DNS64 (Port einstellbar) |
853/tcp, 853/udp | DNS64 über DoT bzw. DoQ | nur wenn eingeschaltet |
80/tcp, 443/tcp, 443/udp | Gemeinsamer Eingang: PROXY64, DoH, Oberfläche unter eigenem Namen, Let's Encrypt HTTP-01; HTTP/3 über 443/UDP | nur solange ein Modul ihn braucht |
Im Bridge-Modus gibst du jeden benötigten Port mit -p bzw. ports: frei, zum Beispiel für DNS64:
ports:
- "8080:8080"
- "53:53/udp"
- "53:53/tcp"
- "443:443/tcp" # DoH (nur wenn eingeschaltet)
- "853:853/tcp" # DoT
- "853:853/udp" # DoQ
Unter Einstellungen → Ports siehst du, welche Ports Oberfläche, DNS64 und der gemeinsame Eingang belegen oder belegen wollen – inklusive Überschneidungen.
Rechte und Härtung
Node64 ist von Haus aus sparsam mit Rechten:
- Minimales Image: gebaut
FROM scratch– kein Betriebssystem, keine Shell, nur das Binary und die CA-Zertifikate. Zeitzonen sind im Binary eingebettet. - Kein Root: Der Prozess läuft als Benutzer und Gruppe
65532. read_only: true: Das Root-Dateisystem kann schreibgeschützt laufen. Nur/datamuss beschreibbar sein.tmpfs: /tmp: ein Arbeitsbereich im Arbeitsspeicher für temporäre Dateien.sysctls: net.ipv4.ping_group_range=0 65535: erlaubt unprivilegiertes Ping für ICMP-Checks. Gilt trotz des Namens auch für ICMPv6. Alternative:cap_add: NET_RAW.- Ports unter 1024 ohne Root: Das Binary bekommt
cap_net_bind_serviceundcap_net_rawnur als „erlaubt“ und schaltet sie beim Start selbst scharf – für Port 53, 80, 443 und ICMP. Fehlen sie (z. B. durchcap_dropoder unter Podman), startet Node64 trotzdem; nur diese Funktionen gehen dann nicht.
HTTPS direkt am Node
Du brauchst keinen eigenen HTTPS-Port: Node64 erkennt am ersten Byte der Verbindung, ob der Browser TLS spricht. http://<host>:8080 und https://<host>:8080 funktionieren also beide.
- Zertifikat: Beim ersten Start erzeugt Node64 ein selbstsigniertes Zertifikat – der Browser warnt deshalb beim ersten Aufruf. Später wählst du unter Zertifikate ein richtiges Zertifikat für die Oberfläche (z. B. von Let's Encrypt). Alternativ bindest du eigene Dateien über
NODE64_TLS_CERTundNODE64_TLS_KEYein. - Mindestens TLS 1.2.
- Extra-Port: Wer einen getrennten reinen HTTPS-Port möchte, setzt
NODE64_HTTPS_PORT=8443und gibt8443frei.
Passkeys brauchen HTTPS mit einem Hostnamen (nicht nur eine IP-Adresse) – Details unter Anmeldung & Sicherheit.
IPv6 im Container
Node64 ist durchgehend Dual-Stack. Docker gibt Containern im Bridge-Netz aber standardmäßig kein IPv6. Damit Checks und DNS auch über IPv6 laufen, gib dem Netz IPv6 (Docker 27 oder neuer) – oder nutze network_mode: host:
networks:
default:
enable_ipv6: true
ipam:
config:
- subnet: fd00:64::/64 # ULA, Docker übernimmt NAT66
Fehlt IPv6 im Container, meldet Node64 das nicht als Störung deiner Ziele, sondern prüft vorher, ob die Adressfamilie überhaupt erreichbar ist.
Erster Aufruf
- Öffne
http://<host>:8080im Browser. - Der Setup-Assistent erscheint, solange noch kein Benutzer existiert. Du legst Sprache, Admin-Konto (Passwort mindestens 10 Zeichen), Zeitzone, Namen und Standort der Node fest.
- Nach dem Absenden bist du direkt angemeldet. Weiter geht es mit den ersten Schritten.
Es gibt kein Standardpasswort. Wer automatisiert installiert, kann den Admin beim allerersten Start auch über NODE64_ADMIN_USER und NODE64_ADMIN_PASSWORD anlegen lassen (siehe Konfiguration).
Prüfen, ob Node64 läuft
Das Image hat einen eingebauten Docker-Healthcheck (/node64 healthcheck, alle 30 Sekunden). In docker ps steht daher nach kurzer Zeit (healthy):
docker ps --filter name=node64
Die Logs zeigen dir, was beim Start passiert:
docker logs -f node64
Der Endpunkt /api/health antwortet ohne Anmeldung mit Status, Version und Uhrzeit:
curl http://localhost:8080/api/health
# {"status":"ok","version":…,"time":…}
Die installierte Version gibt das Binary auch direkt aus:
docker exec node64 /node64 version
Klappt etwas nicht? Typische Ursachen und Lösungen stehen unter FAQ & Fehlerbehebung.
Etwas unklar, fehlt etwas oder hast du eine Frage zu Node64? Frag im offiziellen Forum v64.tech.