GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana `/etc/hosts` dan DNS bekerja sama untuk menyelesaikan nama host ke alamat IP?

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:

  1. 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:

  1. ... 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.


Linux
  1. Bagaimana memulihkan dari entri root yang dihapus di file /etc/shadow dan/atau /etc/passwd di CentOS / RHEL 6

  2. Bagaimana cara memonitor file /etc/shadow dan /etc/passwd untuk perubahan dengan Auditd?

  3. CentOS / RHEL :Cara Memulihkan dari file /etc/passwd yang dihapus

  1. Bagaimana cara memigrasikan server BIND DNS ke perangkat keras baru?

  2. /etc/passwd menampilkan pengguna dalam grup, tetapi /etc/group tidak

  3. Bagaimana saya bisa mengembalikan chmod pada direktori dll?

  1. Di file /etc/hosts/ saya di Linux/OSX, bagaimana cara melakukan subdomain wildcard?

  2. Perbedaan antara /etc/hosts dan /etc/resolv.conf

  3. Cara mengatur /etc/issues untuk menampilkan alamat IP untuk eth0