Mengapa perintah host tidak menyelesaikan entri di / etc / hosts?

25

Saya memiliki /etc/hostsfile berikut di mesin ubuntu 12.04

127.0.0.1 localhost
10.248.27.66 ec2-50-112-220-110.us-west-2.compute.amazonaws.com puppetmaster

# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

Namun perintah host tidak menyelesaikan nama puppetmasterdengan benar, sedangkan perintah telnet tidak

root@ip-10-248-34-162:/home/ubuntu# host puppetmaster
Host puppetmaster not found: 3(NXDOMAIN)

root@ip-10-248-34-162:/home/ubuntu# telnet puppetmaster 8140
Trying 10.248.27.66...
Connected to ec2-50-112-220-110.us-west-2.compute.amazonaws.com.
Escape character is '^]'.

Mengapa perintah host tidak menyelesaikan entri di / etc / hosts?

pengguna784637
sumber

Jawaban:

52

The hostProgram menggunakan libresolvuntuk melakukan kueri DNS secara langsung, yaitu, tidak menggunakan gethostbyname.

Sebagian besar program, ketika mencoba untuk terhubung ke host lain, menjalankan gethostbynamepanggilan sistem atau fungsi serupa. Fungsi ini mematuhi konfigurasi /etc/nsswitch.conf. File ini memiliki baris yang dalam Ubuntu 12.04 default sebagai berikut:

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

yang artinya akan digunakan pertama kali /etc/hosts, lalu kembali ke permintaan DNS.

Jika Anda ingin melakukan pencarian host dengan cara ini, Anda dapat melakukannya dengan getent hosts. Sebagai contoh:

$ getent hosts serverfault.com
198.252.206.16  serverfault.com

Saya harap ini membantu.

Kvisle
sumber
2
Terima kasih Kvisle, tapi saya masih sedikit bingung. Baris di /etc/nsswitch.conftampak seperti ini hosts: files dnsdan saya mengubahnya ke hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4namun dalam kedua kasus /etc/hoststidak ditanyai, malah muncul permintaan dns langsung dibuat. Bagaimana saya bisa memastikan bahwa /etc/hostsakan ditanyakan lebih dulu ketika menggunakan perintah like digatau host?
user784637
4
Kamu tidak bisa dig / host menggunakan DNS secara langsung. Jika Anda perlu melakukan namelookup yang memeriksa file host terlebih dahulu, Anda harus menggunakan getent hostsatau sesuatu yang menggunakangethostbyname()
Kvisle
Oh saya mengerti, salah saya, saya mengerti sekarang =)
user784637
1
Saya percaya bahwa saat ini seseorang harus menggunakan getent ahostsbukan getent hostskarena getent hostsmenggunakan gethostbyaddr()atau gethostbyname*()yang sudah usang. Jika saya telah mengerti dengan benar, getent hostsmeniru berapa lama program UNIX C digunakan untuk bekerja dan getent ahostsmengemulasi cara program moderm seharusnya bekerja.
Mikko Rantalainen
Tetapi apakah ada cara untuk membuat perintah host juga menggunakan / etc / hosts?
Kornel
10

Karena hostutilitas ini secara eksklusif merupakan utilitas pencarian DNS.

Sebagian besar aplikasi menggunakan panggilan perpustakaan getaddrinfoatau gethostbyname. Perpustakaan ini menginterogasi file yang dipanggil /etc/nsswitch.confuntuk menentukan prioritas pencarian dan kebijakan tentang bagaimana melakukan pencarian yang berbeda.

Biasanya /etc/nsswitch.confberisi garis

hosts:        files dns

Yang memberitahu program untuk menginterogasi terlebih dahulu /etc/hostsdan kemudian menginterogasi DNS jika tidak berhasil.

Karena host melakukan pencarian DNS secara eksklusif, host tidak mengintip /etc/hostsuntuk melakukan pencarian.

Matthew Ife
sumber
3

Anda akan menemukan itu digdan nslookupberperilaku seperti itu host.

Alasan untuk ini adalah bahwa tujuan dari semua perintah ini adalah untuk melakukan pencarian DNS, bukan untuk mencari file.

Sebagian besar program lain menggunakan pemecah nama sistem operasi yang berkonsultasi /etc/nsswitch.confdan kemudian (jika diperlukan) /etc/resolv.confuntuk memutuskan bagaimana menyelesaikan nama host yang Anda minta. (Ini adalah penyederhanaan, ada opsi lain.) nsswitch.confFile biasanya lebih diutamakan pada file lokal daripada DNS.

Ladadadada
sumber
-1

periksa file /etc/nsswitch.conf dan cari baris yang dimulai dengan kata "hosts"? Apakah Anda melihat kata "file" di baris ini? Jika ya, apakah sebelum atau sesudah kata "dns"?

Pada sistem normal, baris ini harus seperti

hosts      files dns

jika milik Anda tidak ada atau dalam urutan yang berbeda, itu mungkin menjadi masalah Anda.

MelBurslan
sumber
Hadir dan terlihat seperti inihosts: files dns
user784637