Ini ditentukan oleh konfigurasi NSS (Name Service Switch) yaitu /etc/nsswitch.conf
file hosts
pengarahan. Misalnya, di sistem saya:
hosts: files mdns4_minimal [NOTFOUND=return] dns
Di sini, files
mengacu pada /etc/hosts
file, dan dns
mengacu pada sistem DNS. Dan seperti yang bisa Anda bayangkan mana yang lebih dulu menang .
Lihat juga man 5 nsswitch.conf
untuk mendapatkan lebih banyak ide tentang ini.
Selain itu, untuk mengikuti pengurutan resolusi host NSS, gunakan getent
dengan hosts
sebagai basis data misalnya:
getent hosts example.com
Untuk menjawab pertanyaan terakhir Anda saja:/etc/hosts
tidak langsung berlaku lagi karena firefox
sedang menyimpan nama host terakhir untuk google.com
; jika Anda ingin selalu mengambilnya lagi, Anda harus menyetel network.dnsCacheExpiration
ke 0
di about:config
. Info lebih lanjut (walaupun agak ketinggalan jaman) di sini. Maaf jika ini di luar topik.
Sebagai sidenote, banyak program tidak menggunakan penyelesai standar (getaddrinfo(3)
, getnameinfo(3)
[1]) karena menyebalkan .
Pertama, antarmuka tidak asinkron; setiap program yang cukup rumit harus menelurkan utas terpisah hanya dengan melakukan getaddrinfo()
dan kemudian menciptakan protokolnya sendiri untuk berkomunikasi dengannya (dan jangan masuk ke dalam getaddrinfo_a()
, yang mengirim sinyal setelah selesai, jadi lebih buruk lagi).
Kedua, implementasi resolver di glibc
(perpustakaan C standar di linux) sangat buruk, berharap Anda membiarkannya menarik objek dinamis acak ke dalam ruang alamat melalui dlopen()
di belakang Anda, dan membuatnya tidak mungkin untuk memuatnya dengan cara apa pun atau menggunakannya dalam executable yang terhubung secara statis.
Karena banyak program tidak menggunakan penyelesai standar secara langsung, mereka juga tidak mau mereplikasi perilakunya secara persis, dan mengabaikan sebagian atau semua /etc/resolv.conf
, /etc/hosts
, /etc/nsswitch.conf
atau /etc/gai.conf
.
[1] dan bahkan tidak menyebutkan non-reentrant, hanya gethostbyname()
ipv4 , yang sudah usang sejak lama.
File /etc/hosts
dan DNS tidak bekerja sama. Mereka memberikan resolusi nama independen (nama jaringan).
Lem yang menghubungkan mereka ada di dalam /etc/nsswitch.conf
untuk sistem linux. Di /etc/netsvc.conf
untuk server AIX, dalam sistem untuk Windows dan dapat dicantumkan dengan lookupd -configuration
(cari LookupOrder, mirip dengan:Cache FF DNS NI DS
) di sistem MacOS.
Urutan sebenarnya menjadi rumit dan biasanya berbelit-belit karena setiap layanan resolusi nama dapat (dan sering kali) melihat ke dalam tingkat resolusi lainnya. Seperti dnsmasq
(Server DNS ringan umumnya di 127.0.0.1:53
, atau ::1:53
(atau keduanya)) biasanya membaca dan menyertakan /etc/hosts
isi berkas. Atau seperti systemd.resolver
(resolver dasar yang seharusnya hanya menyelesaikan nama yang tidak bertitik seperti mycomputer
) memanggil resolusi DNS secara langsung untuk nama bertitik (mycomputer.here.dev.
) dalam kondisi tertentu.
Secara umum, layanan dipanggil secara berurutan dan yang pertama yang tidak gagal menang dan diterima sebagai alamat yang benar. Urutan dasar umumnya adalah:/etc/hosts
(file), mDNS (nama tidak bertitik), DNS, NIS, NIS+, LDAP. Di beberapa sistem linux ada resolusi terakhir untuk komputer hostname
dalam layanan myhostname
Misalnya, dalam sistem ini (dari cat /etc/nsswitch
):
hosts: files mdns4_minimal [NOTFOUND=return] dns myhostname
Perhatikan bahwa order
yang sangat lama (glibc 2.4 dan sebelumnya). entri diatur dalam /etc/host.conf
sebagai:
order hosts,bind,nis
Hanya berlaku untuk file (file /etc/hosts
) nama layanan.
Efek pada komputer klien (linux) yang terkait dengan NIS dan LDAP ini (biasanya) dikendalikan oleh server DNS yang digunakan (bind, unbound, dll.).
jadi:
- Jika nama host dapat diselesaikan di /etc/hosts, apakah DNS berlaku setelah /etc/hosts untuk menyelesaikan nama host atau memperlakukan alamat IP yang diselesaikan oleh /etc/hosts sebagai "nama host" untuk diselesaikan secara rekursif?
Tidak ada.
Jika nama host dapat diselesaikan di /etc/hosts
, DNS
tidak berlaku (jika file sebelum DNS).
atau adalah alamat IP teratasi yang diperlakukan sebagai "nama host".
Sederhananya adalah:alamat yang diselesaikan.
peramban
Peramban dapat menggunakan metode apa pun untuk menyelesaikan nama (setelah memeriksa cache dari nama yang diselesaikan). Hanya jika menggunakan metode yang disediakan sistem, urutan yang diberikan di atas berlaku. Peramban, seperti program apa pun, dapat memilih untuk menghubungi server DNS apa pun secara langsung.
Jika pesanan sistem memiliki /etc/hosts
sebelum DNS
, artinya entri dalam file tersebut akan didahulukan dari DNS
layanan resolusi.
Jadi:
- ... Apakah ini berarti bahwa /etc/hosts mengesampingkan DNS untuk menyelesaikan nama host?
Ya (jika browser menggunakan resolusi yang disediakan sistem).
Mengapa
/etc/hosts
tidak terapkan lagi, sehingga saya tidak dapat terhubung ke situs web?
Hanya sampai cache internal browser dibersihkan (atau waktu habis) untuk nama spesifik tersebut, nama tersebut akan dicari lagi di luar browser.
Jika browser memiliki nama yang diselesaikan dalam cache-nya, browser akan menggunakannya lagi.
Gunakan ini untuk menghapus cache.
Atau cukup tutup (tunggu sebentar) dan mulai ulang browser.