Xác định FQDN khi tên máy chủ không cung cấp cho nó?


8

Trong một câu hỏi khác , tôi thấy rằng Puppet đang tạo chứng chỉ cho FQDN của máy tôi chứ không phải tên máy chủ đơn giản. Trong ví dụ đó, kungfumasterlà tên máy chủ và là giá trị được lấy bằng cách chạy hostname. Con rối đã tạo ra các chứng chỉ chỉ định FQDN kungfumaster.domain.com.

Làm thế nào mà Puppet xác định rằng đây là FQDN của tôi? Tôi đã thử tất cả những điều sau đây và không thấy gì phù hợp *.domain.com:

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

kungfumaster
kungfumaster
kungfumaster 
kungfumaster

Làm thế nào tôi có thể nhận được kungfumaster.domain.comtừ Bash? Tôi đã nhận thấy rằng domain.comtrên thực tế tồn tại /etc/resolv.conf, nhưng tôi không thể tìm thấy nó ở bất cứ nơi nào khác.

Về cơ bản tôi muốn lấy FQDN của máy hiện tại dưới dạng chuỗi. Các giải pháp khác ở đây trên unix.se đã không làm việc cho tôi. (ví dụ: dnsdomainname, domainname, vv)

Câu trả lời:


8

Có vẻ như bên dưới, Puppet sử dụng Facter để đánh giá các tên miền:

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

Câu trả lời là trong mã nguồn Facter có liên quan .

Nó thực hiện theo thứ tự sau và sử dụng cái đầu tiên có vẻ chứa tên miền:

  1. tên máy chủ -f
  2. tên miền dnsdomain
  3. phân tích cú pháp decv.conf cho mục nhập "tên miền" hoặc "tìm kiếm"

Ôi chết tiệt! liên kết đến mã nguồn Facter không còn hiệu lực.
Dế đỏ

3

Có lẽ bởi vì hệ thống của bạn là một phần của mạng miền gán tên miền. Ví dụ: trong trường hợp của tôi, bộ định tuyến của tôi giải quyết tất cả tên máy chủ ở dạng host.lan"lan" là tên miền của tôi và "lưu trữ" tên hệ thống của tôi.

FQDN rất có thể đến từ DNS bộ định tuyến của bạn, chỉ cần chạy bất cứ thứ gì bạn thích trong các lệnh này:

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

Một ví dụ sử dụng 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

Vì tôi sử dụng DNS của riêng tôi chứ không phải của bộ định tuyến, tôi phải đặt tên miền để truy vấn trong @phần đó. Tôi đang truy vấn tên miền riêng của bộ định tuyến.

Bạn sẽ thấy rằng nó sẽ trả về tên miền khi DNS / bộ định tuyến của bạn nhìn thấy bạn. Có nhiều cách khác nhau để vô hiệu hóa điều này trong bộ định tuyến, nhưng tôi đã thấy rằng cách dễ dàng nhất là sử dụng DNS khác.


Nó thực sự không thực hiện tra cứu DNS, vì vậy câu trả lời này là sai. Xem câu trả lời của Naftuli Tzvi Kay với bản chỉnh sửa của tôi.
jordanm

Trên thực tế, có vẻ như dnsdomainnamecó thể thực hiện tra cứu nếu máy chủ của bạn không ở trong đó /etc/hosts.
jordanm

@jordanm vậy, không sai à?
Braiam

Vâng, trong bối cảnh cụ thể của OP, nhưng nó có thể đúng với một số người dùng. OP cho biết dnsdomainnameđã không trả lại tên miền là liên kết duy nhất trong chuỗi có thể thực hiện tra cứu dns.
jordanm
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.