Eines Tages stellte sich mir die Aufgabe, einem der Kunden das Recht zu geben, PTR-Einträge für das ihm zugewiesene Netz /28 zu bearbeiten. Ich habe keine Automatisierung zur Bearbeitung der BIND-Einstellungen von außen. Daher wollte ich einen anderen Weg gehen – dem Kunden ein Stück der PTR-Zone des /24-Subnetzes zu delegieren.
Man könnte denken, was könnte einfacher sein? Man trägt einfach das Subnetz richtig ein und leitet es an den benötigten NS weiter, wie man es mit einem Subdomain macht. Aber das ist nicht so einfach. (Obwohl es in der Tat ganz primitiv ist, aber die Intuition wird nicht helfen), deshalb schreibe ich diesen Artikel.
Wer selbst herausfinden möchte, kann lesen.
Wer eine fertige Lösung möchte, ist herzlich eingeladen, weiterzulesen.
Um diejenigen, die die Copy-Paste-Methode lieben, nicht aufzuhalten, beginne ich mit dem praktischen Teil, gefolgt vom theoretischen.
1. Praxis. Zone /28 delegieren.
Angenommen, wir haben ein Subnetz. 7.8.9.0/24. Wir müssen das Subnetz delegieren. 7.8.9.240/28 an den DNS-Client. 7.8.7.8 (ns1.client.domain).
Im DNS des Anbieters muss die Datei gefunden werden, die die umgekehrte Zone dieses Subnetzes beschreibt. Nehmen wir an, es ist. 9.8.7.in-addr.arpa.
Die Einträge von 240 bis 255 kommentieren wir, wenn vorhanden. Und am Ende der Datei schreiben wir folgendes:
255-240 IN NS 7.8.7.8
$GENERATE 240-255 $ CNAME $.255-240wir vergessen nicht, die Seriennummer der Zone zu erhöhen und machen
rndc reloadDamit ist der Teil des Anbieters abgeschlossen. Gehen wir zum DNS des Kunden über.
Zunächst erstellen wir die Datei. /etc/bind/master/255-240.9.8.7.in-addr.arpa des folgenden Inhalts:
$ORIGIN 255-240.9.8.7.in-addr.arpa.
$TTL 1W
@ 1D IN SOA ns1.client.domain. root.client.domain. (
2008152607 ; serial
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
@ IN NS ns1.client.domain.
@ IN NS ns2.client.domain.
241 IN PTR test.client.domain.
242 IN PTR test2.client.domain.
245 IN PTR test5.client.domain.
Und in named.conf fügen wir die Beschreibung unserer neuen Datei hinzu:
zone "255-240.9.8.7.in-addr.arpa." IN {
type master;
file "master/255-240.9.8.7.in-addr.arpa";
};B starten wir den BIND-Prozess neu.
/etc/init.d/named restartDas ist alles. Jetzt können wir prüfen.
#> host 7.8.9.245
245.9.8.7.in-addr.arpa is an alias for 245.255-240.9.8.7.in-addr.arpa.
245.255-240.9.8.7.in-addr.arpa domain name pointer test5.client.domain.Bitte beachten Sie, dass nicht nur die PTR-Aufzeichnung, sondern auch der CNAME zurückgegeben wird. So sollte es auch sein. Wenn Sie interessiert sind, warum, sind Sie eingeladen, im nächsten Kapitel weiterzulesen.
2. Theorie. Wie funktioniert das?
Es ist schwierig, einen Black Box einzurichten und zu debuggen. Es ist viel einfacher, wenn man versteht, was darin passiert.
Wenn wir eine Subdomain in der Domain delegieren, domain, schreiben wir etwas in dieser Art:
client.domain. NS ns1.client.domain.
ns1.client.domain. A 7.8.7.8Wir informieren alle Anfragenden, dass wir für dieses Stück nicht zuständig sind und wer zuständig ist. Und alle Anfragen an client.domain werden auf 7.8.7.8 umgeleitet. Bei der Überprüfung sehen wir folgendes Bild (lassen wir mal weg, was beim Kunden ist. Das ist unwichtig):
# host test.client.domain
test.client.domain has address 7.8.9.241Das heißt, uns wurde mitgeteilt, dass es diesen A-Eintrag gibt und seine IP 7.8.9.241 ist. Keine zusätzlichen Informationen.
Und wie kann man das Gleiche mit einem Subnetz erreichen?
Da unser DNS-Server in RIPE eingetragen ist, wird bei einer PTR-Anfrage von einer IP-Adresse aus unserem Netzwerk die erste Anfrage trotzdem an uns gerichtet. Die Logik ist dieselbe wie bei Domains. Nur, wie schreibt man ein Subnetz in die Zonen-Datei?
Wir versuchen es so:
255-240 IN NS 7.8.7.8Und… das Wunder ist nicht geschehen. Wir erhalten keine Umleitung der Anfrage. Das Problem ist, dass BIND nicht einmal weiß, dass diese Einträge in der umgekehrten Zonen-Datei IP-Adressen sind und erst recht nicht versteht, was ein Bereichseintrag ist. Für ihn ist das einfach ein gewisser symbolischer Subdomain. Das heißt, für BIND macht es keinen Unterschied zwischen „255-240» und „oursuperclient«. Und damit die Anfrage dorthin gelangt, wo sie hingehört, muss die Adresse in der Anfrage so aussehen: 241.255-240.9.8.7.in-addr.arpa. Oder so, wenn wir eine symbolische Subdomain verwenden: 241.oursuperclient.9.8.7.in-addr.arpa. Das unterscheidet sich von der normalen: 241.9.8.7.in-addr.arpa.
Manuell wird es schwierig sein, eine solche Anfrage zu formulieren. Und selbst wenn es funktioniert, ist unklar, wie man das im realen Leben anwendet. Denn auf die Anfrage 7.8.9.241 antwortet uns immer noch der Provider-DNS und nicht der Client-DNS.
Und hier kommen CNAME.
auf der Seite des Providers ins Spiel, um für alle IP-Adressen des Subnetzes ein Alias in ein Format zu erstellen, welches die Anfrage an den Client-DNS weiterleitet.
255-240 IN NS ns1.client.domain.
241 IN CNAME 241.255-240
242 IN CNAME 242.255-240
usw.
Das ist für die Fleißigen =).
Und für die Faulen passt die folgende Konstruktion besser:
255-240 IN NS ns1.client.domain.
$GENERATE 240-255 $ CNAME $.255-240Jetzt wird die Anfrage nach Informationen zur Adresse 7.8.9.241 aus 241.9.8.7.in-addr.arpa auf dem DNS-Server des Providers in 241.255-240.9.8.7.in-addr.arpa umgewandelt und an den DNS-Client gesendet.
Auf der Client-Seite müssen solche Anfragen bearbeitet werden. Dementsprechend erstellen wir die Zone 255-240.9.8.7.in-addr.arpa. In dieser können wir grundsätzlich umgekehrte Einträge für beliebige IPs des gesamten Subnetzes /24 speichern, aber es werden nur die abgefragt, die der Provider an uns weiterleitet, sodass wir hier nicht experimentieren können =).
Zur Veranschaulichung gebe ich noch einmal ein Beispiel für den Inhalt der umgekehrten Zonen-Datei auf der Client-Seite:
$ORIGIN 255-240.9.8.7.in-addr.arpa.
$TTL 1W
@ 1D IN SOA ns1.client.domain. root.client.domain. (
2008152607 ; serial
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
@ IN NS ns1.client.domain.
@ IN NS ns2.client.domain.
241 IN PTR test.client.domain.
242 IN PTR test2.client.domain.
245 IN PTR test5.client.domain.
Da wir auf der Seite des Anbieters CNAME verwenden, erhalten wir eine Antwort auf die Datenanfrage mit IP-Adresse zwei Einträgen und nicht mit einem.
#> host 7.8.9.245
245.9.8.7.in-addr.arpa is an alias for 245.255-240.9.8.7.in-addr.arpa.
245.255-240.9.8.7.in-addr.arpa domain name pointer test5.client.domain. Vergessen Sie nicht, ACL korrekt zu konfigurieren. Es macht keinen Sinn, sich die PTR-Zone zu nehmen und niemandem von außen zu antworten =).
Quelle: habr.com
