Cara melakukan resolusi A-Record penuh dari server DNS root

3

Saya memiliki situasi hipotetis yang tidak dapat saya temukan jawabannya. Bayangkan kita memiliki komputer yang belum pernah ada di internet. Komputer juga berada di jaringan di mana tidak ada layanan DNS yang disediakan. Mari kita juga berpura-pura bahwa hal-hal seperti DNS Google publik tidak ada.

Sekarang mari kita asumsikan bahwa satu-satunya yang dimiliki komputer ini adalah nama server DNS root dan alamat yang diatasi, seperti itu .

Sekarang komputer ini ingin mengetahui alamat IP katakanlah, superuser.com. Bagaimana, dengan hanya memiliki alamat IP dari server root, apakah komputer bekerja melalui permintaan ke server root untuk berakhir dengan A-record yang diselesaikan dari superuser.com?

Saya sudah berusaha tetapi saya selalu berakhir di tempat di mana saya perlu untuk menggunakan server DNS yang ada yang saya tahu untuk menyelesaikan A-Record. Misalnya jika saya membuka command prompt dan mulai mencoba menyelesaikan google.ca (terhadap root server), saya berakhir dengan:

Dilayani oleh:
ns1.google.com
google.ca
ns2.google.com
google.ca

... dan seterusnya dan seterusnya. Jadi pada dasarnya pada titik ini, saya harus menyelesaikan nsX.google.com untuk menanyakannya untuk mendapatkan A-record untuk google.ca, namun, mengingat skenario, saya tidak memiliki server yang saya bisa untuk meminta untuk alamat nsX.google.com. Jika saya mencoba menyelesaikan ns1.google.com kembali dari server root, saya berakhir di tempat yang sama.

Versi singkat: Bagaimana cara saya menyelesaikan A-Record untuk suatu domain tanpa menggunakan informasi lain apa pun kecuali yang diberikan kepada saya oleh server root? Terima kasih sebelumnya. :)


sumber

Jawaban:

4

Situasi Anda tidak biasa sedikit pun; setiap kali resolver rekursif fitur lengkap dimulai - seperti BIND9 atau Tidak Terikat, bahkan salinan yang saya jalankan di laptop saya - itu dimulai dengan hanya daftar 'petunjuk' zona root, dan turun dari sana dengan sendirinya.

(Anda berkata "Bayangkan sebuah dunia di mana Google Public DNS tidak ada". Pernah bertanya-tanya bagaimana Google Public DNS diri menyelesaikan semua nama domain?)

Tetapi balasan ke permintaan DNS dapat memiliki lebih dari sekedar jawaban langsung. Khususnya, jika server nama otoritatif domain di domain yang sama, kemudian salinan alamat mereka - alias, catatan lem - akan dipegang oleh domain induk juga.

Jadi, saat Anda menanyakan com. server nama untuk www.google.com, mereka tidak hanya mengatakan bahwa itu dihosting oleh ns1.google.com, tetapi juga memberi Anda alamat IP dari ns1.google.com dalam pesan balasan yang sama!

Bahkan, Anda seharusnya sudah mencapai ini sebelumnya, dengan com. domain tingkat atas. Ketika Anda menanyakan server nama root - mereka akan memberi tahu Anda semuanya com. di-host oleh m.gtld-servers.net. dan mereka akan memberi Anda alamat IP-nya. Anda dapat melihat sendiri bahwa file zona root memegang informasi ini.

Sebagai contoh:

$ dig @198.41.0.4 www.google.com. A
;; opcode: QUERY, status: NOERROR, id: 61096
;; flags: qr rd; QUERY: 1, ANSWER: 0,  OTORITAS: 13, TAMBAHAN: 16  ;; BAGIAN PERTANYAAN:
; www.google.com. DI SEBUAH

;; BAGIAN OTORITAS:
com. 172800 DI NS m.gtld-servers.net.
com. 172800 DI NS l.gtld-servers.net.
com. 172800 DI NS k.gtld-servers.net.
... ;; BAGIAN TAMBAHAN:
m.gtld-servers.net. 172800 DALAM A 192.55.83.30
l.gtld-servers.net. 172800 DALAM A 192.41.162.30
k.gtld-servers.net. 172800 DALAM A 192.52.178.30
... 

Melanjutkan dengan salah satu com. server nama:

$ dig @192.55.83.30 www.google.com. A
;; opcode: QUERY, status: NOERROR, id: 46406
;; flags: qr rd; QUERY: 1, ANSWER: 0,  OTORITAS: 4, TAMBAHAN: 5  ;; BAGIAN PERTANYAAN:
; www.google.com. DI SEBUAH

;; BAGIAN OTORITAS:
google.com. 172800 IN NS ns2.google.com.
google.com. 172800 IN NS ns1.google.com.
google.com. 172800 IN NS ns3.google.com.
google.com. 172800 IN NS ns4.google.com. ;; BAGIAN TAMBAHAN:
ns2.google.com. 172800 DALAM A 216.239.34.10
ns1.google.com. 172800 DALAM A 216.239.32.10
ns3.google.com. 172800 DALAM A 216.239.36.10
ns4.google.com. 172800 DALAM A 216.239.38.10 

Melanjutkan dengan salah satu google.com. server nama:

$ dig @216.239.34.10 www.google.com. A
;; opcode: QUERY, status: NOERROR, id: 7744
;; flags: qr  A A  rd; QUERY: 1,  JAWABAN: 5, OTORITAS: 0 , TAMBAHAN: 0

;; BAGIAN PERTANYAAN:
; www.google.com. DI SEBUAH

;; BAGIAN JAWABAN:
www.google.com. 300 IN A 173.194.32.50
www.google.com. 300 IN A 173.194.32.49
www.google.com. 300 IN A 173.194.32.52
www.google.com. 300 IN A 173.194.32.48
www.google.com. 300 IN A 173.194.32.51 

Kami akhirnya menerima jawaban resmi ( aa ) untuk nama yang sama dengan yang kami minta.

grawity
sumber
ahhh ok terima kasih atas jawaban menyeluruh @grawity, mungkin itu karena saya menggunakan "nslookup" jelek pada baris perintah, itu hanya menyembunyikan detail ini dari saya. Terima kasih lagi.
Sama seperti FYI, ini sebenarnya tidak berhasil. Ini mungkin bekerja untuk com. TLD, tapi tidak semuanya. Saya mencari domain .ca mulai dari root dan rantai yang seharusnya terjadi (seperti yang Anda tampilkan di sini) benar-benar rusak. Saya akhirnya hanya dengan entri NS tanpa alamat yang disediakan untuk mereka. Saya kira saya kemudian harus kembali ke atas dan mulai mencari domain nameserver itu, kemudian kembali ke tempat saya tinggalkan mencari .ca. Akan dikirim kembali. Menggunakan dig di server ubuntu.
@DigitalArchitect: Ya, jika server nama tidak sebenarnya "di bawah" domain yang mereka layani, maka catatan lem adalah opsional, dan Anda harus mencari sendiri alamatnya, sebagai "perjalanan samping".
grawity
(Sayangnya ini berarti Anda dapat melakukan kesalahan konfigurasi berganda domain sehingga resolver akan terpental di antara mereka, mis. a.com berada pada ns1.b.nettapi b.net berada pada ns2.a.com...)
grawity
Saya akan meninggalkan jawaban Anda sebagai jawaban yang diterima, tetapi setelah ini saya akan memposting jawaban tambahan tentang bagaimana saya menyelesaikan masalah ini di C # menggunakan arsoft.tools.net. Saya akan memposting kode fungsi yang (harus) menyelesaikan domain TLD apa pun hanya dari informasi file zona root. Hanya karena ini adalah metode rekursif yang sangat rumit (lebih), saya pikir potongan kode akan menjelaskan secara terperinci bagaimana proses bekerja dan memberikan basis kode kepada orang untuk menyalin dan menempel. :)