Запуск named

Программа, обеспечивающая обслуживание имени области на большинстве Unix-машин, обычно называется named. Эта программа была первоначально разработана для BSD и, возможно, для других серверов. На многих Linux-дистрибутивах, как мне кажется, используется версия BIND 4.8.3. Новая версия, BIND-4.9.3, в данный момент находится на стадии бета-тестирования и скоро должна стать доступной для Linux.

Этот раздел требует понимания работы Domain Name System. Если изложенная ниже информация вам кажется сложной, рекомендую перечитать главу 3, в которой дана более подробная информация по основам DNS.

Named обычно запускается при начальной загрузке системы и работает до момента перезагрузки машины. Он использует информацию из конфигурационного файла /etc/named.boot и различных файлов, содержащих данные имен областей адресов, которые называются zone files. Форматы и семантика этих файлов будут объяснены в следующем разделе. Для запуска named достаточно ввести в командной строке:

# /usr/sbin/named

После запуска named начнёт чтение файла named.boot и соответствующих zone file. Программа записывает идентификатор процесса в файл /var/run/named.pid в формате ASCII. При необходимости named выгружает zone files с основных серверов и начинает прослушивание порта 53 для обработки DNS-запросов.

Файл named.boot

Файл named.boot обычно невелик по размеру, но в нём содержится важная информация: ссылки на основные файлы с данными областей (zone) и ссылки на другие серверы. Комментарии в этом файле начинаются с символа ";" и продолжаются до конца строки.

В приведенном примере кэш и основные команды загружают информацию в named. Данные берутся из главного файла, который указан вторым аргументом. Этот файл содержит текстовые представления записей DNS, которые будут рассмотрены далее.

Существуют разные версии программы named для различных дистрибутивов Linux. Они могут несколько отличаться друг от друга. Например, у некоторых версий свой собственный pid-файл, который может храниться в /tmp или /var/tmp. Важно отметить, что в некоторых версиях имена доменов, указанные в named.boot, не должны оканчиваться точкой. В более старых версиях named наличие этой точки считалось ошибкой и отбрасывалось. Версия BIND-4.9.3 решает эту проблему.

; /etc/named.boot file for vlager.vbrew.com
    directory /var/named
    domain file
    ;---------------------------------------------------
    cache . named.ca
    primary vbrew.com named.hosts
    primary 0.0.127.in-addr.arpa named.local
    primary 72.191.in-addr.arpa named.rev

В этом примере мы конфигурировали named как основной сервер для трёх областей, как указано основными операторами в конце файла. Первая из этих строк, например, инструктирует named действовать как основной сервер для vbrew.com, принимая данные zone из файла named.hosts. Ключевое слово "каталог" указывает ему, что все файлы zone размещены в /var/named.

Запись кеша очень важна и должна присутствовать практически на всех машинах, на которых запущен сервер. Её функция двойственна: она инструктирует named для очистки кеша и загружает основные серверные подсказки из файла кеша (named.ca в нашем примере). Мы вернёмся к серверам с подсказками позже.

Также имеется список наиболее важных опций, которые вы можете использовать в named.boot:

Как правило, в каждом boot-файле всегда присутствует по крайней мере одна основная запись, предназначенная для обратного адреса сети 127.0.0.0, которая является локальной закрытой сетью.

Существуют две опции, которые мы не будем рассматривать в данной статье: sortlist и domain. Также есть две директивы, применяемые внутри файлов зоны базы данных: $INCLUDE и $ORIGIN. Поскольку они редко используются, мы не будем останавливаться на их описании.

DNS файл базы данных

Основной файл, используемый named (например, named.hosts), всегда имеет ассоциированную с ним область, которая называется origin. Это область, имя которой определено с помощью команд cache и primary. Внутри основного файла вы можете определить область и имена хостов в рамках этой области. Имя, указанное в файле конфигурации, считается абсолютным, если оно заканчивается точкой; в противном случае оно рассматривается как относительное origin. Для обозначения всего origin можно использовать символ "@".

Все данные в основном файле представлены в виде источника записей или RRs (resource records) для краткости. Это наименьшие единицы информации, доступные через DNS. Каждая запись имеет свой тип. Например, запись типа A связывает имя хоста с IP-адресом, а запись CNAME ассоциирует псевдоним хоста с его официальным именем. Для примера можно обратиться к рисунку 7.2.3 на странице 116, который демонстрирует основной файл named.hosts для virtual brewery.

Формат записей в основных файлах следующий:

[domain] [ttl] [class] type rdata

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

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

Серийный номер используется вторичными серверами для определения, была ли изменена зональная информация. Чтобы оставаться в актуальном состоянии, вторичные серверы регулярно запрашивают запись SOA у основного сервера, сравнивая порядковый номер с кэшированной записью SOA. Если номер изменился, вторичные серверы переносят всю зону базы данных с основного сервера.

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

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

[domain] [ttl] [class] HINFO hardware software

Аппаратная область идентифицирует аппаратные средства, используемые данным хостом. Существуют специальные соглашения для её точного определения. Список подходящих имен приведён в "Assigned Numbers" (RFC 1340). Если область содержит пробелы, её следует заключить в двойные кавычки. Имена областей программного обеспечения соответствуют операционной системе. Снова, подходящее имя можно выбрать из "Assigned Numbers" RFC.

Учитывая характер рассматриваемой сети (единственная локальная вычислительная сеть), приведённый пример довольно прост. Если ваши требования слишком сложны и вы не можете запустить named, рекомендую обратиться к книге "DNS and BIND" авторов Cricket Liu и Paul Albitz.

Кэш-файл named.ca демонстрирует пример записи hint для корневого сервера имен. Типичный кэш-файл обычно содержит информацию о десятке серверов или около того. Вы можете получить актуальный список серверов для корневой зоны, используя утилиту nslookup, которая описана ближе к концу этой главы.

; /var/named/named.ca Cache file for the brewery.
; We're not on the Internet, so we don't need
; any root servers. To activate these
; records, remove the semicolons.

; . 99999999 IN NS NS.NIC.DDN.MIL
; NS.NIC.DDN.MIL 99999999 IN A 26.3.0.103
; . 99999999 IN NS NS.NASA.GOV
; NS.NASA.GOV 99999999 IN A 128.102.16.10

Файл named.ca.

Проверка установки сервера (Name Server Setup)

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

; /var/named/named.hosts Local hosts at the brewery
; Origin is vbrew.com

@ IN SOA vlager.vbrew.com. (
janet.vbrew.com.
16 ; serial
86400 ; refresh: once per day
3600 ; retry: one hour
3600000 ; expire: 42 days
604800 ; minimum: 1 week
)
IN NS vlager.vbrew.com.

; local mail is distributed on vlager
IN MX 10 vlager

; loopback address
localhost. IN A 127.0.0.1

; brewery Ethernet
vlager IN A 191.72.1.1
vlager-if1 IN CNAME vlager
; vlager is also news server
news IN CNAME vlager
vstout IN A 191.72.1.2
vale IN A 191.72.1.3

; winery Ethernet
vlager-if2 IN A 191.72.2.1
vbardolino IN A 191.72.2.2
vchianti IN A 191.72.2.3
vbeaujolais IN A 191.72.2.4

Файл named.hosts.

Существует отличный инструмент для проверки настройки вашего сервера — nslookup. Он может работать как в интерактивном режиме, так и из командной строки. В последнем случае, чтобы вызвать его, используйте команду: nslookup hostname. Она отправит запрос на сервер, указанный в файле resolv.conf, для hostname. Если в этом файле указано несколько серверов, nslookup выберет любой из них.

; /var/named/named.local Reverse mapping of 127.0.0
; Origin is 0.0.127.in-addr.arpa.

@ IN SOA vlager.vbrew.com. (
joe.vbrew.com.
1 ; serial
360000 ; refresh: 100 hrs
3600 ; retry: one hour
3600000 ; expire: 42 days
; minimum: 100 hrs
)
IN NS vlager.vbrew.com.
1 IN PTR localhost.

Файл named.local.

Интерактивный режим предоставляет больше возможностей. Вы можете запрашивать любой тип DNS-записи и извлекать зональную информацию для домена.

Использование утилиты nslookup

При вызове без аргументов утилита nslookup отображает название используемого сервера и переходит в интерактивный режим. Ответив на приглашение ">", вы можете ввести любое имя, чтобы выполнить запрос. По умолчанию, он будет запрашивать записи класса A, содержащие IP-адреса. Вы можете изменить этот тип запроса с помощью команды "set type=type", где "type" — это одно из возможных значений для типа записи.

; /var/named/named.rev Reverse mapping of our IP addresses
; Origin is 72.191.in-addr.arpa.

@ IN SOA vlager.vbrew.com. (
joe.vbrew.com.
16 ; serial
86400 ; refresh: once per day
3600 ; retry: one hour
3600000 ; expire: 42 days
604800 ; minimum: 1 week
)
IN NS vlager.vbrew.com.
; brewery
1.1 IN PTR vlager.vbrew.com.
2.1 IN PTR vstout.vbrew.com.
3.1 IN PTR vale.vbrew.com.
; winery
1.2 IN PTR vlager-if1.vbrew.com.
2.2 IN PTR vbardolino.vbrew.com.
3.2 IN PTR vchianti.vbrew.com.
4.2 IN PTR vbeaujolais.vbrew.com.

Файл named.rev.

$ nslookup
Default Name Server: rs10.hrz.th-darmstadt.de
Address: 130.83.56.60

> sunsite.unc.edu
Name Server: rs10.hrz.th-darmstadt.de
Address: 130.83.56.60
Non-authoritative answer:
Name: sunsite.unc.edu
Address: 152.2.22.81

Если вы попробуете запросить имя, которое не имеет соответствующего IP-адреса, но для которого в DNS-базе данных найдены другие записи, nslookup вернет ошибку: "No type A records found". Однако, вы можете задать запрос на другие типы записей (не только A), используя команду "set type". Например, чтобы запросить SOA-запись для unc.edu, выполните следующие команды:

> unc.edu
*** No address (A) records available for unc.edu
Name Server: rs10.hrz.th-darmstadt.de
Address: 130.83.56.60
> set type=SOA
> unc.edu
Name Server: rs10.hrz.th-darmstadt.de
Address: 130.83.56.60
Non-authoritative answer:
unc.edu
origin = ns.unc.edu
mail addr = shava.ns.unc.edu
serial = 930408
refresh = 28800 (8 hours)
retry = 3600 (1 hour)
expire = 1209600 (14 days)
minimum ttl = 86400 (1 day)
Authoritative answers can be found from:
UNC.EDU nameserver = SAMBA.ACS.UNC.EDU
SAMBA.ACS.UNC.EDU internet address = 128.109.157.30

Таким образом, вы можете запросить MX-записи и другие типы записей. Использование типа ANY вернёт все записи, связанные с указанным именем.

> set type=MX
> unc.edu
Non-authoritative answer:
unc.edu preference = 10, mail exchanger = lambada.oit.unc.edu
lambada.oit.unc.edu internet address = 152.2.22.80
Authoritative answers can be found from:
UNC.EDU nameserver = SAMBA.ACS.UNC.EDU
SAMBA.ACS.UNC.EDU internet address = 128.109.157.30

После этого вы можете запросить список root-серверов для файла named.ca, запрашивая все NS-записи, связанные с корневой областью:

> set type=NS
> .
Name Server: fb0430.mathematik.th-darmstadt.de
Address: 130.83.2.30
Non-authoritative answer:
(root) nameserver = NS.INTERNIC.NET
(root) nameserver = AOS.ARL.ARMY.MIL
(root) nameserver = C.NYSER.NET
(root) nameserver = TERP.UMD.EDU
(root) nameserver = NS.NASA.GOV
(root) nameserver = NIC.NORDU.NET
(root) nameserver = NS.NIC.DDN.MIL
Authoritative answers can be found from:
(root) nameserver = NS.INTERNIC.NET
(root) nameserver = AOS.ARL.ARMY.MIL
(root) nameserver = C.NYSER.NET
(root) nameserver = TERP.UMD.EDU
(root) nameserver = NS.NASA.GOV
(root) nameserver = NIC.NORDU.NET
(root) nameserver = NS.NIC.DDN.MIL
NS.INTERNIC.NET internet address = 198.41.0.4
AOS.ARL.ARMY.MIL internet address = 128.63.4.82
AOS.ARL.ARMY.MIL internet address = 192.5.25.82
AOS.ARL.ARMY.MIL internet address = 26.3.0.29
C.NYSER.NET internet address = 192.33.4.12
TERP.UMD.EDU internet address = 128.8.10.90
NS.NASA.GOV internet address = 128.102.16.10
NS.NASA.GOV internet address = 192.52.195.10
NS.NASA.GOV internet address = 45.13.10.121
NIC.NORDU.NET internet address = 192.36.148.17
NS.NIC.DDN.MIL internet address = 192.112.36.4

Дополнительные инструменты

При использовании утилиты nslookup можно получить полный список доступных команд, введя команду "help". Но кроме nslookup существуют и другие полезные инструменты, которые могут помочь вам в роли администратора BIND. Давайте рассмотрим некоторые из них.

hostcvt — инструмент, который помогает при начальной настройке BIND, преобразуя ваш файл /etc/hosts в главный файл для named. Он генерирует и прямые (A), и обратные (PTR) отображения, а также учитывает псевдонимы и т. п. Хотя он и не выполняет всю работу за вас, это инструмент может сэкономить вам много времени. Hostcvt является частью исходного кода BIND, но также может быть использован как отдельный пакет на некоторых FTP-серверах для Linux.

После настройки вашего сервера вы, возможно, захотите проверить вашу конфигурацию. Идеальным инструментом для этого является dnswalk — на основе Perl пакет, который сканирует вашу DNS-базу данных на предмет ошибок и проверяет соответствие информации. Dnswalk был опубликован в группе comp.sources.misc и должен быть доступен на всех FTP-серверах, которые архивируют эту группу.