11.1. Введение в DNS
В первое время преобразование IP-адресов в имена происходило с помощью простого текстового файла, по которому и проводилось сопоставление параметров. В Linux за это отвечает файл /etc/hosts. Несмотря на его слабости и неудобства в сопровождении, в малых сетях возможностей такого файла достаточно.
С расширением сети понадобился новый способ хранения соответствий. На смену файлам пришла доменная система имен (DNS, Domain Name System), предназначенная для преобразования символьного имени в IP-адрес и наоборот. Ее преимущества могут проявляться не только в Интернете, но и в локальных сетях с достаточно большим количеством компьютеров.
Внедрение DNS выявило еще одно преимущество этой системы — под одним и тем же IP-адресом может скрываться несколько узлов. Например, хостинговые компании на одном сервере могут содержать несколько сайтов.
Сервер DNS — это большая база данных, в которой хранятся сведения о соответствии имен узлов и IP-адресов. Самое главное, что эта информация децентрализована, и в Интернете существуют тысячи таких серверов.
База данных имеет иерархическую структуру, вершиной которой является точка ".". Это наподобие знака "/" в файловой системе Linux, обозначающего корневую директорию. На первом уровне идут домены типа COM, ORG, NET, GOV, RU, DE и т.д. Ниже находятся имена доменов второго уровня. Пример описанной структуры приведен на рис. 11.1.
Рис. 11.1. Иерархия доменов
Допустим, что нужно найти IP-адрес сервера www.cydsoft.com. Имя разбирается справа налево. Сначала направляется запрос к корневому DNS-серверу, который должен указать, кто обслуживает домен com. Затем на найденном сервере по запросу осуществляется поиск домена с именем cydsoft. Если такой найден, то мы получим адрес DNS-сервера, который обслуживает cydsoft.com. И уже ему направляется запрос на получение адреса домена www.cydsoft.com. Результатом будет IP-адрес сервера/компьютера, которому присвоено имя www.cydsoft.com.
Все эти действия происходят прозрачно для конечного пользователя, и когда вы набираете в браузере адрес, то никогда не увидите всех этих тонкостей. О том, что идет поиск IP-адреса по имени, можно узнать только по подсказке, которая высвечивается в строке состояния обозревателя.
В сети есть достаточно много кэширующих серверов, в принципе, выполняющих свои функции автоматически. Достаточно только его установить, сделать основные настройки и запустить. Кэширующие серверы обмениваются между собой информацией и позволяют найти любой адрес на ближайшем узле, не обращаясь к основной базе данных. Например, у вашего интернет-провайдера может быть свой DNS-сервер. Когда вы обращаетесь на какой-нибудь символьный адрес, то запрос сначала идет на сервер провайдера, затем по цепочке передается другому серверу, и так до тех пор, пока нужная запись с IP-адресом не будет найдена, если, конечно же, имя указано верно. Таким образом, адрес запрашиваемого имени может быть получен от ближайшего DNS-сервера, в кэше которого сохранилась необходимая информация.
Серверы DNS могут и, наоборот, по IP-адресу сказать нам его символьный адрес. В этом случае IP тоже переворачивается. Например, если нужно узнать имя сервера 190.1.15.77, то в запросе к DNS будет виден адрес 77.15.1.190 и добавлен суффикс in-addr.arpa. Результат: 77.15.1.190.in-addr.arpa.
11.2. Локальный hosts
Мы уже знаем, что изначально для сопоставления имен и адресов использовался файл /etc/hosts. Это текстовый файл с записями типа:
127.0.0.1 localhost.localdomain localhost
192.168.77.1 FlenovM
Каждая строка — это соответствие IP-адреса его имени. По умолчанию в файле будет всего две строки. Первая — это петля. Напоминаю, что во всех компьютерах имя localhost и IP-адрес 127.0.0.1 указывают на текущую машину. Это значит, что если нужно выполнить ping к локальному компьютеру, можно написать:
ping 127.0.0.1
Во второй записи устанавливается соответствие между заданным для вашего сетевого интерфейса IP-адреса и символьным именем. В данном случае моей сетевой карте присвоен адрес 192.168.77.1, а ему соответствует имя FlenovM. Это значит, что при выполнении команды ping можно указывать или IP- адрес, или имя компьютера. Следующие две команды идентичны:
ping 192.168.77.1
ping FlenovM
При выполнении второй команды сначала происходит обращение к файлу /etc/hosts, который вернет программе адрес 192.168.77.1, и уже на него направится эхо-запрос.
А что будет использоваться для поиска адреса первым: файл /etc/hosts или DNS-база данных? Это зависит от настроек ОС.
Посмотрим на файл /etc/host.conf. В нем находится строка:
order hosts,bind
Директива order как раз и задает порядок просмотра. В данном случае на первом месте находится файл /etc/hosts, и только после этого будет запущена команда bind для выполнения запроса к DNS-серверу. Что это нам дает? А то, что можно увеличить скорость доступа к основным серверам. Допустим, что вы каждый день посещаете сайт http://www.redhat.com/, при этом каждый раз происходит запрос к DNS-серверу, что может служить задержкой в пару секунд перед началом загрузки страницы. Чтобы ускорить этот процесс, можно вручную прописать в файл /etc/hosts следующую запись:
209.132.177.50 www.redhat.com
Внимание!
Адрес 209.132.177.50 действительно соответствует сайту www.redhat.com на момент написания книги, но может измениться.
Если сайт по каким-либо причинам перестал загружаться, то необходимо удалить соответствующую запись из файла hosts, и с помощью команды ping redhat.com проверить связь с сервером, а заодно узнать его адрес. В ответ на эту директиву на экране обязательно отображается реальный IP-адрес, с которым происходит обмен эхо-сообщениями. Благо IP-адреса у большинства сайтов изменяются редко, и один раз добавив такую запись в локальный файл /etc/hosts, можно сэкономить достаточно много времени и нервов в случае проблем с DNS-сервером, потому что запроса к нему не будет.
11.3. Внешние DNS-серверы
Если в локальном файле /etc/hosts не найдено записи о нужном имени, то компьютер должен запросить эту информацию у DNS-сервера. Для этого нужно знать IP-адрес этого самого сервера. Как система его узнает? Из файла /etc/resolv.conf, который должен выглядеть примерно следующим образом:
search FlenovM
domain domain.name
nameserver 10.1.1.1
nameserver 10.1.1.2
В первой строке находится команда search с параметром (сервер поиска имени хоста). В вашем файле, скорее всего, есть эта запись, и в качестве сервера стоит имя вашего компьютера. В этом параметре может быть перечислено несколько серверов, разделенных пробелами или символами табуляции. Например:
search FlenovM MyServer
Поиск на локальном сервере происходит достаточно быстро, а вот на удаленных — может отнять достаточно много времени.
Вторая строка содержит команду domain с параметром. Пользователи иногда любят задавать имя компьютера без указания домена, например redhat вместо redhat.com. Вы должны использовать полное имя узла. Чаще всего этот параметр настраивается в локальных сетях со специфичным именем домена.
Оставшиеся две строки содержат команду nameserv с параметром. Это внешний DNS-сервер, которому будут направляться запросы. В системе их может быть несколько (на данный момент для большинства дистрибутивов не более 3). Они будут опрашиваться в порядке перечисления в файле, пока искомый адрес не будет найден.
В большинстве случаев достаточно и одного сервера, потому что все они работают рекурсивно. Но я рекомендую указывать два. Бывают случаи, когда один DNS-сервер выходит из строя, и тогда второй спасает положение и вступает в работу.
11.4. Настройка DNS-сервиса
В настоящее время наиболее распространенным сервисом DNS для Linux является bind. Для этого сервиса существует программа bindconf, которая имеет графический интерфейс и проста в использовании. Зайдите в графическую оболочку и в консоли выполните команду:
bindconf &
Знак "&" говорит о том, что, запустив программу, не надо дожидаться ее завершения. Это очень удобно при запуске графических утилит, чтобы они не останавливали работу консоли. Учтите, что если закрыть окно консоли, то все программы, запущенные с ключом &, тоже завершатся.
На рис. 11.2 вы можете увидеть запущенное приложение для настройки DNS-сервиса. В центре показано окно, которое появляется по нажатию кнопки Добавить. Как видите, достаточно только выбрать тип зоны и ввести имя домена, и все готово.
Рис. 11.2. Окно для настройки DNS-сервиса
Несмотря на наличие простой графической программы, мы рассмотрим работу DNS на примере конфигурационных файлов, которые могут использоваться сервисом. Их прямое редактирование позволит сделать более тонкую настройку, и вы лучше будете понимать процесс работы DNS.