Відмінності між версіями «DNS клієнт»

Матеріал з Вікі ЦДУ
Перейти до: навігація, пошук
 
(не показано одну проміжну версію цього учасника)
Рядок 1: Рядок 1:
'''DNS-сервер''' — додаток, призначений для відповідей на DNS-запити за відповідним протоколом. Також DNS-сервером можуть називати хост, на якому запущено програму.
+
'''DNS-клієнт''' - програма (або модуль в програмі), що забезпечує визначення адреси вузла по його повного імені.
  
== Типи DNS-серверів ==
+
Функція клієнта DNS вбудована майже в будь-яку програму, призначену для роботи в мережі '''Internet'''. Однак, більшість DNS-клієнтів не вміють самостійно виконувати рекурсію, тому що в противному випадку їх алгоритми довелося б невиправдано ускладнювати. Крім цього використання рекурсії DNS-клієнтами не дозволило б здійснювати режими обмеження доступу в зовнішню мережу і кешування DNS.
За виконуваними функцій DNS-сервери поділяються на декілька груп, залежно від конфігурації конкретний сервер може відноситися до декількох типів;
+
* '''''Авторитативний DNS-сервер''''' — сервер, що відповідає за будь-яку зону.
+
** '''''Майстер''''' або ''первинний сервер'' (в термінології '''BIND''') — сервер, що має право на внесення змін в дані зони. Зазвичай для зони буває тільки один майстер сервер. У випадку Microsoft DNS-сервера і його інтеграції з Active Directory майстер-серверів може бути декілька (так як реплікація змін здійснюється не засобами DNS-сервера, а засобами Active Directory, за рахунок чого забезпечується рівноправність серверів і актуальність даних).
+
** '''''Слейв''''' або ''вторинний сервер'', що не має права на внесення змін в дані зони і отримує повідомлення про зміни від майстер-сервера. На відміну від майстер-сервера їх може бути (практично) необмежена кількість. Слейв так само є авторитативним сервером (і користувач не може розрізнити майстер і слейв, різниця з'являється тільки на етапі конфігурації / внесення змін до налаштувань зони).
+
* '''''Кешуючий DNS-сервер''''' — сервер, який обслуговує запити клієнтів, (отримує рекурсивний запит, виконує його за допомогою нерекурсивних запитів до авторитативних серверів або передає рекурсивний запит DNS-серверу, що стоїть вище за ієрархією)
+
* '''''Локальний DNS-сервер''''' - використовується для обслуговування DNS-клієнтів, що виконуються на локальній машині. Фактично, це різновид кешуючого DNS-сервера, сконфігурований для обслуговування локальних додатків.
+
* '''''Перенаправляючий DNS-сервер''''' - сервер, що перенаправляє отримані рекурсивні запити кешуючому серверу (який знаходиться вище за ієрархією) у вигляді рекурсивних запитів. Використовується переважно для зниження навантаження на кешуючий DNS-сервер.
+
* '''''Кореневі сервери DNS''''' — сервер, який є авторитативним за кореневу зону. Загальновживаних кореневих серверів у світі всього 13 штук, їх доменні імена знаходяться в зоні '''''root-servers.net''''' і називаються '''''a.root-servers.net''''', '''''b.root-servers.net''''', …, '''''m.root-servers.net'''''. У певних конфігураціях локальної мережі можлива ситуація налаштування локальних кореневих серверів.
+
* '''''Реєструючий DNS-сервер'''''. Сервер, що приймає динамічні оновлення від користувачів. Часто поєднується з DHCP-сервером. У Microsoft DNS-сервер при роботі на контролері домену сервер працює в режимі реєструючого DNS-сервера, приймаючи від комп'ютерів домену інформацію про відповідність імені та IP-адресу комп'ютера і оновлюючи відповідно до неї дані зони домену.
+
* '''''DNSBL-сервер''''' (сервер з чорними списками адрес та імен). Формально, такий сервер не входить в ієрархію DNS, однак використовує той же механізм і протокол для роботи, що і DNS-сервера.
+
  
== Види DNS-запитів ==
+
== Спеціалізовані програми ==
  
Протокол DNS для роботи використовує 53-й '''TCP'''-або '''UDP'''-порт для відповідей на запити. Традиційно запити і відповіді відправляються у вигляді однієї '''UDP''' датаграми. '''TCP''' використовується для '''AXFR'''-запитів.
+
Для діагностики DNS використовуються спеціалізовані програми - '''''nslookup''''' і '''''dig'''''. Версія '''''nslookup''''' для '''Windows''' (як і багато DNS-клієнти для windows) підтримує '''WINS''', що може створювати плутанину при розрізняються відповідях '''WINS''' і '''DNS''' серверів. Деякі версії '''''nslookup''''' в '''Unix''' підтримують крім DNS ще й '''''Network Information Service''''', що так само ускладнює діагностику. При перевірці інтегрованих з '''''Active Directory DNS-серверів''''' може використовуватися утиліта '''''dcdiag'''''.
  
=== Прямий запит ===
+
== Режими роботи DNS-сервера ==
'''''Прямий запит''''' (''forward'') — запит на перетворення доменне ім'я (символьної адреси) хоста в числову IP-адресу.
+
  
=== Зворотний запит ===
+
DNS-сервер, що виконує запит клієнта може працювати в одному з трьох режимів:
'''''Зворотний запит''''' (''reverse'') — запит на перетворення IP-адреси в ім'я хоста.
+
  
DNS використовується в першу чергу для перетворення символьних імен в IP-адреси, але він також може виконувати зворотний процес. Для цього використовуються вже наявні кошти '''DNS'''. Справа в тому, що із записом '''DNS''' можуть бути зіставлені різні дані, в тому числі і будь-яке символьне ім'я. Існує спеціальний домен '''''in-addr.arpa''''', записи в якому використовуються для перетворення IP-адрес в символьні імена.  
+
* Режим форвардингу (передачі) запитів іншому DNS-сервера - у цьому випадку запит майже не відрізняється від запиту DNS-клієнта. (Така схема використовується при використанні кешує '''DNS-серверів''' і серверів в '''DMZ''').
 +
* Режим самостійного виконання рекурсивного запиту.
 +
* Режим обслуговування зони (в цьому випадку запити на сторонні (не авторітатівние) зони не приймаються, замість цього повертаються адреси кореневих серверів).
  
Наприклад, для отримання DNS-імені для адреси 11.22.33.44 потрібно запросити у '''DNS-сервера''' запис 44.33.22.11.in-addr.arpa, і той поверне відповідне символьне ім'я. Зворотний порядок запису частин IP-адреси пояснюється тим, що в IP-адресах старші біти розташовані на початку, а в символьних DNS-іменах старші (що знаходяться ближче до кореня) частини розташовані в кінці.
+
У багатьох версіях '''BIND''' запит до інших DNS-серверів виходив з 53-го порту (порту, за якою приймаються запити DNS, як '''TCP''', так і '''UDP'''), на відміну від клієнтських додатків, що використовують довільний порт відправника (з незареєстрованої діапазону).
  
=== Рекурсія ===
+
=== Робота з DNS різних програм ===
  
Терміном Рекурсія в DNS позначають алгоритм поведінки '''DNS-сервера''', при якому сервер виконує від імені клієнта повний пошук потрібної інформації в усій системі DNS, при необхідності звертаючись до інших '''DNS-серверів'''.
+
Поштовий сервер використовує клієнт DNS, для запиту '''MX''', '''SPF''', '''A-запис''' (наприклад, '''''sendmail''''' використовує '''MX-запис''' в порядку зростання пріоритету, але в разі відсутності відповідного маршруту, в якості останньої спроби використовує '''A-запис'''), '''PTR-записів''' (для визначення імені хоста). Крім того, багато версії поштових серверів використовують імена, отримані через запит '''PTR-запису''' для визначення наявності '''MX-запису''' у даного імені, це використовується для автоматичного відмови в доставці у не-поштових серверів (у більшості своїй бот-нетов).
  
'''DNS-запит''' може бути ''рекурсивним'' - вимагають повного пошуку, - і ''нерекурсивним'' - не вимагають повного пошуку.
+
У загальному випадку можлива конфігурація, коли для різних серверів і зон DNS-сервер веде себе по-різному (наприклад, з локальної мережі приймає рекурсивні запити, із зовнішнього - тільки запити на авторитативні зони, або форвард запити на інший сервер тільки для заданих зон).
  
Аналогічно, '''DNS-сервер''' може бути рекурсивним (який вміє виконувати повний пошук) і нерекурсивним (не вміє виконувати повний пошук). Деякі програми DNS-серверів, наприклад, BIND, можна настроїти так, щоб запити одних клієнтів виконувалися рекурсивно, а запити інших - нерекурсивний.
+
Робочі станції та сервери в складі '''''Active Directory''''' використовують безліч DNS-записів типу '''SRV''' для визначення положення найближчого контролера домену в сайті і для виконання динамічного оновлення DNS-записи щодо робочої станції.
  
При відповіді на ''нерекурсивний'' запит, а також - при невмінні або заборону виконувати ''рекурсивні'' запити, - DNS-сервер або повертає дані про зону, за яку ти відповідальний, або повертає адреси серверів, які володіють великим обсягом інформації про запитаної зоні, ніж відповідає сервер, найчастіше - адреси кореневих серверів.
+
== Інтерфейс між програмою і DNS-клієнтом ==
  
У випадку рекурсивного запиту DNS-сервер запитує сервери (у порядку убування рівня зон в імені), поки не знайде відповідь або не виявить, що домен не існує. (На практиці пошук починається з найбільш близьких до шуканого DNS-серверів, якщо інформація про них є в кеші і не застаріла, сервер може не запитувати інші DNS-сервери.)
+
Більшість програм, що використовують функції DNS, не реалізують його функціональність самостійно (через сокети), а використовують або надаються операційною системою функції '''DNS-клієнта''', або використовують готову бібліотеку клієнта. До меншості відносяться в основному низькорівневі утиліти і серверне ПЗ, якому необхідна більш специфічна функціональність, ніж надається '''DNS-клієнтом'''.
 
+
Розглянемо на прикладі роботу всієї системи.
+
 
+
Припустимо, ми набрали в браузері адресу ru.wikipedia.org. Браузер запитує у сервера DNS: «яка IP-адреса у ru.wikipedia.org»? Однак, DNS-сервер може нічого не знати не тільки про запрошенням імені, але навіть про все домені wikipedia.org. У цьому випадку сервер звертається до кореневого сервера - наприклад, 198.41.0.4. Цей сервер повідомляє - «У мене немає інформації про даний адресу, але я знаю, що 204.74.112.1 є відповідальним за зону org.» Тоді сервер DNS направляє свій запит до 204.74.112.1, але той відповідає «У мене немає інформації про даний сервері , але я знаю, що 207.142.131.234 є відповідальним за зону wikipedia.org. »Нарешті, той самий запит відправляється до третього DNS-сервера і отримує відповідь - IP-адреса, який і передається клієнтові - браузеру.
+
 
+
У даному випадку при вирішенні імені, тобто в процесі пошуку IP по імені:
+
 
+
* Браузер відправив відомому йому DNS-сервера рекурсивний запит - у відповідь на такий тип запиту сервер зобов'язаний повернути «готовий результат», тобто IP-адресу, або повідомити про помилку;
+
* DNS-сервер, який отримав запит від браузера, послідовно відправляв нерекурсівние запити, на які отримував від інших DNS-серверів відповіді, поки не отримав відповідь від сервера, відповідального за запитану зону;
+
* Інші згадувані DNS-сервери обробляли запити нерекурсивний (і, швидше за все, не стали б обробляти запити рекурсивно, навіть якщо б така вимога стояло в запиті).
+
 
+
Іноді допускається, щоб, запитаний сервер передавав рекурсивний запит «вищестоящому» DNS-сервера і чекав готової відповіді.
+
 
+
При рекурсивної обробки запитів всі відповіді проходять через DNS-сервер, і він одержує можливість кешувати їх. Повторний запит на ті ж імена зазвичай не йде далі кешу сервера, звернення до інших серверів не відбувається взагалі. Допустимий час зберігання відповідей в кеші приходить разом з відповідями (поле TTL ресурсної запису).
+
 
+
Рекурсивні запити вимагають більше ресурсів від сервера (і створюють більше трафіку), так що зазвичай приймаються від «відомих» власнику сервера вузлів (наприклад, провайдер надає можливість робити рекурсивні запити тільки своїм клієнтам, в корпоративній мережі рекурсивні запити приймаються тільки з локального сегменту). Нерекурсівние запити зазвичай приймаються від усіх вузлів мережі (і змістовну відповідь дається тільки на запити про зону, яка розміщена на сайті, на DNS-запит про інших зонах зазвичай повертаються адреси інших серверів).
+
 
+
== Режим View ==
+
Деякі сервера підтримують можливість працювати в різних режимах для різних сегментів мережі. У '''Bind''' цей режим називається «view». Наприклад, сервер може для локальних адрес (наприклад, 10.0.0.0 / 8) віддавати локальні адреси серверів, для користувачів зовнішньої мережі — зовнішні адреси. Також сервер може бути авторитативним для заданої зони тільки для вказаного діапазону адрес (наприклад, у мережі 10.0.0.0 / 8 сервер оголошує себе авторитативним за зону internal, при цьому для зовнішніх адрес у відповідь на запит імені із зони internal буде віддаватися відповідь «не відомий»).
+
 
+
== Використовувані порти ==
+
Усі DNS-сервера за стандартом RFC 1035 відповідають на 53 порту TCP і UDP. При відправленні запитів ранні версії '''BIND''' використовували 53 порт, новіші поводять себе як DNS-клієнти, використовуючи вільні незареєстровані адреси.
+

Поточна версія на 09:54, 19 жовтня 2010

DNS-клієнт - програма (або модуль в програмі), що забезпечує визначення адреси вузла по його повного імені.

Функція клієнта DNS вбудована майже в будь-яку програму, призначену для роботи в мережі Internet. Однак, більшість DNS-клієнтів не вміють самостійно виконувати рекурсію, тому що в противному випадку їх алгоритми довелося б невиправдано ускладнювати. Крім цього використання рекурсії DNS-клієнтами не дозволило б здійснювати режими обмеження доступу в зовнішню мережу і кешування DNS.

Спеціалізовані програми

Для діагностики DNS використовуються спеціалізовані програми - nslookup і dig. Версія nslookup для Windows (як і багато DNS-клієнти для windows) підтримує WINS, що може створювати плутанину при розрізняються відповідях WINS і DNS серверів. Деякі версії nslookup в Unix підтримують крім DNS ще й Network Information Service, що так само ускладнює діагностику. При перевірці інтегрованих з Active Directory DNS-серверів може використовуватися утиліта dcdiag.

Режими роботи DNS-сервера

DNS-сервер, що виконує запит клієнта може працювати в одному з трьох режимів:

  • Режим форвардингу (передачі) запитів іншому DNS-сервера - у цьому випадку запит майже не відрізняється від запиту DNS-клієнта. (Така схема використовується при використанні кешує DNS-серверів і серверів в DMZ).
  • Режим самостійного виконання рекурсивного запиту.
  • Режим обслуговування зони (в цьому випадку запити на сторонні (не авторітатівние) зони не приймаються, замість цього повертаються адреси кореневих серверів).

У багатьох версіях BIND запит до інших DNS-серверів виходив з 53-го порту (порту, за якою приймаються запити DNS, як TCP, так і UDP), на відміну від клієнтських додатків, що використовують довільний порт відправника (з незареєстрованої діапазону).

Робота з DNS різних програм

Поштовий сервер використовує клієнт DNS, для запиту MX, SPF, A-запис (наприклад, sendmail використовує MX-запис в порядку зростання пріоритету, але в разі відсутності відповідного маршруту, в якості останньої спроби використовує A-запис), PTR-записів (для визначення імені хоста). Крім того, багато версії поштових серверів використовують імена, отримані через запит PTR-запису для визначення наявності MX-запису у даного імені, це використовується для автоматичного відмови в доставці у не-поштових серверів (у більшості своїй бот-нетов).

У загальному випадку можлива конфігурація, коли для різних серверів і зон DNS-сервер веде себе по-різному (наприклад, з локальної мережі приймає рекурсивні запити, із зовнішнього - тільки запити на авторитативні зони, або форвард запити на інший сервер тільки для заданих зон).

Робочі станції та сервери в складі Active Directory використовують безліч DNS-записів типу SRV для визначення положення найближчого контролера домену в сайті і для виконання динамічного оновлення DNS-записи щодо робочої станції.

Інтерфейс між програмою і DNS-клієнтом

Більшість програм, що використовують функції DNS, не реалізують його функціональність самостійно (через сокети), а використовують або надаються операційною системою функції DNS-клієнта, або використовують готову бібліотеку клієнта. До меншості відносяться в основному низькорівневі утиліти і серверне ПЗ, якому необхідна більш специфічна функціональність, ніж надається DNS-клієнтом.