BASH Programming - Введение

Наш собственный домен


Теперь определим наш собственный домен. Мы будем делать домен linux.bogus и определим машины в нем. Я использую полностью поддельное имя домена, для того чтобы быть уверенным, что мы не побеспокоим никого во внешнем мире.

Одно важное замечание до того как мы начнем: Не все символы разрешено использовать в именах машин. Мы ограничимся символами английского алфавита: a-z, цифрами: 0-9 и символом '-' (тире). Придерживайтесь использования этих символов. Прописные и строчные символы не различаются DNS, так что pat.uio.no является равным Pat.UiO.No.

Мы уже начали эту часть строкой в named.conf:

zone "0.0.127.in-addr.arpa" { type master; file "pz/127.0.0"; };

Заметьте отсутствие `.' в конце имен доменов в этом файле. Это указывает, что мы сейчас будем определять зону 0.0.127.in-addr.arpa, и что мы будем основным сервером для нее, а также то, что она хранится в файле, названном pz/127.0.0. Мы уже сделали этот файл, в нем записано:

@ IN SOA ns.linux.bogus. hostmaster.linux.bogus. ( 1 ; Serial 8H ; Refresh 2H ; Retry 1W ; Expire 1D) ; Minimum TTL NS ns.linux.bogus. 1 PTR localhost.

Заметьте наличие символа `.' в конце полных имен доменов в этом файле, в противоположность вышеприведенному файлу named.conf. Некоторые люди любят начинать каждый файл зон с директивы $ORIGIN, но это является излишним. Расположение (origin) (место зоны в иерархии DNS) файла зоны указывается в разделе зон в файле named.conf, в данном случае это 0.0.127.in-addr.arpa.

Этот `файл зоны' содержит 3 `записи ресурсов (resource records)' (RRs): A SOA RR, A NS RR и PTR RR. SOA это сокращение для Начала Полномочий (Start Of Authority). Символ `@' это специальный символ обозначающий расположение, и поскольку в колонке `домен (domain)' для этого файла записано 0.0.127.in-addr.arpa, то первая строка на самом деле значит

0.0.127.in-addr.arpa. IN SOA ...

NS это RR для сервера имен (Name Server). В начале строки символ '@' не указывается, это подразумевается, поскольку предыдущая строка начиналась с символа '@'. Это сэкономит нам несколько нажатий на клавиши. Так что строка NS в действительности читается как


0.0.127.in-addr.arpa. IN NS ns.linux.bogus

Эта строка сообщает DNS, что машина является сервером имен домена 0.0.127.in-addr.arpa, это ns.linux.bogus. 'ns' традиционное имя для серверов имен, но как и для web-серверов, чьим традиционным именем является www.что-нибудь, данное имя может быть любым.

И в в окончание - запись PTR гласит, что машина с адресом 1 в подсети 0.0.127.in-addr.arpa, например, 127.0.0.1 называется localhost.

Запись SOA находится в преамбуле каждого из файлов зон. Она описывает зону -- откуда она появляется (машина, названная ns.linux.bogus), кто отвечает за содержимое зоны (hostmaster@linux.bogus, вы должны вставить здесь свой адрес электронной почты), какая версия файла зоны текущая (serial: 1), и другие вещи, которые надо сделать для кеширующих и вторичных серверов DNS. Для полей refresh, retry, expire и minimum используйте числа приведенные в этом документе и вы должны быть в безопасности, используя их.

Затем перезапустите ваш named (команда ndc restart) и используйте программу nslookup для проверки того, что сделано:

$ nslookup

Default Server: localhost Address: 127.0.0.1

> 127.0.0.1 Server: localhost Address: 127.0.0.1



Name: localhost Address: 127.0.0.1

мы видим, что named работает и можно получить данные о localhost из домена 127.0.0.1, это очень хорошо. Теперь приступим к нашей основной задаче, домену linux.bogus, вставим новый раздел '(zone)' в файл named.conf:

zone "linux.bogus" { notify no; type master; file "pz/linux.bogus"; };

Заметим, что мы продолжаем опускать завершающий символ `.' в имени домена в файле named.conf.

В файле зоны linux.bogus мы поместим некоторые поддельные данные:

; ; Файл зоны для linux.bogus ; ; Полный файл зоны ; @ IN SOA ns.linux.bogus. hostmaster.linux.bogus. ( 199802151 ; serial, todays date + todays serial # 8H ; refresh, seconds 2H ; retry, seconds 1W ; expire, seconds 1D ) ; minimum, seconds ; NS ns ; Internet адрес сервера имен MX 10 mail.linux.bogus ; Основной почтовый сервер MX 20 mail.friend.bogus. ; Дополнительный почтовый сервер ; localhost A 127.0.0.1 ns A 192.168.196.2 mail A 192.168.196.4



Необходимо упомянуть две вещи о записи SOA. ns.linux.bogus

должен быть настоящей машиной с записью A. Не разрешается указывать машину с записью CNAME в записи SOA. Это имя не обязательно должно быть `ns', оно может быть любым правильным именем машины. Далее, hostmaster.linux.bogus должен читаться как hostmaster@linux.bogus, это должен быть почтовый псевдоним или почтовый ящик для человека сопровождающего DNS и читающего почту достаточно часто. Любая почта, относительно домена будет посылаться на адрес указаный здесь. Имя не обязательно должно быт `hostmaster', это может быть любой правильный адрес электронной почты, но адрес с именем `hostmaster' как ожидается будет работать.

В этом файле приведен еще один новый тип записи о ресурсах (RR) -- MX, или запись ресурса Почтовый Сервер (Mail eXchanger). Она сообщает почтовой системе куда посылать почту адресованную someone@linux.bogus, а именно серверам mail.linux.bogus или mail.friend.bogus. Число перед каждым именем машины -- это приоритет записи MX RR. Запись ресурса с наименьшим номером (10) -- это машины куда почта должна посылаться, если это возможно. Если происходит ошибка, то почта может быть послана на машину с большим номером, вторичному почтовому серверу, например, mail.friend.bogus для которого приоритет установлен равным 20.

Перезапустите named с помощью команды ndc restart. Проверьте результаты работы используя команду nslookup:

$ nslookup > set q=any > linux.bogus Server: localhost Address: 127.0.0.1

linux.bogus origin = ns.linux.bogus mail addr = hostmaster.linux.bogus serial = 199802151 refresh = 28800 (8 hours) retry = 7200 (2 hours) expire = 604800 (7 days) minimum ttl = 86400 (1 day) linux.bogus nameserver = ns.linux.bogus linux.bogus preference = 10, mail exchanger = mail.linux.bogus.linux.bogus linux.bogus preference = 20, mail exchanger = mail.friend.bogus linux.bogus nameserver = ns.linux.bogus ns.linux.bogus internet address = 192.168.196.2 mail.linux.bogus internet address = 192.168.196.4



При внимательном тестировании вы обнаружите ошибку. Строка

linux.bogus preference = 10, mail exchanger = mail.linux.bogus.linux.bogus

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

linux.bogus preference = 10, mail exchanger = mail.linux.bogus

Я сознательно сделал ошибку, чтобы вы смогли получить некоторый опыт --:-) Глядя в файл зоны мы обнаружим, что в строке

MX 10 mail.linux.bogus ; Основной почтовый сервер

отсутствует точка. Или лишний раз написано 'linux.bogus'. Если имя машины не заканчивается на символ точки в файле зоны, то к концу этого имени добавляется текущее расположение (origin), вызывая в итоге дублирование текста linux.bogus.linux.bogus. Так запись

MX 10 mail.linux.bogus. ; Основной почтовый сервер

или

MX 10 mail ; Основной почтовый сервер

является правильной. Я предпочитаю последнюю форму, поскольку надо меньше набирать на клавиатуре. Существуют пользователи bind, которые не согласны с этим подходом, но есть и те, которые согласны с этим. В файле зоны имя домена должно быть написано и закачиваться на символ `.' или домен не должен быть указан, в этом случае по умолчанию доменом будет текущее расположение (origin) машины.

Я должен подчеркнуть, что в файле named.conf не должно быть символа `.' после имен доменов. У вас может не быть понятия про символ `.' -- это слишком часто или наоборот слишком редко заполняет разные вещи и смущает много людей.

Так что опираясь на мою точку зрения мы напишем новый файл зоны, с некоторой дополнительной информацией.

; ; Файл зоны для linux.bogus ; ; Полный файл зоны ; @ IN SOA ns.linux.bogus. hostmaster.linux.bogus. ( 199802151 ; serial, todays date + todays serial # 8H ; refresh, seconds 2H ; retry, seconds 1W ; expire, seconds 1D ) ; minimum, seconds ; TXT "Linux.Bogus, your DNS consultants" NS ns ; Internet адрес сервера имен NS ns.friend.bogus. MX 10 mail.linux.bogus ; Основной почтовый сервер MX 20 mail.friend.bogus. ; Дополнительный почтовый сервер

localhost A 127.0.0.1



gw A 192.168.196.1 HINFO "Cisco" "IOS" TXT "The router"

ns A 192.168.196. 2 MX 10 mail MX 20 mail.friend.bogus. HINFO "Pentium" "Linux 2.0" www CNAME ns

donald A 192.168.196.3 MX 10 mail MX 20 mail.friend.bogus. HINFO "i486" "Linux 2.0" TXT "DEK"

mail A 192.168.196.4 MX 10 mail MX 20 mail.friend.bogus. HINFO "386sx" "Linux 1.2"

ftp A 192.168.196.5 MX 10 mail MX 20 mail.friend.bogus. HINFO "P6" "Linux 2.1.86"

Здесь присутствует несколько новых записей о ресурсах (RR): запись HINFO (Информация о машине, Host INFOrmation) имеет две части, хорошей привычкой является заключение каждой из этих частей в кавычки. Первая часть -- это информация об оборудовании машины, а вторая часть описывает программное обеспечение и операционную систему данной машины. Машина, названная 'ns', имеет процессор Pentium и работает под управлением Linux 2.0. CNAME (Каноническое имя, Canonical NAME) -- это способ присвоить каждой машине несколько имен. Так, что www является алиасом для ns.

Использование записи CNAME является немного неоднозначным. Но безопасным способом будет следовать правилу, что записи MX, CNAME или SOA никогда

не должны ссылаться на имя, указанное как запись CNAME, они должны ссылаться на имя определенное записью A, так что будет неправильно записать

foobar CNAME www ; NO!

но вместо этого необходимо записать

foobar CNAME ns ; Yes!

Также лучше считать, что запись CNAME не является настоящим именем машины для использования в адресе электронной почты: адрес webmaster@www.linux.bogus является неправильным адресом электронной почты. Вы можете ожидать, что некоторые администраторы электронной почты во внешнем мире следят за моблюдением этого правила, даже если у вас все работает нормально. Для того, чтобы избежать этого используйте запись A (и возможно также некоторые другие записи, такие как MX) вместо:

www A 192.168.196.2

Некоторые из разработчиков архитектуры bind (arch-bind-wizards), рекомендуют не использовать запись CNAME. Так, что ее использование надо рассматривать серьезно.

Но как вы видите, этот документ также как и множество других серверов не следуют этому правилу.

Загрузите новую базу данных выполнив команду ndc reload, это заставит named перечитать файлы зон заново.



$ nslookup Default Server: localhost Address: 127.0.0.1

> ls -d linux.bogus

Это означает, что должны быть перечислены все записи в данном домене. В результате получится следующее:

[localhost] $ORIGIN linux.bogus.

1D IN NS ns 1D IN NS ns.friend.bogus. 1D IN TXT "Linux.Bogus, your DNS consultants" 1D IN MX 10 mail 1D IN MX 20 mail.friend.bogus. gw 1D IN A 192.168.196.1 1D IN HINFO "Cisco" "IOS" 1D IN TXT "The router" mail 1D IN A 192.168.196.4 1D IN MX 10 mail 1D IN MX 20 mail.friend.bogus. 1D IN HINFO "386sx" "Linux 1.0.9" localhost 1D IN A 127.0.0.1 www 1D IN CNAME ns donald 1D IN A 192.168.196.3 1D IN MX 10 mail 1D IN MX 20 mail.friend.bogus. 1D IN HINFO "i486" "Linux 1.2" 1D IN TXT "DEK" ftp 1D IN A 192.168.196.5 1D IN MX 10 mail 1D IN MX 20 mail.friend.bogus. 1D IN HINFO "P6" "Linux 1.3.59" ns 1D IN A 192.168.196.2 1D IN MX 10 mail 1D IN MX 20 mail.friend.bogus. 1D IN HINFO "Pentium" "Linux 1.2" @ 1D IN SOA ns hostmaster ( 199802151 ; serial 8H ; refresh 2H ; retry 1W ; expiry 1D ) ; minimum

Это хорошо. Как вы видите, это выглядит почти как сам файл зоны. Теперь проверим какой будет ответ только для машины с именем www:

> set q=any > www.linux.bogus. Server: localhost Address: 127.0.0.1

www.linux.bogus canonical name = ns.linux.bogus linux.bogus nameserver = ns.linux.bogus linux.bogus nameserver = ns.friend.bogus ns.linux.bogus internet address = 192.168.196.2

Другими словами, настоящим именем для www.linux.bogus является ns.linux.bogus, и он также дается некоторая дополнительная информацию о машине ns, достаточная, чтобы соединиться с ней.

Теперь мы находимся на середине пути.


Содержание раздела