что это такое, какие функции выполняет
DNS (Domain Name System) – это система доменных имен, предназначенная для связывания доменов (названий сайтов) с IP-адресами компьютеров, обслуживающих их. То есть, данная система предназначена для облегчения поиска веб-сайтов.
Домен, который вы вводите в браузере, не является настоящим адресом сайта. Это равносильно тому, что вы отправите письмо человеку, указав на конверте лишь его Ф.И.О. и город проживания. Но как доставить ему письмо, если почтальон не знает конкретно, где находится адресат? Для этого на конверте и указывают почтовый адрес.
Для чего нужен DNS?
Роль почтового адреса в интернете играет IP-адрес(по рус. Айпи). Он есть у всех устройств в сети, будь то домашняя сеть или Интернет. С его помощью устройства могут общаться между собой, отправляя запросы и отвечая на них по определенным IP-адресам. Они задают, на какое устройство необходимо отправить данные.
Айпи состоит из четырех чисел, начиная от 0 и заканчивая 255. К примеру, один из интернет-адресов сайта компании Google выглядит так: 77.214.53.237. Если вы скопируете данное сочетание цифр и вставите в адресную строку в браузере, то автоматически попадете на страницу google.com. Позже мы расскажем, почему домены могут иметь несколько IP.
Вы спросите: «А зачем вообще усложнять жизнь и почему нельзя оставить только доменные имена»? Суть в том, что любой доступный во Всемирной паутине сайт – это, грубо говоря, тот же компьютер со своим айпи. Все его файлы, папки и прочие материалы хранятся на сервере. Компьютеры способны работать только с цифрами – без DNS они не поймут символьный запрос.
В отличие от компьютеров, человеку тяжело держать в голове уйму цифр. IP-адрес очень похож на длинный мобильный номер. Чтобы не было необходимости запоминать номера телефонов, мы записываем их в «контакты» и называем, зачастую, именами владельцев этих номеров. Например: Иван Сидорович, +7-123-456-78-90. В следующий раз, когда мы захотим позвонить Ивану, нам достаточно ввести его имя, а про номер можно и вовсе забыть.
В Интернете роль подобной телефонной книжки отводится именно DNS. В этой системе прописана и сохранена связь сравнительно легко запоминающихся имен сайтов с тяжелыми к запоминанию цифровыми адресами. Вот только во Всемирной сети такую «книгу» ведут не знакомые Ивана Сидоровича, которые в собственных «контактах» могут назвать его как угодно, а лично он.
Например, чтобы зайти на сайт Ивана с доменным адресом yavanya.com, который он выбрал сам, достаточно ввести его в браузере, после чего DNS отправит компьютеру (через который вы сидите в браузере) необходимый IP-адрес. Допустим, 012.012.012.012 – это айпи, соответствующее сайту yavanya.com. Тогда сервер (компьютер), на котором размещен сайт, с таким адресом проанализирует введенный пользователем запрос и пришлет данные браузеру для отображения запрошенной страницы.
Где находятся записи соответствия доменов IP-адресам?
Система доменных имен владеет собственными DNS-серверами. Именно в них содержится вся информация о принадлежности того или иного домена определенному IP-адресу. Подобных серверов большое количество и они выполняют две важных функции:
- хранение списка айпи и соответствующих им доменов;
- кэширование записей из других серверов системы.
Здесь стоит пояснить суть второй функции – кэширования. При каждом запросе пользователя, серверам приходится находить IP-адрес в соответствии с указанным названием ресурса. И если страница, которую вы запрашиваете, расположена слишком далеко, потребуется «добраться» до стартового DNS-сервера, где хранится эта информация, что значительно замедляет загрузку сайтов.
Предотвратить эту проблему призваны, так называемые, вторичные DNS-сервера, расположенные ближе к вашему устройству (как правило, они находятся у ваших провайдеров). Чтобы при повторном запрашивании какого-либо сайта не искать его адрес заново, в своем кэше они сохраняют данные о нем и оперативно сообщают IP.
Важно! Кэширование невозможно без первичных DNS-серверов, содержащих первую связь айпи с доменными именами. В процессе регистрации домена, перед тем, как ваш сайт заработает, необходимо уведомить регистратора о DNS-сервере, где будет храниться вся информация о вашем домене. А какая именно информация, об этом немного позже.
Что такое DNS-зона?
Выше мы привели самый простой пример соответствия IP-адреса домену, которое происходит по такой схеме: одно доменное имя – один ресурс – один адрес. Тем не менее, к единственному домену, кроме сайта, одновременно может относиться и почтовый сервер, адресуемый уже другим айпи. В данном случае нельзя не упомянуть о поддоменах, про которые мы писали раньше. Простой пример поддомена популярного в России почтового сервиса: mail.yandex.ru.
И веб-ресурс, и почта могут иметь по несколько IP-адресов – это делается с целью повышения их надежности и обеспечения быстродействия. DNS-зона – это содержимое файла, в котором прописаны связи между доменами и IP-адресами. Она содержит следующую информацию:
- А – адрес «сайта» домена.
- MX – адрес «почтового сервера» того же домена.
- CNAME – синоним домена. То есть, доменный адрес www.yavanya.com – синоним yavanya.com и, введя в браузере запрос без «www», вас все равно перенаправит на сайт.
- NS – в данной записи содержатся домены DNS-серверов, обслуживающих конкретный домен.
- TXT – тут может содержаться любое примечание в текстовом формате.
Это сокращенный список, включающий в себя основные поля DNS-зоны.
Дополнительная информация
Есть еще множество нюансов, касающихся описания доменов. Но чтобы облегчить для начинающего изучение новой темы, мы избежали их. Однако, для общего понимания тематики рекомендуем вам ознакомиться еще с несколькими важными деталями:
- Мы говорили о доменах с адресами, включающими в себя четыре числа. Они относятся к стандарту IPv4 и могут обслужить ограниченное количество устройств: 4 294 967 296. Да, более четырех миллиардов компьютеров – это немало, но технологический прогресс стремителен и устройства, подключаемые к Интернету, приумножаются с каждым днем. Это привело к нехватке адресов. Во избежание данной проблемы были внедрены новые IPv6 – адрес
webmasterie.ru
DNS сервер BIND (теория) / Habr
Основная цель DNS — это отображение доменных имен в IP адреса и наоборот — IP в DNS. В статье я рассмотрю работу DNS сервера BIND (Berkeley Internet Name Domain, ранее: Berkeley Internet Name Daemon), как сАмого (не побоюсь этого слова) распространенного. BIND входит в состав любого дистрибутива UNIX. Основу BIND составляет демон named, который для своей работы использует порт UDP/53 и для некоторых запросов TCP/53.Основные понятия Domain Name System
Исторически, до появления доменной системы имен роль инструмента разрешения символьных имен в IP выполнял файл /etc/hosts, который и в настоящее время играет далеко не последнюю роль в данном деле. Но с ростом количества хостов в глобальной сети, отслеживать и обслуживать базу имен на всех хостах стало нереально затруднительно. В результате придумали DNS, представляющую собой иерархическую, распределенную систему доменных зон. Давайте рассмотрим структуру Системы Доменных Имён на иллюстрации:
Доменная структура DNS представляет собой древовидную иерархию, состоящую из узлов, зон, доменов, поддоменов и др. элементов, о которых ниже пойдет речь. «Вершиной» доменной структуры является корневая зона. Настройки корневой зоны расположены на множестве серверов/зеркал, размещенных по всему миру и содержат информацию о всех серверах корневой зоны, а так же отвечающих за домены первого уровня (ru, net, org и др). Информация о серверах корневой зоны расположена на данном сайте корневых серверов. Настройки корневой зоны всегда доступны тут. Серверы корневой зоны обрабатывают и отвечают на запросы, выдавая информацию только о доменах первого уровня (то есть отвечают на любые запросы, как на нерекурсивные)! Итак, уже много раз повторилось слово зона. Пора этот термин объяснить.
Зона — это любая часть дерева системы доменных имен, размещаемая как единое целое на некотором DNS-сервере. Зону, для бОльшего понимания, можно назвать «зоной ответственности». Целью выделения части дерева в отдельную зону является передача ответственности (Делегирование) за эту ветвь другому лицу или организации. На иллюстрации, примеры зон выделены синим градиентом (зона name., зона k-max.name. со всем подчиненными ресурсами, www.openoffice.org со всем подчиненными поддоменами и ресурсами). На иллюстрации выделены не все зоны, а лишь некоторые для общего понимания и представления. В каждой зоне имеется, по крайней мере, один авторитетный сервер DNS, который хранит ВСЮ информацию о зоне, за которую он отвечает.
Домен — это именованная ветвь или поддерево в дереве имен DNS, то есть это определенный узел, включающий в себя все подчиненные узлы. Следующая цитата из книги Linux Network Administrators Guide хорошо проясняет картину относительно разницы между зоной и доменом:
Таким образом, пространство имен раздроблено на зоны ( zones), каждая из которых управляется своим доменом. Обратите внимание на различие между зоной (zone) и доменом (domain): домен groucho.edu затрагивает все машины в университете Groucho Marx, в то время как зона groucho.edu включает только хосты, которые работают в непосредственно компьютерном центре, например в отделе математики. Хост в отделе физики принадлежат другой зоне, а именно physics.groucho.edu.
Каждый узел в иерархии DNS отделен от своего родителя точкой. Если провести аналогию с файловой системой Linux, система доменных имен имеет похожую структуру, за тем исключением, что разделитель в файловой системе — слэш, а в DNS — точка. А так же DNS адрес читается справа налево (от корневого домена к имени хоста) в отличии от пути в файловой системе Linux. Доменное имя начинается с точки (корневого домена) и проходит через домены первого, второго и если нужно третьего и т.д. уровней и завершается именем хоста. Т.о. доменное имя полностью отражает структуру иерархии DNS. Часто (я бы сказал — всегда в повседневной жизни), последняя точка (обозначение корневого домена) в доменном имени опускается (то есть в браузере мы вводим не k-max.name., а k-max.name). Итак, разобрав структуру доменного имени, мы незаметно подошли к понятию FQDN.
FQDN (англ. Fully Qualifed Domain Name, полностью определённое имя домена) — это имя домена, однозначно определяющее доменное имя и включающее в себя имена всех родительских доменов иерархии DNS, в том числе и корневого. Своеобразный аналог абсолютного пути в файловой системе. Давайте разберем вышесказанное на примере имени домена mail.k-max.name:
mail.k-max.name. | | | | | | | | | +-корневой домен | | | +---домен первого уровня | | +------точка, разделяющая домены/части FQDN | +---------домен второго уровня +---------------поддомен/домен третьего уровня, возможно - имя хоста
Различие между FQDN и обычным доменным (неFQDN) именем появляется при именовании доменов второго, третьего (и т. д.) уровня. Для получения FQDN требуется обязательно указать в доменном имени домены более высокого уровня (например, mail является доменным именем, однако FQDN имя выглядит как mail.k-max.name.). Максимальный размер FQDN — 255 байт, с ограничением в 63 байта на каждое имя домена.
Поддомены, коротко говоря, это — подчиненные домены. По большому счету, все домены в интернете являются подчиненными за исключением корневого. Например домен k-max является поддоменом домена name, а name, в свою очередь — поддоменом корневого домена.
Итак, на схеме выше мы рассмотрели корневой домен, следующим в иерархии идут домены первого/верхнего уровня, они же TLD, они же Top-Level Domain. К данным доменам относятся национальные домены (ru., ua. и др) и общие домены (com., net., и др). Существуют так же специализированные домены, которые не опубликованы в системе DNS, но используются программами (домен .onion используется анонимной сетью Tor для перехвата и последующей маршрутизации обращений к скрытым сервисам этой сети). Еще есть т.н. зарезервированные доменные имена, определенные в RFC 2606 (Reserved Top Level DNS Names — Зарезервированные имена доменов верхнего уровня) определяет названия доменов, которые следует использовать в качестве примеров (например, в документации), а также для тестирования. К таким именам относятся например example.com, example.org и example.net, а также test, invalid и др. Ниже по иерархии, как видно, идут домены третьего уровня и т.д. Заканчивается доменная иерархия — именами хостов, которые задаются соответствующими ресурсными записями или хостовыми записями.
Ресурсные записи
Ресурсная запись — это то, собственно ради чего в конечном счете и существует DNS. Ресурсная запись — это единица хранения и передачи информации в DNS. Каждая такая запись несет в себе информацию соответствия какого-то имени и служебной информации в DNS, например соответствие имени домена — IP адреса.
Запись ресурса состоит из следующих полей:
- имя (NAME) — доменное имя, к которому привязана или которому «принадлежит» данная ресурсная запись, либо IP адрес. При отсутствии данного поля, запись ресурса наследуется от предыдущей записи.
- Time To Live (TTL) — дословно «время жизни» записи, время хранения записи в кэше DNS (после указанного времени запись удаляется), данное поле может не указываться в индивидуальных записях ресурсов, но тогда оно должно быть указано в начале файла зоны и будет наследоваться всеми записями.
- класс (CLASS) — определяет тип сети, (в 99,99% случаях используется IN (что обозначает — Internet). Данное поле было создано из предположения, что DNS может работать и в других типах сетей, кроме TCP/IP)
- тип (TYPE) — тип записи синтаксис и назначение записи
- данные (DATA) — различная информация, формат и синтаксис которой определяется типом.
При этом, возможно использовать следующие символы:
- ; — Вводит комментарий
- # — Также вводит комментарии (только в версии BIND 4.9)
- @ — Имя текущего домена
- ( ) — Позволяют данным занимать несколько строк
- * — Метасимвол (только в поле имя)
Со всем набором ресурсных записей можно ознакомиться в wikipedia. Наиболее часто применяемые ресурсные записи следующими (далее, мы обязательно рассмотрим их на практике):
- A — (address record/запись адреса) отображают имя хоста (доменное имя) на адрес IPv4. Для каждого сетевого интерфейса машины должна быть сделана одна A-запись. Например, следующая запись отображает доменное имя k-max.name. в IPv4 адрес хоста 81.177.139.65 (поле NAME — k-max.name., поле TTL — 86400, поле CLASS — IN, поле DATA — 81.177.139.65):
k-max.name. 86400 IN A 81.177.139.65
- AAAA (IPv6 address record) аналогична записи A, но для IPv6.
- CNAME (canonical name record/каноническая запись имени (псевдоним)) — отображает алиас на реальное имя (для перенаправления на другое имя), например, следующая запись задает алиас ftp для хоста www.k-max.name.:
ftp 86400 IN CNAME www.k-max.name.
- MX (mail exchange) — указывает хосты для доставки почты, адресованной домену. При этом поле NAME указывает домен назначения, поля TTL, CLASS — стандартное значение, поле TYPE принимает значение MX, а поле DATA указывает приоритет и через пробел — доменное имя хоста, ответственного за прием почты. Например, следующая запись показывает, что для домена k-max.name направлять почту сначала на mx.k-max.name, затем на mx2.k-max.name, если с mx.k-max.name возникли какие-то проблемы. При этом, для обоих MX хостов должны быть соответствующие A-записи:
k-max.name. 17790 IN MX 10 mx.k-max.name. k-max.name. 17790 IN MX 20 mx2.k-max.name.
- NS (name server/сервер имён) указывает на DNS-сервер, обслуживающий данный домен. Вернее будет сказать — указывают сервера, на которые делегирован данный домен. Если записи NS относятся к серверам имен для текущей зоны, доменная система имен их практически не использует. Они просто поясняют, как организована зона и какие машины играют ключевую роль в обеспечении сервиса имен. Например, зону name. обслуживают следующие NS:
name. 5772 IN NS l6.nstld.com. name. 5772 IN NS m6.nstld.com. name. 5772 IN NS c6.nstld.com. name. 5772 IN NS j6.nstld.com. ......
зону k-max.name обслуживают:k-max.name. 1577 IN NS ns2.jino.ru. k-max.name. 1577 IN NS ns1.jino.ru.
- PTR (pointer) — отображает IP-адрес в доменное имя (о данном типе записи поговорим ниже в разделе обратного преобразования имен).
- SOA (Start of Authority/начальная запись зоны) — описывает основные/начальные настройки зоны, можно сказать, определяет зону ответственности данного сервера. Для каждой зоны должна существовать только одна запись SOA и она должна быть первая. Поле Name содержит имя домена/зоны, поля TTL, CLASS — стандартное значение, поле TYPE принимает значение SOA, а поле DATA состоит из нескольких значений, разделенных пробелами: имя главного DNS (Primary Name Server), адрес администратора зоны, далее в скобках — серийный номер файла зоны (Serial number). При каждом внесении изменений в файл зоны данное значение необходимо увеличивать, это указывает вторичным серверам, что зона изменена, и что им необходимо обновить у себя зону. Далее — значения таймеров (Refresh — указывает, как часто вторичные серверы должны опрашивать первичный, чтобы узнать, не увеличился ли серийный номер зоны, Retry — время ожидания после неудачной попытки опроса, Expire — максимальное время, в течение которого вторичный сервер может использовать информацию о полученной зоне, Minimum TTL — минимальное время, в течение которого данные остаются в кэше вторичного сервера). Ниже в примере приведено 2 одинаковые записи SOA (хотя вторая и записана в несколько строк), но они одинаковы по значению и формат записи второй более понятен в силу его структурированности:
k-max.name. 86400 IN SOA ns1.jino.ru. hostmaster.jino.ru. 2011032003 28800 7200 604800 86400 k-max.name. 86400 IN SOA ns1.jino.ru. hostmaster.jino.ru. ( 2011032003 ; serial (серийный номер) 28800 ; refresh (обновление) 7200 ; retry (повторная попытка) 604800 ; expire (срок годности) 86400) ; minimum TTL (минимум)
- SRV (server selection) — указывают на сервера, обеспечивающие работу тех или иных служб в данном домене (например Jabber и Active Directory).
Давайте рассмотрим, что есть Делегирование. Делегирование (корректнее сказать делегирование ответственности) — это операция передачи ответственности за часть дерева доменных имен (зону) другому лицу или организации. За счет делегирования, в DNS обеспечивается распределенность администрирования и хранения зон. Технически, делегирование заключается в выделении какой-либо части дерева в отдельную зону, и размещении этой зоны на DNS-сервере, принадлежащем другому лицу или организации. При этом, в родительскую зону включаются «склеивающие» ресурсные записи (NS и А), содержащие указатели на авторитативные DNS-сервера дочерней зоны, а вся остальная информация, относящаяся к дочерней зоне, хранится уже на DNS-серверах дочерней зоны. Например, на иллюстрации корневой домен делегирует полномочия серверам отвечающим за TLD, TLD же в свою очередь, делегируют полномочия управления зонами — серверам второго уровня, иногда на этом цепочка заканчивается, но бывает, что делегирование простирается до 4 и даже 5 уровней.
Для бОльшего понимания, приведу пример. Делегирование управления поддоменом k-max.name другому лицу (в моем случае — хостеру) приводит к созданию новой зоны, которая администрируется независимо от остального пространства имен (независимо от вышестоящего name.). Зона k-max.name после делегирования полномочий теперь не зависит от name. и может содержать все (вернее сказать — любые имена, которые я захочу) доменные имена, которые заканчиваются на *.k-max.name. С другой стороны, зона name. содержит только доменные имена, оканчивающиеся на *.name., но не входящие в делегированные этой зоны, такие, например, как k-max.name или a-lab.name или любая другая. k-max.name может быть поделен на поддомены с именами вроде mail.k-max.name, ftp.k-max.name и некоторые из этих поддоменов могут быть выделены в самостоятельные зоны, и ответственность за данные зоны может так же быть делегирована. Если ftp.k-max.name будет являться самостоятельной зоной, то зона k-max.name не будет содержать доменные записи, которые заканчиваются на *.ftp.k-max.name.
Т.о. после делегирования ответственности, информация хранимая делегирующей зоной уже не включает информацию по делегированному поддомену и его ресурсным записям хостов, а хранит информацию о серверах имен, являющихся для делегируемого поддомена авторитативными. Это и есть «склеивающие» записи, о чем я выше уже говорил. В таком случае, если у DNS-сервера родительского домена запрашиваются данные об адресе, принадлежащем делегированному поддомену, в ответ предоставляется список DNS-серверов, которые обладают соответствующей информацией.
Серверы DNS
Выше, при рассмотрении типов ресурсных записей я упоминал о первичном и вторичном сервере. Кроме данных типов, существует еще один тип — кэширующий.
Главный сервер DNS (он же первичный, он же master, он же primary) — это авторитетный сервер (иногда называют — авторитативный, как правильнее называть — не знаю), который хранит главную копию файла данных зоны, сопровождаемую администратором системы.
Вторичный сервер — тоже является авторитетным, но он копирует главный файл зоны с первичного сервера. Отличие главного от вторичного лишь в том, что главный загружает свою информацию из конфигурационных файлов зоны, а вторичный — загружает (получает) настройки зон — с главного сервера. Вторичный DNS может получать свои данные и от другого вторичного сервера. Любой запрос относительно хоста в пределах зоны, за которую отвечает авторитетный сервер, будет в конце концов передан одному из этих серверов (главному или вторичному). Вторичных серверов может быть сколько угодно много. В зависимости от настроек, главный сервер может посылать вторичному сигнал о изменении зоны, при этом вторичный, получив сигнал производит копирование. Данное действие называется трансфер зоны (zone transfer). Существует два механизма копирования зоны: полное копирование (AXFR) и инкрементальное (incremental) копирование зоны (IXFR).
Кэширующие серверы НЕ АВТОРИТЕТНЫ, данные серверы хранят в памяти (кэше), ответы на предыдущие запросы, если данный сервер получил запрос, то он сначала просматривает информацию в кэше, и если в кэше не оказалось необходимого ответа, то отправляет запрос вышестоящему серверу DNS.
Возможно так же настроить DNS в режиме stels (т.н. невидимый), информацию о данном сервере невозможно получить используя прямые запросы. Это может быть полезно для организации primary сервера в защищенной среде и тем самым оградить зону от атак на зону.
Клиенты DNS (resolver)
Как же программы на конечных машинах знают куда и в каком виде посылать запросы DNS? Они этого не знают. Для разрешения имен и IP адресов клиентскими приложениями используется библиотека Resolver. Это не какое-то специальное приложение, это функциональность системы (ядра). Т.о. приложения посылают системные вызовы gethostbyname(2) и gethostbyaddr(2), а ядро уже на основании настроек в файле /etc/nsswitch.conf определяет по какому пути ему далее действовать. Данный файл определяет какие сервисы (будь то файл /etc/hosts или DNS) и в каком порядке использовать. В ранних версиях библиотеки Linux — libc, использовался файл /etc/host.conf. Вот фрагмент файла, который нас интересует:
root@DNS:~# cat /etc/nsswitch.conf ...... hosts: files dns networks: files
Две строки данного фрагмента указывают ядру производить преобразование имен хостов в IP (строка hosts: files dns) сначала из файла hosts, затем силами DNS, а так же преобразование имен сетей в IP (строка networks: files) с помощью файла /etc/network.Возможны так же параметры nis или nisplu, определяющие использовать Network Information System (NIS) чтобы найти адрес. Порядок, в котором перечислены сервисы, определяет последовательность их опроса.
Если согласно /etc/nsswitch.conf запрос отправляется DNS, то используются настройки из файла /etc/resolv.conf, который определяет какие серверы DNS использовать. Вот типичный пример файла /etc/resolv.conf:
root@DNS:~# cat /etc/resolv.conf nameserver 192.168.1.1 nameserver 192.168.1.2 domain examle.com
Директива nameserver определяет адрес сервера доменных имен, который будет выполнять рекурсивные запросы resolver. В данном файле указано использовать север имен сначала 192.168.1.1 затем, если первый не смог обработать запрос, 192.168.1.2. Рекомендуется не использовать более 3х параметров nameserver. Если опция nameserver не задана, то резолвер попытается соединиться с сервером на локальном хосте. Параметр domain определяет заданное по умолчанию имя домена, которое будет подставлено, когда DNS не удастся найти имя хоста. Существует так же опция search, которая задает дополнительные домены, в которых необходимо произвести поиск и разрешение имени хоста. Опции search и domain нельзя использовать совместно.
Кроме кэша на ДНС сервере, существуют кэши интернет-браузеров, кэши резолверов. Довольно прозрачную картину предоставляет Wikipedia:
Запросы DNS
В DNS имеются следующие типы запросов: итеративный (он же прямой), обратный и рекурсивный.
Итеративный (он же прямой, он же нерекурсивный) запрос посылает доменное имя DNS серверу и просит вернуть либо IP адрес этого домена, либо имя DNS сервера, авторитативного для этого домена. При этом, сервер DNS не опрашивает другие серверы для получения ответа. Так работают корневые и TLD серверы.
Рекурсивный запрос посылает DNS серверу доменное имя и просит возвратить IP адрес запрошенного домена. При этом сервер может обращаться к другим DNS серверам.
Обратный запрос посылает IP и просит вернуть доменное имя.
Любой DNS-server должен отвечать на итеративные запросы. Возможно настроить DNS отвечать и на рекурсивные запросы. Если DNS не настроен отвечать на рекурсивные запросы, он обрабатывает их как итеративные.
Обычно, провайдер выдает в локальной сети стоит DNS-сервер, обрабатывающий рекурсивные запросы, а так же, скорее всего, он настроен на кэширование запросов, что экономит трафик и снижает нагрузку на сеть. Схему взаимодействия клиента и DNS серверов можно представить следующей картинкой:
Давайте разберем, что тут нарисовано по шагам:
- Клиент (браузер, почтовая программа, либо любое другое приложение) отправляет запрос резолверу, резолвер на основании указанных конфигов определяет адрес настроенного сервера имен.
- Резолвер посылает запрос указанному серверу имен.
- Сервер имен принимает данный рекурсивный запрос и, т.к. не имеет информации ни о домене, ни, возможно, даже о зоне name., отправляет рекурсивный (или нерекурсивный в зависимости от настроек) запрос серверу, отвечающему за корневую зону.
- Сервер корневой зоны не обрабатывает рекурсивные запросы, в результате обрабатывает данный запрос как итеративный и возвращает имя и адрес сервера, авторитетного за зону name.
- Сервер последовательно продолжает опрашивать авторитативные сервера для последующих зон, в порядке убывания уровня зон в имени
- пока не получает удовлетворительный ответ, данных шагов может быть больше, в зависимости от длины доменного имени
- и «вложенности» доменных имен.
- В итоге, сервер получает необходимый ответ от сервера имен, хранящего необходимую ресурсную запись о хосте.
- Сервер
провайдералокальной сети возвращает резолверу клиента запрошенные данные.
Обычно, количество шагов сокращено до минимума, т.к. на пути прохождения запросов встречается кэширующий сервер, который хранит необходимую информацию в кэше. В данной схеме может возникнуть вопрос: каким образом локальный DNS сервер, получивший рекурсивный запрос от резолвера, выбирает DNS-сервер из списка авторитативных? Существует множество корневых DNS-серверов в сети Интернет, какому из корневых серверов наш DNS-сервер отправит запрос?
Для решения данного вопроса DNS-серверы BIND используют метрику, называемую временем отклика (roundtrip time, или RTT), для выбора среди авторитативных DNS-серверов одной зоны. RTT определяет задержку, с которой приходит ответ на запросы от удаленного сервера. Каждый раз, при передаче запроса удаленному серверу, DNS-сервер BIND запускает внутренний таймер. Таймер останавливается при получении ответа, и метрика фиксируется локальным сервером. Если приходится выбирать один из нескольких авторитативных серверов, выбор падает на сервер с наименьшим показателем RTT.
До того как BIND впервые послал запрос какому-либо серверу и получил от него ответ, удаленному серверу присваивается случайное значение RTT, которое меньше, чем все прочие, полученные на основании замеров. Таким образом, DNS BIND гарантированно опросит все авторитативные серверы для определенной зоны случайным образом, прежде чем начнет выбирать предпочтительный на основании метрики.
Ответы DNS сервера
Ответы DNS бывают следующего типа:
- Авторитативный ответ (authoritative response) приходит от серверов, являющихся ответственными за зону.
- Неавторитативный ответ (non authoritative response) приходит от серверов, которые не отвечают за зону (от кэширующих).
Ответ DNS обычно содержит следующую информацию:
- Запись заголовка — служебную информацию о запросе.
- Запись запроса — повторяет отправленный запрос.
- Запись ответа — собственно, сам ответ.
- Записи авторитетных серверов — информацию об авторитетных серверах, хранящих информацию по текущему запросу.
- Дополнительную информацию — дополнительные записи, например адреса NS-серверов.
Вышенаписанное наглядно подтверждается утилитой dig:
root@DNS:~# dig ya.ru ; <<>> DiG 9.7.3 <<>> ya.ru (раздел заголовка) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53499 ;; flags: qr rd ra; QUERY: 1, ANSWER: 7, AUTHORITY: 2, ADDITIONAL: 3 ;; QUESTION SECTION: (раздел запроса) ;ya.ru. IN A ;; ANSWER SECTION: (раздел ответа) ya.ru. 4813 IN A 87.250.250.203 ya.ru. 4813 IN A 87.250.251.3 ya.ru. 4813 IN A 93.158.134.3 ya.ru. 4813 IN A 93.158.134.203 ya.ru. 4813 IN A 213.180.204.3 ya.ru. 4813 IN A 77.88.21.3 ya.ru. 4813 IN A 87.250.250.3 ;; AUTHORITY SECTION: (авторитативные сервера) ya.ru. 4813 IN NS ns1.yandex.ru. ya.ru. 4813 IN NS ns5.yandex.ru. ;; ADDITIONAL SECTION: (дополнительная информация - адреса авторитативных name servers) ns5.yandex.ru. 345565 IN A 213.180.204.1 ns1.yandex.ru. 345565 IN A 213.180.193.1 ns1.yandex.ru. 3565 IN AAAA 2a02:6b8::1 ;; Query time: 7 msec ;; SERVER: 192.168.1.1#53(192.168.1.1) ;; WHEN: Sat Jul 2 23:02:45 2011 ;; MSG SIZE rcvd: 238
Обратное преобразование имен
DNS используется в первую очередь для преобразования доменных имён в IP-адреса, но он также может выполнять обратный процесс, называемый Обратное преобразование имен или обратным отображением. Т.к. записи в прямой базе DNS структурированы иерархически по доменным именам, DNS не может эффективно выполнять поиск по IP адресу в такой базе. Для обратного преобразования в DNS используется специальный домен in-addr.arpa. Ресурсные записи в данном домене в поле Name содержат IP-адреса, в поле Type — PTR, а в поле Data — FQDN-имя соответствующее данному IP.
На схеме представлена структура домена arpa. Думаю, что тут все довольно наглядно. Домен arpa. имеет 2 поддомена in-addr и ip6, отвечающие за IPv4 и IPv6 адреса соответственно. Домен in-addr.arpa. имеет от *.0.in-addr.arpa. до *.255.in-addr.arpa. поддоменов, каждый из которых так же имеет по 256 поддоменов.
В целях уменьшения объёма нежелательной корреспонденции (спама) многие почтовые серверы могут проверять наличие PTR записи для хоста, с которого происходит отправка. В этом случае PTR запись для IP адреса должна соответствовать имени отправляющего почтового сервера, которым он представляется в процессе SMTP сессии.
Наглядно приведенную схему можно представить командами:
[root@DNS~]# dig www.ru ... ;; QUESTION SECTION: ;www.ru IN A ;; ANSWER SECTION: www.ru 52119 IN A 194.87.0.50 ... [root@DNS~]# dig -x 194.87.0.50 ... ;; QUESTION SECTION: ;50.0.87.194.in-addr.arpa. IN PTR ;; ANSWER SECTION: 50.0.87.194.in-addr.arpa. 30385 IN PTR www.ru ....
При этом, команду dig -x 194.87.0.50 правильнее будет представить как dig 50.0.87.194.in-addr.arpa., то есть записи в поддоменах *.in-addr.arpa. представлены в так называемой обратной нотации (или reverse форме), то есть хосту с IP 194.87.0.50 будет соответствовать PTR-запись, имеющая FQDN 50.0.87.194.in-addr.arpa., которая в свою очередь указывает на домен www.ru Хочется отметить, что чаще всего за обратную зону и ее редактирование отвечает поставщик интернета.
Как и обещал, описываю ресурсную запись PTR в домене IN-ADDR.ARPA, соответствующая приведенной выше записи А для машины www.ru. будет иметь такой вид:
50.0.87.194 IN PTR www.ru
Имя 50.0.87.194 не заканчивается точкой и поэтому является относительным. Вопрос: относительным относительно чего? Ни в коем случае не относительно «www.ru». Для того чтобы эта запись была FQDN, домен по умолчанию должен называться «IN-ADDR.ARPA.». Этого можно добиться либо поместив записи PTR в отдельный файл, в котором доменное имя зоны по умолчанию — IN-ADDR.ARPA. (заданный в файле начальной загрузки демона named), либо изменив этот домен с помощью директивы $ORIGIN. Если домен по умолчанию определен как 0.87.194.IN-ADDR.ARPA., то запись можно представить так:
80 IN PTR www.ru
Регистрация доменных имен
В двух словах хотел бы затронуть вопрос регистрации доменных имен.
Регистрация доменов — это действие, посредством которого клиент сообщает регистратору, каким DNS-серверам следует делегировать поддомен, и также снабжает регистратора контактной и платежной информацией. Регистратор передает информацию в соответствующий реестр. Чаще всего, это процесс внесения в реестр зоны первого уровня (то есть в TLD зоны ru, com или др.), записи о новом доменном подимени.
Регистратор доменных имён — это организация, имеющая полномочия создавать (регистрировать) новые доменные имена и продлевать срок действия уже существующих доменных имён в домене, для которого установлена обязательная регистрация.
Уровни доменов, для которых необходима обязательная регистрация лица, ответственного за домен, следующие:
- корневой домен
- все домены первого уровня (TLD)
- некоторые домены второго уровня (например, com.ru или co.uk)
Регистратором для корневого домена является организация ICANN. Чтобы стать регистратором доменов в зонах второго уровня (.com .net .org .biz .info .name .mobi .asia .aero .tel .travel .jobs …), необходимо получить аккредитацию ICANN.
Правила регистрации в международных (gTLD — com., org, и др.) доменах устанавливаются ICANN. Правила регистрации в национальных (ccTLD — ru, us и др.) доменах устанавливаются их регистраторами и/или органами власти соответствующих стран, например единые правила для всех регистраторов в доменах .ru, и.рф задаются Координационным центром национального домена сети Интернет. Для многих доменов (в том числе и для ru) регистратор не единственный. При наличии нескольких регистраторов все они должны использовать единую (централизованную или распределённую) базу данных для исключения конфликтов и обеспечения уникальности доменного имени.
Услуга регистрации домена в большинстве случаев платная, цену и условия регистрации определяет регистратор. Для регистрации домена, необходимо выбрать свободное имя и отправить заявку на регистрацию у одного из регистраторов (например nic.ru), оплатить предоставление услуги. После подтверждения регистрации, необходимо в интерфейсе регистратора определить (делегировать) dns сервера, скорее всего это будут DNS вашего хостера.
В завершение статьи хочу отметить так же о таком маркетинговом нюансе, что иногда домены второго уровня называют именами доменов ПЕРВОГО уровня, тем самым «опуская» значение корневого домена и принимая за корневой домен — домены TLD.
Так же хочу отметить, что доменный адрес и IP-адрес не тождественны — один IP-адрес может иметь множество имён, что позволяет поддерживать на одном компьютере множество веб-сайтов (это называется виртуальный хостинг). Обратное тоже справедливо — одному имени может быть сопоставлено множество IP-адресов: это позволяет создавать балансировку нагрузки.
Резюме
Итак, в сегодняшней статье я постарался как можно понятней описать работы доменной системы имен. Надеюсь, это у меня получилось. Мы рассмотрели иерархическую структуру базы данных DNS, а так же рассмотрели процессы взаимодействия клиентов и серверов DNS, а так же разновидности серверов DNS. В следующей статье я рассмотрю практические вопросы установки и настройки DNS сервера BIND на Linux. Буду рад Вашим комментариям.
Что еще почитать:
man (5) resolver: http://www.opennet.ru/man.shtml?topic=resolver&category=5&russian=0
man (3) gethostbyname: http://www.opennet.ru/cgi-bin/opennet/man.cgi?topic=gethostbyname&category=3
Linux Network Administrators Guide v2 Russian: скачать.
RFC882, 1035, 1183
Разместил с разрешения mcsim85, у которого еще нет полноценного аккаунта на хабре, но который за такие качественный статьи безусловно его заслуживает! На всякий случай ссылка на оригинал.
habr.com
Зоны DNS
Зоны DNS
Зоной (zone) в DNS называется часть пространства имен DNS, за управление которой отвечает определенный сервер или группа серверов DNS. Она является в DNS основным механизмом для делегирования полномочий и применяется для установки границ, в пределах которых определенному серверу разрешено выполнять запросы. Любой сервер, который обслуживает какую-то определенную зону, считается полномочным или ответственным за эту зону; исключением являются разве что зоны-заглушки.
Важно понимать, что любой раздел или подраздел DNS может существовать внутри единой зоны. Например, организация может поместить все пространство имен домена, поддоменов и подподдоменов в единую зону или же разделить какие-то разделы этого пространства имен на отдельные зоны. На самом деле даже целое пространство имен Интернета может представляться в виде единого пространства имен с корнем . и множеством отдельных зон.
Сервер, на котором устанавливается DNS, но не конфигурируется ни одна зона, называется только кэширующим (caching-only) сервером. Установка такого сервера может быть выгодной в некоторых сценариях с дочерними офисами, поскольку помогает сократить объем трафика клиентских запросов по сети и устранить необходимость в репликации целых зон DNS в удаленные места.
Зоны прямого просмотра
Зоны прямого просмотра (forward lookup zone), как не трудно догадаться по их названию, создаются для выполнения прямого просмотра в базе данных DNS. Другими словами, зоны этого типа предусматривают реализацию преобразования имен в IP-адреса и предоставление информации о ресурсах. Например, если пользователь пожелает обратиться к серверу del.company.com и запросит его IP-адрес в зоне прямого просмотра, DNS возвратит ему значение 172.16.1.11, т.е. IP-адрес данного ресурса.
Ничто не мешает присвоить одному ресурсу несколько записей ресурсов. На самом деле этот прием часто используется во многих ситуациях. При определенных обстоятельствах может быть удобнее, чтобы сервер был способен откликаться на более чем одно имя. Обычно подобная функциональность достигается путем создания записей CNAME, которые позволяют создавать для ресурса псевдонимы.
Зоны обратного просмотра
Зоны обратного просмотра (reverse lookup zone) выполняют прямо противоположную операцию той, что выполняют зоны прямого просмотра. Они предусматривают сопоставление IP-адресов с обычным именем. Эта похоже на поиск телефонного номера, когда сам номер известен, а имя того, кому он принадлежит, нет. Зоны обратного просмотра обычно создаются вручную и вовсе необязательно присутствуют в каждой реализации. За счет применения мастера настройки сервера DNS (Configure a DNS Server), как описывалось ранее в главе, процесс создания такой зоны может быть автоматизирован. Как правило, зоны обратного просмотра заполняются записями PTR, которые служат для указания запросу обратного просмотра на соответствующее имя.
cmd4win.ru
Что такое DNS-сервер и для чего он нужен?
480 auto
Если спросить среднего пользователя интернета, что такое сайт, скорее всего, он назовёт, например, yandex.ru, mail.ru, google.com, facebook.com, …
В практическом смысле этого вполне достаточно: нашёл интересный сайт, сообщил знакомым его доменное имя (или проще, «адрес»).
Однако настоящим адресом доменное имя не является. Ну это примерно так же, как отправить письмо с надписью на конверте: «город Екатеринбург, Петру Иванову». Здесь дело даже не в том, что Петров Ивановых в Екатеринбурге может быть несколько (представим, что человек с таким именем там единственный). Проблема в том, что адресат может перемещаться, минимум, по городу, и вручить ему письмо будет крайне проблематично.
Но письма-то доставляют и получают! — Да, конечно. Потому что они отправляют по почтовым адресам. Например, «город Ленинград, 3-я улица Строителей, дом 25, квартира 12».
Почтовым адресом в интернете является IP-адрес, состоящий из четырёх чисел от 0 до 255, например, 74.125.131.100. Это — один из IP-адресов сайта google.com. Если в адресной строке вашего браузера ввести эти числа, вы окажетесь на портале google.com, точнее, на google.ru, куда вас автоматически перенаправят.
Почему «один из адресов», и какого типа бывают IP-адреса, пока оставим в стороне.
В интернете IP-адрес задаёт, на какой компьютер нужно доставить данные.
Вам что-то напоминает IP-адрес? — Мне он напоминает длинный номер мобильного телефона.
Телефонная книга
К сожалению, запоминать длинные телефонные номера непросто. Мы их вносим в свои записные книжки («контакты», по-мобильнофонному) и добавляем к ним понятные имена, например,
Пётр Иванов, +7-343-123-45-67.
В дальнейшем нам не потребуется помнить сам телефонный номер Петра, достаточно того, что этот номер записан в нашу телефонную книгу. Когда нам будет нужно позвонить Петру, мы найдём его в списке наших контактов даже не взглянув на его номер.
В интернете роль телефонной книги играет система доменных имён (DNS, Domain Name System). В ней хранится связь между относительно легко запоминаемым названием сайта и его трудно запоминаемым числовым адресом.
Правда, есть одно существенное отличие этой «интернет-книги» от телефонной. — Её ведёт не каждый знакомый Петра Иванова в отдельности, а он сам.
В частной телефонной книге можно написать: «Петя», «Пётр», «Петруша», «Петруха», «Петруня», «любимый», …, а в «телефонной интернет-книге» записи ведут сами владельцы сайтов, например:
Название домена | Адрес |
pyotr-ivanov.ru | 123.123.123.123 |
Если кто-то пожелает посетить сайт Петра Иванова, в адресной строке браузера он наберёт: pyotr-ivanov.ru, а система доменных имён сообщит браузеру (точнее, компьютеру, на котором работает браузер), соответствующий IP-адрес, в нашем примере: 123.123.123.123. Компьютер, который находится по этому адресу, обработает запрос браузера и пришлёт ему данные, для отображения запрошенной страницы веб-сайта.
Теперь понятно, как используются доменные имена? — Однако ещё не рассказано, где хранятся записи о связях между доменными именами сайтов и IP-адресами компьютеров, на которых эти сайты размещены.
DNS-сервер
Он-то и служит телефонной книгой. Он хранит информацию о том, какому IP-адресу соответствует то или иное доменное имя. В интернете DNS-серверов очень много. У них двойная роль:
- главная — «телефонная интернет-книга»;
- дополнительная (но тоже важная) — кэширование записей других DNS-серверов.
Сначала несколько слов о кэшировании. Выяснять связь между названием сайта и его IP-адресом требуется при каждом обращении к этому веб-сайту. Если сайт, который вы хотите посетить, находится достаточно далеко, многочисленные запросы к далёкому первичному DNS-серверу могут отнять много времени и замедлить загрузку веб-страниц. Чтобы избежать задержек, ближайший к вашему компьютеру DNS-сервер (обычно находящийся у вашего интернет-провайдера), сохраняет сведения о ранее запрошенных IP-адресах, и при повторном обращении к тому же сайту он сообщит его адрес очень быстро, так как будет хранить его в своём кэше.
Но чтобы что-то кэшировать, нужно иметь источник кэшируемого. Таким источником служат первичные DNS-сервера, хранящие изначальные связи между доменами и их IP-адресами.
Для регистрации доменного имени достаточно его придумать. Но для того, чтобы оно начало «работать», вы должны сообщить регистратору доменное имя DNS-сервера, который будет хранить подробные данные о регистрируемом вами домене. Об этих данных будет сказано чуть позже.
Обычно используют два DNS-сервера: первичный и вторичный. Но их может быть и больше. Большее число DNS-серверов повышает надёжность доступа к вашему домену: если один окажется недоступен, ответит другой.
В реальном мире двух — вполне достаточно.
Многие регистраторы доменных имён и просто интернет-провайдеры предлагают использовать свои DNS-серверы в режиме платной услуги.
Хорошая новость: в облаке 1cloud услугу DNS-хостинга можно получить бесплатно! Достаточно быть клиентом этого публичного облака.
DNS-зона
Для дальнейшего понимания системы доменных имён нужно узнать, что такое DNS-зона.
Дело в том, что мы рассмотрели только один из вариантов связи между доменным именем и IP-адресом: один домен – один сайт – один адрес. Однако с конкретным доменным именем может быть связан не только веб-сайт, но и, например, почтовый сервер. И у них могут быть разные адреса.
Одному и тому же домену может соответствовать веб-сайт или почтовый сервер с несколькими IP-адресами, каждый. Их используют для повышения надёжности и производительности сайта или почтовой системы.
А ещё нужно вспомнить о возможных поддоменах, например,
mail.company.ru, ftp.company.ru, sklad.company.ru, …
Все необходимые связи между доменным именем и IP-адресами отражаются в специальном файле, расположенном на DNS-сервере. Содержимое этого файла называется описанием DNS-зоны, или просто DNS-зоной.
В ней могут присутствовать записи разных типов.
Тип записи | Пояснение |
A | Адрес «сайта» соответствующего доменного имени |
MX | Адрес почтового сервера в соответствующем домене |
CNAME | Синоним описываемого домена. Например, здесь можно указать, что доменное имя www.company.ru является синонимом доменного имени company.ru, и запросы по этому синониму будут перенаправляться на адрес основного доменного имени |
NS | Здесь указывается доменные имена DNS-серверов, обслуживающих описываемый домен. Например, ns1.1cloud.ru и ns2.1cloud.ru |
TXT | Любое текстовое примечание |
Это — не полный перечень возможных типов полей. Он был сокращён для упрощения ознакомительного изложения.
Дополнение
Как в любом деле, в правильном описании доменного имени есть свои детали и нюансы. В этой статье они опущены, чтобы не усложнять начальное знакомство с темой. Однако для общего кругозора уже сейчас следует добавить несколько важных фактов.
- Выше была описана адресация по стандарту IPv4. Адрес в нём состоит из четырёх чисел. Такая адресация имеет ограничение числа обслуживаемых компьютеров: 4 294 967 296. Это много, но при нынешнем числе устройств, подключенных к интернету адресов стало не хватать.
Для преодоления этого объективного лимита ввели новый стандарт: IPv6, по которому длина адреса увеличилась, и стало возможным адресовать намного, намного больше компьютеров. В DNS-зоне тип записи для такого адреса обозначается: AAAA. - Одному домену могут соответствовать несколько IP-адресов.
Обычно такое назначение делается для повышения надёжности или быстродействия. Порядок выдачи IP-адреса из списка на запрос по доменному имени зависит от настроек DNS-сервера. Чаще всего адрес выдаётся в случайном порядке. - Одному IP-адресу может соответствовать несколько доменов.
Строго говоря, это противоречит логике системы доменных имён, которая предполагает однозначную связь IP-адреса с соответствующим доменом. Однако, как было сказано ранее, 4-числовой IP-адрес стал дефицитным ресурсом, который уже достаточно давно стараются экономить.
На практике такая экономия может выглядеть следующим образом. На компьютере размещают несколько не очень больших веб-сайтов с разными доменными именами, которым присвоен одинаковый IP-адрес. Веб-сервер, работающий на этом компьютере и обслуживающий эти сайты, получив запрос, анализирует домен, в который он пришёл, и направляет его на правильный сайт.
Такая практика не позволяет обеспечить однозначность обратной связи IP-адреса с доменным именем, ведь в этом случае их несколько. Но позволяет экономить IP-адреса.
Заключение
Изложенный порядок на первый взгляд может показаться сложным. Однако он позволяет:
- пользоваться доменными именами, которые запоминаются легче, чем числовые адреса;
- повышать надёжность доступа к интернет-ресурсам путём использования для них нескольких компьютеров, разнесённых по сети;
- увеличивать производительность интернет-ресурсов за счёт распределения нагрузки внутри группы обеспечивающих компьютеров;
- перемещать прикладные компьютеры по интернету, не меняя их доменного адреса.
С учётом изложенного в этой статье, определим DNS кратко так.
DNS (Domain Name System) — это система доменных имён, которая связывает названия доменов с IP-адресами компьютеров, соответствующих этим доменам. Эта система включает в себя как регламентирующие документы, так множество DNS-серверов, работающих в интернете и сообщающих IP-адреса в ответ на запрос по доменным именам.
P.S. Еще немного материалов по теме DNS:
1cloud.ru
Давайте уже разберемся в DNS / Habr
Внимательный читатель найдет на этой картинке IPv6
Люди часто озадачены доменами. Почему мой сайт не работает? Почему эта хрень поломана, ничего не помогает, я просто хочу, чтобы это работало! Обычно, вопрошающий или не знает про DNS, или не понимает фундаментальных идей. Для многих DNS — страшная и непонятная штука. Эта статья — попытка развеять такой страх. DNS — это просто, если понять несколько базовых концепций.
Что такое DNS
DNS расшифровывается как Domain Name System. Это глобальное распределенное хранилище ключей и значений. Сервера по всему миру могут предоставить вам значение по ключу, а если им неизвестен ключ, то они попросят помощи у другого сервера.
Вот и все. Правда. Вы или ваш браузер запрашивает значение для ключа www.example.com
, и получает в ответ 1.2.3.4
.
Базовые штуки
Большой плюс DNS в том, что это публичная услуга, и можно потыкать в сервера если хочется разобраться. Давайте попробуем. У меня есть домен petekeen.net
, который хостится на машине web01.bugsplat.info
. Команды, используемые ниже, можно запустить из командной строки OS X (ой, то есть macOS, — прим. пер.).
Давайте взглянем на маппинг между именем и адресом:
$ dig web01.bugsplat.info
Команда dig
это такой швейцарский армейский нож для DNS-запросов. Крутой, многофункциональный инструмент. Вот первая часть ответа:
; <<>> DiG 9.7.6-P1 <<>> web01.bugsplat.info
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51539
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
Здесь есть только одна интересная деталь: информация о самом запросе. Говорится, что мы запросили запись и получили ровно один ответ. Вот:
;; QUESTION SECTION:
;web01.bugsplat.info. IN A
dig
по-умолчанию запрашивает A
-записи. A
это address (адрес), и это один из фундаментальных видов записей в DNS. A
содержит один IPv4
-адрес. Есть эквивалент для IPv6
-адресов — AAAA
. Давайте взглянем на ответ:
;; ANSWER SECTION:
web01.bugsplat.info. 300 IN A 192.241.250.244
Тут говорится, что у хоста web01.bugsplat.info.
есть один адрес A
: 192.241.250.244
. Число 300
это TTL
, или time to live (время жизни). Столько секунд можно держать значение в кэше до повторной проверки. Слово IN
означает Internet
. Так сложилось исторически, это нужно для разделения типов сетей. Подробнее об этом можно почитать в документе IANA’s DNS Parameters.
Оставшаяся часть ответа описывает сам ответ:
;; Query time: 20 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Fri Jul 19 20:01:16 2013
;; MSG SIZE rcvd: 56
В частности, здесь говорится, как долго сервер откликался, какой у сервера IP-адрес (192.168.1.1
), на какой порт стучался dig
(53
, DNS-порт по-умолчанию), когда запрос был завершен и сколько байтов было в ответе.
Как видите, при обычном DNS-запросе происходит куча всего. Каждый раз, когда вы открываете веб-страницу, браузер делает десятки таких запросов, в том числе для загрузки всех внешних ресурсов вроде картинок и скриптов. Каждый ресурс отвечает за минимум один новый DNS-запрос, и если бы DNS не был рассчитан на сильное кэширование, то трафика генерировалось бы очень много.
Но в этом примере не видно, что DNS-сервер 192.168.1.1
связался с кучей других серверов чтобы ответить на простой вопрос: «куда указывает адрес web01.bugsplat.info
?». Давайте запустим трейс чтобы узнать о всей возможной цепочке, которую пришлось бы пройти dig
‘у, если бы информация не был закэширована:
$ dig +trace web01.bugsplat.info
; <<>> DiG 9.7.6-P1 <<>> +trace web01.bugsplat.info
;; global options: +cmd
. 137375 IN NS l.root-servers.net.
. 137375 IN NS m.root-servers.net.
. 137375 IN NS a.root-servers.net.
. 137375 IN NS b.root-servers.net.
. 137375 IN NS c.root-servers.net.
. 137375 IN NS d.root-servers.net.
. 137375 IN NS e.root-servers.net.
. 137375 IN NS f.root-servers.net.
. 137375 IN NS g.root-servers.net.
. 137375 IN NS h.root-servers.net.
. 137375 IN NS i.root-servers.net.
. 137375 IN NS j.root-servers.net.
. 137375 IN NS k.root-servers.net.
;; Received 512 bytes from 192.168.1.1#53(192.168.1.1) in 189 ms
info. 172800 IN NS c0.info.afilias-nst.info.
info. 172800 IN NS a2.info.afilias-nst.info.
info. 172800 IN NS d0.info.afilias-nst.org.
info. 172800 IN NS b2.info.afilias-nst.org.
info. 172800 IN NS b0.info.afilias-nst.org.
info. 172800 IN NS a0.info.afilias-nst.info.
;; Received 443 bytes from 192.5.5.241#53(192.5.5.241) in 1224 ms
bugsplat.info. 86400 IN NS ns-1356.awsdns-41.org.
bugsplat.info. 86400 IN NS ns-212.awsdns-26.com.
bugsplat.info. 86400 IN NS ns-1580.awsdns-05.co.uk.
bugsplat.info. 86400 IN NS ns-911.awsdns-49.net.
;; Received 180 bytes from 199.254.48.1#53(199.254.48.1) in 239 ms
web01.bugsplat.info. 300 IN A 192.241.250.244
bugsplat.info. 172800 IN NS ns-1356.awsdns-41.org.
bugsplat.info. 172800 IN NS ns-1580.awsdns-05.co.uk.
bugsplat.info. 172800 IN NS ns-212.awsdns-26.com.
bugsplat.info. 172800 IN NS ns-911.awsdns-49.net.
;; Received 196 bytes from 205.251.195.143#53(205.251.195.143) in 15 ms
Информация выводится в иерархической последовательности. Помните как dig
вставил точку .
после хоста, web01.bugsplat.info
? Так вот, точка .
это важная деталь, и она означает корень иерархии.
Корневые DNS-сервера обслуживаются различными компаниями и государствами по всему миру. Изначально их было мало, но интернет рос, и сейчас их 13 штук. Но у каждого из серверов есть десятки или сотни физических машин, которые прячутся за одним IP.
Итак, в самом верху трейса находятся корневые сервера, каждый определен с помощью NS-
записи. NS
-запись связывает доменное имя (в данном случае, корневой домен) с DNS-сервером. Когда вы регистрируете доменное имя у регистратора типа Namecheap или Godaddy, они создают NS
-записи для вас.
В следующем блоке видно, как dig
выбрал случайный корневой сервер, и запросил у него A
-запись для web01.bugsplat.info
. Видно только IP-адрес корневого сервера (192.5.5.241
). Так какой именно корневой сервер это был? Давайте узнаем!
$ dig -x 192.5.5.241
; <<>> DiG 9.8.3-P1 <<>> -x 192.5.5.241
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2862
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;241.5.5.192.in-addr.arpa. IN PTR
;; ANSWER SECTION:
241.5.5.192.in-addr.arpa. 3261 IN PTR f.root-servers.net.
Флаг -x
заставляет dig
провести обратный поиск по IP-адресу. DNS отвечает записью PTR
, которая соединяет IP и хост, в данном случае — f.root-servers.net
.
Возвращаясь к нашему начальному запросу: корневой сервер F
вернул другой набор NS
-серверов. Он отвечает за домен верхнего уровня info
. dig
запрашивает у одного из этих серверов запись A
для web01.bugsplat.info
, и получает в ответ еще один набор NS
-серверов, и потом запрашивает у одного из этих серверов запись A
для web01.bugsplat.info.
. И, наконец, получает ответ!
Уф! Сгенерировалось бы много трафика, но почти все эти записи были надолго закэшированы каждым сервером в цепочке. Ваш компьютер тоже кэширует эти данные, как и ваш браузер. Чаще всего DNS-запросы никогда не доходят до корневых серверов, потому что их IP-адреса почти никогда не изменяются («Наверно все таки речь идет о большом TTL для записей в их базе. Если у DNS сервера IP адрес вообще ни разу не изменялся, то это не означает, что его база навечно закеширована» — прим. от rrrav). Домены верхнего уровня com
, net
, org
, и т.д. тоже обычно сильно закэшированы.
Другие типы
Есть еще несколько типов, о которых стоит знать. Первый это MX
. Он соединяет доменное имя с одним или несколькими почтовыми серверами. Электронная почта настолько важна, что у нее есть свой тип DNS-записи. Вот значения MX
для petekeen.net
:
$ dig petekeen.net mx
; <<>> DiG 9.7.6-P1 <<>> petekeen.net mx
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18765
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;petekeen.net. IN MX
;; ANSWER SECTION:
petekeen.net. 86400 IN MX 60 web01.bugsplat.info.
;; Query time: 272 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Fri Jul 19 20:33:43 2013
;; MSG SIZE rcvd: 93
Заметьте, что MX
-запись указывает на имя, а не на IP-адрес.
Еще один тип, который вам скорее всего знаком, это CNAME
. Расшифровываетя как Canonical Name (каноническое имя). Он связывает одно имя с другим. Давайте посмотрим на ответ:
$ dig www.petekeen.net
; <<>> DiG 9.7.6-P1 <<>> www.petekeen.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16785
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;www.petekeen.net. IN A
;; ANSWER SECTION:
www.petekeen.net. 86400 IN CNAME web01.bugsplat.info.
web01.bugsplat.info. 300 IN A 192.241.250.244
;; Query time: 63 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Fri Jul 19 20:36:58 2013
;; MSG SIZE rcvd: 86
Сразу видно, что мы получили два ответа. Первый говорит, что www.petekeen.net
указывает на web01.bugsplat.info
. Второй возвращает запись A
для того сервера. Можно считать, что CNAME
это псевдоним (или алиас) для другого сервера.
Что не так с CNAME
Записи CNAME
очень полезны, но есть важный момент: если есть CNAME
с каким-то именем, то нельзя создать другую запись с таким же именем. Ни MX
, ни A
, ни NS
, ничего.
Причина в том, что DNS производит замену таким образом, что все записи того места, куда указывает CNAME
, также валидны для CNAME
. В нашем примере, записи у www.petekeen.net
и web01.bugsplat.info
будут совпадать.
Поэтому нельзя делать CNAME
на корневом домене вроде petekeen.net
, потому что обычно там нужны другие записи, например, MX
.
Запросы к другим серверам
Давайте представим, что конфигурация DNS испорчена. Вам кажется, что вы исправили проблему, но не хотите ждать когда обновится кэш чтобы удостовериться. С помощью dig
можно сделать запрос к публичному DNS-серверу вместо своего дефолтного, вот так:
$ dig www.petekeen.net @8.8.8.8
Символ @
с IP-адресом или хостом заставляет dig
прозводить запрос к указанному серверу через порт по-умолчанию. Можно использовать публичный DNS-сервер Гугла или почти-публичный-сервер Level 3 по адресу 4.2.2.2
.
Типичные ситуации
Давайте рассмотрим типичные ситуации, знакомые многим веб-разработчикам.
Редирект домена на www
Часто нужно сделать редирект домена iskettlemanstillopen.com
на www.iskettlemanstillopen.com
. Регистраторы типа Namecheap или DNSimple называют это URL Redirect. Вот пример из админки Namecheap:
Символ @
означает корневой домен iskettlemanstillopen.com
. Давайте посмотрим на запись A
у этого домена:
$ dig iskettlemanstillopen.com
;; QUESTION SECTION:
;iskettlemanstillopen.com. IN A
;; ANSWER SECTION:
iskettlemanstillopen.com. 500 IN A 192.64.119.118
Этот IP принадлежит Namecheap’у, и там крутится маленький веб-сервер, который просто делает перенаправление на уровне HTTP на адрес http://www.iskettlemanstillopen.com
:
$ curl -I iskettlemanstillopen.com
curl -I iskettlemanstillopen.com
HTTP/1.1 302 Moved Temporarily
Server: nginx
Date: Fri, 19 Jul 2013 23:53:21 GMT
Content-Type: text/html
Connection: keep-alive
Content-Length: 154
Location: http://www.iskettlemanstillopen.com/
CNAME для Heroku или Github
Взгляните на скриншот выше. На второй строке там CNAME
. В этом случае www.iskettlemanstillopen.com
указывает на приложение, запущенное на Heroku.
$ heroku domains
=== warm-journey-3906 Domain Names
warm-journey-3906.herokuapp.com
www.iskettlemanstillopen.com
С Github похожая история, но там нужно создать специальный файл в корне репозитория, и назвать его CNAME
. См. документацию.
Wildcards
Большинство DNS-серверов поддерживают шаблоны (wildcards). Например, есть wildcard CNAME
для *.web01.bugsplat.info
указывает на web01.bugsplat.info
. Тогда любой хост на web01
будет указывать на web01.bugsplat.info
и не нужно создавать новые записи:
$ dig randomapp.web01.bugsplat.info
;; QUESTION SECTION:
;randomapp.web01.bugsplat.info. IN A
;; ANSWER SECTION:
randomapp.web01.bugsplat.info. 300 IN CNAME web01.bugsplat.info.
web01.bugsplat.info. 15 IN A 192.241.250.244
Заключение
Надеюсь, теперь у вас есть базовое понимание DNS. Все стандарты описаны в документах:
Есть еще пара интересных RFC, в том числе 4034, который описывает стандарт DNSSEC
и 5321, который описывает взаимосвязь DNS и email. Их интересно почитать для общего развития.
habr.com
Настройки DNS, как установить DNS-сервер
Что такое DNS?
DNS – это аббревиатура от Domain Name System. Переводится как система доменных имён, и является системой, которая сопоставляет между собой доменное имя и IP адрес хоста. Так, зная имя хоста, можно получить его адрес и наоборот. Для чего это нужно? Всемирная сеть Интернет устроена таким образом, что каждое устройство (компьютер, телефон, планшет, маршрутизатор) имеет свой уникальный адрес (на самом деле адреса могут повторяться, если речь идет о разных ЛОКАЛЬНЫХ сетях, но в данной статье мы говорим о глобальной сети и не будем вдаваться в подробности NAT, PAT и маршрутизации), и обратиться к этому устройству можно только зная его адрес в сети. Работая в Интернете, мы обращаемся к десяткам сайтов каждый день. Трудно было бы запомнить все их адреса, состоящие из последовательности номеров и точек, например, что проще запомнить 77.222.61.238 или integrus.compumur.ru? Конечно, второе. А адрес за вас вспомнит система доменных имен.
DNS есть на любом компьютере, в каждой сети и у каждого провайдера, кроме того имеет иерархический вид и в случае, когда система доменных имен не может определить адрес запрошенного ресурса по доменному имени, она передает запрос вышестоящему DNS-серверу. Запрос может передаваться вплоть до одного из 13 «самых главных в мире» корневых DNS серверов.
Как установить DNS-сервер?
Сервер может выполнять различные функции, он может исполнять роль глобального каталога, хранить файловую информацию, работать с базами данных, работать одновременно с несколькими пользователями. В зависимости от предназначения сервера на нем устанавливают роли – специальный набор программ, позволяющих серверу выполнять необходимые функции.
Как установить роль DNS сервера? Установку будем проводить на Windows Server 2012 R2.
Чаще всего роль DNS-сервера устанавливается вместе с контроллером домена. Но в случае если во время установки Active Directory вы сняли галочку «DNS-сервер», либо AD просто не нужен, то необходимо провести установку только DNS-сервера. Для этого нужно зайти в диспетчер сервера и нажать кнопку «Добавить роли и компоненты».
Откроется окно «Мастера добавления ролей и компонентов». Прочитайте вступительный текст мастера и нажмите «Далее».
Убедитесь, что выбран пункт «Установка ролей и компонентов» и нажмите «Далее».
Выберите сервер из пула серверов. В нашем случае сервер всего один, у вас может быть больше.
Выбираем Роль DNS-сервер.
Отметив необходимый пункт галочкой, увидим появившееся окно «Мастера добавления ролей и компонентов». Эти компоненты необходимы для управления устанавливаемой ролью. В случае, если вы собираетесь администрировать DNS-сервер с другого сервера, то можно пропустить добавление данных компонентов.
Вернувшись в окно, с отмеченной галочкой DNS-сервер, нажмите кнопку «Далее», затем «Далее и снова «Далее», пока не станет активна кнопка «Установить».
Нажмите кнопку «Установить».
Начнется установка.
После завершения установки (установка будет длится менее 5 минут) появится надпись: «Установка выполнена на ИмяВашегоСервера». Можно нажать кнопку «Закрыть». Теперь в Панели мониторинга сервера, а также в Меню Пуск появится новая строчка «DNS». Если кликнуть по этой строчке, то запустится «Диспетчер DNS».
Он выглядит следующим образом.
На данный момент на DNS-сервере не настроена ни одна зона. Такой сервер называется кэширующим. Зоны – это части пространства имен, за которые отвечает сервер. Зоны прямого просмотра предполагают преобразование имени в IP-адрес. Зона обратного просмотра наоборот, сопоставляет IP-адрес с именем.
Создадим зону прямого просмотра и сделаем её простую настройку.
Для этого кликнем правой кнопкой мыши на надписи «Зоны прямого просмотра» и затем «Создать новую зону».
Откроется окно «Мастера создания новой зоны», жмем «Далее». Откроется окно выбора типа зоны. Если у Вас нет другого сервера DNS выбирайте «Основная зона» и «Далее».
В следующем окне нужно задать имя зоны. Рекомендуется использовать ваш домен. В нашем случае в качестве имени было бы указано: integrus.compumur.ru. Жмем «Далее».
Выбираем «Создать новый файл» и жмем «Далее».
В следующем окне выберите тип динамического обновления. Рекомендуется разрешить динамические обновления, но только если DNS будет использоваться исключительно в вашей локальной сети. В противном случае этот пункт может повлечь за собой риски безопасности, о чем «Мастер создания новой зоны» вас предупредит.
Жмем «Далее» и «Готово». Зона прямого просмотра успешно создана, проведем её простую настройку. Настройка зоны просмотра осуществляется путем добавления в зону DNS-записей. Существует несколько типов DNS-записей. Рассмотрим основные типы:
- А-запись. Соотносит Имя хоста и адрес протокола IPV
- АААА-запись. Соотносит Имя хоста и адрес протокола IPV
- CNAME-запись. Псевдоним, используется для переадресации на другое имя.
- MX-запись. Почтовая запись, указывает на почтовые сервера.
- NS-запись. Указывает на DNS-сервер домена.
Создадим А-запись для нашей новой зоны прямого просмотра. Для этого кликнем правой кнопкой мыши на зоне и выберем соответствующий пункт контекстного меню, как показано на рисунке.
В открывшемся окне «Новый узел» вводим Имя узла, например GateWay и его IP-адрес, например 192.168.0.1. Нажмите кнопку «Добавить узел».
Готово! Запись успешно создана!
В данной статье мы постарались максимально понятным языком объяснить простому человеку без глубоких знаний IT что такое DNS, как установить роль DNS-сервера на Windows Server 2012, познакомились с основными типами записей и в картинках показали как эти записи делаются. А если все вышеописанное показалось Вам трудным, то наши специалисты настроят Вам сервер менее, чем за час.
integrus.ru
Что такое DNS — зоны, сервера, и для чего они нужны. Связываем домен и хостинг. / DKRYLOV.COM
В прошлых уроках мы узнали что такое хостинг и что такое домен. Теперь вы зададитесь вопросом «как связать домен и хостинг«, сейчас этому то мы научимся.
Во первых, чтобы связать домен и хостинг, нам нужно ознакомиться с такими понятиями как DNS зона, DNS сервер.
Товарищи профессионалы, я объясняю простым языком, для обычного читателя, по этому что то может быть описано очень абстрактно, но это для лучшего понимания всей системы в целом.
DNS зоны
Грубо говоря, DNS зона — это файл, в которого храняться данные о соответствии доменных имен и IP адресов серверов, на которые эти домены ссылаются.
DNS сервера
DNS-сервера — это компьютеры, даже иерархия компьютеров, на которых храняться записи о DNS зонах, связках IP адресов и доменных имен.
На рисунке ниже, схематично показано что происходит во время запроса к сайту.
- 1. Пользователь запрашивает сайт, к примеру dkrylov.com.
- 2. Запрос обрабатывает DNS сервер, на котором есть информация о том, какой IP привязан к домену. Соответсвенно, раз у DNS сервера есть IP адрес сайта(хостинга, куда привязан сайт), значит он может направить нас на него.
- 3. Наш сайт получает запрос и отображается у нас в браузере. Кстати, в уроке «Что такое сайт и как он работает» на рисунках изображен именно этот, последний шаг.
В следующий раз, вспоминая, «как привязать домен к хостингу«, рисуйте у себя в воображении эту простую картинку из 3х состовляющих, и Вы сразу поймете, что и где нужно прописать.
Теперь, зная, что такое DNS зоны и DNS сервера, и примерно понимая как они работают, я объясню, как связать на примере хостинга, который я использую.
Первым делом мы узнаем адреса DNS серверов. У каждого хостинг провайдера разные личные кабинеты, я объясню Вам на примере одного из них. Думаю у других все аналогично, либо с небольшими отличиями.
Как можно увидеть, в личном кабинете, в разделе связанном с доменными именами есть блок «DNS сервера«. Можно увидеть 4 DNS сервера. Кстати, важный момент, минимальное количество DNS серверов — 2.
У каждого регистратора доменных имен (это сервис, где вы регистрируете доменное имя, например. 2domains.ru) в панели управления доменом, есть пункт «Управление DNS серверами/Делегирование», «Управление DNS-зонами», «Управление NS серверами», все это одно и то же. Там указываются DNS сервера, которые мы искали на шаге выше.
Внимание! После изменения DNS зон, может пройти около 4-6 часов, и только после этого Ваш сайт станет доступным
Данной информации Вам хватит для того чтобы связать домен с хостингом, и опубликовать свой первый сайт в сети Интернет. Но а если же Вы хотите более глубоких знаний, могу порекомендовать вот эти статьи из Википедии:
learn.dkrylov.com