Hallo,
ich spiele zum ersten mal mit einem eigenem Root Server und DNS
Einträgen herum. Klappt soweit alles wie es soll aber ich glaube eine
Sache trotzdem falsch verstanden zu haben:
Gibt es einen Zusammenhang zwischen den DNS Records für einen Server und
dem Hostnamen, den der Server (Linux) laut seiner Datei /etc/hostname
verwendet?
Hier mal ein Beispiel:
- Mein Root Server hat eine feste IP, z.B. 1.2.3.4
- Ich habe einen Domain Namen registriert, z.B. andreas.de
- Ich habe einen DNS A Record namens "@" auf die IP 1.2.3.4 gesetzt.
- Nun klappt alles wie es soll, andreas.de wird zu 1.2.3.4 aufgelöst.
Aaaaber da wäre ja noch der Hostname im Linux-System, den ich
konfigurieren kann (/etc/hostname)
Sollte ich den jetzt auf "andreas" setzen? oder "andreas.de"?
Desweiteren gibt es noch die /etc/hosts, die ich so modifizieren könnte:
127.0.0.1 localhost andreas.de
1.2.3.4 andreas.de
oder besser so?
127.0.0.1 localhost andreas
1.2.3.4 andreas
oder ist es piepegal wie der hostname lautet? Tatsächlich funktioniert
nämlich alles, egal was ich dort setze.
Bitte um Aufklärung was ich als Hostnamen nemen darf/sollte nicht machen
sollte.
Vielen Dank!!
/etc/hostname gehört zum NIS (früher YP) Verzeichnisdienst, nicht zum
DNS-Verzeichnisdienst. Wobei es ein bisschen Streit gibt, ob der lokale,
nicht Netzwekt-Teil von NIS überhaupt zu NIS gehört und nicht zum noch
älteren Unix Hosts Dienst. Das ist aber nicht so wichtig.
Wichtig ist, dass Unix, bzw. Linux mehrere Verzeichnisdienste hat und
verwendet. Grundsätzlich ist es eine gute Idee die alle so zu
konfigurieren, dass gleiche Namen verwendet werden, allerdings muss man
das nicht. Z.B., ist es leider so, dass Hosts, NIS und DNS den Begriff
"Domain" verwenden, aber die Domain-Namen nicht identisch sein müssen
(aber, wie gesagt, sie sollten es). Liest man in einer Doku was von
"Domain" ist nicht immer klar, welche Domain eigentlich gemeint ist :-(
Programme auf Unix und Linux verwenden zur Namensauflösung eine
Bibliothek, genannt Resolver-Bibliothek. Häufig wird einfach vom
Resolver geredet, obwohl es eine Bibliothek und kein Dienst ist.
Die Resolver-Bibliothek vereinigt die verschiedenen Verzeichnisdienste
zu einem einzigen API. Anwendungen müssen sich nicht um die einzelnen
Verzeichnisdienste kümmern und wissen schlussendlich nicht mal welcher
Dienst jetzt einen Namen aufgelöst hat.
Die Resolver-Bibliothek, hat je nach Version, Alter, etc. eine oder
mehrere Konfigurations-Dateien, in denen beschrieben wird, in welcher
Reihenfolge, wann und wie der Resolver welchen Verzeichnisdienst
verwenden soll. Fragt eine Anwendung die Resolver-Bibliothek nach einem
Namen, einer IP-Adresse o.ä., bestimmt die Konfiguration bei welchem
Verzeichnisdienst man landet.
Die Resolver-Bibliothek wandelt in gewissen Bereichen auch Namen um,
z.B. wird je nach Aufgabe und Konfiguration, der Domain-Teil eines
Namens angefügt oder abgeschnitten.
D.h. der von dir gefragte Zusammenhang zwischen /etc/hostname und DNS
findet sich in der Resolver-Bibliothek, die entsprechend ihrer
Konfiguration Verzeichnisdienste befragt und dabei an Namen bastelt.
Traditionell setzt man /etc/hostname auf den (NIS) Hostname, also ohne
Domain-Name Teil.
/etc/network (alter Name, der neue fällt mir gerade nicht ein) enthält
den (NIS) Domain-Namen.
Bei /etc/hosts (gehört zu NIS, bzw. je nach Standpunkt zum älteren Unix
Hosts Verzeichnisdienst) wird es doof, den je nachdem wie die
Resolver-Bibliothek konfiguriert ist, kann man die unterschiedlich
schreiben (die Resolver-Bibliothek kann z.B. vor Namensanfragen
Domain-Namen abschneiden). Mit
1
127.0.0.1 localhost
2
<public ip address> <hostname.domainname> <hostname>
sollte man eine guten Start haben. /etc/hosts wird statt DNS benutzt
wenn der Resolver das möchte. Daher nochmal, man sollte (aber muss
nicht) dort die selben Namen wie in anderen Verzeichnisdiensten wie DNS
stehen haben.
/etc/host.conf bzw. /etc/nsswitch.conf beschreibt welche
Verzeichnisdienste wie von der Resolver-Bibliothek verwendet werden.
Wie DNS arbeitet wird mit /etc/resolv.conf konfiguriert. resolv.conf
konfiguriert nicht die Reihenfolge der Dienste für die
Resolver-Bibliothek... In resolv.conf steht u.a. der DNS Domain-Name.
Hallo Andreas,
im Normalfall gehört ja eine DNS Adresse zu einem bestimmten Service,
zum Beispiel http oder smtp. Das können pro Server natürlich zahlreiche
sein.
Auf einen Server können zum Beispiel andreas.de, schulze.de,
andreas-videos.de etc. zeigen. Der Hostname hat deswegen
praktischerweise nichts mit diesen zu tun.
Ich würde auch generell eher darauf verzichten, einen DNS-Record in den
/etc/hosts zu übertragen. Solche Redundanzen können sich später böse
rächen. Beispiel: Du migrierst den Server, stellst den DNS-Eintrag um,
vergisst aber die /etc/hosts, von „zuhause” aus erreichst Du dann den
neuen Server und vom alten Server aus i.d.R. den alten. Das kann
durchaus unangenehm sein, vor allem wenn du die Erinnerung an die
/etc/hosts gründlich verdrängt hast.
Ich vergebe für die Server hostnamen, zum Beispiel altmodische
Frauennamen: mathilda, frida, gerda, trude, hilde etc.
Die DNS Namen werden ausschließlich über die DNS-Dienste aufgelöst.
/etc/hosts für die Servernamen gibt es nur auf den „Verwaltungsrechnern”
oder auf need-to-know-Basis für die Server, zum Beispiel bei einer
Migration oder wenn cronjobs von Server zu Server arbeiten.
Vlg
Timm
Ach so, also kein technisch zwingender Zusammenhang, sondern je nach
Umgebung kann es Sinn machen oder auch nicht.
Ich habe nur einen Server in einem Rechenzentrum stehen und würde es
jetzt so machen:
"fantasiename" in /etc/hostname
und in /etc/hosts:
127.0.0.1 localhost fantasiename
1.2.3.4 fantasiename
Damit wäre der Server vollkommen unabhängig von den DNS Einträgen und
ich könnte auch andere (DNS)Domains auf diesen Server zeigen lassen.
z.B. andreas.de und andreas-fotografie.de.
Auf dem Server laufen verschiedene Dienste. Http, ssh und andere, selbst
entwickelte TCP dienste.
Heutzutage ist es üblich, nichtmehr jeden Server direkt per Statische IP
ans netz zu hängen (oder zumindest noch virtualisierte Server zu
verwenden.).
Ich löse das so, dass ich nach dem Modem zuerst eine
(vollwirtualisierte) Firewall habe (pfsense). Bei dieser habe ich 4
Netzwerkschnitstellen für 4 Subnetze eingerichtet. Eines ist das WAN
subnetz, also die Internetverbindung, das zweite das DMZ, in welchem
meine (paravirtualisierten) Server stehen und das dritte das LAN, in
welchem meine Drucker, Fernseher, Arbeitsrechner, Handies, etc. sind.
Worauf ich eigentlich hinaus will: Alle meine Server bekommen abhänig
von der MAC über DHCP bestimmte IPs und Hostnamen (die ich nach einem
einfach zu merkenden schema vergeben habe). Die Firewall leitet per NAT
die eingehenden Verbindungen zum richtigen Server weiter, von aussen
habe ich aber nur eine IP, zu welcher eine Hauptdomain gehört. Ich
verwende für jeden Dienst einen anderen Server, aber diesen allen den
namen danielabrecht zu geben, nur weil die öffentliche domain
danielabrecht.ch ist, würde nicht funktionieren. Statdessen habe ich im
DNS Resolver meiner Firewall die zohne dmz.danielabrecht.ch
weitergeleitet auf einen DNS und DHCP Server im DMZ Netz (ich nutze dort
dnsmasq). Dieser vergiebt den Servern im DMZ die IPs und Hostnamen, und
löst anfragen an dmz.danielabrecht.ch auf. Jetzt kommt der Witz am
ganzen: In meinem DMZ steht auchnoch ein bind9 DNS Server, der anfragen
an *.danielabrecht.ch auflöst. Meine firewall leitet per NAT alles von
WAN port 53 an den bind9 DNS server. Das bedeutet, ich kann von innen
auf einzelne Server zugreifen über servername.dmz.danielabrecht.ch, aber
von Ausserhalb ist nur bekannt, was in meinem bind9 DNS Server steht,
und keiner Weiss, dass der Server der z.B. Die DNS anfragen verarbeitet,
nicht der selbe ist wie der, der die HTTP anfragen verarbeitet.
Ausserdem kann ich in meinem pfsense DNS resolver z.B.
imap.danielabrecht.ch auf die Lokale IP meines Mailservers auflösen,
wärend die anderen den Eintrag im bind9 DNS server sehen, der
imap.danielabrecht.ch als CNAME auf danielabrecht.ch verweisen lässt.
(im Anhang ist ein Diagramm von meinem Netzwerk)
Um nocheinmal zusammenzufassen, auf was ich hinaus will: Man sollte
unterschiedliche DNS Server für lokale und externe DNS anfragen
verwenden. Der eintrag in /etc/hostname sollte den Lokalen hostnamen
reprässentieren, von dem externe Benutzer nichts wissen müssen, und der
Eintrag in /etc/hosts ist hauptsächlich als shortcut anzusehen, um den
eigenen Hostnamen nach localhost (127.0.0.1) aufzulösen, oder wenn man
bei seinem eigenen PC lokal vorübergehend schnell etwas hinbiegen muss.
Andreas schrieb:> Ach so, also kein technisch zwingender Zusammenhang,
Der Resolver stellt, je nach Konfiguration, den Zusammenhang her.
> Ich habe nur einen Server in einem Rechenzentrum stehen und würde es> jetzt so machen:>> "fantasiename" in /etc/hostname>> und in /etc/hosts:> 127.0.0.1 localhost fantasiename> 1.2.3.4 fantasiename
Das kannst du machen.
Mit der /etc/hosts Damit erklärst du den Rechner, wenn /etc/hosts zur
Namensauflösung verwendet wird, als Multihomed. Du sagst 'fantasiename'
hat zwei IP-Addressen 127.0.0.1 und 1.2.3.4. Das stimmt zwar und
funktioniert auch, aber braucht man ehrlich gesagt meist nicht. Eine
IP-Adresse reicht um den Rechner lokal zu erreichen. Der Resolver, wenn
lokal nach 'fantasiename' gefragt, wird meist 127.0.0.1 liefern.
D.h., wenn man die Möglichkeit haben möchte explizit das Interface für
1.2.3.4. zu benutzen:
1
127.0.0.1 localhost
2
1.2.3.4 fantasiename
Oder wenn einem 127.0.0.1 immer reicht:
1
127.0.0.1 localhost fantasiename
> und> ich könnte auch andere (DNS)Domains auf diesen Server zeigen lassen.
/etc/hosts schränkt das nicht ein. Das sind getrennte Dienste zur
Namensauflösung. Du kannst alle Namen die du in DNS hast, nur Teile der
Namen, keine Namen und zusätzliche Namen in /etc/hosts eintragen. Was
wann und wie benutzt wird hängt dann vom Resolver ab.
> z.B. andreas.de und andreas-fotografie.de.
Das könnte man wie folgt eintragen (muss man aber nicht):
Auch dann gilt: Es ist das Beste, dass die unterschiedlichen Dienste zur
Namensauflösung gleiche (obiges Beispiel) oder gar keine Antworten
liefern.
> Auf dem Server laufen verschiedene Dienste. Http, ssh und andere, selbst> entwickelte TCP dienste
DNS löst nicht nur Hostnamen sondern auch einige ausgewählte Dienste
auf, z.B. Mail. Hat man solche, sollte man sie in DNS separat eintragen.
Hallo,
hier sind 3 Namen im Spiel: hostname, Eintrag in etc/hosts und die
Auskunft des DNS-Servers. Im Prinzip sind die völlig unabhängig
voneinander, welcher Name auf dem DNS-Server der IP-Adresse zugewiesen
ist bestimmt der Netzadmin, und was in etc/hosts steht bestimmt der
lokale Admin. Es ist daher durchaus möglich, dass ein Rechner lokal
Meier heisst (hostname), von einem Rechner B per DNS als Mueller
anzusprechen ist und von einem Rechner C per etc/hosts als Schmid. Dass
das keine gute Praxis ist versteht sich von selbst. Bei unseren alten
Solaris-Workstations hatten wir keinen DNS-Server, nur die Einträge in
etc/hosts, und in der Folge konnte ein Server von jedem Client aus
gesehen anders heissen, auch anders als bei lokaler Anmeldung am Server,
u.U. ist das sehr verwirrend.
In einem Windows-Netz ist das etwas anders, da melden sich die Clients
selber am DNS-Server an mit ihrem Namen. In etc/hosts kann man immer
noch was anderes reinschreiben, das sollte man aber besser lassen.
Georg
Georg schrieb:> In einem Windows-Netz ist das etwas anders, da melden sich die Clients> selber am DNS-Server an mit ihrem Namen.
Kannst du dass genauer ausführen? Mir ist nur bekannt, dass der Hostname
beim DHCP Request mitgeschickt werden kann, und einige DHCP+DNS Server
zusammenarbeiten und die per DHCP empfangenen Hostnamen in die DNS
Eintragen. Dies funktioniert aber sowohl unter Windows als auch unter
Linux, Mac, iOS uns BSD.
Hallo Andreas,
ein Hinweis nur noch:
der Fantasiename in /etc/hostname sollte in jedem Fall auch einen
Eintrag in /etc/hosts haben. Hannes hat Dir ja ein paar Varianten
vorgeschlagen, aber in jedem Fall sollte es einen gültigen Eintrag
geben.
vlg
Timm
Daniel A. schrieb:> Kannst du dass genauer ausführen?
Leider nicht, vor langer Zeit habe ich mal was darüber gelesen, wie das
bei einem Microsoft-Server funktioniert, aber da das immer funktioniert
hat, habe ich mich damit einfach nicht mehr beschäftigt. Irgendwie
erinnere ich mich noch an den Begriff "dynamic DNS" als Erweiterung des
traditionellen DNS. Schalte ich einen neuen PC ein, taucht er nach
kurzer Zeit im DNS auf. Dabei verwende ich DHCP eher selten, fast alle
meine Rechner haben feste IP-Adressen. Richtig ist übrigens, dass das
auch bei Linux-PCs so funktioniert. Massgebend ist bei mir ein
MS-Domain-Controller.
Ich habe schon seit Jahren nichts mehr manuell in DNS-Tabellen
eingetragen, beim letzten Mal ging es glaube ich um einen lokalen
Mailserver, der eingehende Faxe an mein EMail-Konto weiterleitet.
Georg
Georg schrieb:> erinnere ich mich noch an den Begriff "dynamic DNS" als Erweiterung des> traditionellen DNS
Was du meinst, ist das dynamische Update der DNS-Registrierung (nicht zu
verwechseln mit DynDNS). Das heißt, der Client kann sich selbst im DNS
registrieren bzw. seine Registrierung ändern, sofern er die Berechtigung
dazu hat. Unter Windows entspricht der DNS-Name dem Hostnamen plus
angehängtem Domänensuffix.