Як у принципі працює роздільна здатність імен DNS?


10

Зараз я беру онлайн-курс для Linux sysadmin, і мені поставили запитання, якого я просто не розумію. Я знаю, як шукати сервер імен, якщо я правда, принаймні, використовуючи команду dig, щоб знайти адресу в команді додаткового розділу, але я трохи загубився, коли задав наступне запитання.

Якщо припустити, що у налаштованого сервера імен у вашому розпорядженні немає жодних кешованих результатів, скільки серверів імен повинен запитувати ваш сервер імен, щоб вирішити maps.google.com? Яку команду (и) ви використали для пошуку всіх цих серверів імен? Перерахуйте по одному з кожного рівня та поясніть, для чого потрібен цей рівень.

Я не хочу відповіді, я просто хотів би знати, що мене просять зробити саме.


Я думав dig +trace, але не впевнений, що розуміють під рівнями. Це може бути питання про помилку сервера.
Big McLargeHuge

Привіт linux8807 Я відредагував ваше запитання, щоб сподіватися зробити це більш зрозумілим; зокрема, я намагався поставити кращу назву. Якщо ви вважаєте, що я змінив ваш намір, сміливо скасуйте правки (натисніть посилання "відредаговано", а потім "відкат" над початковою редакцією).
CVn

Я думаю, це відео це пояснює: youtube.com/watch?v=2ZUxoi7YNgs

Відповіді:


13

Якщо припустити, що у налаштованого сервера імен у вашому розпорядженні немає жодних кешованих результатів, скільки серверів імен повинен запитувати ваш сервер імен, щоб вирішити maps.google.com? Яку команду (и) ви використали для пошуку всіх цих серверів імен? Перерахуйте по одному з кожного рівня та поясніть, для чого потрібен цей рівень.

Що ж, давайте виберемо цей.

"Припустимо, що у вашого налаштованого сервера імен немає в своєму розпорядженні жодних кешованих результатів", - спочатку, якщо він взагалі не має кешованих даних, то він нічого не може вирішити. Для того, щоб прокласти кеш-пам'ять роздільної здатності, вам потрібно мати записи NS та адреси (A, AAAA) для зони .(кореня AKA). Це сервери кореневих імен, які знаходяться в root-servers.net.зоні. Немає нічого магічного в цій зоні або тих DNS-серверах. Однак, ці дані часто надаються "поза діапазоном" до DNS-резолюції, саме для того, щоб прогрунтувати кеш-пам'ять резолюції. Ці дані не потребують лише авторитетних серверів імен, але сервери імен вирішують.

Також "вирішувати" до чого? Будь-який тип RR під цим ім'ям? ARR? Або щось інше? Який клас ( CH/ Chaosnet, IN/ Internet, ...)? Точний процес буде різним, але загальна ідея залишається тією ж.

Якщо ми можемо припустити, що ми знаємо, як знайти сервери кореневих імен, але нічого більше, і під "вирішенням" ми маємо на увазі отримання вмісту будь-яких IN ARR, пов'язаних з ім'ям, це стає набагато більш практичним.

Щоб вирішити ім'я DNS, ви в основному розділите ім'я на мітки, а потім працюєте вправо-вліво. Не забувайте .в кінці; ти дійсно вирішив би, maps.google.com.а не maps.google.com. Це залишає нам потребу в вирішенні (ми це знаємо, але реалізація DNS-резолюції, ймовірно, не буде):

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

Почніть з з'ясування, де запитувати вміст .. Це легко; ми вже маємо цю інформацію: імена кореневих імен серверів та IP-адреси . Отже, у нас є сервер кореневих імен. Скажімо, ми вирішили використовувати 198.41.0.4 ( a.root-servers.net, також 2001: 503: ba3e :: 2: 30) для продовження дозволу назви. На практиці однією з перших речей, яку зробив вирішальник, швидше за все, буде використовувати надані дані кореневого сервера, щоб запитати у одного з серверів кореневої зони точний список серверів імен для кореневої зони, таким чином гарантуючи, що якщо хтось із імена та IP-адреси є дійсними та доступними, вони матимуть повний і повний набір даних для кореневої зони, коли розпочнеться роздільна здатність.

Зніміть DNS-запит maps.google.com. IN Aна 198.41.0.4. Це скаже вам у відповідь "ні, не збираюсь це робити, але ось хтось, хто може знати"; це направлення. Він містить NSзаписи про найближчу зону, про яку знає відповідний сервер, а також записи про клей, які сервер має. Якщо даних про клей немає, спочатку потрібно вирішити той хост, який названий у вибраній вами записі NS, і породити окрему роздільну здатність імені, щоб отримати IP-адресу; якщо дані клею доступні, у вас буде IP-адреса сервера імен, яка принаймні "ближче" до відповіді. У цьому випадку це буде набір серверів для com.зони, а також надаються дані клею.

Повторіть процес, задавши одному із com.серверів імен те саме питання. Вони також не знають, але перейдуть на авторитетні сервери імен Google. На даний момент у загальному випадку буде потрапляти чи буде пропущено, чи надано дані про клей чи ні; ніщо не заважає comдомену мати лише сервери імен nl, наприклад, у цьому випадку дані клею навряд чи будуть доступні на серверах gTLD. Надані дані про клей також можуть бути неповними, або якщо вам справді не пощастило, це може бути навіть неправильно! Ви завжди повинні бути готовими до нерестування тієї окремої роздільної здатності імені, про яку я згадував вище.

В основному, ви продовжуєте продовжувати, поки не отримаєте відповідь із aaвстановленим прапором (авторитетна відповідь). Ця відповідь підкаже вам, що ви просите, або що RR, про який ви просили, не існує ( NXDOMAINабо NOERRORз записами даних про відповіді з нулем). Продовжуйте шукати відповіді на кшталт SERVFAIL(і відступіться від одного кроку та спробуйте інший сервер, якщо ви отримаєте його; якщо всі названі сервери повертаються SERVFAIL, проваліть процес вирішення імені та поверніться SERVFAILдо клієнта).

Альтернативою запиту повного імені RR від кожного сервера (що може вважатися поганою практикою) є використання розбитого списку міток, який ми визначили раніше, запитуйте імена, подані сервером далі до кореня для IN NSта IN A/ IN AAAARR для цієї мітки та використовуйте їх для подальшого процесу вирішення імені. Це практично незначно на практиці, і той самий процес все ще застосовується.

Ви можете імітувати весь цей процес, скориставшись +traceопцією для digутиліти, яка входить до BIND або set debugв nslookup.

Варто також пам’ятати, що деякі RRtypes (зокрема NS, MXі деякі інші; також A6протягом певного часу були досить добре використані, але були застарілими) можуть і посилатися на інші RR. У такому випадку вам може знадобитися створити ще один процес вирішення імені, щоб дати повну та корисну відповідь своєму клієнту.


1
Я думаю, що ця відповідь цілком відповідає вимозі ОП розібратися в поняттях, а не просто в процедурі.
111 ---

Тож, що я роблю, це викопати maps.google.com IN A, то я б копав так само, але з ns1.google.com, якщо це правильно, якщо це так, про які рівні говорить учитель і чому б вони потрібні?
linux8807

@ linux8807 Ви б digотримали ім’я ns1.google.com, як тільки отримали реферальне повідомлення до нього, яке не включає IP-адресу в наданих записах клею. Тоді ви продовжите процес попереднього вирішення імені.
CVN

@ MichaelKjörling Усі записи ns1-4.google.com мають ip-адресу в записах клею. i.imgur.com/o79aIGB.png
linux8807

@ linux8807 Це дуже часто трапляється, коли записи клею мають той самий TLD, що і домен, на який запитують. Ти не можеш покластися на це в загальному випадку .
CVn

7

Існує dnstracerкоманда (можливо, вам доведеться встановити її, принаймні на Debian, це також ім'я пакета), яка простежить дозвіл імені. Можна також (як зазначає Коверас у коментарі) використовувати dig.

Ось з dnstracer. -s .означає почати з кореня; -4означає використовувати IPv4 (v6 тут порушено ...); -oозначає фактично показати вирішені IP-адреси в кінці (я опустив цю частину виводу, їх дуже багато).

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 
⋮

Цей висновок продовжується, оскільки dnstracer відстежує всі шляхи (так що ви можете побачити, якщо, наприклад, у деяких серверів імен застаріла зона).

Отже, ви бачите, що він займає один запит до кореневого сервера імен, потім один до gtld-серверів (сервер для зони .com), нарешті, до сервера імен Google.

З dig, вихід набагато більш багатослівний (тому я буду робити багато різання):

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
⋮

digдодатково показує, що він робив запит для отримання поточного списку кореневих серверів імен. Це те, що DNS-сервер зазвичай робить дуже рідко. Тож я не впевнений, якщо ви порахуєте це у вашому випадку холодного кешу.

Ви , звичайно , можете також подивитися фактичні запити на дроті з, наприклад, wireshark.


Я б не зміг нічого встановити, оскільки це встановлення в терміналі, але як тільки я повернусь додому з роботи, я спробую dnstracer і побачу, чи працює це, а вона просить * (216.239.38.10) (216.239.36.10) ( 216.239.32.10) (216.239.34.10) * це? Якщо так, я вже в певному сенсі можу отримати доступ до цього, але не з авторитетною відповіддю. Також це те, про що вона має на увазі рівнями?
linux8807

@ linux8807 Ви можете використовувати, digякщо у вас немає dnstracer(або якщо вам подобається digформатування). IP-адреси, які виводить dnstracer - це IP-адреси серверів імен; їхні назви зліва. a.root-servers.net становить 198.41.0.4 і т. д. Це сервери, які запитуються, і це говорить про те, яка зона, а також у квадратних дужках. Я підозрюю, що перший рівень - * .root-servers.net (for .), другий - * .gtld-servers.net (for .com) тощо.
derobert
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.