Als Router und Internetzugang verwende ich eine Fritzbox. Das möchte ich beibehalten. Damit diese den Traffic der einzelnen Geräte richtig anzeigt, beschränkt etc., soll das so bleiben, dass sie der DHCP-Server ist. Sie weiß daher immer aktuell, welche Geräte in meinem Intranet welchen Namen und welche IP-Adresse haben.
Nun habe ich in meinem Intranet einige Geräte (zB Synology, Proxmox, diverse Linux), denen ich gerne ein Zertifikat von Let's Encrypt geben (automatisiert verteilen) würde, um von der eigenen lokalen CA für name.fritz.box wegzukommen. Das bedeutet, dass ich für mein Intranet gerne statt .fritz.box eine Domain (beispielsweise zuhause.domain.tld) verwenden möchte, für die ich ein Wildcard-Zertifikat (*.zuhause.domain.tld) habe oder bekommen kann. Leider kann man in der Fritzbox keine eigene Domain einstellen. Irgendwie kann man das sogar ändern, wenn man direkt auf die Konfiguration der Fritzbox zugreift, aber es wirkt wohl nicht an allen Stellen.
Pi-hole beherrscht das Conditional Forwarding von DNS-Anfragen. Hierbei möchte ich aber den Domain-Namen ersetzen.
Wenn eine Anfrage kommt nach name.zuhause.domain.tld, dann soll Pi-hole das umwandeln in die Anfrage nach name.fritz.box und dessen Ergebnis (mit ggf. Ersetzen von fritz.box nach zuhause.domain.tld an passenden Stellen) zurückgeben. Dann verwaltet weiterhin die Fritzbox die Geräte, aber ich kann an allen Stellen meine eigene lokale Domain verwenden mit Pi-hole als DNS-Server. Damit könnte man die Schwäche der Fritzbox, dass man keine eigene Domain einstellen kann, umgehen. Denn für *.fritz.box bekommt man sicher kein LE-Zertifikat.
Ist so eine Logik mit Pi-hole bereits machbar? Wenn nein, könnte man es machbar machen oder hat die Idee einen Haken?
Let'sEncrypt ist ein öffentlicher Dienst, was sich nicht gut mit Deiner Zielsetzung verträgt, dafür die interne Namensauflösung der FritzBox zu verdrängen.
Eine parallele Nutzung sollte allerdings möglich sein.
Ähnlich wie .internal, .lan oder .home-arpa ist fritz.box ist vom Prinzip eine lokale Domäne, d.h. sie ist privat und nur für die Verwendung im Heimnetz gedacht und daher nicht über das öffentliche DNS auflösbar. Nur der interne DNS-Server der FritzBox verwaltet die lokalen *.fritz.box-Namen. Für diese wird er auf A/AAAA-Anfragen private IP-Adressen zurückgeben.
Demgegenüber ist zuhause.domain.tld eine öffentliche Domäne, die im DNS auch auflösbar ist, d.h. der für die Domäne autoritative DNS-Server verwaltet die DNS-Einträge (und nicht die FritzBox). Ein öffentlicher DNS-Server wird für A/AAAA-Anfragen die öffentlichen IP-Adressen zurückgeben (und über eine solche öffentliche Adresse wird Let'sEncrypt auch die Verifikation durchführen).
Du kannst also im Heimnetz zuhause.domain.tld zwar verwenden, wirst dann aber immer die öffentliche IP-Adressen verwenden.
Rein theoretisch wäre eine Indirektion der Auflösung von zuhause.domain.tld auf zuhause.fritz.box über CNAMEs möglich. Allerdings ist das nur zulässig, wenn der DNS-Server für diese beiden Domänen autoritativ ist. Praktisch trifft das für fritz.box und domain.tld nicht zu.
Mit Pi-hole hast Du aber auch die Möglichkeit, die öffentlichen A/AAAA-DNS-Einträge über Local DNS Records zu überlagern, d.h. eine an Pi-hole gestellte DNS-Anfrage wird statt der öffentlichen die privaten IP-Adressen zurückliefern, sofern für die angefragte Domäne eine entsprechende lokale Definition in Pi-hole existiert (ist das nicht der Fall, erfolgt die Auflösung normal wie sonst auch über die für Pi-hole eingestellten Upstream-DNS-Server).
Moment. zuhause.domain.tld ist und bleibt öffentlich. Da hängt meine Synology mit einem Webserver drauf und antwortet auch (selbst wenn da nicht viel sinnvolles liegt). Das funktioniert auch intern. Daran soll sich nichts ändern.
Ich möchte Namen rechner1.zuhause.domain.tld und rechner2.zuhause.domain.tld verwenden. Alles, was UNTER zuhause.domain.tld liegt, ist üblicherweise mein Intranet. Da ich für *.zuhause.domain.tld das Zertifikat habe und problemlos im Deploy von certbot spätestens mit scp und ssh kill -SIGHUP verteilen kann, klappt das alles. Möglicherweise erledigt für manche Rechner/Zugriffe sogar ein Reverse Proxy auf meiner Synology den Zugriff von außen auf Bereiche in meinem Intranet und leitet es intern richtig weiter, wenn ich mir sicher bin, dass da kein erfolgreicher Angriff möglich ist. Um genau zu sein, habe ich das bereits für mehrere Dienste genau so implementiert. Nur intern wird dann erst nach außen zum Proxy gegangen und über diesen wieder zurück, und das ist bei speedtest.zuhause.domain.tld, was ein librespeed ist, doch eher unpraktisch. Von innen möchte ich das allgemein ohne Proxy dazwischen realisieren, und schon gar nicht über so eine schnarchige Synology. Außerdem will ich manche Dienste nicht von außen erreichbar haben, und das ist derzeit das größere Problem. Weil es mangels passenden internen DNS eben nur mit Reverse Proxy geht. CNAME mit Wildcard geht wohl, aber nicht mit Wildcard im Ziel, und damit hilft es nicht.
Die Frage ist: Wie erhält der DNS-Server Pi-hole die Daten für die internen Teilnehmer von der Fritzbox? Man kann die Liste der Geräte bei der Fritzbox mit API abfragen und in die Liste eintragen, die Konfiguration neu einlesen lassen. Das ist aber asynchron und unschön, schließlich wird die Liste dadurch automatisiert dupliziert, statt das Original zu verwenden. Deshalb möchte ich, dass der künftige DNS-Server in meinem Intranet (bisher ist es die Fritzbox) für *.zuhause.domain.tld die Fritzbox nach Existenz des Namens und ggf der richtigen IP fragt. Also Suchen und Ersetzen vor der Bearbeitung der DNS-Anfrage von ".zuhause.domain.tld" nach ".fritz.box" und bei der Antwort entsprechend zurück. Das passt dann schon. Ist nur die Frage, ob man sowas mit Pi-hole realisieren könnte oder wenn nein, mit welchem DNS-Server das geht.
In diesem Fall bräuchtest Du in Pi-hole nur Conditional Forwarding mit zuhause.domain.tld zu konfigurieren.
Das ist aber eine andere Fragestellung als Deine ursprüngliche, bei der Du das Ersetzen von name.zuhause.domain.tld durch name.fritz.box gewünscht hast.
Habe ich das Conditional Forwarding falsch verstanden? Ich dachte, es dient dazu, dass die Anfragen für *.zuhause.domain.tld an die Fritzbox weitergeleitet werden. Die kann aber damit nichts anfangen, die kennt nur *.fritz.box und leitet es ins Internet weiter, an meinen DNS-Server im Internet, der die Einträge nicht kennt und nicht kennen soll. Kann das Conditional Forwarding die Anfrage an rechner.zuhause.domain.tld unter dem Namen rechner.fritz.box an die Fritzbox weitergeben und beim Rückweg die Antwort entsprechend modifizieren? Dann wäre es ja schon gelöst.
Ich habe nie etwas anderes gefragt. Entschuldigung, wenn etwas nicht klar genug formuliert war.
Dann willst Du doch das Ersetzen von name.zuhause.domain.tld durch name.fritz.box, was aber aus den bereits oben erläuterten Gründen nicht funktioniert.
Du kannst aber, wie ebenfalls bereits beschrieben, in Pi-hole für die gewünschten Domänen die passenden A/AAAA-DNS-Datensätze anlegen und damit die öffentlichen DNS-Einträge überlagern.
Ich habe die Erläuterung nicht verstanden, warum es nicht gehen soll. In meinem Intranet gibt es einen DNS-Server. Der soll künftig für Geräte *.zuhause.domain.tld zuständig sein. Dass es für diese Domain im Internet auch einen öffentlichen DNS-Server gibt, tut nichts zur Sache. Für lokale Geräte ist der lokale DNS zuständig, egal um welche Domain es geht. Wenn mein lokaler DNS die Antwort nicht weiß bzw. nicht zuständig ist, gibt er die Anfrage weiter. Also kann ich für rechner1.zuhause.domain.tld eine lokale IP vom lokalen DNS erhalten (die dieser von der Fritzbox erfragen sollte). So mein Zielzustand für das Intranet. Die Fritzbox ist fest auf lokale Domain fritz.box programmiert, das kann man leider nicht einstellen. Könnte ich die Domain einstellen, wäre sie weiter zuständig und ich mit dem Problem durch.
OK, nehmen wir mal an es gäbe keine sinnvolle Lösung für dieses Ersetzen. Kann ich ja parallel weiter suchen, weil ich weiterhin meine, dass es technisch möglich wäre. Eintragen der Domains in der Konfiguration von Pi-hole. Wo nähme ich die A/AAAA-Einträge her? Aus der Fritzbox lesen?
Manuell eintragen kommt nicht in Frage. Ich habe etwa 100 Einträge in meinem lokalen DNS, und es ändert sich gelegentlich etwas. Jeder Rolladen, jede Kamera, diverse VMs, Proxmox, und und und haben einen Namen. Das möchte ich nicht mehrfach pflegen müssen. Ich möchte gerne auch per DHCP frisch vergebene Adressen ansprechen/abfragen können. Denn gerade wenn ich ein Gerät neu einrichte (Lichtschalter, Garagentor, whatever), wäre es ein Komfortgewinn, das nicht zusätzlich verwalten zu müssen.
Ich fürchte derzeit, dass Pi-hole nicht die Lösung für mein Problem werden wird und ich bei bind9 oder unbound mal schauen muss, ob ich sie relativ simpel für meine Zwecke anpassen kann.
CNAMEs bieten den vorgesehenen Indirektionsmechanismus für konkrete Domänen. Voraussetzung für die Nutzung ist aber, das der DNS-Server autoritativ für die Zieldomäne ist und die nötigen DNS-Definitionen hält, in Deinem Fall also fritz.box.
Für fritz.box ist aber der DNS-Server der FritzBox zuständig.
Da Pi-hole für die Ziel-Domäne nicht autoritativ ist, erfolgt auch keine weitere DNS-Auflösung.
Ein Client bekäme in einem solchen Fall statt des angeforderten DNS-Datensatzes den blanken CNAME zurück (und damit also z.B. keine IPv4-Adresse für einen A-Datensatz).
Eine Ausnahme gibt es:
Sofern Pi-hole den angefragten DNS-Datensatz für die Ziel-Domäne bereits im Cache hält, würde die korrekte Antwort ausgeliefert.
Das liesse sich eventuell für Deine Zwecke ausnutzen, wenn Du regelmässig (bei Fritzboxen standardmässig alle 60 Sekunden) entsprechende DNS-Anfragen an Pi-hole sendest, um den Cache aktuell zu halten, z.B. über ein passendes Skript.
Du müsstest aber auch hier für jedes name.zuhause.domain.tld<->name.fritz.box-Paar einen eigenen CNAME-Eintrag in Pi-hole anlegen.
Und das geht nicht über name.fritz.box oder einfach nur name?
Oder anders gefragt:
Wieviele Deiner 100 lokalen Geräte sollen denn im öffentlichen DNS auftauchen?
Sofern das nur ein paar sind, wären die nötigen A/AAAA-Einträge dafür ggf. mit vertretbarem Aufwand anzulegen. Für diese könntest Du dann Deine öffentliche Namen verwenden (unabhängig davon, ob Du vom Heimnetz oder über ein öffentliches Netz zugreifst), und für alles interne weiterhin *.fritz.box.
Mir geht es darum, dass beispielsweise Proxmox (aber auch andere Server, es werden mehr, die das verlangen - und ich würde es gerne immer können) nur über https arbeitet, auch im Intranet. Ich greife von vielen verschiedenen Rechnern darauf zu, von Handys aus, mit verschiedenen Browsern. Da sehe ich es nicht ein, meine CA überall zu importieren, damit das Zertifikat gültig ist. Für name oder name.fritz.box bekomme ich aber kein LE-Zertifikat.
Der öffentliche Zugriff auf alle name.zuhause.domain.tld, den ich möchte, klappt bereits. Über den reverse Proxy auf der Synology. Da brauche ich keinen Eintrag im öffentlichen DNS. Im Gegenteil wäre der Eintrag schädlich, weil es dann ja nicht mehr von außen klappen würde. Ich möchte gar nicht, dass aus dem Internet ohne den reverse Proxy auf die Geräte zugegriffen werden kann. Der Proxy ist ein Punkt, an dem alle von außen durch müssen. Das schafft an dieser Stelle Sicherheit und Überblick. Möglicherweise klaue ich diesen Diensten noch das zuhause. in der Domain, bisher zeige ich mir damit an, dass das nicht auf dem vServer läuft, der die Domain bedient.
Es ist eigentlich alles, wie ich es will. Nur müsste die Fritzbox eine Domain verwenden, die ich kontrolliere (zuhause.domain.tld), und nicht eine Domain von AVM (fritz.box). Dass sie dadurch die öffentlichen DNS-Einträge überdeckt, wäre mein Wunsch, denn von innerhalb brauche ich den Proxy nicht benutzen. Falls doch, kann ich die Subdomain der Dienste entsprechend wegnehmen oder umbenennen, um das zu unterscheiden. Und ich möchte es im Intranet gerne einheitlich haben, nicht mit verschiedenen Domains zuhause anfangen, je nachdem ob das ein Dienst mit oder ohne SSL ist.
Oder je nach Browser bei jedem Zugriff die Sicherheitsrückfrage zu bestätigen...
Nachvollziehbar, dass Du das bei vielen Clients und Diensten vermeiden möchtest.
Mit Pi-hole als filterndem DNS-Forwarder (intern ein spezialiertes dnsmasq) geht das nur über die bereits beschriebenen Massnahmen, die aber entsprechenden Konfigurations- und Pflegeaufwand bedeuten. Mir ist jedenfalls nicht bekannt, dass dnsmasq Redirektion nach RFC6672 unterstützt.
Aber mit einem autoritativen DNS-Server oder einem rekursiven DNS-Server (sofern dieser Umleitungen auf autoritative DNS-Server unterstützt) ginge das vielleicht, sofern dieser DNAMEs unterstützt.
Auf Pi-hole bin ich gekommen, weil ich es schon immer spannend fand und oft gelesen habe. Die Konfiguration mit dem conditional forwarding war es, die mich aufhorchen und diese Frage stellen ließ. Tatsächlich verwende ich es noch nicht, und will es erst dann tun, wenn ich für dieses Problem eine Lösung in Aussicht habe (eventuell ergibt sich etwas, das Pi-hole für mich überflüssig macht).
Bisher verwende ich bind9 auf meinem vServer und und auf einigen VMs. Aber ich habe kein Problem damit, unbound zu verwenden oder einen anderen DNS-Server. Oder die entsprechenden Sourcen anzupacken, wenn es für die Lösung erforderlich ist.
Danke für deine Antworten, du hast mir gut geholfen, auf den richtigen Weg zu einer Lösung zu kommen.
Bind9 kann sowohl autoritativ als auch rekursiv arbeiten.
Die Schwierigkeit wird sowohl bei Bind9 als auch bei unbound sein, die passenden DNAME-Definitionen anzulegen und dabei die FritzBox so einzubinden, dass sie als autoritativer DNS-Server behandelt wird.
In unbound geht zumindest letzteres über eine stub-zone.
Die exakte Konfiguration Deines Szenarios wäre dann aber wohl eher eine Frage an ein Bind9- oder unbound-Forum.
Um diese DNAME-Lösung parallel mit Pi-hole zu betreiben, könnte der entsprechende DNS-Server dann einfach als Upstream DNS Server in Pi-hole konfiguriert werden.