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!!
Wenn der Hostname gefragt wird, ist der "andreas". Andreas ist ein FQDN. https://de.wikipedia.org/wiki/Fully-Qualified_Host_Name https://de.wikipedia.org/wiki/Hostname
/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.
:
Bearbeitet durch User
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.
:
Bearbeitet durch User
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):
1 | 127.0.0.1 localhost |
2 | 1.2.3.4 fantasiename andreas.de andreas-fotografie.de |
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.
Gut aufpassen bei DNS, da bei falscher Konfiguration manche Dienste wunderliche Eigenschaften bekommen oder unerklärlich hängen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.