Saya memiliki /etc/hosts
file 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 puppetmaster
dengan 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?
sumber
/etc/nsswitch.conf
tampak seperti inihosts: files dns
dan saya mengubahnya kehosts: files mdns4_minimal [NOTFOUND=return] dns mdns4
namun dalam kedua kasus/etc/hosts
tidak ditanyai, malah muncul permintaan dns langsung dibuat. Bagaimana saya bisa memastikan bahwa/etc/hosts
akan ditanyakan lebih dulu ketika menggunakan perintah likedig
atauhost
?getent hosts
atau sesuatu yang menggunakangethostbyname()
getent ahosts
bukangetent hosts
karenagetent hosts
menggunakangethostbyaddr()
ataugethostbyname*()
yang sudah usang. Jika saya telah mengerti dengan benar,getent hosts
meniru berapa lama program UNIX C digunakan untuk bekerja dangetent ahosts
mengemulasi cara program moderm seharusnya bekerja.Karena
host
utilitas ini secara eksklusif merupakan utilitas pencarian DNS.Sebagian besar aplikasi menggunakan panggilan perpustakaan
getaddrinfo
ataugethostbyname
. Perpustakaan ini menginterogasi file yang dipanggil/etc/nsswitch.conf
untuk menentukan prioritas pencarian dan kebijakan tentang bagaimana melakukan pencarian yang berbeda.Biasanya
/etc/nsswitch.conf
berisi garisYang memberitahu program untuk menginterogasi terlebih dahulu
/etc/hosts
dan kemudian menginterogasi DNS jika tidak berhasil.Karena host melakukan pencarian DNS secara eksklusif, host tidak mengintip
/etc/hosts
untuk melakukan pencarian.sumber
Anda akan menemukan itu
dig
dannslookup
berperilaku seperti ituhost
.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.conf
dan kemudian (jika diperlukan)/etc/resolv.conf
untuk memutuskan bagaimana menyelesaikan nama host yang Anda minta. (Ini adalah penyederhanaan, ada opsi lain.)nsswitch.conf
File biasanya lebih diutamakan pada file lokal daripada DNS.sumber
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
jika milik Anda tidak ada atau dalam urutan yang berbeda, itu mungkin menjadi masalah Anda.
sumber
hosts: files dns