Для чего нужна DNS

Как только сеть Internet вышла за пределы исследовательских лабораторий, стало ясно, что нормальный человек не в состоянии запоминать цифровые IP-адреса, а имена компьютеров, составленные из обычных слов и сокращений, запоминаются куда как проще.

Поначалу проблему решили просто — создали большой файл HOSTS.TXT, в который и записали всю таблицу соответствия адресов и имен компьютеров. Эту таблицу вел координатор и выкладывал на FTP-сервер. Все пользователи тогдашнего Internet время от времени скачивали текущую таблицу и устанавливали на свои компьютеры. (Рудименты этой таблицы до сих пор остались в большинстве операционных систем.)

Количество компьютеров в Internet росло очень быстро, и вскоре файл HOSTS. TXT стал таким огромным, что его поддержка начала отнимать слишком много времени и сил. Да к тому же и координатор Internet как таковой перестал существовать. И вот в начале 80-х годов была разработана распределенная система DNS (Domain Name Service — служба доменых имен).

DNS — взгляд изнутри

Основная цель сетевой службы DNS, как уже было сказано, — поставить в соответствие символьному адресу компьютера (т. е доменному имени) его IP-адрес. Доменное имя компьютера состоит из двух частей: имя компьютера и домен, в котором оно находится. Например, компьютер wwwroga-kopyta.msk.ru имеет имя www и находится в домене roga-kopyta.msk.ru. Точно так же домен roga-kopyta.msk.ru раскладывается дальше.

Доменное имя очень похоже на путь к файлу в файловой системе, только читается оно в обратную сторону и разделено не косыми чертами (/ или \), а точками. В DNS, как и в файловой системе, есть корень — он обозначается самой правой точкой, есть соответствующие каталогам домены и соответствующие файлам компьютеры.

Узлами DNS служат так называемые серверы имен (nameservers), иногда их называют серверами DNS. Каждый сервер хранит информацию о нескольких доменах. Обычно эта информация находится в файлах, которые именуют зонами. Строго говоря, физически в виде файла зона может и не существовать, а например, храниться в какой-то базе данных. Каждая зона соответствует одному домену.

Зона состоит из записей. В каждой зоне обязательно есть запись SOA. В SOA записан главный сервер имен для зоны, адрес электронной почты администратора, номер версии и другая информация, необходимая для синхронизации зон на нескольких серверах.

Самая простая запись — A. Она хранит соответствие имени компьютера и его IP-адреса. Например, запись www IN A 193.12.13.14 обозначает, что компьютер www в данном домене (том, которому соответствует зона) имеет IP-адрес: 193.12.13.14.

Другая часто встречающаяся запись — MX. Она указывает имя компьютера, на который необходимо пересылать всю электронную почту, приходящую на адреса в этом домене. В зоне может быть несколько записей MX, и для каждой указывается вес. В таком случае отправитель будет пытаться отослать почту на все компьютеры, указанные в MX, начиная с имеющего наименьший вес.

Для указания серверов имен служат записи NS. Они используются в двух случаях. Во-первых, когда в зоне для какого-либо домена указываются все серверы имен для него (например, IN NS ns.provider.ru, т. е. для данного домена одним из серверов имен является компьютер ns.provider.ru). Во-вторых, когда есть указание на серверы имен для домена более низкого уровня внутри данного домена. То есть запись sales IN NS ns.roga-kopyta.msk.ru в зоне для домена roga-kopyta.msk.ru говорит о том, что для домена sales.roga-kopyta.msk.ru сервером служит компьютер ns.roga-kopyta.msk.ru. Конечно, для каждого сервера, упомянутого в записи NS, должна существовать запись A с его адресом в той же зоне или в зоне другого домена.

Обычно для каждого домена зона размещается на нескольких серверах (прежде всего в целях надежности). При этом оригинальная копия зоны хранится на одном сервере, называемом первичным. Остальные серверы, на которых хранится зона, называются вторичными и автоматически получают копию с первичного сервера. Чтобы вторичные серверы “знали”, когда надо обновлять свою копию зоны, в записи SOA имеется специальное поле serial (порядковый номер). При каждом изменении зоны на первичном сервере необходимо увеличивать значение serial. Вторичные серверы время от времени (период задается тоже в записи SOA) проверяют serial зоны на первичном сервере и при необходимости обновляют свои копии.

DNS начинается с так называемых корневых серверов. Сейчас их 13 штук, они расположены в США и хранят зоны для корневого домена (домена “.”). Далее идут домены первого уровня (top-level domains, TLD). Каждая страна имеет свой домен, соответствующий ее двухбуквенному коду ISO. Например, домен России — ru, Украины — ua. Кроме географических доменов широко используются традиционные TLD, оставшиеся с тех времен, когда Internet еще не была интернациональной сетью. Это домены: com — для коммерческих организаций, net — для сетевых организаций, edu — для образовательных учреждений, org — для общественных (бесприбыльных) организаций и mil — для военных учреждений США. Корневые серверы хранят информацию о серверах имен для всех доменов первого уровня.

Внутри доменов первого уровня тоже может быть дополнительное деление. Например, географические домены часто делят дальше по географическому принципу.

Обратная DNS

Как уже было сказано, DNS хранит прямое соответствие между доменным именем и IP-адресом. Но часто бывает нужно произвести обратное преобразование — т. е., зная IP-адрес, узнать доменное имя. Чтобы не создавать новую сетевую службу, для таких преобразований придумали специальное расширение DNS — reverse DNS (обратная DNS).

Обратная DNS устроена точно так же, как и прямая, но в качестве доменного имени используется специальным образом записанный IP-адрес, преобразованный в имя в домене in-addr.arpa. Например, 195.14.50.23 будет выглядеть как 23.50.14.195.in-addr.arpa. Это самое обычное доменное имя, и оно также входит в иерархическую цепочку в домене in-addr.arpa. В зонах, соответствующих доменам обратной DNS, для каждого адреса (точнее, соответствующего имени в in-addr.arpa) хранится запись типа PTR, ставящая ему в соответствие доменное имя.

Основное требование к обратной DNS — сходимость. То есть, если преобразовать IP-адрес через обратную DNS в доменное имя, а потом доменное имя, пользуясь обычной службой DNS, в IP-адрес, должен получиться тот же самый адрес. Некоторые серверы используют этот критерий для ограничения доступа. Подразумевается, что необходимость внесения соответствующих согласованных записей затруднит злоумышленнику попытки выдать себя за какой-то другой хост в Internet.

Обычно зоны обратной DNS создаются и поддерживаются провайдерами, распределяющими соответствующие сети и подсети IP-адресов.

Регистраторы доменов

Регистрацией новых доменов занимаются специальные организации — регистраторы. Они ведут базу данных по всем доменам, а также поддерживают непосредственно серверы имен для соответствующих доменов.

Например, регистратором доменов в домене .ru является Российский научно-исследовательский институт развития общественных сетей (РосНИИРОС, английская аббревиатура RIPN; wwwripn.net). Он поддерживает базу данных по всем доменам в зоне .ru и серверы имен для домена .ru (но не для доменов внутри .ru!).

Регистратором доменов в .com, .net, .org является INTERNIC (wwwinternic.net). Он точно так же хранит базу данных, поддерживает серверы имен и занимается приемом платежей за регистрацию доменов.

Кроме регистраторов для доменов первого уровня могут существовать регистраторы и для других доменов. Например, в России принята так называемая система доменов общего пользования. Это географические домены (msk.ru, spb.ru и т. д.) и домены по классам (com.ru, net.ru, edu.ru, med.ru — для медицинских организаций, pp.ru — для частных лиц). Ведение большинства таких доменов передано другим организациям-регистраторам. Например, географический домен для какого-либо города может вести крупный провайдер, находящийся в этом городе.

Кто первый встал — того и сапоги

Практически во всех доменах сейчас применяется принцип first come — first served. То есть первый подавший заявку на какой-либо домен получает возможность зарегистрировать его без каких-либо дополнительных условий. Исключением является только РосНИИРОС, который требует от подавшего заявку подтвердить свое право на владение доменом (например, доказать, что имя домена произведено от названия организации). Некоторые же домены до недавнего времени находились в так называемом стоп-листе и вообще не могли быть зарегистрированы.

С увеличением количества регистрируемых доменов такие порядки привели к вполне объяснимым спорам между РосНИИРОСом и претендентами. Да и практика составления стоп-листа выглядела очень странно. Например, нельзя было зарегистрировать домен telecom.ru и в то же время был зарегистрирован telekom.ru. В стоп-листе был mail.ru и email.ru и не было post.ru. В конце концов порядок регистрации смягчился, и теперь в .ru можно зарегистрировать практически любой домен.

Побочным эффектом регистрации доменов по приципу first come — first served стала торговля доменами. Торговцы доменами заранее скупают все более-менее перспективные имена и потом перепродают их желающим гораздо дороже. Например, недавно владелец домена altavista.com продал его за 3,35 млн. долл. (!) фирме Compaq (см. http://www.wired.com/news/news/ business/story/14058.html).

Оплата домена

Регистрация некоторых доменов совершенно бесплатна, например во всех географических и других доменах общего пользования в ru. Но вот регистрация доменов второго уровня стоит денег, причем разные регистраторы устанавливают разные цены.

Регистрация в Internic стоит $35 за домен в год, но заплатить надо сразу за два года вперед (т. е. $70). Регистрация домена в РосНИИРОС в зоне .ru подороже и стоит $100. Эта сумма включает оплату права пользования доменом в течение одного года, в дальнейшем придется платить по $50 в год.

Совершенно необязательно регистрировать домен самому. Большинство провайдеров Internet могут за небольшую плату взять эту работу на себя. Но не забудьте убедиться, что домен зарегистрирован именно на вас, а не на провайдера, иначе возможны проблемы с переносом домена, если вдруг вы захотите сменить провайдера.

Кэширование запросов к DNS

В общем случае каждый запрос к DNS требует последовательного прохождения всего дерева, начиная с корневых серверов. Конечно, это очень неэффективно, и, чтобы избежать множества запросов ко всем серверам в цепочке, серверы имен выполняют еще одну функцию — кэширование. При этом пользователь обращается с запросом к ближайшему серверу имен (обычно к серверу провайдера или серверу имен в собственной локальной сети). Этот сервер уже самостоятельно производит “разрешение” (resolving) запроса, т. е. проходит при необходимости по дереву DNS и возвращает пользователю ответ.

В начале работы у кэширующего сервера есть информация только об адресах корневых серверов. Эти адреса изменяются крайне редко, и их список просто поставляется в комплекте серверов имен. Однако, разрешая имена, сервер постепенно накапливает дополнительную информацию.

Время, в течение которого кэширующий сервер может хранить информацию, полученную в результате запросов (так называемое TTL — time to live), указывается в зонах доменов для каждой записи или в SOA одновременно для всех записей, не имеющих явно указанного TTL. По истечении TTL запись в кэше считается недействительной и не используется. Таким образом, при изменении зоны любой пользователь Internet гарантированно узнает об этом по прошествии времени, в сумме не превышающего TTL и период обновления зоны на вторичных серверах. Обычно это несколько часов.

Как происходит регистрация домена

Во всех организациях-регистраторах регистрация домена происходит примерно одинаково. Чтобы зарегистрировать домен, нужно проверить, свободен ли он, и составить заявку. Ее форма обычно доступна на www-сайте регистратора. В заявке указываются координаты заявителя (частного лица или компании) и адреса серверов имен, на которых к моменту ее подачи уже должна существовать соответствующая зона.

Обычно требуется не менее двух серверов (например, один первичный и один вторичный), причем рекомендуется использовать серверы, соединенные с Internet разными каналами. Смысл этого требования в том, чтобы при каких-либо проблемах с одним из серверов (выход из строя канала, неработоспособность компьютера и т. п.) домен все равно был доступен. В этом случае почта, направленная на домен, просто некоторое время полежит в очереди отправителя, а не будет возвращена с уведомлением о том, что данный домен не существует.

После получения правильно заполненной заявки регистратор проверяет доступность зон на указанных серверах имен и правильность их составления. Если все правильно, происходит так называемое делегирование домена, т. е. регистратор вносит в домен более высокого уровня соответствующую запись.

Автор: МИХАИЛ ШОЙХЕР