Zum Inhalt springen

Konfiguration

Die Instanz wird über Umgebungsvariablen konfiguriert. Ein Teil der Einstellungen lässt sich zusätzlich im Admin-Panel pflegen — dort gilt: eine gesetzte Umgebungsvariable gewinnt immer und die Oberfläche zeigt den Wert schreibgeschützt an (gedacht für Cluster-Deployments, wo die Konfiguration von außen kommt).

VariableVorgabeBedeutung
DNSE_LISTEN127.0.0.1:8422Adresse und Port
DNSE_ENCRYPTION_KEYPflicht. 32 Byte als Hex oder Base64
DNSE_ADMIN_USERadminBenutzername des Bootstrap-Kontos
DNSE_ADMIN_PASSWORDPasswort beim allerersten Start (danach wirkungslos)
DNSE_SERVE_UIonoff liefert nur die API aus
DNSE_SECURE_COOKIESoffSession-Cookies als Secure markieren (hinter TLS)
DNSE_TRUSTED_PROXIESProxy-IPs/CIDRs, deren X-Forwarded-For gilt
DNSE_DEMOoffon registriert den Demo-Provider und legt Beispieldaten an
VariableVorgabeBedeutung
DNSE_DB./dnseditor.dbPfad der SQLite-Datei
DNSE_DB_DSNPostgreSQL-DSN; ersetzt DNSE_DB
DNSE_DB_YBoffon = DNSE_DB_DSN zeigt auf einen YugabyteDB-Cluster (YSQL)

Details in Datenbank und Schlüssel.

VariableVorgabeBedeutung
DNSE_VALKEY_ADDRhost:port eines gemeinsamen Valkey
DNSE_VALKEY_PASSWORDAUTH-Passwort, falls gesetzt

Ohne DNSE_VALKEY_ADDR liegen Sessions im Arbeitsspeicher des Prozesses — für eine einzelne Instanz genau richtig. Sobald mehrere Knoten hinter einem Loadbalancer laufen, gehört ein gemeinsamer Valkey dazu: Eine Anmeldung auf Knoten 1 gilt dann auf allen Knoten, und ein Logout wirkt überall.

VariableVorgabeBedeutung
DNSE_ACME_EMAILKonto-E-Mail; erst damit ist die Ausstellung aktiv
DNSE_ACME_DIRECTORYLet’s Encrypt (Produktion)Abweichendes ACME-Verzeichnis
DNSE_ACME_PROPAGATIONFeste Wartezeit statt Prüfung der autoritativen NS, z. B. 90s

DNSE_ACME_PROPAGATION braucht man in Split-DNS-Umgebungen, in denen die Vorabprüfung von lego am internen Resolver scheitert.

Diese Werte stehen unter Administration → Kern-Einstellungen und lassen sich alternativ per Umgebungsvariable vorgeben:

EinstellungVariableWofür
Öffentliche AdresseDNSE_INSTANCE_URLBasis für Links in ausgehenden Mails
DynDNS-HostnameDNSE_DYNDNS_HOSTNAMEUpdate-Adresse für Router
DynDNS-Hostname (nur IPv4)DNSE_DYNDNS_HOSTNAME4erzwingt A-Auflösung
DynDNS-Hostname (nur IPv6)DNSE_DYNDNS_HOSTNAME6erzwingt AAAA-Auflösung
SMTP-ServerDNSE_SMTP_HOSTPostausgang
SMTP-PortDNSE_SMTP_PORTPostausgang
AbsenderDNSE_SMTP_FROMAbsenderadresse
SMTP-BenutzerDNSE_SMTP_USERNAMEAuthentifizierung
SMTP-PasswortDNSE_SMTP_PASSWORDverschlüsselt gespeichert, wird nie zurückgegeben

Ohne konfigurierten Postausgang funktionieren Einladungen, Passwort-Resets und Ablauf-Erinnerungen nicht — die Oberfläche zeigt in dem Fall generierte Passwörter direkt an, damit man sie manuell übergeben kann.

[Unit]
Description=DNS-Editor
After=network-online.target
[Service]
User=dnseditor
Environment=DNSE_LISTEN=127.0.0.1:8422
Environment=DNSE_DB_DSN=postgres://dnseditor:…@localhost:5432/dnseditor
Environment=DNSE_SECURE_COOKIES=on
Environment=DNSE_INSTANCE_URL=https://dns.example.com
EnvironmentFile=/etc/dnseditor/secrets.env
ExecStart=/usr/local/bin/dnseditor
Restart=on-failure
[Install]
WantedBy=multi-user.target

Der Verschlüsselungsschlüssel und das SMTP-Passwort gehören in die EnvironmentFile mit restriktiven Rechten, nicht in die Unit selbst.

server {
listen 443 ssl;
server_name dns.example.com;
ssl_certificate /etc/ssl/dns.example.com.pem;
ssl_certificate_key /etc/ssl/dns.example.com.key;
location / {
proxy_pass http://127.0.0.1:8422;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
}
}

Dazu passend auf der Instanz:

Terminal-Fenster
DNSE_SECURE_COOKIES=on
DNSE_TRUSTED_PROXIES=127.0.0.1
DNSE_INSTANCE_URL=https://dns.example.com

DNSE_TRUSTED_PROXIES nennt die Adresse, von der aus der Proxy die Anfragen weiterreicht — nur deren X-Forwarded-For wird geglaubt. Ohne diese Angabe würde DynDNS die Proxy-Adresse statt der Router-IP eintragen.