Di Linux, bagaimana cara /etc/hosts
dan DNS bekerja bersama untuk menyelesaikan nama host ke alamat IP?
- jika nama host dapat diatasi
/etc/hosts
, apakah DNS berlaku setelah/etc/hosts
untuk menyelesaikan nama host atau memperlakukan alamat IP yang diselesaikan dengan/etc/hosts
sebagai "nama host" untuk menyelesaikan secara rekursif? Di browser saya (firefox dan google chrome), ketika saya tambahkan ke
/etc/hosts
:127.0.0.1 google.com www.google.com
mengetikkan www.google.com di bilah alamat browser dan menekan masuk tidak akan terhubung ke situs web. Setelah saya menghapus garis itu
/etc/hosts
, saya dapat terhubung ke situs web. Apakah itu berarti/etc/hosts
mengabaikan DNS untuk menyelesaikan nama host?Setelah saya menambahkan kembali baris ke
/etc/hosts
, saya masih dapat terhubung ke situs web, bahkan setelah menyegarkan halaman web. Mengapa tidak/etc/hosts
berlaku lagi, sehingga saya tidak dapat terhubung ke situs web?
Terima kasih.
/etc/hosts
dan server nama yang ditentukan secara lokal. Sangat membingungkan untuk menyaksikan pertama kali. (Melihat Anda, browser berbasis Chromium!)/etc/hosts
dan server DNS yang ditentukan sistem: ( github.com/Eloston/ungoogled-chromium ). Instalasi pada MacOS dengan Homebrew:brew cask install eloston-chromium
.Jawaban:
Ini ditentukan oleh konfigurasi NSS (Name Service Switch) yaitu arahan
/etc/nsswitch.conf
filehosts
. Misalnya, di sistem saya:Di sini,
files
merujuk ke/etc/hosts
file, dandns
merujuk ke sistem DNS. Dan seperti yang dapat Anda bayangkan, mana yang lebih dulu menang .Juga, lihat
man 5 nsswitch.conf
untuk mendapatkan lebih banyak ide tentang ini.Sebagai tambahan, untuk mengikuti pemesanan resolusi host NSS, gunakan
getent
denganhosts
sebagai database misalnya:sumber
systemd.resolver
pengaruhnya terhadap resolusi? Di manakah NIS dan LDAP masuk ke dalam sistem resolusi? Urutan apa yang mengikuti sistem MacOS atau sistem Windows ?.Untuk menjawab hanya pertanyaan terakhir Anda:
/etc/hosts
tidak berlaku lagi dengan segera karenafirefox
caching nama host terakhir yang didapatgoogle.com
; jika Anda ingin selalu mengambilnya lagi, Anda harus setnetwork.dnsCacheExpiration
ke0
dalamabout:config
. Info lebih lanjut (meskipun agak ketinggalan jaman) di sini . Maaf jika ini offtopic.Sebagai sidenote, banyak program tidak menggunakan resolver standar (
getaddrinfo(3)
,getnameinfo(3)
[1]) karena sucks .Pertama, antarmuka tidak sinkron; program apa pun yang cukup kompleks harus menelurkan utas terpisah hanya dengan melakukan
getaddrinfo()
dan kemudian membuat protokol sendiri untuk berkomunikasi dengannya (dan mari kita bahkan tidak masuk ke dalamgetaddrinfo_a()
, yang mengirimkan sinyal setelah selesai, jadi itu lebih buruk lagi).Kedua, implementasi resolver di
glibc
(pustaka C standar di linux) mengerikan, mengharapkan Anda membiarkannya menarik objek dinamis acak ke dalam ruang alamat melaluidlopen()
belakang Anda, dan membuatnya mustahil untuk menampungnya dengan cara apa pun atau menggunakannya secara statis executable terkait.Karena banyak program tidak menggunakan penyelesai standar langsung, mereka juga tidak repot-repot untuk meniru perilaku tepat, dan mengabaikan beberapa atau semua
/etc/resolv.conf
,/etc/hosts
,/etc/nsswitch.conf
atau/etc/gai.conf
.[1] dan bahkan tidak menyebutkan non-reentrant, hanya ipv4
gethostbyname()
, yang sudah usang sejak zaman dahulu.sumber
google = GHBN("google.com"); facebook = GHBN("facebook.com")
Anda mungkin berakhir dengan keduanyagoogle
danfacebook
berisi alamatfacebook.com
. Ketika dua panggilan dilakukan di utas yang berbeda, itu bahkan lebih lucu: Anda dapat mengakhiri dengan alamat yang setengah google dan setengah facebook atau sampah lengkap.gethostbyname()
sekarang?getaddrinfo
adalah fungsi standar untuk itu, tetapi itu sendiri brokrn, seperti yang sudah saya jelaskan, jadi itu tidak digunakan seperti browser atau aplikasi kehidupan nyata lainnya.File
/etc/hosts
dan DNS tidak bekerja bersama. 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, di sistem untuk Windows dan dapat didaftar denganlookupd -configuration
(cari LookupOrder, mirip dengan:)Cache FF DNS NI DS
di sistem MacOS.Urutan aktual menjadi kompleks dan biasanya berbelit-belit karena setiap layanan resolusi nama dapat (dan berkali-kali) melihat ke dalam tingkat resolusi lain. Seperti
dnsmasq
(server DNS ringan umumnya di127.0.0.1:53
, atau::1:53
(atau keduanya)) biasanya membaca dan menyertakan/etc/hosts
konten file. Atau sepertisystemd.resolver
(penyelesai dasar yang semestinya hanya menyelesaikan nama-nama yang tidak bertitik sepertimycomputer
) memanggil resolusi DNS langsung untuk nama-nama bertitik (mycomputer.here.dev.
) dalam beberapa kondisi.Secara umum, layanan dipanggil secara berurutan dan yang pertama tidak gagal akan menang dan diterima sebagai alamat yang benar. Urutan dasar umum adalah:
/etc/hosts
(file), mDNS (nama tidak putus-putus), DNS, NIS, NIS +, LDAP. Dalam beberapa sistem linux ada resolusi terakhir untuk komputerhostname
dalam layananmyhostname
Misalnya, dalam sistem ini (dari
cat /etc/nsswitch
):Perhatikan bahwa
order
entri yang sangat lama (glibc 2.4 dan sebelumnya) ditetapkan/etc/host.conf
sebagai:Hanya berlaku untuk layanan nama file (file
/etc/hosts
).Efek pada komputer klien (linux) yang terkait dengan NIS dan LDAP ini (biasanya) dikendalikan oleh server DNS yang digunakan (bind, unbound, dll.).
begitu:
Tidak ada
Jika nama host dapat diatasi
/etc/hosts
,DNS
itu tidak berlaku (jika file sebelum DNS).juga adalah alamat IP yang diselesaikan diperlakukan sebagai "hostname".
Sederhananya adalah: alamat yang diselesaikan.
browser
Peramban dapat menggunakan metode apa pun untuk menyelesaikan nama (setelah memeriksa tembolok dari nama yang diselesaikan). Hanya jika menggunakan metode yang disediakan sistem, urutan yang diberikan di atas berlaku. Browser, seperti program apa pun, dapat memilih untuk menghubungi server DNS secara langsung.
Jika urutan sistem sudah ada
/etc/hosts
sebelumnyaDNS
, itu berarti bahwa entri dalam file itu akan diutamakan untukDNS
layanan resolusi.Begitu:
Ya (jika browser menggunakan resolusi yang disediakan sistem).
Hanya sampai cache internal browser dihapus (atau habis waktu) untuk nama tertentu adalah nama yang dicari di luar browser lagi.
Jika peramban memiliki nama yang diselesaikan dalam cache, peramban menggunakannya lagi.
Gunakan ini untuk menghapus cache .
Atau cukup tutup (tunggu sebentar) dan nyalakan kembali browser.
sumber