Hostname
當主機名不提供時確定 FQDN?
在另一個問題中,我發現 Puppet 正在為我的機器的 FQDN 生成證書,而不是簡單的主機名。在該範例中,
kungfumaster
是主機名,是執行檢索的值hostname
。Puppet 正在生成指定 FQDN 的證書kungfumaster.domain.com
。Puppet 如何確定這是我的 FQDN?我已經嘗試了以下所有方法,但沒有看到任何匹配的東西
*.domain.com
:$ hostname -a && hostname -d && hostname --domain && hostname -f && \ hostname --fqdn && hostname -A && hostname --long kungfumaster kungfumaster kungfumaster kungfumaster
我怎樣才能
kungfumaster.domain.com
從 Bash 中獲取資訊?我注意到它domain.com
確實存在於 中/etc/resolv.conf
,但我無法在其他任何地方找到它。我基本上想將目前機器的 FQDN 作為字元串獲取。unix.se 上的其他解決方案對我不起作用。(即:
dnsdomainname
、domainname
等)
看起來,在幕後,Puppet 使用 Facter 來評估域名:
$ facter domain domain.com $ facter hostname kungfumaster $ facter fqdn kungfumaster.domain.com
答案在相關的 Facter 原始碼中。
它按順序執行以下操作,並使用似乎包含域名的第一個:
- 主機名 -f
- dns域名
- 解析“域”或“搜尋”條目的 resolv.conf
可能是因為您的系統是分配域名的域網路的一部分。例如,在我的情況下,我的路由器以 的形式解析所有主機名
host.lan
,“lan”是我的域,“host”是我的系統名稱。FQDN 很可能來自您的路由器 DNS,只需執行您喜歡的以下命令:
nslookup your-ip-here dig -x your-ip-here host your-ip-here
使用範例
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
由於我使用自己的 DNS 而不是路由器的 DNS,因此我必須在
@
部分中設置要查詢的域。我正在查詢路由器自己的域名。您會發現它會在您的 DNS/路由器看到您時返回域名。有多種方法可以在路由器中禁用此功能,但我發現最簡單的方法是使用其他 DNS。