DNS сервер
DNS-сервер — додаток, призначений для відповідей на 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-запитів.
Прямий запит
Прямий запит (forward) — запит на перетворення доменне ім'я (символьної адреси) хоста в числову IP-адресу.
Зворотний запит
Зворотний запит (reverse) — запит на перетворення IP-адреси в ім'я хоста.
DNS використовується в першу чергу для перетворення символьних імен в IP-адреси, але він також може виконувати зворотний процес. Для цього використовуються вже наявні кошти DNS. Справа в тому, що із записом DNS можуть бути зіставлені різні дані, в тому числі і будь-яке символьне ім'я. Існує спеціальний домен in-addr.arpa, записи в якому використовуються для перетворення IP-адрес в символьні імена.
Наприклад, для отримання DNS-імені для адреси 11.22.33.44 потрібно запросити у DNS-сервера запис 44.33.22.11.in-addr.arpa, і той поверне відповідне символьне ім'я. Зворотний порядок запису частин IP-адреси пояснюється тим, що в IP-адресах старші біти розташовані на початку, а в символьних 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-клієнти, використовуючи вільні незареєстровані адреси.
Рекурсія
Терміном Рекурсія в DNS позначають алгоритм поведінки DNS-сервера, при якому сервер виконує від імені клієнта повний пошук потрібної інформації в усій системі DNS, при необхідності звертаючись до інших DNS-серверів.
DNS-запит може бути рекурсивним - вимагають повного пошуку, - і нерекурсивним - не вимагають повного пошуку.
Аналогічно, DNS-сервер може бути рекурсивним (який вміє виконувати повний пошук) і нерекурсивним (не вміє виконувати повний пошук). Деякі програми DNS-серверів, наприклад, BIND, можна настроїти так, щоб запити одних клієнтів виконувалися рекурсивно, а запити інших - нерекурсивний.
При відповіді на нерекурсивний запит, а також - при невмінні або заборону виконувати рекурсивні запити, - 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-запит про інших зонах зазвичай повертаються адреси інших серверів).