Опубликован: 21.11.2006 | Уровень: специалист | Доступ: платный
Лекция 4:

DNS и доменные имена

Файл hosts

Еще один метод преобразования имен заключается в использовании локальной базы данных имен хостов, подобно тому, как это делалось на заре сети Internet. Файл /etc/hosts содержит список имен хостов с соответствующими IP-адресами. В листинге 4.3 приводится пример файла /etc/hosts для клиента на базе ОС Linux. В нем должны содержаться имя вашей машины и ее IP-адрес, а также IP-адрес петли 127.0.0.1 для служебных целей. Кроме того, если имеются какие-либо удаленные хосты, к которым периодически подключается ваш сервер на ОС Linux, их IP-адреса также желательно указать в файле /etc/hosts. Теперь при каждом обращении к этим хостам у Linux-сервера уже будут их IP-адреса; таким образом, необходимость в выполнении DNS-запросов отпадает. К тому же это намного ускоряет установление соединения.

1 127.0.0.1 localhost
2 192.168.0.1 shadrach.smallorg.org
3 10.0.0.1 mail1.isp.net
4 10.0.0.2 mail2.isp.net
5 10.0.0.3 fred.otherplace.com
Листинг 4.3. Пример файла /etc/hosts

В первой и второй строках указываются IP-адреса для локального Linux-сервера. В строках 3–5 представлены IP-адреса для наиболее часто запрашиваемых машин вашей сети. Благодаря этому ускоряется доступ к ним c сервера на базе ОС Linux, по сравнению с использованием системы DNS.

Имя localhost

Во всех компьютерах с ОС Linux осуществляется поддержка имени localhost. Этому имени всегда соответствует IP-адрес 127.0.0.1, который присваивается специальному сетевому устройству типа "петля". Эти имя и адрес позволяют внутренним процессам взаимодействовать с другими процессами в этой же системе по сетевым протоколам. Многие программы даже сконфигурированы на использование имени localhost. Изменение этого имени или соответствующего ему IP-адреса может повлиять на работу этих программ.

Файл преобразования DNS

В файле /etc/host.conf определяются методы и порядок преобразования имен ОС Linux. В листинге 4.4 показан пример файла /etc/host.conf.

1 order hosts,bind
2 multi on
Листинг 4.4. Пример файла /etc/host.conf

В первой строке указывается порядок преобразования имен хостов. Здесь операционной системе Linux указывается, что в первую очередь она должна обращаться к файлу /etc/hosts и искать хост там, а затем попытаться преобразовать имя с помощью системы DNS (bind), если не удалось этого сделать с помощью /etc/hosts.

Утилиты клиента DNS в ОС Linux

В помощь системному администратору для ОС Linux было написано множество утилит, призванных облегчить для DNS поиск информации об удаленных хостах и сетях. Для UNIX-систем организацией Internet Software Consortium был создан программный пакет Berkeley Internet Name Domain (BIND), в который вошли три наиболее полезные, с точки зрения автора, и широко используемые утилиты: host, nslookup и dig. Эти программы распространяются совместно с программным обеспечением, входящим в большинство дистрибутивов ОС Linux. В Red Hat и Mandrake Linux эти программы поставляются в виде пакетов RPM.

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

Утилита host

Программа host производит простейшее преобразование имени с помощью DNS. Формат команды host следующий:

host [-l] [-v] [-w] [-r] [-d] [-t querytype] [-a] host [server]

По умолчанию команда host пытается получить IP-адрес для имени, указанного как host, с помощью DNS-сервера, определенного в файле /etc/resolv.conf. Если в командной строке указан server, то по умолчанию команда host будет использовать его в качестве DNS-сервера. Добавляя дополнительные параметры в командной строке, можно модифицировать работу команды host. Все эти параметры указаны в табл. 4.5.

Таблица 4.5. Параметры команды host
Параметр Описание
-l Показывает полную информацию о домене
-v Использует подробный формат при выводе результатов
-w Заставляет команду host ожидать ответа
-r Выключает режим рекурсии
-d Включает режим отладки
-t querytype Определяет тип запроса
-a Восстанавливает все записи в DNS

Параметр -l может использоваться для поиска информации обо всех хостах в домене. Очень часто вместе с ним используется параметр -t для того, чтобы отфильтровать информацию по типу (например, -t MX возвращает только записи МХ для домена). К сожалению, в настоящее время из соображений безопасности использование параметра -l затруднено, так как большинство DNS-серверов отказывает в предоставлении информации о хостах из своих баз данных. Если же информация запрашивается от удаленного или загруженного DNS-сервера (или через низкоскоростное соединение), то можно использовать параметр -w. С его помощью программа host принудительно ожидает ответа на запрос. По умолчанию время ожидания составляет около минуты.

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

Это весьма удобно при определении того, правильно ли ваш DNS-сервер кэширует ответы DNS. Во-первых, попытайтесь задать параметр -r. Если никакой информации об имени хоста нет, то от локального DNS-сервера ответ не будет получен. Затем задайте команду без параметра -r. Здесь должен быть получен нормальный ответ, так как локальному DNS-серверу разрешено получать данные от других серверов DNS. Далее еще раз попробуйте команду host с опцией -r. Теперь полученная информация должна в точности совпадать с данными, полученными в результате предыдущей попытки. Это означает, что DNS-сервер на этот раз почерпнул из кэша информацию, которая относилась к предыдущей попытке. Если никакой информации не получено, значит, локальный DNS-сервер не скэшировал предыдущий ответ. Тогда вы должны заметить значительное замедление при получении ответа на запрос, так как он делается по сети, а не берется из кэша.

По умолчанию команда host попытается вывести результаты своей работы в удобном для чтения формате. Например, как это показано в листинге 4.5. Если же задана опция -v, то вывод имеет вид исходных записей DNS. При отладке работы системы DNS это может оказаться полезным.

1 [rich@shadrach rich]$host www.linux.org
2 www.linux.org has address 198.182.196.56
3 www.linux.org mail is handled (pri=2O) by router.invlogic.com
4 www.linux.org mail is handled (pri=30) by border-ai.invlogic.com
5 www.linux.org mail is handled (pri=10) by mail.linux.org
6 [rich@shadrach rich]$
Листинг 4.5. Пример выполнения команды host

В строке 1 показан основной формат команды host — просто добавьте имя хоста, о котором требуется получить информацию. Строки 2–5 представляют собой результаты работы команды. Строка 2 показывает, что DNS-сервер смог преобразовать имя заданного хоста в его IP-адрес. Далее в строках 3-5 показаны три компьютера, которые могут принимать электронную почту для заданного хоста согласно записям МХ. Заметим, что команда host показывает даже весовые коэффициенты (или приоритеты) для каждого почтового сервера. Если почта была послана пользователю указанного хоста, то сначала ее доставкой займется сервер с приоритетом 10 ( mail.linux.org ). Если же команда host не выполняется, то можно послать запрос через другой DNS-сервер, указав его адрес после адреса хоста в командной строке. Это весьма эффективно, если вы считаете, что локальный DNS-сервер ведет себя не совсем правильно.

Valentin Diduk
Valentin Diduk
Украина, одесса, кпи, 2010
Евгений Олабин
Евгений Олабин
Беларусь, Гродно