Forum: PC Hard- und Software Zusammenspiel Linux Hostname und DNS Einträge?


von Andreas (Gast)


Lesenswert?

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!!

von Peter II (Gast)


Lesenswert?

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

von Hannes J. (Firma: _⌨_) (pnuebergang)


Lesenswert?

/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
von Timm R. (Firma: privatfrickler.de) (treinisch)


Lesenswert?

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

von Andreas (Gast)


Lesenswert?

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.

von Daniel A. (daniel-a)


Angehängte Dateien:

Lesenswert?

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
von Hannes J. (Firma: _⌨_) (pnuebergang)


Lesenswert?

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.

von Georg (Gast)


Lesenswert?

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

von Daniel A. (daniel-a)


Lesenswert?

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.

von Timm R. (Firma: privatfrickler.de) (treinisch)


Lesenswert?

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

von Georg (Gast)


Lesenswert?

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

von Icke ®. (49636b65)


Lesenswert?

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.

von oszi40 (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.