FQDN ermitteln, wenn der Hostname ihn nicht angibt?

8

In einer anderen Frage stellte ich fest, dass Puppet Zertifikate für den vollqualifizierten Domänennamen meines Computers generierte, jedoch nicht den einfachen Hostnamen. In diesem Beispiel kungfumasterwar dies der Hostname und der Wert, der durch Ausführen abgerufen wurde hostname. Puppet generierte Zertifikate, die den FQDN spezifizierten kungfumaster.domain.com.

Wie hat Puppet festgestellt, dass dies mein FQDN ist? Ich habe alle folgenden Versuche unternommen und nichts Passendes gesehen *.domain.com:

$ hostname -a && hostname -d && hostname --domain && hostname -f && \ 
    hostname --fqdn && hostname -A && hostname --long

kungfumaster
kungfumaster
kungfumaster 
kungfumaster

Wie komme ich kungfumaster.domain.comvon Bash? Ich habe bemerkt, dass es domain.comdas tatsächlich gibt /etc/resolv.conf, aber ich konnte es nirgendwo anders finden.

Grundsätzlich möchte ich den FQDN der aktuellen Maschine als Zeichenfolge erhalten. Die anderen Lösungen hier auf unix.se haben bei mir nicht funktioniert. (dh dnsdomainname, domainnameusw.)

Naftuli Kay
quelle

Antworten:

8

Es scheint, dass Puppet unter der Haube Facter verwendet, um die Domainnamen zu bewerten:

$ facter domain
domain.com
$ facter hostname
kungfumaster
$ facter fqdn
kungfumaster.domain.com

Die Antwort befindet sich im entsprechenden Facter-Quellcode .

Es führt die folgenden Schritte in der angegebenen Reihenfolge aus und verwendet den ersten, der einen Domänennamen zu enthalten scheint:

  1. Hostname -f
  2. DNS-Domänenname
  3. Analysieren von resolv.conf nach einem "Domain" - oder "Search" -Eintrag
Naftuli Kay
quelle
Ah zum Teufel! Dieser Link zum Facter-Quellcode ist nicht mehr gültig.
Red Cricket
3

Wahrscheinlich, weil Ihr System Teil eines Domänennetzwerks ist, das einen Domänennamen zuweist. In meinem Fall löst mein Router beispielsweise alle Hostnamen in Form von host.lan"lan" als meine Domäne und "host" als Name meines Systems auf.

Der vollqualifizierte Domänenname stammt höchstwahrscheinlich von Ihrem Router-DNS. Führen Sie einfach einen der folgenden Befehle aus:

nslookup your-ip-here
dig -x your-ip-here
host your-ip-here

Ein Beispiel mit dig:

dig @10.0.0.1 -x 10.0.0.1

; <<>> DiG 9.9.5-4-Debian <<>> @10.0.0.1 -x 10.0.0.1
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11384
;; flags: qr aa rd ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;1.0.0.10.in-addr.arpa.     IN  PTR

;; ADDITIONAL SECTION:
1.0.0.10.in-addr.arpa.  86400   IN  PTR dsldevice.lan.

;; Query time: 2181 msec
;; SERVER: 10.0.0.1#53(10.0.0.1)
;; WHEN: Thu Jun 19 20:01:32 AST 2014
;; MSG SIZE  rcvd: 77

Da ich mein eigenes DNS und nicht das des Routers verwende, muss ich die Domäne so einstellen, dass sie im @Teil abgefragt wird . Ich frage den eigenen Domainnamen des Routers ab.

Sie werden feststellen, dass der Domainname so zurückgegeben wird, wie Ihr DNS / Router Sie sieht. Es gibt verschiedene Möglichkeiten, dies im Router zu deaktivieren, aber ich habe festgestellt, dass der einfachste Weg darin besteht, nur anderes DNS zu verwenden.

Braiam
quelle
Es wird überhaupt keine DNS-Suche durchgeführt, daher ist diese Antwort falsch. Siehe Naftuli Tzvi Kays Antwort mit meiner Bearbeitung.
Jordanm
Eigentlich sieht es so aus dnsdomainname, als ob Sie eine Suche durchführen können, wenn Ihr eigener Host nicht dabei ist /etc/hosts.
Jordanm
@ Jordanm also ist es nicht falsch?
Braiam
Nun, im speziellen Kontext von OP ist dies der Fall, aber es könnte für einige Benutzer korrekt sein. Das OP sagte, dnsdomainnamedass der Domainname, der das einzige Glied in der Kette ist, das die DNS-Suche durchführen konnte, nicht zurückgegeben wurde.
Jordanm