1.    
  2.    
  3.     Як працює DNS

Як працює DNS

Базовий принцип організації інтернет полягає в тому, що кожному комп’ютеру в мережі привласнений унікальний ip адресу, за якою його можна ідентифікувати. Але людині така адресація незручна – багато адрес такого виду можна утримувати в пам’яті? Тому для зручності користувачів комп’ютерів почали давати символьні імена, наприклад office, boss, George_Bush_computer.

На зорі появи інтернету, коли комп’ютерів в мережі було лічені одиниці, а потім десятки, інформація про відповідність імені комп’ютера та адреси заносилася в спеціальні файли hosts, які повинні були бути однаковими на кожному комп’ютері мережі. Вони, як негоего атавізму, використовуються і зараз. Ви можете занести в нього запис про адресу, який часто використовуєте і отримати тим самим деяке прискорення роботи броузера. Однак, кількість машин у мережі стрімко зростала, і на зміну файлів hosts прийшла ієрархічна система імен.

DNS (domain name systems, доменна система імен) служить для перетворення адреси у вигляді, наприклад www.iknowit.ru ip адреса, наприклад 127.0.0.1.

Існує корінь дерева – точка. Ця точка є завжди, тому в більшості випадків, вона опускається. Далі йдуть домени першого рівня. Спочатку це були com, net, edu, org, mil, коли мережа вийшла за межі США, з’явилися національні домени (наприклад, uk), пізніше були введені ще кілька міжнаціональних (такі як biz, info). На наступному рівні слідують “домени другого рівня”, наприклад iknowit, і так далі до імені конкретного сервера.

Таким чином, правильною адресою веб-сервера, що підтримує сайт “як працюють речі”.ru.iknowit.www. Коли виникла традиція писати адресу в іншій послідовності – автору не відомо, приймемо її як даність.

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

Припустимо, користувач з Аляски набрав адресу www.iknowit.ru. Броузер посилає запит DNS сервера мережі. Сервер, отримавши запит, або відповідає (якщо відповідь йому відомий), або пересилає запит на “вищестоящий” сервер (якщо він відомий) або на кореневій (кожному DNS-сервера відомі адреси кореневих DNS-серверів). Таким чином запит доходить до сервера зони точка. Потім запит починає спускатися вниз — кореневий сервер пересилає запит серверу першого рівня (підтримує зону ua). Той — сервера другого рівня (iknowit) і т. д., поки не знайдеться сервер, який точно знає таке ім’я, або знає, що таке доменне ім’я не існує. І результат запиту починає подорож назад. Зазвичай, виходячи з міркування – запитали раз, запитають і інший – DNS сервера запам’ятовують на якийсь час результат запиту, і при повторному зверненні проходити весь ланцюжок запитом не знадобиться. Час, протягом якого сервера зберігають таку інформацію задається адміністратором.

Якщо припустити, що сервер, обслуговуючий якийсь домен раптом перестане бути доступним, то всі машини, розташовані в цьому домені, випадуть з мережі. Тому при реєстрації домену другого рівня висувається вимога вказати мінімум два сервера DNS, які будуть цей домен обслуговувати – первинний і вторинний сервера. Вторинні сервера періодично опитують первинний сервер (не чекаючи запиту клієнта) і копіюють до собі інформацію про доменній зоні.

Тепер розглянемо, яка ж інформація зберігається про доменній зоні. Елементи бази DNS часто називають RR (скорочення від Resource Record). Базовий формат запису виглядає так:
[ім’я] [час] [клас] тип дані

Ім’я може бути відносним або абсолютним (FQDN — Fully Qualified Domain Name). Якщо ім’я відносне (не закінчується крапкою), то до нього додається ім’я поточного домену. Наприклад, якщо в домені iknowit.ru записано «www», то повне ім’я буде інтерпретуватися як “www.iknowit.ru.”

Час задає інтервал часу в секундах, протягом якого дані можуть зберігатися в кеші сервера.

клас визначає клас мережі. Практично завжди це буде IN, позначає INternet.

Типи:
SOA — визначає DNS зону
NS — сервер імен для зони
A — перетворення імені в IP-адресу
PTR — перетворення IP-адреси в ім’я
MX — поштова станція
CNAME — імена машини
HINFO — опис “заліза” пк
TXT — коментарі або якась інша інформація

У записах можна використовувати символи #; для коментарів, @ для позначення поточного домену, () — дужки — для написання даних на декількох рядках. Крім того, можна використовувати метасимвол * в імені. Порядок записів не має значення за одним винятком: запис SOA має йти першою. Подальші записи вважаються стосовними до тій же зоні, поки не зустрінеться нова запис SOA. Як правило, після запису зони вказують записи DNS-серверів, а інші записи розташовують за алфавітом, але це не обов’язково.

SOA — опис зони
Тепер спробуємо розглянути записи. Першою описуємо зону:
mycompany.ru. IN SOA ns.mycompany.ru. admin.mycompany.ru.
(1001 ; serial
21600 ; Refresh — 6 годин
1800 ; Retry — 30 хв
1209600 ; Expire — 2 тижні
432000) ; Minimum — 5 днів

Спочатку йде ім’я домену: mycompany.ru. (зверніть увагу на крапку в кінці імені). Замість імені можна було (і найчастіше так і роблять) поставити знак @. ns.mycompany.ru. — основний сервер імен admin.mycompany.ru. — поштову адресу адміністратора в форматі ім’я(точка)машина потім в круглих дужках йдуть поля, необхідні для правильного “сприйняття” вашої зони іншими серверами. Перше число — serial — є версією файлу зони. При внесенні змін це число треба збільшити — якщо вторинний сервер побачить, що його версія зони менше, ніж у первинного сервера, то він перечитає дані. Типовою помилкою є оновлення зони без оновлення цього числа. Дуже зручно в якості serial використовувати поточну дату, наприклад, 2003040401 — 4 квітня 2003 року, перше оновлення. Refresh говорить вторинних серверів, як часто вони повинні перевіряти значення serial.

Retry говорить про те, як часто вторинний сервер повинен намагатися прочитати дані, якщо первинний сервер не відповідає.

Expire говорить вторинних серверів, протягом якого часу вони повинні обслуговувати домен, якщо первинний сервер не відповідає. Після закінчення цього часу вторинні сервери будуть рахувати свої дані застарілими.

Minimum задає час життя записів за замовчуванням для даної зони.

NS описує сервера імен

Тепер опишемо сервера імен, які обслуговують наш домен:
mycompany.ru. IN NS ns.mycompany.ru.
mycompany.ru. IN NS ns.provider.ru.
Тут нічого складного немає. Так як ім’я зони збігається із зазначеною в полі ім’я запису SOA, то його можна залишити порожнім.

Далі йдуть записи A, описують ваші комп’ютери і дозволяють перетворити імена в IP-адреси.
major IN A 192.168.0.1
colonel IN A 192.168.0.2
IN HINFO “2xPIV-1.7 Win2K”
general.mycompany.ru. IN A 192.168.0.3
Тут теж нічого складного немає — імена можуть бути відносні або абсолютні”, можна додати записи про конфігурацію машини (пропущене ім’я в запису HINFO говорить про те, що мається на увазі попереднє ім’я). Не забудьте додати записи
localhost. IN A 127.0.0.1
localhost IN CNAME localhost.
mycompany.ru. IN A 192.168.0.1
Перша віддає адресу 127.0.0.1 будь-якій машині, що попросила ім’я localhost, друга — localhost.mycompany.ru, а третя говорить, куди послати клієнта, який хоче потрапити на mycompany.ru

CNAME дозволяють дати машин зручні або значущі імена. Наприклад:
ftp IN CNAME general говорить, що ftp.mycompany.ru мешкає за адресою 192.168.0.3. CNAME зручно використовувати, якщо ви міняєте ім’я машини, але хочете залишити доступ для клієнтів, які пам’ятають старе ім’я. Зручний трюк з використанням CNAME полягає в призначенні коротких імен частовикористовуваним адресами. Наприклад, прописавши ik IN CNAME www.iknowit.ru., ви зможете заходити на iknowit просто набираючи ik в якості адреси.

Записи MX потрібні для того, щоб вказати, куди пересилати пошту. У цих записах додається пріоритет — чим він менший, тим вищий пріоритет машини. Пріоритети потрібні для того, щоб можна було задати кілька записів і перенаправляти пошту на альтернативний сервер, якщо основний не працює. MX запис повинна бути вказана для домену в цілому і, можливо, для кожної машини окремо. Складного тут теж нічого немає за одним винятком: дуже часто зустрічається неправильно використання метасимвола “*”. Запис “*.mycompany.ru.” означає не “будь-яка машина домену mycompany.ru”, а “будь-яка машина, яка ще не була описана”. Причому, навіть якщо використовувалася не MX, а, наприклад, A-запис, то зірочка все одно не буде працювати для цієї машини.

На цьому створення файлу зони можна вважати закінченим. Але залишається більш захоплююче заняття: опис реверсної зони. Якщо попередній файл дозволяє визначити IP-адресу по імені, то тепер треба зробити так, щоб по IP-адресою можна було “вирахувати” ім’я. Відсутність реверсної зони є досить типовою помилкою і може призводити до різних помилок — починаючи від збоїв FTP-серверів і закінчуючи класифікацією відправлених листів як спаму. PTR перетворює адресу ім’я. Для зворотного перетворення використовуються записи PTR. Але не поспішайте їх вписувати — тут є одна хитрість: вони пишуться в окремому спеціальному домені верхнього рівня з назвою IN-ADDR.ARPA. Домен цей був створений для того, щоб і для прямого і зворотного перетворень можна було використовувати одні і ті ж програмні модулі. Справа в тому, що “мнемонічні імена пишуться зліва направо: www.lprobs.ru означає, що www знаходиться в lprobs, а lprobs — ru. IP-адреси пишутся навпаки: 195.242.9.4 означає, що машина 4 знаходиться в підмережі 9, яка є частиною 195.242 І для збереження “єдиного стилю” адрес для зворотного перетворення використовуються імена виду 4.9.242.195.IN-ADDR.ARPA (зверніть увагу, що IP-адреса записаний у зворотному порядку).

Отже, ми створюємо ще один файл зони (зони, наприклад, 10.168.192.IN-ADDR.ARPA), копіюємо в нього запис SOA (а заодно і NS), після чого починаємо писати:
1 IN PTR major.mycompany.ru.
2 IN PTR colonel.mycompany.ru.

Можна задавати не лише відносні, а й абсолютні імена:
3.0.168.192.IN-ADDR.ARPA. IN PTR

27.01.2017

Написати коментар