Работаю в хостинге: размещаем сайты пользователей на своих серверах.
Ввиду гигантского количества вопросов, которые нам задают и начинающие, и опытные пользователи, при помощи Пикабу хочу разъяснить некоторые принципы, аспекты и особенности этого ответвления IT-сферы. Не уверен, что количество вопросов от наших пользователей уменьшится, но попытаться стоит.
Даже если вы не пользуетесь хостингом, предположу, что эта информация может быть познавательна.
Еще на первом посте о DNS, думал, что тема будет закрыта. Но пикабушники считают иначе (пользуясь случаем, передаю привет @redisukropovich, @CitizenL), а кто я такой, чтобы идти против пикабушников, жаждущих утоления информационного голода? Поэтому, пост про DNS номер три.
Нужно сделать ремарку в самом начале: я никогда не видел лично внутренности корневых DNS-серверов (нулевого уровня), а также DNS-серверов, отвечающих за определённые доменные зоны (первого уровня): пока не дорос до таких высот. То, как они устроены я могу себе представить только примерно, поэтому нагружать вас недостоверной информацией не буду. Под моим управлением есть два DNS-сервера, хранящих информацию о размещённых на нашей технической площадке доменах. То есть, опираясь на предыдущий пост, писать буду о DNS-серверах второго уровня.
Для общего понимания, пойдём с самого начала цепочки.
Вы создали сайт и задались целью разместить этот сайт в Сети. Был выбран относительно простой вариант: размещение сайта за абонентскую плату у специализированной компании (хостер, хостинг-компания). Вы выбрали понравившееся вам свободное доменное имя pikabu.ru, зарегистрировали его по самой выгодной цене, которую наши. Затем нашли хостинг-компанию с интересными для вас ценовыми предложениями по размещению сайтов. Купили у них услуги хостинга, разместили сайт по их инструкциям на их сервере. А сайт при наборе домена pikabu.ru в адресной строке браузера не открывается. Что пошло не так?
Когда вы купили домен pikabu.ru, компания-регистратор, которая вам этот домен продала, направила DNS-серверу зоны .RU (на уровень 1) информацию о новом домене. Также они направили этому серверу информацию о DNS-серверах (сервера уровня 2), на которые нужно ссылаться при запросе IP-адреса веб-сайта этого домена. Поскольку при покупке домена вы еще не определились с компанией-хостером, то и DNS-сервера никакие для домена не указывали. В этом случае регистратор либо присваивает домену собственные DNS-сервера (второго уровня), либо не присваивает никаких.
Чтобы ваш сайт открывался с хостинга, услуги которого вы приобрели, вам нужно прописать в настрйоках купленного домена DNS-сервера (второго уровня) этой хостинг-компании. Делается это либо вами вручную, либо через тех. поддержку компании-регистратора, где вы приобрели домен pikabu.ru. Список самих DNS-серверов хостер должен предоставить вам по первому требованию.
Внесении изменений в список DNS у регистратора выглядит примерно так:
После того, как все необходимые действия сделаны, и сайт заработал, можно разобраться с тем, что же всё-таки хранится в DNS-серверах (второго уровня) у хостера.
DNS-сервер изнутри — это база данных, которая хранит записи об обслуживаемых доменах.
Каждая запись состоит как минимум из трёх полей: содержимое записи, тип записи, значение записи. Например:
pikabu.ru — A — 91.228.155.94
Если с содержимым (pikabu.ru) и значением (91.228.155.94) всё понятно, то что такое тип записи, который в нашем случае предстаёт буквой «A»?
На данный момент в DNS существует около четырёх десятков типов записей. Часть из них используется очень часто, часть — довольно редко. Самые часто используемые типы записей:
1. A — адрес. То есть, непосредственно IP-адрес домена.
2. AAAA — адрес в формате IPv6.
3. MX — mail exchanger. Указывает на адрес почтового сервера для домена.
4. NS — name server. Хранит информацию о DNS-сервере домена.
5. SOA — start of autority. Запись, указывающая на сервер с эталонной информацией по этому домену.
6. TXT — text string. Произвольная запись с любыми данными. Не длиннее 255 байт.
7. CNAME — canonical name. Имя для псевдонима записи, на которую будет производится перенаправление запросов.
8. SRV — указатель на сервера с какими-либо сервисами.
На примере домена pikabu.ru посмотрим, какие записи хранят DNS-сервера (второго уровная) хостинг-провайдера сайта этого домена:
Первой идёт запись типа TXT:
pikabu.ru. TXT "v=spf1 include:_spf.google.com ~all"
Она означает, что для домена pikabu.ru в DNS-сервере хостера хранится некая TXT запись, с какой-то белибердой в содержимом. Забегая чуть вперёд, скажу, что эта запись помогает почте с домена pikabu.ru ходить через сервера google и успешно доставляться в ящики адресатов. Про работу почты вообще и SPF-записей я сделаю отдельный пост, информации на эту тему довольно много.
Затем мы видим SOA-запись:
pikabu.ru. SOA ns1.fornex.com. hostmaster.fornex.com. (
2469468516 ; serial
46800 ; refresh (13 hours)
1800 ; retry (30 minutes)
3600000 ; expire (5 weeks 6 days 16 hours)
21600 ; minimum (6 hours)
)
Разберём запись.
pikabu.ru — имя записи
SOA — тип записи
ns1.fornex.com — первичный DNS-сервер, который хранит наиболее полную информацию о предмете записи (о pikabu.ru, стало быть)
Электронная почта ответственного за содержимое записи; символ собаки здесь заменён точкой ввиду формата записей внутри dns.
Серийный номер (serial) — номер версии записи зоны. Положительное число, которое должно меняться с каждым изменением содержимого записи. Нужно для того, чтобы вторичные серверы могли по изменению серийного номера понять, что DNS-записи по домену были изменены.
Обновление (refresh) — параметр времени (цифра в секундах), говорящий вторичным DNS-серверам, с какой частотой нужно обращаться к первичному DNS-серверу, чтобы узнать, не менялся ли срийный номер записи.
Повторная попытка (retry) — опять же параметр времени в секундах, указывающий время ожидания для вторичного DNS перед повторением попытки получить информацию об изменении серийного номера, если на предыдущий запрос по какой-то причине не было получено ответа.
Время истечения (expire) — в секундах показывает время, в течение которого вторичный сервер может использовать без обновления данные записи, которые он получил ранее.
Минимальное время кэширования негативного ответа (minimum) — временной параметр в секундах, указывающий, как долго должны кэшироваться ответы, утверждающие, что для данного домена нет соответствующего IP.
Далее мы наблюдаем четыре записи NS:
pikabu.ru. NS ns1.fornex.com.
pikabu.ru. NS ns2.fornex.com.
pikabu.ru. NS ns3.fornex.com.
pikabu.ru. NS ns4.fornex.com.
Которые сообщают, что информацию по домену можно найти и на этих DNS-серверах. Количество и содержание этих записей должно соответствовать информации о количестве DNS-серверов и их количестве, которая хранится в DNS-сервере первого уровня (в нашем случае DNS-сервере домена RU.)
После NS записей идут MX-записи. Также в количестве нескольких штук:
pikabu.ru. MX 10 ASPMX5.GOOGLEMAIL.com.
pikabu.ru. MX 1 ASPMX.L.GOOGLE.com.
pikabu.ru. MX 5 ALT1.ASPMX.L.GOOGLE.com.
pikabu.ru. MX 5 ALT2.ASPMX.L.GOOGLE.com.
pikabu.ru. MX 10 ASPMX2.GOOGLEMAIL.com.
pikabu.ru. MX 10 ASPMX3.GOOGLEMAIL.com.
pikabu.ru. MX 10 ASPMX4.GOOGLEMAIL.com.
Рассмотрим эти записи на примере одной. Сначала, как мы уже привыкли, идёт имя домена записи: pikabu.ru. Затем тип записи MX, который говорит нам, что эта запись сообщает имя почтового сервера домена. После неё следует цифра, в нашем случае от 1, 5 или 10. Это приоритет MX-записи. То есть, запись с приоритетом 1 будет срабатывать первой. С приоритетом 10 — последней.
Почему их несколько? Причина неизменна: дублирование для повышения отказоустойчивости. Почтовый сервис google, которым пользуется pikabu.ru, огромен, и некоторые его сервера периодически могут уходить на профилактику, в этом случае начинает работать запись со следующим приоритетом, и почта начинает обрабатываться другим почтовым сервером.
И последняя в нашем списке запись
pikabu.ru. A 91.228.155.94
С ней мы уже разобрались в самом начале: домен pikabu.ru имеет IP-адрес сайта 91.228.155.94. Именно по этому адресу браузеру и нужно обращаться за содержимым сайта pikabu.ru.
Со стороны хостера всё это добрище выглядит примерно так:
Благодарю всех, кто осилил прочитать это до конца. Если возникли вопросы, задавайте в комментариях, попробую ответить.