DNSBox

DNS und HTTPS für Hostnamen mit IP-Adressen

Erreiche einen öffentlichen HTTP-Dienst über *.dnsbox.io oder betreibe DNSBox in deinem eigenen privaten Netzwerk.

Verfügbar in v0.5.2

Wechselst du von v0.4.x? Befolge die Migrationsanleitung, bevor du eine bestehende Installation ersetzt. Migrationsanleitung

Den öffentlichen Dienst nutzen

Ein Konto oder eine Domainregistrierung ist nicht erforderlich. Dein Backend muss unter einer zugelassenen öffentlichen IP-Adresse einen HTTP-Dienst auf Port 80 bereitstellen, der von DNSBox erreichbar ist.

Ersetze 198.51.100.20 durch die öffentliche IPv4-Adresse deines Servers:

https://198-51-100-20.dnsbox.io

DNS löst den Hostnamen zur Adresse eines DNSBox-Proxys auf. Der Proxy nimmt die HTTPS-Verbindung entgegen und leitet HTTP an die im Hostnamen kodierte IP-Adresse weiter. Er installiert kein Zertifikat auf deinem Server.

Let's Encrypt validiert den Hostnamen über DNS-01. Das Zertifikat gilt für diesen Hostnamen, nicht für die reine IP-Adresse. Die erste TLS-Verbindung kann länger dauern, während ein Zertifikat ausgestellt wird.

Die Verbindung vom Browser zu DNSBox verwendet HTTPS. Die Verbindung von DNSBox zum Backend verwendet HTTP. WebSocket-Upgrades werden unterstützt.

Ein IPv6-Backend lässt sich als 2a01-4f8-c17-b8f--1.dnsbox.io kodieren. Ein einzelner Bindestrich steht für einen Doppelpunkt, ein doppelter Bindestrich für ::.

Prüfe zuerst die DNS-Auflösung, dann HTTPS. Verwende für diesen Test dein eigenes erreichbares HTTP-Backend:

dig +short 198-51-100-20.dnsbox.io
curl -v https://198-51-100-20.dnsbox.io/

Die DNS-Antwort enthält die Proxy-Adresse. Eine gültige TLS-Verbindung und eine erfolgreiche HTTP-Antwort des Backends sind getrennte Prüfungen.

Im privaten Netzwerk betreiben

Der lokale TLS-Modus funktioniert ohne öffentliches DNS, Portweiterleitung oder Internetzugang. DNSBox erstellt eine eigene Zertifizierungsstelle. Clients müssen dieser CA vertrauen.

Beispiel: DNSBox auf 192.168.1.2 mit HTTP-Backends in 192.168.1.0/24:

./dnsboxd --domain=home.arpa --ip=192.168.1.2 \
  --tls-mode=local --allowed-cidrs=192.168.1.0/24 \
  --dns-listen=192.168.1.2:53 --https-listen=192.168.1.2:443 \
  --data-dir=/var/lib/dnsbox

Leite von deinem LAN-Resolver nur die Zone home.arpa an 192.168.1.2 weiter. DNSBox ist für seine Zone autoritativ und kein allgemeiner rekursiver Resolver.

Stelle ein lokales Zertifikat aus, um die CA zu erstellen. Installiere anschließend /var/lib/dnsbox/ca/root.crt im Speicher für vertrauenswürdige Zertifizierungsstellen jedes Clients. Halte root.pem geheim. Den Befehl zur Ersteinrichtung findest du in der Installationsanleitung.

Öffne für ein Backend auf 192.168.1.50 die Adresse https://192-168-1-50.home.arpa. LAN-Clients benötigen Zugriff auf die DNS- und HTTPS-Ports von DNSBox. DNSBox benötigt Zugriff auf den HTTP-Port des Backends.

Privates Netzwerk einrichten

Selbst betreiben mit Let's Encrypt

Verwende eine Domain oder Subdomain, die du kontrollierst, und delegiere ihre DNS-Zone an deinen DNSBox-Nameserver. Ein einzelner Knoten kann die Zone bedienen; mehrere Knoten bieten Redundanz.

Erlaube für die öffentliche DNS-01-Validierung eingehenden Verkehr auf UDP 53 und TCP 53 sowie ausgehendes HTTPS und DNS-Auflösung. Eingehender Verkehr auf Port 80 ist nicht erforderlich. Port 443 muss nur für die vorgesehenen Clients erreichbar sein.

Private HTTP-Backends können öffentlich vertrauenswürdige Zertifikate für Hostnamen verwenden, wenn die DNS-01-Validierung öffentlich erfolgt. Gib diese Backends ausdrücklich mit --allowed-cidrs frei und richte DNS und Routing für deine Clients ein.

Konfiguriere bei mehreren Knoten auf jedem dieselbe Nameserver-Liste und dieselben Einträge sowie gegenseitiges TLS für die Challenge-Replikation. Jeder konfigurierte Peer muss die Challenge bestätigen, bevor die Ausstellung fortgesetzt wird.

Release-Archive für Linux, macOS und Windows sind verfügbar. Das Installationsprogramm unterstützt --no-systemd für den manuellen Start oder einen anderen Prozessmanager. Es deaktiviert den System-Resolver nicht.

Installation und Cluster-Konfiguration

Zertifikate für ocserv und andere Dienste

Der öffentliche Dienst exportiert seine privaten Schlüssel nicht. Wenn dein Dienst Zertifikatsdateien benötigt, betreibe DNSBox selbst mit einer delegierten Zone, die du kontrollierst.

Führe --issue mit einem Hostnamen aus, der eine IP-Adresse kodiert und zu dieser Zone gehört. DNSBox schreibt eine PEM-Zertifikatskette und einen privaten Schlüssel nach <data-dir>/certs und beendet sich dann. Während der ACME-Ausstellung stellt es DNS bereit, lässt aber den HTTPS-Port 443 frei.

Lass diesen Hostnamen mit einem ausdrücklichen A/AAAA-Eintrag direkt auf deinen Dienst zeigen. Konfiguriere für ocserv server-cert und server-key. Der HTTP-Proxy von DNSBox implementiert weder OpenConnect noch DTLS.

Richte die Erneuerung ein und lade deinen Dienst nach Änderungen an den Dateien neu. Ein einmalig ausgeführter Befehl erneuert nach seinem Ende keine Zertifikate. Betreibe keine zwei DNSBox-Prozesse mit demselben Datenverzeichnis.

Beispiel für den Zertifikatexport

Fragen

Kann ich private IP-Adressen mit dem öffentlichen Dienst verwenden?

Nein. Der öffentliche Proxy ist für zugelassene öffentliche Backends gedacht. Betreibe für private Adressen eine eigene Instanz mit ausdrücklich festgelegten CIDR-Freigaben.

Was passiert, wenn sich meine IP-Adresse ändert?

Die IP-Adresse ist Teil des Hostnamens. Verwende für die neue IP-Adresse einen neuen Hostnamen. Clients mit dem alten Namen greifen weiterhin auf die alte Adresse zu.

Weist DNSBox den Besitz der Backend-IP-Adresse nach?

DNS-01 weist die Kontrolle über den DNS-Hostnamen nach. Es prüft weder den Besitz der Backend-IP-Adresse noch die dort bereitgestellten Inhalte.

Werden Zertifikate automatisch erneuert?

Ein laufender DNSBox-Dienst erneuert die von ihm verwalteten Zertifikate. Für exportierte Zertifikate sind ein Erneuerungsprozess und das Neuladen des Dienstes erforderlich, der sie verwendet.

Was passiert, wenn das Backend offline ist?

DNS und TLS können weiterhin funktionieren, aber der Proxy kann die Inhalte der Anwendung nicht liefern. Prüfe den HTTP-Dienst des Backends, seine Firewall und seine Erreichbarkeit.

Wo kann ich ein Problem melden?

Erstelle ein GitHub-Issue mit der DNSBox-Version, dem Betriebsmodus und den relevanten Fehlermeldungen. Entferne private Schlüssel, Tokens und andere Geheimnisse.

GitHub-Issues

Technische Referenz

Konfigurationsreferenz

Quellcode