Hostname dan pemetaan alamat IP di / etc / hosts

14

Di mesin linux saya, ketika saya menjalankan hostname, itu menunjukkan mongodb, tetapi ketika saya menjalankan host mongodb, itu menunjukkan:

mongodb@mongodb:/var/hadoop/hadoop-1.2.1/bin$ host mongodb
Host mongodb not found: 2(SERVFAIL)

/etc/hostsFile saya :

192.168.10.10   mongodb
192.168.10.10   localhost
127.0.0.1       localhost
#127.0.0.1 localhost
# 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
  • Pertanyaan pertama saya adalah: Karena /etc/hostspemetaan dari IP ke nama host, mengapa mesin ini tidak dapat menyelesaikan nama host mongodbke IP 192.168.10.10? Sebaliknya, ketika saya menjalankan host localhost, itu bisa diselesaikan dan menunjukkan:

    localhost has address 127.0.0.1
    
  • Pertanyaan saya yang lain: Menurut /etc/hostsfile tersebut, nama host localhostseharusnya telah diselesaikan ke 192.168.10.10 alih-alih alamat IP loopback 127.0.0.1. Adakah yang bisa menjelaskan hal ini kepada saya?

wuchang
sumber

Jawaban:

30

The host(dan nslookup) utilitas eksplisit permintaan server DNS, dan tidak berkonsultasi dengan /etc/hostsfile dalam konfigurasi sistem default. Jika Anda ke tracerouteatau pingalamat itu, Anda akan melihatnya dengan benar menyelesaikan.

Anda tidak ingin mengubah localhostuntuk memetakan ke apa pun selain 127.0.0.1, ini dapat memiliki efek aneh dan halus pada banyak hal. Saya pikir itu /etc/hostsdiuraikan dalam urutan yang ditulis, dan karena Anda memiliki:

192.168.10.10   localhost
127.0.0.1       localhost

..the entri kedua mungkin mengesampingkan yang pertama.

DopeGhoti
sumber
5
/etc/hoststidak memiliki apa pun berpengaruh pada resolusi DNS ketika query server DNS secara langsung, yang adalah apa yang hostdilakukannya. Namun, banyak alat-alat sistem dan utilitas menggunakan yang localhostdefinisi, mengharapkan untuk alamat loopback, dan resolusi nama menggunakan sistem (yang terlihat pada /etc/hostssebelum query DNS) ke nama tekad daripada ketat akan DNS, yang mungkin tidak selalu hadir.
DopeGhoti
1
Saya juga dapat berbagi pengalaman dengan masalah dalam /etc/hostsfile tersebut localhost. Di masa lalu kami telah menggunakan beberapa perangkat lunak yang akan memasukkan a 127.0.0.2 localhostdi file host dan dengan itu menjadi localhostentri terakhir yang menyebabkannya yang menyebabkan semua jenis masalah perangkat lunak dan lisensi. Jadi rekomendasi saya adalah memiliki 127.0.0.1 localhostentri pertama di /etc/hostsfile Anda dan pastikan tidak ada localhostentri lain di file itu. Dan saya juga akan memverifikasi hal-hal ipv6 juga.
ron
5
Untuk menjadi agak bertele-tele, keduanya melakukan pencarian ns yang mungkin merupakan pencarian dns jika itu adalah bagaimana Anda telah mengkonfigurasi pencarian host di nsswitch.conf.
symcbean
1
@symcbean - apa yang Anda katakan itu benar. Saya tidak akan menyebut itu terlalu tinggi.
DarkHeart
2
Pengecualian yang tidak jelas untuk hal ini adalah jika /etc/resolv.confpoin Anda ke server DNS berjalan langsung pada perangkat Anda (seperti caching dnsmasq) dan server tersebut berkonsultasi dengan lokal Anda /etc/hostssebelum menanyakan server eksternal. Kemudian, secara tidak langsung, perintah seperti hostakan dilakukan oleh Anda /etc/hosts- ini adalah pengaturan yang tidak biasa, tetapi yang saya lihat ada pada perangkat yang dikirim, dan pengalaman seseorang yang menggunakan sistem seperti itu tampaknya dapat bertentangan dengan jawaban ini jika seseorang tidak mengetahui pengaturan khusus ini. .
mtraceur
9

Selain jawaban DopeGhoti, untuk menguji penyelesaian Anda, termasuk /etc/hostsprioritas, Anda dapat menggunakan getent hosts <some_hostname>perintah.

HBruijn
sumber
-3

Saya mendapat masalah serupa dengan / etc / hosts yang mengandung banyak spasi antara IP dan hostname, alih-alih menggunakan TAB. Setelah mengubah ke TAB, nama host dapat diatasi dengan ping.

127.0.0.1        test.local
         ^^^^^^^^ → Should be a TAB not multiple spaces.

lihat juga di /superuser//a/938366/467479

Thomas Lauria
sumber
5
Ini mengejutkan saya. Halaman manual untuk hostsmengatakan: Fields of the entry are separated by any number of blanks and/or tab characters. Mungkin dalam kasus Anda ada beberapa karakter yang tidak dapat dicetak antara IP dan nama host?
dr01
Secara definitif tidak ada karakter yang tidak dapat dicetak. Saya memeriksa ini sebelum saya memposting ini di sini;)
Thomas Lauria
Saya tidak memiliki karakter tab, saya menjalankan SLES 11.x, dan setelah instalasi bersih dari dvd file saya / etc / hosts telah 127.0.0.1diikuti oleh 7 spasi diikuti oleh localhost. Jadi saya akan sedikit ragu untuk menyematkan masalah khusus pada beberapa karakter spasi dan menyimpulkan menggunakan karakter tab sebagai solusinya.
ron
lupa menyebutkan tab versus ruang juga dapat terjadi dalam versi atau distribusi linux tertentu, yang mungkin merupakan bug? dan jika ini masalahnya Anda harus dapat membuat berbagai entri alamat IP / hostname baik dengan tab atau spasi, kemudian lakukan ping pada mereka untuk melihat apakah itu dapat diselesaikan ... hanya saja jangan lakukan itu denganlocalhost
ron
sayangnya saya tidak ingat pada mesin mana (dan karena itu distro) saya mengalami masalah ... - Saya pikir itu pada Ubuntu 15,05 dari virtualboximages.com/... Saya akan mengevaluasi itu.
Thomas Lauria