orm@doc-tcpip.org | Erstellt: November 1999 - Letzte Modifikation: Oktober 2001 |
Ist eigentlich ganz simpel: Der named, also der name-Deamon,
ist der Service/Deamon, der die netzweite Namensauflösung sicherstellt.
Dieser Deamon sitzt auf dem "well known" Port 53 und gibt auf Anfragen
aus den in seinen Datenfiles oder in seinem Cache befindlichen
Informationen antwort.
Für den Austausch von Zonen-Daten gibt es ein Programm namens
named-xfer, das im Zusammenspiel mit dem named die Zonen
zwischen den Servern synchron hält.
Eine von vielen, allerdings die verbreitetste
Software/Implementation, die diese Services bietet, ist BIND (Berkely
Internet Name Deamon). Davon gibt es 3 verschiedene Releases:
bind4 - die "normale" Version. Mit letzten Patches sicher.
bind8 - eine deutlich erweiterte Version, die neue Features in Punkto
Sicherheit, Konfiguration und Datentypen (SRV-Records) zuläßt.
Unterscheidet sich von der Architektur und der Konfiguration deutlich
von der Version 4.
bind 9 - ein kompletter Rewrite des Bind. Baut auf bind8 auf.
Es gibt eine Reihe anderer Software, die aber fast immer Beschränkungen
aufweist. Ausserdem kenne ich diese Programme nur sehr schlecht ;-).
Das war jetzt die Serverseite. Auf der Client-Seite sind einige Routinen nötig, die es einem Client ermöglichen, mit dem Server zu sprechen und die Information richtig zu interpretieren. Das ist der sogenannte Resolver, der z.B. mit dem BIND mitkommt und seperat installiert werden kann (es sind ein Satz von Bibliotheken (Libaries)).
Also: DNS ist das Protokoll, named und named-xfer (sowie ns_update) sind die Deamons/Services auf der Serverseite, während der Resolver auf der Clientseite die Anfragen stellt und die Antworten interpretiert. Ein Softwarepaket, was all das implementiert, ist eine beliebige Version von BIND - neben anderen.
DNS ist ein hierachisches System, das den gesamten Raum in
Domänen einteilt. Die alles umfassende, oberste Domäne ist die
Root-Domäne.
Für eine solche Domäne existiert mindestens ein
Server, der entweder die einzelnen Hosts direkt auflösen kann, oder der
über die weitere einteilung der Domäne bescheid weiss. Der Server, der
die wirklichen Daten, also die Zuordnung Hostname - IP Adresse hat und
managed, ist authoritative für diesen Bereich.
Die Daten eine Domäne sind im Regelfall in sogenannte Zonen
unterteilt. Diese Zonen reflektieren logische, administrative oder zur
besseren Wartung gebildete Teile des Namensraumes. Eine Zone ist die
eigentliche Einheit, für die man verantwortlich, authoritative, sein
kann. Das ist ein sehr wichtiges Konzept, und der Zusammenhang von
Zone und Domäne muß klar sein: Eine Domäne ist etwas, worauf man von
außen zeigen kann, während eine Zone eine klar begrenzte Untermenge
darstellt, deren Verantwortung beliebig delegiert werden kann.
In einer beliebigen Domäne gibt es also viele Zonen, für die jeweils ein Server voll verantwortlich ist. Nach aussen ist mindestens ein Server sichtbar, der über die Aufteilung bescheid weiss und so Anfragen weiterleiten kann. Nach unten kann man die Verantwortung einer Zone auf beliebig viele Schultern verteilen, also neue Zonen bilden - das ist nach oben transparent und die Domäne wird davon nicht beeinflußt.
Welche Informationen müssen jetzt vorliegen?
Einmal eine Liste mit Servern, an die man sich wenden kann, wenn man auf
eine Anfrage überhaupt keine Antwort weiss. Das sind Verweise auf die
Server der Root-Domäne. Dann brauche ich für jede der Zonen, für die ich
voll verantwortlich bin, ein File mit der Zuordnung Hostname -
IP-Adresse (die direkte Auflösung) und ein File mit der Zuordnung
IP-Adresse - Hostname (die reverse Auflösung). Für jede Zone, die ich
von einem anderen Server als Slave lade, gilt dasselbe. In der
Regel werde ich auch das Loopback-Netz bedienten. Im einfachsten Fall
sähe das ungefähr so aus:
-rw-r--r-- root/root 2769 2001-01-30 16:32:31 zone-data/root.hint -rw-r--r-- root/root 184 2001-01-30 16:32:31 zone-data/localhost.zone -rw-r--r-- root/root 228 2001-01-30 16:32:31 zone-data/127.0.0.zone -rw-r--r-- root/root 891 2001-07-24 15:30:26 zone-data/orm.zone -rw-r--r-- root/root 395 2001-07-24 12:43:33 zone-data/172.168.2.zone
Ich habe ein File mit den Root-Servern (root.hint), die direkte und reverse Auflösung der loopback Zone (localhost-zone und 127.0.0.zone) und das eigentliche Herzstück, die Zone, für die der ganze Aufwand gemacht wird (orm.zone und 172.168.2.zone).
Generell werden alle Files ohne Beachtung der Groß- und Klein-Schreibung gelesen und gespeichert.
Es ist sehr wichtig, die verschiedenen "Arten" von Namen verstanden zu haben. Wie erwartet hat eine Maschine einen Hostnamen, der auch als Domänenname bezeichnet wird, wenn die entsprechende Domäne angehängt ist. Das sorgt meist für etwas Konfusion, den meist wird als Domäne nur das Ende des Namens gesehen. Das ist aber variabel, und hängt vom Origin ab, also der Ausgangspunkt des Teiles des Namensraumes, meist der Bereich, über den man herrschen kann. Bezieht sich ein Name auf die Root-Domäne des gesamten DNS Raumes, dann ist der Name FDQN - der Fully Qualified Domain Name.
Es gibt eine Reihe spezielle Zeichen:
@ - der Platzhalter für den Ausgangspunkt, das Origin (aus dem Konfigurationsfile oder durch Setzung von $ORIGIN in den Datenfiles).
* - ein Wildcard.
Man kann das Sternchen * als Wildcard nutzen. Ein Wildcard gilt nur dann,
wenn es in der Datenbank keinen exakten Treffer gibt. Damit ist es z.B.
möglich, Mail an ein Gateway zu schicken, das nicht am Internet
hängt.
*.orm.org. IN MX 10 mail-relay.intern.orm.org.
Vorsichtig sollte man damit sein, den es wird alles geroutet, was
orm.org am Ende hat - also auch Fehler wie
dumpy.orm.org.orm.org.
Hostnamen mit einem Punkt am Ende sind absolute Namen, also komplett. Ohne Punkt sind sie relativ, der komplette, absolute Name wird also durch Anfügen des Ausgangspunktes (also des $ORIGIN) erzeugt. Diese Information findet der Deamon entweder im File, oder er wird auf der Kommandozeile mitgegeben. Ohne diese Information gibt es einen Fehler.
$ORIGIN domänen-name setzt den Ausgangspunkt für
die folgenden Namen: Name.$ORIGIN
$INCLUDE file-name domänen-name schiebt
den Inhalt des Files hier ein. Gibt man einen Domänen-Namen mit an, so
wird der relative Ausgangspunkt für die im File aufgeführten Host-Namen
verändert.
$TTL setzt einen globalen Wert für die
Time To Live der in der Datenbank referenzierten
Resource Records.
Alle Information über eine Zone, also die Namen und Adressen der
Hosts in der Zone, der Mailserver, die Nameserver, welche Maschinen
welche Services anbieten etc. sind in sogenannten Resource
Records gespeichert.
Diese RRs haben einen Besitzer (Owner), der an erster
Stelle steht. Führt ein Blank, dann wird der Resource Record dem zuletzt
erwähnten Besitzer zugerechnet. Es folgen dann TTL und
Class des Records. Danach Angaben zum Type und schließlich
die eigentliche Information, die Resource Daten (RData):
Owner TTL Class Type Daten
Owner Class TTL Type Daten
Klasse und TTL können fehlen, es wird dann der Default-Wert angezogen.
Und die Reihenfolge ist auch egal, was Klasse und TTL angeht.
Sind in RFC 1035 spezifiziert.
Die Klasse eines Resource Records hängt von der Art des
Netzwerk-Protokolles ab. Es gibt 4 Klassen, wobei 98% aller Leute nur
die Klasse für das Internet kennen und brauchen. Die anderen Klassen
sind entweder propietär oder nur intern verwirklicht. Hier die vier Klassen:
IN, Kode 1: RRs für das Internet Protokoll.
CS, Kode 2: RRs für das obsolete CSNET.
CH, Kode 3: RRs für das CHAOS Net, auch ein obskures Testnetz.
HS, Kode 4: RRs für das HESIOD Net, ein Testnetz am MIT.
Das ist in folgenden RFCs spezifiziert: 1035, 1183, 1664.
Art bzw. Typ eines Resource Records - was man mit der Information
anfangen soll oder kann. Es gibt eine ganze Reihe verschiedener Typen,
und je nach Anforderung werden neue hinzugefügt. Hier eine nicht
vollständige Aufführung der üblichen und nützlichen Typen
(wenig benutzte Typen habe ich weggelassen, es sei den sie sind sehr
interessant):
A - Adresse Ordnet einen Host-Namen
(eigentlich den Domänen-Namen des Hostes) einer IP-Adresse zu.
Wenn der angebene Name nicht in einem Punkt endet, dann wird die Domäne,
also der Ausgangspunkt, das Origin, angefügt.
Es darf pro IP-Adresse nur
einen Namen geben. Das ist der kanonische Name
(canonical name), also der "wirkliche Name des Interfaces".
Das sieht dann so aus (für die Klasse IN, Internet Protokoll):
Host-Name IN A 10.50.9.12
CNAME - Canonical Name Ordnet einem
kanonischen Namen ein Alias zu. Oft ist es so, das ein Host einen Namen
hat, aber z.B. Services anbietet, die zur Vereinfachung direkt
angesprochen werden sollen. Das geschieht mit einem CNAME-Record
- im Prinzip nichts anderes als ein Alias, ein Verweis auf den
wirklichen Namen, der dahinter steht. Im Beispiel habe ich eine
Server-Maschine "Jupiter" (weil im Netz alle Maschinen nach Planeten
heißen), die Mail-Server und DHCP-Server ist. Der User soll sich nicht
darum kümmern, auf welcher Maschine diese Services gerade laufen,
sondern direkt mail und dhcp ansprechen können:
jupiter IN A 10.50.5.3
mail IN CNAME jupiter
dhcp IN CNAME jupiter
Hier haben wir 3 RRs, die 3 verschiedenen Besitzern gehören, aber nur
auf eine IP-Adresse verweisen. Die CNAME RRs verweisen auf den RR, der
den kanonischen Namen der IP-Adresse trägt. Solche Aliase dürfen immer
nur links im RR stehen, und rechts,
also im Datenteil,
dürfen in einem CNAME RR nur kanonische Namen stehen.
Alles andere führt zu Fehlern:
jupiter IN A 10.50.5.3
JUPITER IN CNAME jupiter
Hier wurde Vergessen, daß named und das DNS keine Groß- und
Kleinbuchstaben kennt. Es wird also versucht, auf den eigenen
kanonischen Namen ein Alias des gleichen Namens zu legen - und der named
steigt aus.
Weitere Regeln zu CNAME Records sind:
Es ist nicht möglich, CNAME Records auf Zonen anzuwenden.
Das liegt daran, daß ein Domänen-Name entweder ein Alias oder ein
kanonischer Name sein darf. An einer delegierten Zone mit eigenem SOA
Record und NS Records hängen jedoch noch weitere Einträge. Will man also
eine Zone umbenennen, so muß man für jeden Rechner einen CNAME RR
erzeugen. Im Fall einer nicht delegierten Zone (ohne SOA und NS RRs)
kann man so vorgehen.
Man kann CNAME RRs verschachteln, also ein Alias auf ein Alias legen. Schlau ist das sicher nicht.
Alias und Nick-Namen lassen sich nicht per nslookup finden, und auch ein Nameserver kann sie nicht gezielt suchen.
Aliase, also CNAME RRs, findet man mit dem nslookup:
set qtype=cname
PTR - Pointer Ordnet einer IP-Adresse einen
kanonischen Namen zu. Dieser Typ RR ist für die reverse
Namensauflösung, also die Umsetzung der IP-Adresse in den Namen,
zuständig. Der RR zeigt auf den der IP-Adresse zugeordneten A Record.
Ein Beispiel:
3.1.168.192.in-addr.arpa. IN PTR elrescatado.orm.org.
Der Rechner elrescatado.orm.org. hat also die IP-Adresse
192.168.1.3.
HINFO - Host Information Gibt zu einer
bestimmten IP-Adresse Informatione zur Hard- und Software. Man kann
seine eigenen Strings einsetzen, aber eigentlich sollte man die in RFC
1700 definierten benutzen. Das Ganze ist ein ziemliches Sicherheitsloch,
und heute wohl nicht mehr aktuell.
elbueno.orm.org. IN HINFO PC-Blechkopf FreeBSD
MX - Mail Exchanger Ordnet einer Domäne einen
Mail-Server zu, der an diese Domäne gerichtete Mail handeln kann.
Ein SMTP-fähiger, remoter Server fragt diese Information im DNS
anhand der in der Mail angegebene Adresse ab und versucht dann, eine der
aufgeführten Maschinen direkt zu kontaktieren. Hier ein Beispiel:
orm.org. IN MX 0 post.hub.orm.org. . 10 elbueno.orm.org. . 20 elnuevo.orm.org.Im Datenfeld, nach Klasse und Typ, kommt ein Prioritäts-Indikator. Das ist eine 16-Bit Zahl, die eine Hierarchie innerhalb der einer Domäne zugeordneten Mail-Servern herstellt. Je kleiner die Zahl, desto höher der Rang.
NS - Name Server Ordnet einer Domäne einen
Name-Server zu. Dieser Name-Server ist für diese Domäne zuständig,
besitzt also die Informationen aus erster Hand - Er ist
authoritative für diese Domäne. Wobei er natürlich Teile
delegiert haben kann. Aber er weiß an wenn und kann daher
zuverläßig Auskunft geben. Hier ein Beispiel Record:
orm.org. IN NS elrescatado.orm.org.
Name-Server können für verschiedene Zonen oder Adress-Klassen
verantwortlich sein.
SOA - Start of Authority Die allgemeine Syntax
sieht folgendermaßen aus:
owner class ttl SOA source-dname mbox ( serial refresh retry expire minimum)
Hier ein konkretes Beispiel:
. orm.org IN SOA elrescatado.orm.org root.elbueno.orm.org ( . 1 => Seriennummer . 10800 => Auffrischen nach 3 Stunden . 3600 => Neuer Versuch nach 1 Stunde . 604800 => Verfallszeit eine Woche . 86400 => Mindest Lebensdauer 1 Tag )orm.org - Die Domäne, für die die Einstellungen gelten sollen.
TXT - Textual Information
Ermöglicht die Weitergabe zusätzlicher Informationen. Hier ein Beispiel:
elanciano IN TXT "Maschine ist sehr langsam..."
Dient zur Weitergabe von Text-Info. Heutzutage wohl nicht mehr so angesagt.
LOC - Location Ist im RFC 1876 spezifiziert und ein sehr interessanter Ansatz. Dient zur Angabe der Koordinaten des physikalischen Standpunktes einer Maschine. Die Angabe der Koordinaten erfolgt in Grad Minute Sekunde (N | S | E | W) plus der Höhe über NN. Es ist dann zusätzlich noch möglich, die Ausdehnung des örtlichen Netzes mitanzugeben. Weitere Info gibt es hier (www.ckdhr.com).
AAAA - IPv6 Adressen
Nach RFC 1886. BIND erwartet einen A Record, der 32-Bittig ist und im
"Dotted Octal Format" vorliegt. Da ist für die IPv6 128 Bit Adressen
kein Platz. Daher mußte ein neuer Record-Typ eingeführt werden.
Hier sieht das Ganze so aus: Die 128 Bit Adresse wird in 8 Teile mit
je 4 Hexadezimalstellen zerlegt. Getrennt werden diese Blöcke durch
Doppelpunkte. Führende Nullen können entfernt werden. Ein Beispiel:
ein-ipv6-host IN AAAA 4321:0:1:2:3:4:567:89abFür die MX und NS Record Typen gilt das genauso.
b.a.9.8.7.6.5.0.4.0.0.0.3.0.0.0.2.0.0.0.1.0.0.0.0.1.2.3.4.ip6.int AAAA PTR ein-ipv6-host
A6
SRV - Service Location
Spezifiziert im RFC 2052.
Dient zur Lokalisation eines bestimmten Services im Netz. Zusätzlich ist
es über Prioritäten möglich, die Last zu verteilen. Die Namen der Services
sind in RFC1700 spezifiziert bzw. finden sich in der IANA Datenbank.
Ein solcher Record spezifiziert folgende Parameter:
Priorität wie bei den MX-Records, je niediger, desto höher
die Priorität.
Gewicht zum Verteilen der Last. Clients sollen die Maschinen nach
der Priorität ordnen, und bei gleicher Priorität nach dem Verhältnis dieser
Zahlen Anfragen an diese Server vergeben. Ein Beispiel:
Server A mit Prio 1 und Gewicht 1, Server B mit Prio 1 und Gewicht 2.
Die Lastverteilung wird so sein: 33% für Maschine A, 66% für Maschine B.
Port spezifiziert den Port, auf dem der Service läuft.
Ziel ist der Domänen-Name des Servers. Es muß der kanonische
Name der Maschine
sein - kein Alias (Also ein Record mit zugehörigem Address-Record).
Hier einige Beispiele:
. ftp.tcp IN SRV 1 0 21 elbueno.orm.org. . IN SRV 2 0 21 elnuevo.orm.org. . http.tcp.www IN SRV 0 2 80 elrapido.orm.org. . IN SRV 0 1 80 labonita.orm.org. . IN SRV 1 1 8000 elviejo.orm.org.Unterstützt der Client (z.B. ein Browser) keine SRV RRs, dann werden seine Anfragen "round robin" zwischen den Servern abgearbeitet. Ist die Client-Seite in der Lage, SRV RRs auszuwerten, dann schickt der Browser selbst seine Anfragen den Einstellungen in Priorität und Gewicht entsprechend direkt an diese Server.
.... normaler Inhalt neuerechner.fast IN A andererechner.fast IN A IN MX 10 ... . IN MX 10 ... . IN CNAME --.--.-.-.Der Namensteil der Subdomäne wird also an den Rechnernamen mit angehängt. Schließlich wird ja das Origin "orm.org." später noch angefügt. Man kann sich die Schreibarbeit sparen, indem man explizit die $ORIGIN Variable setzt:
$ORIGIN fast.orm.org. neuerrechern IN A ..Dieses Origin gilt für alle weiteren Einträge bzw. bis zu einem neuen $ORIGIN. Setzt man eine $INCLUDE Variable, so kann man auf ein anderes File verweisen, indem die Daten zu "fast.orm.org" oder zu beliebigen Teilen des Namensraumes stehen. Dabei kann man das Origin ändern, muß es aber nicht.
Diese Subdomäne ist nach wie vor eine Domäne, die dieser Server voll verantwortet. Es kann jetzt viele Gründe geben, diese Verantwortung an eine andere Maschine abzugeben. Das ist eine Delegation. Dabei gilt, das man nur Bereiche delegieren kann, die in der DNS-Hierarchie abwärts vom eigenen Standpunkt angesiedelt sind. Nach aussen hin ist weiterhin dieser Server Ansprechpartner, verweist aber dann auf den wirklich verantwortlichen Server. Diese Maschine ist dann Master für die entsprechende Zone, und genau wie ein Master eingerichtet. Man richtet alles ein und Testet gründlich. Wenn innerhalb der Subdomäne dann alles einwandfrei läuft, kann man die Delegation vornehmen.
Das geschieht auf den übergeordneten Master. Dort wird innerhalb der Hauptdomäne auf den Nameserver der jetzt eigenständigen Subdomäne verwiesen:
fast 86400 IN NS ns.fast.orm.org. 86400 IN NS ns-sec.fast.orm.org. #(Das müssen kanonische Namen sein!)Damit ist die Verantwortlichlkeit klar, und die Nameserver sind auch benannt. Dummerweise liegen die aber schon in der neuen Zone, und es gibt einen Weg, an die IP zu kommen - diese ist nur in der Subdomäne bekannt. Daher muß man beide Domänen zusammenkleben: Dazu dient der glue-record. Das ist einfach die Angabe des A-Records der Server:
fast 86400 IN NS ns.fast.orm.org. 86400 IN NS ns-sec.fast.orm.org. ns.fast.orm.org. 86400 IN A 172.168.12.4 ns-sec.fast.orm.org. 86400 IN A 172.168.16.13Die reverse Domäne, also die in-addr.arpa Domäne, muß natürlich auch delegiert werden. Da es sich meist um einen definierten Block Adressen handelt, ist das in der Regel einfach. Im Beispiel ist orm.org 192.168.1, und fast.orm.org 172.168. Es muß also 172.168.0.0 delegiert werden:
172.168 86400 IN NS ns.fast.orm.org. IN PTR ns.fast.orm.org.
Mit einem "definierten Block" sind hier Adressräume gemeint, die mit Netzmasken definiert sind, die genau Byte-weise gesetzt sind, also 255.255.0.0 oder 255.255.255.0. Schwierig wird die Angelegenheit, wenn man Netzmasken hat, die Bit-weise den Adressblock einteilen. Ein Beispiel wäre 255.255.248.0. Die Zuordnung im DNS erfolgt nach IP-Adressen, und zwar in Dezimaler Darstellung. Bei einem Bitweise umgebrochenen Netz sind die IP-Adresse aber nicht mehr stetig aufwärts zählend zugeordnet (die binären Zahlen schon..).
Man kann jetzt einfach den reversen Namensraum in eine große Zone packen, was eine richtige Delegation mit Delegation der Verantwortung unmöglich macht, weil sich die Administratoren weiterhin gegenseitig informieren müßen. Oder man muß jeder IP eine eigene Zone zuordnen.
Abhilfe schafft hier der RFC2317, Classless IN-ADDR.ARPA delegation. Nach dieser Methode wird auf dem Master-Server, der die Zonen delegiert hat, die reverse Namensauflösung verändert. Es wird für den ganzen reversen Namensraum ein File zone.in-addr.arpa.dns angelegt, indem für jede IP-Adresse ein Alias (also ein CNAME Record) eingefügt wird. Dieser Record zeigt auf einen virtuellen Domänennamen:
1.xx.xx.xx.in-addr.arpa. IN CNAME 1.0-63.xx.xx.in-addr.arpa. 2.xx.xx.xx.in-addr.arpa. IN CNAME 2.0-63.xx.xx.in-addr.arpa. .... 65.xx.xx.xx.in-addr.arpa. IN CNAME 65.64-127.xx.xx.in-addr.arpa. 66.xx.xx.xx.in-addr.arpa. IN CNAME 66.64-127.xx.xx.in-addr.arpa. ....Diese virtuellen Domänen zeigen dann wieder auf die entsprechenden Nameserver, die für diesen Teil der reversen Namensraum verantwortlich sind (also die Server, auf die dieser Teil des Adressraumes delegiert worden ist):
0-63.xx.xx.in-addr.arpa. 86400 IN NS ns.kklkkjklkl. 64-127.xx.xx.in-addr.arpa. 86400 IN NS ns2.kklkkjklkl.Auf der Seite der Server der Subdomäne (also die, die die Delegation tragen) muß nun ein File 0-63.xx.xx.in-addr.arpa.dns mit den Resource Records zu den Adressen .1 - .63 angelegt und verwaltet werden.
Wird jetzt außerhalb der Subdomain eine reverse Namensauflösung angefordert, so leitet der Server der Hauptdomäne die Anfrage transparent über den CNAME Record auf den Nameserver weiter, der in diesem Record mit der virtuellen Domäne verknüpft ist. Mit diesem Kunstgriff werden nichtzusammenhängende Bereiche von IP-Adressen auf eine Domäne gebündelt, und dieser Domäne wird ein verantwortlicher Server zugeordnet.
Hier ein Beispiel zur Illustration: Die Maschine linux ist der Master-Server für die Domäne orm.org. Das dazugehörige Netz ist 172.168.1/24.
Dieser Server vergibt dieses Netz (172.168.1/24) in drei Teilen, die er an andere Server delegiert:
fast.orm.org: 172.168.1.0/25
Netzmaske: 255.255.255.128
Broadcast: 172.168.1.127
Adressen: 172.168.1.1 --> 172.168.1.126
Delegiert an elpequeno
slow.orm.org: 172.168.1.128/26
Netzmaske: 255.255.255.192
Broadcast: 172.168.1.191
Adressen: 172.168.1.129 --> 172.168.1.190
Delegiert an linux4
old.orm.org: 172.168.1.192/27
Netzmaske: 255.255.255.224
Broadcast: 172.168.1.223
Adressen: 172.168.1.193 --> 172.168.1.222
Delegiert an dumpy
Ein kleiner Exkurs: Es sind weitere Netze möglich:
Mit einer 1 Bit Netzwerkmaske: 2*63 zwei Netze mit je 63 Adressen:
0 => 0, 1 => 128
Mit einer 2 Bit Netzwerkmaske: 4*31 vier Netze mit je 31 Adressen:
00 => 0, 01 => 64, 10 => 128, 11 => 192
Mit einer 3 Bit Netzwerkmaske: 8*15 acht Netze mit je 15 Adresen:
000 => 0, 001 => 32, 010 => 64, 011 => 96, 100 => 128, 101 => 160,
110 => 192, 111 => 224
Auf dem von aussen sichtbaren Server (linux.orm.org) gibt es für die ganze Zone orm.org und für den ganzen Adressbereich (172.168.1.0/24) einen Eintrag in der /etc/named.conf (es gibt natürlich noch mehr Domänen, hier nur die wesentlichen Teile):
# # orm.org # zone "orm.org" IN { type master; file "zone-data/orm.zone"; # by default, any host can receive zone transfers allow-transfer { any; }; notify yes; }; # # fast.orm.org, slow.orm.org, old.orm.org # entstehen durch Delegation # zone "1.168.172.in-addr.arpa" IN { type master; file "zone-data/172.168.1.rev"; check-names fail; allow-update { none; }; };
Auf dieser Maschine delegiere ich jetzt einmal den direkten Namensraum (also Teile der Domäne orm.org, im File /var/named/zone-data/orm.zone):
@ IN SOA orm.org. root.linux.orm.org. ( 2 ; serial 2D ; refresh 4H ; retry 6W ; expiry 1W ) ; minimum ; ; Name Server fuer diese Zone ; IN NS linux.orm.org. ; ; Die kanonischen Namen der Maschinen ; linux4 IN A 192.168.1.4 [Hier ein paar Adressen mehr ... ] linux IN A 192.168.1.9 ; ; fast IN NS elpequeno.fast.orm.org. elpequeno.fast.orm.org. IN A 172.168.1.12 slow IN NS linux4.slow.orm.org. linux4.slow.orm.org. IN A 192.168.1.4 old IN NS dumpy.old.orm.org. dumpy.old.orm.org. IN A 172.168.1.202 ;End of File.
Interessant sind die letzten 3 NS Records. Das ist die Delegation der Subdomänen fast, slow und old. Der NS-Record ist der Verweis auf den zuständigen Nameserver, also auf die Maschine, die die Delegation annimmt. Da diese Maschinen in der Regel in einem anderen Netz liegen, muß man das auch sagen. Daher der A Record, ein sogenannten Glue-Record.
Für die reverse Namensauflösung auf dieser Maschine tue ich das, was der RFC2317 empfielt. Ich lege für jede Adresse einen CNAME Record an, der auf eine Dummy-Domäne verweist, die dann auf die Nameserver der Subdomänen delegiert werden kann (File /var/named/zone-data/172.168.1.rev):
@ IN SOA linux.orm.org. root.linux.orm.org. ( blah blah blah ) ; ; Name Server ; IN NS linux.orm.org. ; ; CNAME Records für jede Adresse, die auf eine Dummy-Domäne ; und deren NS deuten ; ; 0-127 /25 (fast.orm.org) ; 0-25 IN NS elpequeno.fast.orm.org. 1 IN CNAME 1.0-25.1.168.172.in-addr.arpa. 2 IN CNAME 2.0-25.1.168.172.in-addr.arpa. [Hier ein paar Adressen mehr ... ] 125 IN CNAME 125.0-25.1.168.172.in-addr.arpa. 126 IN CNAME 126.0-25.1.168.172.in-addr.arpa. ; ; 128-191 /26 (slow.orm.org) ; (der Server liegt in orm.org...) ; 128-26 IN NS linux4.orm.org. 129 IN CNAME 129.128-26.1.168.172.in-addr.arpa. 130 IN CNAME 130.128-26.1.168.172.in-addr.arpa. [Hier ein paar Adressen mehr ... ] 189 IN CNAME 189.128-26.1.168.172.in-addr.arpa. 190 IN CNAME 190.128-26.1.168.172.in-addr.arpa. ; ; ; 192-223 /27 (old.orm.org) ; 192-27 IN NS dumpy.old.orm.org. 193 IN CNAME 193.192-27.1.168.172.in-addr.arpa. 194 IN CNAME 194.192-27.1.168.172.in-addr.arpa. [Hier ein paar Adressen mehr ... ] 221 IN CNAME 221.192-27.1.168.172.in-addr.arpa. 222 IN CNAME 222.192-27.1.168.172.in-addr.arpa. ;End of File.
Die Namen meiner Dummy-Domänen baue ich nach verbreiteter Sitte aus der Netzwerknummer und den Bits der Netzmaske zusammen: 192-27 ist also das Netz 172.168.1.192, die Netzmaske 255.255.255.224, also 27 Bit.
Für jede der delegierten Zonen brauche ich einen NS Record, der auf den Server zeigt, der diesen Bereich übernimmt. Danach muß ich nur noch für jede denkbare Adresse einen CNAME Record, also ein Alias anlegen. Von diesem Moment an ist alles ein Problem der Administratoren der Subnetz-Nameserver. Ich habe mit der Sache nur noch zu tun, wenn sich der Name eines dieser Server ändert. Die Arbeit, hunderte von CNAME Records anzulegen, nimmt mir BIND ab: Im Datenbank-File trage ich das Keywort $GENERATE ein. In einer angegebenen Range werden gleiche Einträge erzeugt, die sich nur durch eine Zahl unterscheiden. Das obige File kann ich also auch so erzeugen:
@ IN SOA linux.orm.org. root.linux.orm.org. ( blah blah blah ) ; ; Name Server ; IN NS linux.orm.org. ; ; CNAME Records für jede Adresse, die auf eine Dummy-Domäne ; und deren NS deuten ; ; 0-127 /25 (fast.orm.org) ; 0-25 IN NS elpequeno.fast.orm.org. $GENERATE 1-126 $ CNAME $.0-25 ; ; 128-191 /26 (slow.orm.org) ; (der Server liegt in orm.org...) ; 128-26 IN NS linux4.orm.org. $GENERATE 129-190 $ CNAME $.128-26 ; ; ; 192-223 /27 (old.orm.org) ; 192-27 IN NS dumpy.old.orm.org. $GENERATE 193-222 $ CNAME $.192-27 ;End of File.Ob es stimmt muß man durch einen Dump der Datenbank prüfen (entweder mit kill -INT oder mit dem Administrationstool ndc, Unterbefehl dumpdb).
Auf den Servern der Subdomänen müssen Namen und Adressen verwaltet werden. Für die direkte Namensauflösung ist das leicht, es wird ein normales File mit A Records erstellt. Hier als Beispiel der Server elpequeno in der Subdomäne fast.orm.org:
@ IN SOA fast.orm.org. root.elpequeno.fast.orm.org. ( blah blah blah ) IN NS elpequeno.fast.orm.org. ; ; Domain fast.orm.org ; fast1 IN A 172.168.1.1 fast2 IN A 172.168.1.2 [ Was man so an Namen vergeben hat ] fast19 IN A 172.168.1.19 fast20 IN A 172.168.1.20 ; ;End of File.
Mit der reversen Namensauflösung ist das etwas schwieriger. Einmal ist auf diese Maschine ja die Dummy-Domäne 0-25.1.168.172.in-addr.arpa delegiert worden. Das ist aber nicht die "echte" Domäne. Ich muß also auch für das Netz 1.168.172.in-addr.arpa Service zur Verfügung stellen, denn die Dummy-Domäne ist nur den Anfragen von aussen bekannt. Ich habe das gelöst, indem ich in der named.conf 2 Zonen-Statements einfüge, die dasselbe File laden. Somit reagiert der Server auf Anfragen für beide Zonen. Leider weiss ich nicht, wie der Server unterscheiden soll, ob die Anfrage eine Adresse aus seinem Adressraum oder aus dem Adressraum von z.B. Server linux4 (128-26.1.168.172.in-addr.arpa) ist.
# # fast.orm.org # zone "fast.orm.org" IN { type master; file "zone-data/fast.orm.zone"; # by default, any host can receive zone transfers allow-transfer { any; }; notify yes; }; zone "1.168.172.in-addr.arpa" IN { type master; file "zone-data/172.168.1.0-25.rev"; check-names fail; allow-update { none; }; }; zone "0-25.1.168.172.in-addr.arpa" IN { type master; file "zone-data/172.168.1.0-25.rev"; check-names fail; allow-update { none; }; }; ;End of File.
Wahrscheinlich muß ich auf Server linux zurückverweisen... Das gemeinsame Zonenfile sieht so aus:
@ IN SOA fast.orm.org. root.elpequeno.fast.orm.org. ( blah blah blah ) IN NS elpequeno.fast.orm.org. 1 IN PTR fast1.fast.orm.org. 2 IN PTR fast2.fast.orm.org. [ etc. etc. ] ;End of File.
Für die anderen beiden Server ist das analog. Man kann natürlich Teile der erzeugten Sub-Domänen auch auf dem Server linux laufen lassen - der Server würde sich dann selbst die Zone delegieren.
[ Allgemein | UNIX | AIX | TCP-IP | TCP | ROUTING | DNS | NTP | NFS | FreeBSD | Linux | RPi | SMTP | Tracing | GPS | LW ]
Copyright 2001-2021 by Orm Hager - Es gilt die GPL