Bagaimana cara kerja resolusi nama DNS, pada prinsipnya?

10

Saat ini saya sedang mengambil kursus online untuk sysadmin Linux dan saya ditanya pertanyaan yang secara umum tidak saya mengerti. Saya tahu cara mencari server nama, jika saya benar setidaknya itu menggunakan perintah menggali untuk menemukan alamat yang dialamatkan dalam perintah bagian tambahan, tapi saya menjadi sedikit bingung ketika ditanya pertanyaan berikut.

Dengan asumsi server nama Anda yang dikonfigurasikan tidak memiliki hasil cache apa pun yang tersedia, berapa banyak server nama yang harus ditanyakan server nama Anda untuk menyelesaikan maps.google.com? Perintah apa yang akan Anda gunakan untuk menemukan semua server nama ini? Sebutkan satu dari setiap level dan jelaskan mengapa level ini diperlukan.

Saya tidak ingin jawabannya, saya hanya ingin tahu persis apa yang diminta dari saya.

linux8807
sumber
Saya berpikir dig +trace, tapi saya tidak yakin apa yang dimaksud dengan level. Ini mungkin pertanyaan untuk Kesalahan Server.
Big McLargeHuge
Hai linux8807. Saya mengedit pertanyaan Anda agar semoga lebih jelas; khususnya, saya mencoba memberi judul yang lebih baik. Jika Anda merasa saya mengubah niat Anda, silakan kembali mengedit (klik tautan "diedit" dan kemudian "kembalikan" di atas revisi asli).
CVn
Saya pikir video ini menjelaskannya: youtube.com/watch?v=2ZUxoi7YNgs

Jawaban:

13

Dengan asumsi server nama Anda yang dikonfigurasikan tidak memiliki hasil cache apa pun yang tersedia, berapa banyak server nama yang harus ditanyakan server nama Anda untuk menyelesaikan maps.google.com? Perintah apa yang akan Anda gunakan untuk menemukan semua server nama ini? Sebutkan satu dari setiap level dan jelaskan mengapa level ini diperlukan.

Baiklah, mari kita pilih yang satu ini.

"Dengan asumsi nameserver Anda dikonfigurasi tidak memiliki hasil cache di pembuangan" - off pertama, jika telah ada cache data yang sama sekali, maka tidak bisa menyelesaikan apa-apa. Untuk mengunggah cache penyelesai, Anda harus memiliki catatan NS dan alamat (A, AAAA) untuk .zona (akar AKA). Itu nama server root, yang ditemukan di root-servers.net.zona. Tidak ada yang ajaib tentang zona itu atau server DNS tersebut. Namun, data ini sering diberikan "out of band" ke resolver DNS, tepatnya untuk mengunggah cache resolver. Server nama khusus-otoritatif tidak memerlukan data ini, tetapi menyelesaikan server nama memang perlu.

Juga, "putuskan" untuk apa? Adakah RRtype dengan nama itu? Sebuah ARR? Atau sesuatu yang lain? Kelas apa ( CH/ Chaosnet, IN/ Internet, ...)? Proses pastinya akan berbeda, tetapi gagasan umumnya tetap sama.

Jika kita dapat berasumsi bahwa kita tahu bagaimana menemukan server nama root tetapi tidak lebih, dan bahwa dengan "menyelesaikan" yang kita maksudkan adalah mendapatkan konten dari setiap IN ARR yang terkait dengan nama, itu menjadi jauh lebih praktis.

Untuk menyelesaikan nama DNS, Anda pada dasarnya membagi nama menjadi label dan kemudian bekerja dari kanan ke kiri. Jangan lupa .pada akhirnya; Anda benar-benar akan menyelesaikan maps.google.com.daripada maps.google.com. Yang membuat kita perlu menyelesaikan (kita tahu ini, tetapi implementasi resolver DNS mungkin tidak akan):

  • .
  • com.
  • google.com.
  • maps.google.com.

Mulailah dengan mencari tahu di mana meminta konten .. Itu mudah; kami sudah memiliki informasi itu: nama server nama root dan alamat IP . Jadi kami memiliki server nama root. Katakanlah kita memutuskan untuk menggunakan 198.41.0.4 ( a.root-servers.net, juga 2001: 503: ba3e :: 2: 30) untuk melanjutkan resolusi nama. Dalam praktiknya, salah satu hal pertama yang dilakukan oleh resolver kemungkinan akan menggunakan data server root yang disediakan untuk meminta salah satu server zona root untuk daftar yang akurat dari server nama untuk zona root, sehingga memastikan bahwa jika ada nama dan alamat IP valid dan dapat dijangkau, itu akan memiliki set data yang lengkap dan lengkap untuk zona akar ketika resolusi dimulai.

Menembak kueri DNS hingga maps.google.com. IN Ake 198.41.0.4. Ini akan memberi tahu Anda sebagai respons "tidak, tidak akan melakukannya, tetapi inilah seseorang yang mungkin tahu"; itu rujukan. Ini berisi NScatatan untuk zona terdekat yang diketahui server, bersama dengan catatan lem apa pun yang tersedia di server. Jika tidak ada data lem yang tersedia, pertama-tama Anda harus menyelesaikan host yang disebutkan dalam catatan NS yang Anda pilih, jadi buat resolusi nama terpisah untuk mendapatkan alamat IP; jika data lem tersedia, Anda akan memiliki alamat IP server nama yang setidaknya "lebih dekat" dengan jawabannya. Dalam hal ini, itu akan menjadi himpunan server untuk com.zona, dan lem data disediakan juga.

Ulangi proses ini, ajukan salah satu com.server nama pertanyaan yang sama. Mereka juga tidak tahu, tetapi akan mengarahkan Anda ke server nama resmi Google. Pada titik ini dalam kasus umum itu akan mengenai atau meleset apakah data lem disediakan atau tidak; tidak ada yang mencegah comdomain untuk memiliki server nama saja nl, misalnya, dalam hal ini data lem tidak mungkin tersedia dari server gTLD. Data lem yang disediakan juga mungkin tidak lengkap, atau jika Anda benar-benar sial, itu mungkin salah! Anda harus selalu siap untuk menelurkan resolusi nama terpisah yang saya sebutkan di atas.

Pada dasarnya, Anda terus berjalan sampai Anda mendapatkan jawaban dengan aaset flag (jawaban otoritatif). Jawaban itu akan memberi tahu Anda apa yang Anda minta, atau bahwa RR yang Anda minta tidak ada (baik NXDOMAIN, atau NOERRORdengan catatan data tanggapan nol). Terus mencari respons seperti SERVFAIL(dan mundur satu langkah dan coba server lain jika Anda mendapatkannya; jika semua server yang disebutkan kembali SERVFAIL, gagal proses resolusi nama dan kembalikan SERVFAILdiri Anda ke klien).

Alternatif untuk meminta RRname lengkap dari setiap server (yang mungkin dianggap praktik buruk) adalah dengan menggunakan daftar perpecahan label yang telah kami tentukan sebelumnya, tanyakan nama server yang diberikan oleh server lebih jauh ke arah root untuk IN NSdan IN A/ IN AAAARR untuk label itu, dan gunakan untuk melanjutkan proses resolusi nama. Itu hanya sedikit berbeda dalam praktiknya, dan proses yang sama masih berlaku.

Anda dapat mensimulasikan seluruh proses ini dengan menggunakan +traceopsi ke digutilitas, yang datang sebagai bagian dari BIND, atau set debugdalam nslookup.

Perlu juga diingat bahwa beberapa tipe RR (terutama NS, MXdan beberapa tipe lainnya; juga, A6sudah cukup baik digunakan untuk sementara waktu tetapi telah ditinggalkan) dapat dan melakukan referensi RR lainnya. Dalam hal ini, Anda mungkin perlu menelurkan proses resolusi nama lain untuk memberikan jawaban yang lengkap dan bermanfaat bagi klien Anda.

sebuah CVn
sumber
1
Saya pikir jawaban ini cukup sejalan dengan permintaan OP untuk memahami konsep daripada hanya prosedurnya.
111 ---
Jadi yang saya lakukan adalah menggali maps.google.com DI A, maka saya akan menggali dengan cara yang sama tetapi dengan ns1.google.com jika itu benar, jika itu, level apa yang dibicarakan guru dan mengapa mereka dibutuhkan?
linux8807
@ linux8807 Anda akan digmenggunakan nama ns1.google.com begitu Anda telah menerima rujukan yang tidak menyertakan alamat IP dalam catatan lem yang disediakan. Kemudian Anda akan melanjutkan dengan proses resolusi nama sebelumnya.
CVn
@ MichaelKjörling Semua catatan ns1-4.google.com memiliki alamat ip dalam catatan lem. i.imgur.com/o79aIGB.png
linux8807
@ linux8807 Itu akan sangat sering terjadi ketika catatan lem berada di bawah TLD yang sama dengan domain yang ditanyakan. Anda tidak dapat mengandalkan pada itu dalam kasus umum namun.
CVn
7

Ada dnstracerperintah (Anda mungkin perlu menginstalnya, setidaknya di Debian, itu juga nama paket) yang akan melacak resolusi nama. Anda juga dapat (seperti yang ditunjukkan oleh Koveras dalam komentar) dig.

Ini dengan dnstracer. -s .berarti memulai dengan root; -4berarti menggunakan IPv4 (v6 rusak di sini ...); -oberarti untuk benar-benar menunjukkan alamat IP yang diselesaikan di akhir (saya telah menghilangkan bagian dari output, ada banyak dari mereka).

anthony@Zia:~$ dnstracer -s . -4 -o maps.google.com
Tracing to maps.google.com[a] via A.ROOT-SERVERS.NET, maximum of 3 retries
A.ROOT-SERVERS.NET [.] (198.41.0.4) 
 |\___ m.gtld-servers.net [com] (192.55.83.30) 
 |     |\___ ns4.google.com [google.com] (216.239.38.10) Got authoritative answer 
 |     |\___ ns3.google.com [google.com] (216.239.36.10) Got authoritative answer 
 |     |\___ ns1.google.com [google.com] (216.239.32.10) Got authoritative answer 
 |      \___ ns2.google.com [google.com] (216.239.34.10) Got authoritative answer 
⋮

Output itu terus berlanjut, karena dnstracer melacak semua jalur (sehingga Anda dapat melihat apakah, misalnya, beberapa server nama memiliki zona yang kedaluwarsa).

Jadi, Anda dapat melihatnya membutuhkan satu kueri ke server nama root, lalu satu ke server gtld (server untuk zona .com), yang terakhir ke server nama Google.

Dengan dig, hasilnya jauh lebih bertele-tele (jadi saya akan melakukan banyak pemotongan):

dig -4 maps.google.com. +norecurse +trace
; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> maps.google.com. +norecurse +trace
;; global options: +cmd
.                       425379  IN      NS      b.root-servers.net.
⋮
com.                    172800  IN      NS      f.gtld-servers.net.
⋮
google.com.             172800  IN      NS      ns2.google.com.
⋮
maps.google.com.        300     IN      A       74.125.228.70
⋮

digSelain itu menunjukkan bahwa ia melakukan kueri untuk mendapatkan daftar server nama root saat ini. Ini adalah sesuatu yang jarang dilakukan oleh server DNS. Jadi saya tidak yakin apakah Anda menghitungnya dalam kasing kotak pendingin Anda.

Anda tentu saja dapat juga menonton pertanyaan aktual pada kawat dengan, misalnya wireshark,.

derobert
sumber
Saya tidak akan dapat menginstal apa pun karena pengaturan di terminal tetapi begitu saya pulang kerja saya akan mencoba dnstracer dan melihat apakah itu berfungsi, dan apakah dia meminta * (216.239.38.10) (216.239.36.10) ( 216.239.32.10) (216.239.34.10) * ini? Jika demikian, saya sudah bisa mengaksesnya tetapi tidak dengan jawaban yang otoritatif. Juga, apakah ini yang dia maksud dengan level?
linux8807
@ linux8807 Anda dapat menggunakan digjika Anda tidak memiliki dnstracer(atau jika Anda suka digmemformat). Alamat IP yang dikeluarkan oleh dnstracer adalah alamat IP server nama; nama mereka di sebelah kiri. a.root-servers.net adalah 198.41.0.4, dll. Itu adalah server yang ditanyai, dan memberitahu Anda untuk zona apa juga dalam tanda kurung siku. Saya menduga level pertama adalah * .root-servers.net (untuk .), kedua adalah * .gtld-server.net (untuk .com), dll.
derobert