Про DNS, домены и хостинги
Автор: Fenix_917
Тут недавно в чате проскакивала тема доменов хостингов, само хостингов и прочей подобной ереси.
Сразу скажу чукча не читатель, так что может излагать коряво, кидаться тапками при обнаружении неточностей не только можно, но и нужно!
ЧИТАТЬ ПЕРВЫМ В ТЕЛЕГРАМДавайте сразу сделаем разделение мухи отдельно котлеты отдельно.
А именно нужно сразу понимать что домен и хостинг, по большому счёту 2 друг от друга не зависимые единицы.
DNS. - Domain Name System «система доменных имён»
Если очень просто - это система, которая хранит записи вида IP - домен. Записей гораздо больше, называются они ресурсными, их куча видов:
A, AAAA, CNAME, PTR, TXT, SRV и т.д. Но сейчас не про них.
FQDN (Fully Qualified Domain Name) - полное доменное имя.
Это полный адрес компьютера, или интернет-хостинга в системе доменных имен, в дальнейшем, просто домен.
Если говорить по простому, это адрес сайта. Доменные имена были придуманы, чтобы легче было запомнить адрес сайта и не приходилось запоминать тонну IP адресов.
Допустим есть домен hui-pizda.jigurda и работает он с ip 10.10.10.10.
Мы это знаем, сервер это знает, а как рассказать интернету?
А всё просто, нужно рассказать об этом системе DNS.
Она одна, она глобальная и работает по принципу сарафанного радио.
Работает именно так, как бабки у подъезда, трут кто наркоман, кто проститутка, кто где живет и т.д.
DNS имеет древовидную структуру.
Есть главный DNS сервер. Далее идет 13 корневых DNS которые разбросаны по миру.
517906 IN NS a.root-servers.net.
517906 IN NS b.root-servers.net.
517906 IN NS c.root-servers.net.
517906 IN NS d.root-servers.net.
517906 IN NS e.root-servers.net.
517906 IN NS f.root-servers.net.
517906 IN NS g.root-servers.net.
517906 IN NS h.root-servers.net.
517906 IN NS i.root-servers.net.
517906 IN NS j.root-servers.net.
517906 IN NS k.root-servers.net.
517906 IN NS l.root-servers.net.
517906 IN NS m.root-servers.net.
Название каждого из корневых серверов, начинается с латинской буквы, от A до M. Следом уже идут региональные сервера, которые находятся в одной из зон корневых серверов. И так до момента, пока не будет найден DNS сервер с нужной нам записью.
Посмотреть наглядно, как происходит запрос можно с помощью команды dig, есть в пакете dnsutils.
Для примера рассмотрим как происходит запрос к gitgate.d3.ru
dig +trace gitgate.d3.ru
; <<>> DiG 9.18.33-1~deb12u2-Debian <<>> +trace gitgate.d3.ru
;; global options: +cmd
4097 IN NS h.root-servers.net.
4097 IN NS l.root-servers.net.
4097 IN NS a.root-servers.net.
4097 IN NS k.root-servers.net.
4097 IN NS d.root-servers.net.
4097 IN NS g.root-servers.net.
4097 IN NS e.root-servers.net.
4097 IN NS b.root-servers.net.
4097 IN NS i.root-servers.net.
4097 IN NS c.root-servers.net.
4097 IN NS m.root-servers.net.
4097 IN NS j.root-servers.net.
4097 IN NS f.root-servers.net.
;; Received 239 bytes from 127.0.0.53#53(127.0.0.53) in 0 ms
;; UDP setup with 2001:500:2::c#53(2001:500:2::c) for gitgate.d3.ru failed: network unreachable.
;; no servers could be reached
;; UDP setup with 2001:500:2::c#53(2001:500:2::c) for gitgate.d3.ru failed: network unreachable.
;; no servers could be reached
;; UDP setup with 2001:500:2::c#53(2001:500:2::c) for gitgate.d3.ru failed: network unreachable.
ru. 172800 IN NS a.dns.ripn.net.
ru. 172800 IN NS b.dns.ripn.net.
ru. 172800 IN NS d.dns.ripn.net.
ru. 172800 IN NS e.dns.ripn.net.
ru. 172800 IN NS f.dns.ripn.net.
ru. 86400 IN DS 18374 8 2 8058D0C088D9B3F7F30080E2B8C9804944301722A2CCE9EE66F6AC74 FEB2E200
ru. 86400 IN RRSIG DS 8 1 86400 20250315170000 20250302160000 26470 . f6jwB4Mdz24IGeMygrF6QnBUdF7q5a+D0bQtwJvtM4xNjyfdfipisQZd RGxniz53T2Np1dlUR0XyjFDA69J6fHOrBIzDGLjJogCprpZEeqo8oXHE ahWXDrdHiZl9kxaNfcBW3+UCGOkRfGcb/OTpbDs/ESJSpwZwfaJ7lEEB w6FA3D3MEqZ9lGnKZ8CyXaapEhoVhwr5jDRHT4ypm1/94wd/O1cOm7To dwPMiwR6zpjcBXLuYc+9C7cS99AlTItu9A376/47rUnC70iDQKRhPtF7 5wnR9ZFp3qOLN+9cQ9iTHAHs5zPyMrkWgV3QQjJNn0uugbWGmVHUL506 WMVoQA==
;; Received 689 bytes from 198.97.190.53#53(h.root-servers.net) in 39 ms
;; UDP setup with 2001:678:18:0:194:190:124:17#53(2001:678:18:0:194:190:124:17) for gitgate.d3.ru failed: network unreachable.
d3.ru. 345600 IN NS dan.ns.cloudflare.com.
d3.ru. 345600 IN NS nadia.ns.cloudflare.com.
j20c0qkdhua3cumnkst289ff06u2sq91.ru. 3600 IN NSEC3 1 1 0 - J21LULR2UNPA28SERE28OVNJNJ67QP7V NS SOA RRSIG DNSKEY NSEC3PARAM
j20c0qkdhua3cumnkst289ff06u2sq91.ru. 3600 IN RRSIG NSEC3 8 2 3600 20250310061026 20250124161529 55728 ru. 3C3+JqfnNX7R29MzbBTDuvAtFPqSCI5+ossOAvW9bRSYt/0siODOWi8C QLaxcgQzJ9hRCCqWZV2nQvJ1zMtu8cdQ8xoQGNzTQy+frMWh9ZbehcCP QgDIhyRFqYz8IJEQR9G93224tykzIBtxw9BkpevO67SPTJPaaJHleC90 Gek=
d9slfvst26r03g55lh2dir09foevo90a.ru. 3600 IN NSEC3 1 1 0 - D9VMFV9AMUKHP89EGN53DOJRIQS07I6M NS DS RRSIG
d9slfvst26r03g55lh2dir09foevo90a.ru. 3600 IN RRSIG NSEC3 8 2 3600 20250331135853 20250223081544 55728 ru. 1PvGMlIfltB75PAFduwQKDA9HZVqegHJN0zShpx+JSRf5afIFD7lRYoa N3ExCv4ub/on5PF1KiRDzxuBq3PdLUxscCGuIojHWtv0ZIGhifsXokV4 u7vSt/kNftqxCGHYmFlp1BcBhVM8mmXtFZQRoLO34XCIfHwTMfPJKiQ8 7PM=
;; Received 580 bytes from 194.190.124.17#53(d.dns.ripn.net) in 127 ms
gitgate.d3.ru. 300 IN A 178.248.237.15
;; Received 58 bytes from 173.245.59.108#53(dan.ns.cloudflare.com) in 7 ms
Многабукаф, непонятна. А вот и нет!
Изначально происходит обращение к локальному резолверу - 127.0.0.53
_tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 610/systemd-resolve_
Далее, резолвер отправляет запрос на DNS сервер указанный в настройках ОС, или DNS сервер нашего интернет провайдера.
Вот тут мы как раз и получаем список корневых серверов.
4097 IN NS h.root-servers.net._
4097 IN NS l.root-servers.net._
4097 IN NS a.root-servers.net._
4097 IN NS k.root-servers.net._
4097 IN NS d.root-servers.net._
4097 IN NS g.root-servers.net._
4097 IN NS e.root-servers.net._
4097 IN NS b.root-servers.net._
4097 IN NS i.root-servers.net._
4097 IN NS c.root-servers.net._
4097 IN NS m.root-servers.net._
4097 IN NS j.root-servers.net._
4097 IN NS f.root-servers.net._
Можно сказать что резолвер кричит всем серверам вопрос “Кто зону .ru знает? Кто за неё отвечает?”
Дальше серверы которые откликнулись, получают запрос о домене - d3.ru.
_ru. 172800 IN NS a.dns.ripn.net._
_ru. 172800 IN NS b.dns.ripn.net._
_ru. 172800 IN NS d.dns.ripn.net._
_ru. 172800 IN NS e.dns.ripn.net._
_ru. 172800 IN NS f.dns.ripn.net._
_ru. 86400 IN DS 18374 8 2 8058D0C088D9B3F7F30080E2B8C9804944301722A2CCE9EE66F6AC74 FEB2E200_
_ru. 86400 IN RRSIG DS 8 1 86400 20250315170000 20250302160000 26470 . f6jwB4Mdz24IGeMygrF6QnBUdF7q5a+D0bQtwJvtM4xNjyfdfipisQZd RGxniz53T2Np1dlUR0XyjFDA69J6fHOrBIzDGLjJogCprpZEeqo8oXHE ahWXDrdHiZl9kxaNfcBW3+UCGOkRfGcb/OTpbDs/ESJSpwZwfaJ7lEEB w6FA3D3MEqZ9lGnKZ8CyXaapEhoVhwr5jDRHT4ypm1/94wd/O1cOm7To dwPMiwR6zpjcBXLuYc+9C7cS99AlTItu9A376/47rUnC70iDQKRhPtF7 5wnR9ZFp3qOLN+9cQ9iTHAHs5zPyMrkWgV3QQjJNn0uugbWGmVHUL506 WMVoQA==_
_;; Received 689 bytes from 198.97.190.53#53(h.root-servers.net) in 39 ms_
Из ответа выше видно, о домене что-то знает корневой сервер:
h.root-servers.net.
В последующей секции уже получаем ответ от авторитарных DNS, которые управляют основным доменом - d3.ru.
_d3.ru. 345600 IN NS dan.ns.cloudflare.com._
_d3.ru. 345600 IN NS nadia.ns.cloudflare.com._
Ну и последний запрос идет непосредственно на авторитарный сервер, откуда и получаем нужную нам связку домен - IP.
_gitgate.d3.ru. 300 IN A 178.248.237.15_
Если перекладывать аналогию на бабок.
Есть у нас главная бабка, которая знает кто за какой район отвечает.
К ней пришли с вопросом, мол знаеть она за бордель новый чего?
У бабки начинает кипеть, она на уши поднимает всех остальных бабок, те что поменьше, каждая из которых знает что на районе твориться.
У тех тоже кипеть начинает и дергают бабок, которые за дворы отвечают. Ну и так далее, пока одна из бабок не скажет что “Вон они, в соседнем подъезде, вашпе стыд потеряли, сутками сексам траются!!!”
Чтобы всю цепочку не задерживать отзванивается самой главной.
Это как раз пример работы прямого и рекурсивного запроса в действии.
Т.е. был сделан запрос главной бабке (прямой). Она пошла обзванивать бобок поменьше, те поменьше и так до конца цепочки(рекурсивный запрос). По итогу получила ответ от последней бабки и дала ответ уже нам.
По запросам пробежались, за DNS кэш и на кой он нужен грузить не буду, в другой раз.
Окей, теперь второй вопрос, а откуда мы знаем что последняя бабка не в маразме?
Иначе говоря информация о связке домен - IP, достоверная?
Тут в игру вступает организация ICANN. От неё, как правило, получают аккредитацию регистраторы доменных имён.
Регистраторы, в свою очередь предоставляют услуги посредника, для всех кто хочет стать владельцем домена. Естественно не бесплатно и не навсегда, а на определённый срок.
Помимо регистрации домена, регистратор предоставляет техническую возможность указать авторитарные DNS-сервера(ответ трассировки из предпоследней секции).
_NS nadia.ns.cloudflare.com._
_NS dan.ns.cloudflare.com._
В данной секции видно, что управление связкой IP-домен происходит на DNS серверах CloudFlare.
Иначе говоря, регистратор перекладывает управление записью вида Домен - IP, на сторонние DNS сервера.
На самом деле, можно указать что угодно, хоть к соседу в квартиру, хоть на луну направить. Главное чтобы в конце цепочки был программный DNS сервер способный отдать связку IP - домен. Например - bind9.
Так ладно, с мухами вроде разобрались. Дальше дело за котлетами.