Ich habe ein internes Netzwerk mit einem DNS-Server, auf dem BIND ausgeführt wird und der über ein einziges Gateway mit dem Internet verbunden ist. Meine Domain "example.com" wird von einem externen DNS-Anbieter verwaltet. Einige Einträge in dieser Domäne, z. B. "host1.example.com" und "host2.example.com", sowie der übergeordnete Eintrag "example.com", verweisen auf die öffentliche IP-Adresse des Gateways.
Ich möchte, dass Hosts im internen Netzwerk "host1.example.com", "host2.example.com" und "example.com" in interne IP-Adressen anstelle der des Gateways auflösen. Andere Hosts wie "otherhost.example.com" sollten weiterhin vom externen DNS-Anbieter aufgelöst werden.
Das ist mir für die Einträge host1 und host2 gelungen, indem ich in BIND zwei Zonen mit einem Eintrag für "host1.example.com" und "host2.example.com" definiert habe. Wenn ich jedoch eine Zone für "example.com" hinzufüge, werden alle Abfragen für diese Domain von meinem lokalen DNS-Server gelöst, und z. B. die Abfrage von "otherhost.example.com" führt zu einem Fehler.
Ist es möglich, BIND so zu konfigurieren, dass nur einige Einträge einer Domäne außer Kraft gesetzt werden und der Rest rekursiv aufgelöst wird?
quelle
Antworten:
Die beste Methode ist über die Antwortrichtlinienzone in Bind 9.8.1 oder höher. Sie können einzelne Datensätze in beliebigen Zonen überschreiben (und es ist nicht erforderlich, eine ganze Unterdomäne dafür zu erstellen, nur den einzelnen Datensatz, den Sie ändern möchten). Sie können CNAMEs usw. überschreiben. Andere Lösungen wie Unbound können CNAMEs nicht überschreiben .
https://www.redpill-linpro.com/sysadvent/2015/12/08/dns-rpz.html
EDIT: Dann machen wir das richtig. Ich werde anhand des oben verlinkten Tutorials dokumentieren, was ich getan habe.
Mein Betriebssystem ist Raspbian 4.4 für Raspberry Pi, aber die Technik sollte ohne Änderungen unter Debian und Ubuntu oder mit minimalen Änderungen auf anderen Plattformen funktionieren.
Gehen Sie zu dem Ort, an dem sich Ihre Bind-Konfigurationsdateien auf Ihrem System befinden - hier ist es
/etc/bind
. Erstellen Sie dort eine Dateidb.rpz
mit folgendem Inhalt:Was tut es?
www.some-website.com
mit der gefälschten Adresse127.0.0.1
und sendet den gesamten Datenverkehr für diese Site effektiv an die Loopback-Adressewww.other-website.com
an eine andere Site mit dem Namenfake-hostname.com
Alles, was in eine Bindezonendatei passen könnte, können Sie hier verwenden.
Um diese Änderungen zu aktivieren, sind einige weitere Schritte erforderlich:
Bearbeiten
named.conf.local
und fügen Sie diesen Abschnitt hinzu:In dem oben verlinkten Tutorial werden Sie aufgefordert, weitere Elemente hinzuzufügen
zone "rpz" { }
, dies ist jedoch in einfachen Setups nicht erforderlich. Ich habe hier gezeigt, dass dies mindestens auf Ihrem lokalen Resolver funktioniert.Bearbeiten
named.conf.options
und irgendwo imoptions { }
Abschnitt dieresponse-policy
Option hinzufügen :Nun starte Bind neu:
Das ist es. Der Nameserver sollte nun beginnen, diese Datensätze zu überschreiben.
Wenn Sie Änderungen vornehmen müssen, bearbeiten Sie sie einfach
db.rpz
und starten Sie Bind erneut.Bonus: Wenn Sie DNS-Abfragen in Syslog protokollieren möchten, können Sie den Vorgang im Auge behalten, bearbeiten
named.conf.local
und sicherstellen, dass einlogging
Abschnitt mit den folgenden Anweisungen vorhanden ist:Bind erneut starten und fertig.
Testen Sie es auf der laufenden Maschine.
Wenn Sie dig auf einem anderen Computer ausführen, verwenden Sie einfach @ die-IP-Adresse-des-Bindungsservers anstelle von @ 127.0.0.1
Ich habe diese Technik mit großem Erfolg verwendet, um den CNAME für eine Website, an der ich gearbeitet habe, zu überschreiben und an einen neuen AWS Load Balancer zu senden, den ich gerade getestet habe. Ein Raspberry Pi wurde verwendet, um Bind auszuführen, und das RPi wurde auch so konfiguriert, dass es als WLAN-Router fungiert. Wenn ich also Geräte mit der SSID verbinde, die auf dem RPi ausgeführt wird, erhalte ich die DNS-Überschreibungen, die ich zum Testen benötige.
quelle
Der nicht gebundene rekursive DNS-Server kann einzelne Ressourceneinträge überschreiben.
Schauen Sie sich die
local-zone
undlocal-data
Konfigurationseinstellungen im Handbuch an , zB:Die
transparent
Einstellung inlocal-zone
weist es an, normale rekursive Suchen für alle Namen durchzuführen, die nicht mit geliefert werdenlocal-data
.quelle
unbound
auf meinem eigenen Router installieren , ich denke die Lösung ist viel besser.Vielleicht möchten Sie sich mit "dnsmasq" befassen, mit dem Sie einige ziemlich clevere Dinge mit optimierter Auflösung tun können.
quelle
Was Sie suchen, ist aufgeteiltes DNS, das von Webopedia definiert wird als:
Im Wesentlichen müssen Sie eine Kopie Ihrer externen Zonendatei erstellen und auf Ihrem internen DNS-Server ablegen. Anschließend müssen Sie die speziell für Ihr internes Netzwerk erforderlichen Datensätze ändern oder hinzufügen. Dies ist eine ziemlich häufige Einrichtung, obwohl es schwierig sein kann, die "externen" Datensätze zwischen den beiden DNS-Servern synchron zu halten. Wenn Sie einen Datensatz auf dem öffentlichen Server erstellen oder ändern, muss er auch auf dem privaten Server erstellt oder geändert werden.
Dies kann unabhängig von der verwendeten DNS-Serverimplementierung implementiert werden. In den meisten Setups haben Sie einen DNS-Server, der das externe Netzwerk bedient, und einen anderen, der das interne Netzwerk bedient. Mit BIND können Sie als möglicherweise andere Implementierungen beide Versionen der Zone auf demselben Server haben, indem Sie die Anweisung "allow-query" im Zonenabschnitt der Datei named.conf verwenden.
Eine andere Möglichkeit bei BIND (und ich habe es noch nie versucht) wäre, Ihre example.com-Domain auf dem internen DNS-Server nur mit den Datensätzen einzurichten, die Sie intern verwenden. Setzen Sie dann eine "forward" -Anweisung mit dem Argument "first" (in Verbindung mit "forwarders"). Theoretisch würde dies dazu führen, dass der externe DNS-Server (wie in "Weiterleitungen" festgelegt) nach einer Antwort gefragt wird, bei der Ihre internen Datensätze nicht vorhanden sind und keine Fehlerantwort zurückgegeben wird. Dann würde der interne Server sich selbst nach einer Antwort umsehen sicher, ob das funktionieren würde, aber es ist ein Gedanke.
quelle
In BIND komme ich zu diesen Ergebnissen, indem ich eine Zone mit dem gewünschten Hostnamen definiere. Der Ansatz ist in Ordnung, wenn Sie nur einige Hosts überschreiben möchten.
Meine Zonendeklaration sieht folgendermaßen aus:
Meine Zonendefinition sieht folgendermaßen aus:
Wenn ich also example.com über Intranet-DNS und ISP-DNS abfrage, erhalte ich dieselbe IP, aber wenn ich override.example.com abfrage, erhalte ich unterschiedliche Ergebnisse, wenn auf Intranet-DNS (primär) zugegriffen werden kann.
quelle
Du bist schon auf dem richtigen Weg.
Auf Ihren internen DNS-Servern müssen Sie für jeden Ausnahmehost unmittelbar unterhalb von "example.com" eine Zone definieren. Um diese Ausnahmen zu minimieren, ist es üblich, alle internen Computer mit "hosta.internal.example.com" zu benennen, wobei der DNS-Server die meisten Abfragen an externe DNS-Server sendet, jedoch für die Zone "internal.example.com" maßgeblich ist. (Sobald Sie an kleinen Vorgängen vorbeigekommen sind, gibt es normalerweise einige DNS-Server, an die Clients weitergeleitet werden, und einen separaten autorisierenden DNS, an den diese Server für "internal.example.com" weitergeleitet werden.)
Normalerweise werden die von Ihnen beschriebenen Ausnahmen nur dann erstellt, wenn ein Host sowohl extern als auch intern erreichbar sein muss. Selbst dann möchten Sie möglicherweise "host1.example.com" von außen und "host1.internal.example.com" von innen verwenden. Interne Hosts werden so konfiguriert, dass sie in "internal.example.com" nach Namen suchen. Es gibt Situationen, in denen das, was Sie bereits tun, angemessen ist, z. B. wenn das Zertifikat für einen Server den Server als "host1.example.com" identifiziert. In diesem Fall soll dies der Name sein, mit dem Clients eine Verbindung herstellen.
quelle
Mit dnsmasq ist das ganz einfach. http://www.thekelleys.org.uk/dnsmasq/doc.html Dient als DNS-Server, erhält jedoch Antworten vom lokalen DNS-Server. Das Schöne ist, dass Sie einzelne Domain-Einträge überschreiben können, ohne sich mit Zonendateien herumschlagen zu müssen
quelle
Tatsächlich gibt es eine andere, wenn auch etwas andere Möglichkeit, dies zu tun. Ich habe die gleiche Situation, ich habe eine Domäne, die extern und intern verwendet wird, und ich habe externe statische und dynamische Hosts. Die einzigen wirklich schmerzhaften sind die äußeren dynamischen. Die Lösung ist möglicherweise nicht die eleganteste, aber mit einem kleinen Skript umsetzbar. Meistens mache ich mein eigenes dynamisches DNS-Skript mit der API meines dynamischen DNS-Providers. Ich führe dieses Skript alle 5 Minuten von cron aus:
1) bekomme meine externe IP. hat sich das geändert? Kein Ausgang.
2) IP geändert, API des dyndns-Anbieters aufrufen, mit der neuen IP-Adresse,
3) sed die db.mydomain.com mit der externen IP
4) Bind neu starten.
Funktioniert sehr zuverlässig für mein Heimnetzwerk
quelle
dyn.dev.shahed.biz
von World Wide zu lösen ! Würden Sie uns bitte helfen, dieses Problem zu beheben?