Що таке DNS
DNS це система яка дозволяє комп’ютерам підключеним до єдиної мережі перетворювати читаємі доменні імена в ip адреси цієї мережі.
Коли звичайний комп’ютер намагається зайти на сайт foobar.com, браузер намагається зарезолвити це ім’я відправляючи запит до вибраного DNS серверу. Ці сервера між собою не пов’язані і належать різним компаніям. Це можуть бути DNS сервера інтернет провайдера, Google, CloudFlare etc. Всі вони контролюються різними установами. По цій причині вони не синхронізовані між собою і в один момент часу можуть мати різні дані. Для прикладу сервера CF могли вже оновити записи для доменого імені foobar.com які були внесені власником домену в адмін панелі його доменного провайдера для прикладу Namecheap. В той час локальний DNS сервер інтернет провайдера, який зазвичай подефолту ставиться при підключені до мережі навряд чи встиг так швидко оновитися. Це призведе до того що через один комп’ютер сайт буде працювати, а на іншому все ще ні. В цілому швидкість оновлення DNS записів визначається близько 1 дня.
Тепер перейдемо до того як саме резолвиться доменне ім’я. У випадку мережі IPv4, яка поки є єдиним вибором в СНГ регіоні комп’ютер буде запитувати в DNS сервера запис типу А (для IPv6 це буде запис типу АААА). Поясню за записи. DNS сервер зберігає дуже малу кількість інформації це буквально табличка з 3 колонок (Тип запису, назва, значення) і декількома рядками (в залежності від того скільки записів створив власник). Більше ніякої інформації DNS сервер не зберігає. Єдине за що відповідає DNS сервер (у випадку простого відвідування веб сторінки) це дати ір адрес серверу, тобто просто повернути один рядок з адресою. Підключення до серверу, SSL сертифікати, порти і тому подібне немає до DNS ніякого відношення.
Є декілька основний типів DNS записів, всі вони використовуються для вказування певної інформації про домен.
- A, вказує на IPv4 адресу для даного домену чи піддомену (значення name в записі, про це пізніше)
- AAAA, вказує на IPv6 адресу для даного домену чи піддомену
- CNAME, використовується для умовного “редіректу” домену. Для
прикладу можна вказати для піддомену
www.foobar.com
запис CNAME зі значенням foobar.com. Таким чином при резолві комп’ютер побачивши цей запис, піде шукати ір адрес для домену foobar.com і вважатиме його адресом і для доменуwww.foobar.com
. - MX, разом з декількома іншими записами використовується для налаштування роботи електронної пошти для домену. Там багато ньюансів, та і протокол роботи електронної пошти настількиж древній і фундаментальний як і HTTP тому пояснювати що і як там не буду.
- TXT, використовується для вказування додаткової інформації. Часто використовується для підтвердження права володіння доменом для всіляких гугл/яндекс аналітик. Дані записи ніяк не вплинуть на процес резолву доменного імені.
- NS, вказує основний nameserver для домену який володіє актуальною інформацією про записи. Зазвичай не вимагає налаштування і провайдери самі його встановлюють. Може використовуватися для того аби передати право на змінну записів сторонній системі/користувачу без передачі права власності доменом. Для прикладу щоб налаштовувати записи з CloudFlare при тому що сам домен був куплений на якомусь GoDaddy або для використання власного DNS серверу.
Є і інші типи записів, проте вони навряд чи знадобляться при звичайних сценаріях.
Тепер щодо структури запису, ми вже розібрали тип записів далі йде назва запису і значення. Назва запису це не просто коментар для власника. Назва дозволяє налаштувати піддомен. Існує поняття рівнів домену, першочергово йде кореневий домен це те чим зазвичай володіють держави і видається ICANN. Кореневі домени це .com, .ua, .ru, .us, .gov, .mil. Вони працюють інакше від інших рівнів і використовуються для створення доменів наступних рівнів. Далі йдуть домени 1 рівня це вже altair.com, google.com, spacex.us etc. тобто в них йде якесь слово і після точки кореневий домен. Володіючи доменом 1 рівня можна створити безліч доменів вищих рівнів для прикладу домен 2 рівня це вже pool-42.altair.com, 3 рівня test.pool-42.altair.com etc. Якщо я хочу вказати А запис для домену 1 рівня foobar.com я створюю запис типу А і вказую ім’я ”@” цей символ використовується для адресації на домен 1 рівня. Тобто для домену foobar.com ім’я запису ”@” означає що цей запис стосується самого домену foobar.com. Якщо я хочу створити запис для домену 2 рівня “test.foobar.com” я створю запис типу А з іменем “test”. В якості значення для записів типу А та АААА вказується ір адреса на яку клієнт має відправляти подальші команди.