Mengapa resolusi nama saya menekan DNS bahkan dengan entri file hosts?

15

Saya menjalankan Ubuntu 10.04.2 LTS Desktop. Menjadi pengembang web, tentu saja saya membuat "me.com" di /etc/hostsfile saya . Sayangnya, resolusi nama saya keluar ke DNS sebelum memeriksa entri host lokal saya dan saya tidak tahu mengapa.

Hasil akhirnya adalah jika /etc/resolv.conf saya berisi nameserver 127.0.0.1di sana terlebih dahulu, maka saya mendapatkan respons kembali di browser web saya dari me.com (lokal) dalam waktu kurang dari satu detik. Tetapi jika saya tidak memiliki entri itu, maka respons saya kadang-kadang memakan waktu hingga 5 detik jika ISP saya agak lambat.

Masalahnya sangat merepotkan sehingga saya benar-benar harus mengajukan pertanyaan di sini (dan seseorang mengatasinya) untuk cara memasukkan entri itu ke dalam secara otomatis /etc/resolv.conf. Tetapi salah satu pengguna (@shellholic) di sini sangat merekomendasikan (dan berkomentar bolak-balik dengan saya tentang hal itu) bahwa saya harus mengajukan pertanyaan ini.

Apakah Anda tahu mengapa resolusi nama workstation saya harus menekan server DNS terlebih dahulu sebelum memukul /etc/hostsentri file saya ? Untuk saat ini, saya menggunakan trik resolv.conf .

Volomike
sumber
1
Anda mungkin mencoba mencari /etc/nsswitch.conf. Entri pada sistem saya sedikit tidak jelas, tetapi Anda bisa menguji pencarian dengan hanya filessebagai opsi dan melihat apakah itu membuat perbedaan.
belacqua
Ya, bisakah Anda memberi kami hasil cat /etc/nsswitch.confdan cat /etc/host.conf? Juga: bagaimana Anda menguji ini (melalui ping, browser, packet sniffing dll)?
mengatur
Untuk menyelesaikan versi @arrange, bisakah Anda melampirkan hasil time getent hosts me.com; hostname --fqdn; grep 'me.com' /etc/hosts; grep hosts /etc/nsswitch.conf; netstat -uln | grep ':53'; cat /etc/host.conf; wc -l /etc/hosts. Jangan ragu untuk mengaburkan rasionalitas.
shellholic
@shellholic ^ rasionalitas ^ rasional? heh.
belacqua
@ jgbelacqua: memang
shellholic

Jawaban:

14

File /etc/nsswitch.confakan memungkinkan Anda mengkonfigurasi ulang urutan resolusi nama. Secara default, file host adalah yang pertama, lalu DNS yang dikonfigurasi. Mungkin ada lebih banyak opsi.

File /etc/hostshanya mencantumkan alamat IP dan nama host (beberapa nama untuk satu IP jika Anda mau)

File /etc/resolv.confakan mencantumkan domain pencarian default, dan juga akan mencantumkan secara berurutan nama server yang akan digunakan.

jfmessier
sumber
4
Juga perlu diingat bahwa sekali nama diselesaikan oleh aplikasi atau layanan pada kotak Linux Anda, itu akan tetap dalam cache untuk jangka waktu yang dikenal sebagai TTL (waktu untuk hidup). Jadi, jika Anda mengganti urutan resolusi, Anda lebih baik restart sistem Anda atau menghapus cache.
jfmessier
bagaimana Anda menghapus 'cache'?
Eric Johnson
Saya tidak yakin, tetapi memulai kembali koneksi jaringan dengan perintah ifup dan ifdown dapat melakukannya. Tentu saja, reboot harus menghapus cache, tetapi kita menggunakan Linux, kan?
jfmessier
nscddapat men-cache permintaan resolusi nama, tetapi tidak menghormati ttl (dan karenanya caching host dinonaktifkan secara default). systemd-resolvedjuga akan me-cache entri. Jika tidak ada yang dikonfigurasikan, host Linux tidak melakukan cache tanggapan DNS . (Peramban sepertinya melakukannya di lapisan aplikasi)
Gert van den Berg