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.
dig +trace
, tapi saya tidak yakin apa yang dimaksud dengan level. Ini mungkin pertanyaan untuk Kesalahan Server.Jawaban:
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 diroot-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
A
RR? 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 A
RR 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 menyelesaikanmaps.google.com.
daripadamaps.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 A
ke 198.41.0.4. Ini akan memberi tahu Anda sebagai respons "tidak, tidak akan melakukannya, tetapi inilah seseorang yang mungkin tahu"; itu rujukan. Ini berisiNS
catatan 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 untukcom.
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 mencegahcom
domain untuk memiliki server nama sajanl
, 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
aa
set flag (jawaban otoritatif). Jawaban itu akan memberi tahu Anda apa yang Anda minta, atau bahwa RR yang Anda minta tidak ada (baikNXDOMAIN
, atauNOERROR
dengan catatan data tanggapan nol). Terus mencari respons sepertiSERVFAIL
(dan mundur satu langkah dan coba server lain jika Anda mendapatkannya; jika semua server yang disebutkan kembaliSERVFAIL
, gagal proses resolusi nama dan kembalikanSERVFAIL
diri 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 NS
danIN A
/IN AAAA
RR 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
+trace
opsi kedig
utilitas, yang datang sebagai bagian dari BIND, atauset debug
dalamnslookup
.Perlu juga diingat bahwa beberapa tipe RR (terutama
NS
,MX
dan beberapa tipe lainnya; juga,A6
sudah 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.sumber
dig
menggunakan 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.Ada
dnstracer
perintah (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;-4
berarti menggunakan IPv4 (v6 rusak di sini ...);-o
berarti untuk benar-benar menunjukkan alamat IP yang diselesaikan di akhir (saya telah menghilangkan bagian dari output, ada banyak dari mereka).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
Selain 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
,.sumber
dig
jika Anda tidak memilikidnstracer
(atau jika Anda sukadig
memformat). 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.