Янв 5 2015
DNS серверы: что это и зачем они нужны?
Большинство пользователей Интернета знают, что DNS-сервер обеспечивает трансляцию имен сайтов в IP адреса. И, обычно, на этом знания про DNS-сервер заканчиваются. Эта статья рассчитана на более углублённое рассмотрение его функций.
И так, давайте представим, что Вам придется отлаживать сеть, для которой провайдер выделил блок «честных» адресов, или настраивать поднимать в локальной сети свой DNS-сервер.
Вот тут сразу и всплывут всякие страшные слова, типа «зона», «трансфер», «форвардер», «in-addr.arpa» и так далее. Давайте постепенно с этим всем и разберёмся.
Очень абстрактно можно сказать, что каждый компьютер в Интернете имеет два основных идентификатора — это доменное имя (например, kompiklava.ru) и IP-адрес (например, 127.0.0.1).
А вот абстрактность заключается в том, что, и IP-адресов у компьютера может быть несколько (более того, у каждого интерфейса может быть свой адрес, вдобавок еще и несколько адресов могут принадлежать одному интерфейсе), и имен тоже может быть несколько. Причем они могут связываться как с одним, так и с несколькими IP-адресами. А в-третьих, у компьютера может вообще и не быть доменного имени.
Как уже было сказано раньше, основной задачей DNS-сервера является трансляция доменных имен в IP адреса и обратно. На заре зарождения Интернета, когда он еще был ARPANET’ом, это решалось ведением длинных списков всех компьютерных сетей.
При этом копия такого списка должна была находиться на каждом компьютере. Естественно, что с ростом сети такая технология уже стала не удобной для пользователей, потому как эти файлы были больших размеров, к тому же их еще и нужно было синхронизировать. Кстати, некоторые такие «отголоски прошлого» этого метода можно еще встретить и сейчас. Вот так в файл HOSTS (и в UNIX, и в Windows) можно внести адреса серверов, с которыми вы регулярно работаете.
Так вот, на смену неудобной «однофайловой» системе и пришел DNS — иерархическая структура имен, придуманная доктором Полом Мокапетрисом.
Итак, есть «корень дерева» — «.» (точка). Учитывая то, что этот корень единый для всех доменов, то точка в конце имени обычно не ставится. Но она используется в описаниях DNS и это нужно запомнить. Ниже этого «корня» находятся домены первого уровня. Их немного — com, net, edu, org, mil, int, biz, info, gov (и пр.) и домены государств, например, ua. Еще ниженаходятся домены второго уровня, а еще ниже — третьего и т.д.
Что такое «восходящая иерархия»
При настройке указывается адрес как минимум одного DNS-сервера, но как правило, их два. Далее клиент посылает запрос этому серверу. Получивший запрос сервер, или отвечает, если ответ ему известен, или пересылает запрос на «вышестоящий» сервер (если тот известен), или сразу на корневой, так как каждому DNS-серверу известны адреса корневых DNS-серверов.
Затем запрос начинает спускаться вниз — корневой сервер пересылает запрос серверу первого уровня, тот — серверу второго уровня и т.д.
Кроме такой «вертикальной связи», есть еще и «горизонтальные», по принципу «первичный — вторичный». И если допустить, что сервер, который обслуживает домен и работает «без подстраховки», вдруг становится недоступным, то компьютеры, которые расположены в этом домене, станут тоже недоступны! Вот потому то при регистрации домена второго уровня и предъявляется требование указывать минимум два DNS- сервера, которые будут обслуживать этот домен.
По мере дальнейшего роста сети Интернет все домены верхнего уровня были поделены на поддомены или зоны. Каждая зона представляет собой независимый домен, но при обращении к базе данных имен запрашивает родительский домен. Родительская зона гарантирует дочерней зоне право на существование и отвечает за ее поведение в сети (точно так же, как и в реальной жизни). Каждая зона должна иметь по крайней мере два сервера DNS, которые поддерживают базу данных DNS для этой зоны.
Основные условия для работы серверов DNS одной зоны — наличие отдельного соединения с сетью Интернет и размещение их в различных сетях для обеспечения отказоустойчивости. Поэтому многие организации полагаются на провайдеров Internet, которые ведут в их интересах вторичные и третичные серверы DNS.
На рисунке представлена диаграмма распределения доменов в системе DNS.
Рекурсивные и нерекурсивные сервера
DNS-сервера могут быть рекурсивные и нерекурсивные. Разница в них в том, что рекурсивные всегда возвращают клиенту ответ, так как самостоятельно отслеживают отсылки к другим DNS-серверам и опрашивают их, а нерекурсивные — возвращают клиенту эти отсылки, и клиент должен самостоятельно опрашивать указанный сервер.
Рекурсивные сервера обычно используют на низких уровнях, например, в локальных сетях, так как они кэшируют все промежуточные ответы, и так при последующих к нему запросах, ответы будут возвращаться быстрее.
А нерекурсивные сервера зачастую стоят на верхних ступенях иерархии, поскольку они получают так много запросов, что для кэширования ответов попросту не хватит никаких ресурсов.
Forwarders — «пересыльщики» запросов и ускорители
У DNS-серверов есть довольно полезное свойство — умение использовать так называемых «пересыльщиков» (forwarders). «Честный» DNS-сервер самостоятельно опрашивает другие сервера и находит нужный ответ.
Но вот если ваша сеть подключена к Интернету по медленной линии (например, dial-up), то этот процесс может занять много времени. Поэтому можно перенаправлять эти запросы, например, на сервер провайдера, и после этого просто принимать его ответ.
Применение таких «пересыльщиков» может стать полезным для больших компаний, у которых есть несколько сетей. Так в каждой сети можно установить относительно слабый DNS-сервер, и указать в качестве «пересыльщика» более мощную машину с более быстрой линией .
Вот и получится, что все ответы будут кэшироваться этим более мощным сервером, что приведёт к ускорению разрешение имен для целой сети.
Для каждого домена ведётся своя база данных DNS, которая выглядит как набор простых текстовых файлов. Они расположены на первичном (основном) DNS- сервере, и их время от времени копируют к себе вторичные сервера. А в конфигурации сервера указывается, какой файл содержит описания зон, а так же является ли сервер первичным или вторичным для этой зоны.
Уникальный адрес
Уникальный адрес в Интернете формируется добавлением к имени хоста доменного имени. Таким образом, компьютер, к примеру, «fred» в домене, к примеру, «smallorg.org» будет называться fred.smallorg.org.
Кстати, домен может содержать как хосты, так и зоны. Например, домен smallorg.org может содержать хост fred.smallorg.org и в то же время вести зону acctg.smallorg.org, которая является поддоменом и может содержать еще один хост barney.acctg.smallorg.org. Хотя это и упрощает базу данных имен, однако делает поиск хостов в сети Internet более сложным.
На рисунке показан пример домена и связанного с ним поддомена.
В системе DNS реализуются три сценария поиска IP-адреса в базе данных.
* Компьютер, которому необходимо получить соединение с другим компьютером в той же зоне, посылает запрос локальному DNS-серверу зоны на поиск IP-адреса удаленного компьютера.
Локальный DNS-сервер, имеющий этот адрес в локальной базе данных имен, возвращает запрашиваемый IP-адрес компьютеру, который посылал запрос.
* Компьютер, которому необходимо получить соединение с компьютером в другой зоне запрашивает локальный DNS-сервер своей зоны. Локальный DNS-сервер обнаруживает, что нужный компьютер находится в другой зоне, и формирует запрос корневому DNS-серверу. Корневой DNS-сервер спускается по дереву серверов DNS и находит соответствующий локальный DNS-сервер. От него он получает IP-адрес запрашиваемого компьютера.
Затем корневой DNS-сервер передает этот адрес локальному серверу DNS, который послал запрос. Локальный DNS-сервер возвращает IP-адрес компьютеру, с которого был подан запрос. Совместно с IP-адресом передается специальное значение — время жизни TTL (time to live). Это значение указывает локальному DNS-серверу, сколько времени он может хранить IP-адрес удаленного компьютера у себя в кэше. Благодаря этому увеличивается скорость обработки последующих запросов.
* Компьютер, которому необходимо повторно получить соединение с компьютером в другой зоне запрашивает локальный DNS-сервер своей зоны. Локальный DNS-сервер проверяет, нет ли этого имени в его кэше и не истекло ли еще значение TTL. Если адрес еще в кэше и значение TTL не истекло, то IP-адрес посылается запрашивающему компьютеру.
Это считается неавторизованным ответом, так как локальный DNS-сервер считает, что с момента последнего запроса IP-адрес удаленного компьютера не изменился.
Во всех трех случаях компьютеру для поиска какого-либо компьютера в сети Internet нужен лишь IP-адрес локального сервера DNS. Дальнейшую работу по поиску IP-адреса, соответствующего запрошенному имени, выполняет локальный DNS-сервер. Как видите, теперь все намного проще для локального компьютера.
На рисунке показан механизм работы системы DNS.
По мере роста дерева DNS, к серверам системы доменных имен предъявлялись новые требования. Как уже упоминалось ранее, родительские DNS-серверы должны иметь IP-адреса своих дочерних серверов DNS, чтобы правильно обрабатывать DNS-запросы на преобразование имен в IP-адреса.
Чтобы DNS-запросы обрабатывались правильно, поиск по дереву DNS должен начинаться из какой-то определенной точки. В период младенчества сети Internet большинство запросов на поиск имен приходилось на локальные имена хостов.
Основная часть DNS-трафика проходила внутри локальной зоны и лишь в худшем случае достигала родительских серверов DNS. Однако с ростом популярности Internet и, в частности Web, все больше DNS-запросов формировалось к удаленным хостам вне локальной зоны.
Когда DNS-сервер не находил имя хоста в своей базе данных, он вынужден был запрашивать удаленный DNS-сервер. Наиболее подходящими кандидатами для удаленных DNS-серверов, естественно, стали серверы DNS верхнего уровня, которые обладают полной информацией о дереве доменов и способны найти нужный DNS-сервер, ответственный за зону, к которой принадлежит запрашиваемый хост.
Затем они же возвращают IP-адрес нужного хоста локальному DNS-серверу. Все это приводит к колоссальным перегрузкам корневых серверов системы DNS. К счастью, их не так много и все они равномерно распределяют нагрузку между собой. Локальные DNS-серверы работают с серверами DNS доменов верхнего уровня с помощью протокола DNS, который рассматривается далее в этой лекции.
Система DNS — улица с двусторонним движением. DNS не только отыскивает IP-адрес по заданному имени хоста, но способна выполнять и обратную операцию, т.е. по IP-адресу определять имя хоста в сети. Многие Web- и FTP-серверы в сети Internet ограничивают доступ на основе домена, к которому принадлежит обратившийся к ним клиент.
Получив от клиента запрос на установку соединения, сервер передает IP-адрес клиента DNS-серверу как обратный DNS-запрос. Если клиентская зона DNS настроена правильно, то на запрос будет возвращено имя клиентского хоста, на основе которого затем принимается решение о том, допустить данного клиента на сервер или нет.