В этом документе я попытаюсь дать вам пример установки сервера DNS. Большинство этой информации взято из 'FreeBSD handbook' (печатная версия).
Встроенные FreeBSD dns демон называется 'named' и является частью порта 'bind' (/usr/ports/bind8). Директория '/etc/namedb' - это место, где named ищет конфигурационные файлы / файлы зон.
Нас интересуют следующие файлы и мы будем создавать/редактировать их довольно долго:
В данном документе я объясню как создать/отредактировать эти файлы для конфигурации сервера DNS, который будет работать в локальной сети и опрашивать два внешних сервера DNS, если ответ на один из запросов ему не известен.
zone "0.0.127.IN-ADDR.ARPA" { type master; file "localhost.rev"; };
zone "example.org" { type master; file "db.example.org"; };
zone "1.168.192.in-addr.arpa" { type master; file "example.org-reverse"; };
Вот что все это означает:
forwarders Это должен быть разделенный точкой с запятой (не забудьте поставить последнюю точку с запятой) список серверов dns. Если ваш сервер dns не знает ответа, он будет запрашивать эти серверы dns.
query-source address При помощи этой опции вы можете заставить сервер DNS использовать определенный порт, это очень полезно при использовании файрволла.
zone "." Это зона для доменов верхнего уровня, файл 'named.root' содержит все корневые серверы (адреса не меняются годами, так что вы можете не редактировать этот фыйл).
zone "example.org" Это определяет файл, в котором сервер DNS может найти информацию о домене 'example.org'
zone "1.168.192.in-addr.arpa" Эта зона используется для обратных поисков (lookup) DNS. Как вы могли обратить внимание, адрес ip яаляется обратным и в нем пропущен последний номер. Это решение для проблемы 'яйца и курицы'. Откуда сервер DNS знает на каком сервере он может найти информацию, которую он ищет? Он разрешает адрес ip и опрашивает ответственный за это сервер, но как он опрашивает сервер? путем разрешения имени хоста. Вы видите, это небольшая проблема. Вот почему выбран этот метод. Я не стану углубляться в подробности, поскольку для установки сервера DNS в этом нет необходимости.
db.example.org Это файл зоны для вашего домена. Вот пример:
$TTL 86400
example.org. IN SOA ns.example.org. admin.example.org. ( 2001220201 ; Serial (YYYYDDMM plus 2 digit serial) 86400 ; refresh (1 day) 7200 ; retry (2 hours) 8640000 ; expire (100 days) 86400) ; minimum (1 day)
IN NS ns.example.org. IN MX 10 mail.example.org.
ns IN A 192.168.1.1 sun IN A 192.168.1.100 moon IN A 192.168.1.101 maan IN CNAME moon
Комментарии в конфигурационных файлах обычно помечаются точками с запятой, вместо слэшей!!!
За каждым доменом точка выделена жирным. Это потому, что эта точка ДОЛЖНА быть там, а общей ошибкой является то, что многие об этом забывают.
$TTL Здесь должно быть указано время жизни по умолчанию.
SOA Это сокращение от Start Of Authority и за ним должен следовать домен первоначального хоста и почтовый адрес администратора сервера DNS. Как вы могли заметить: в почтовом адресе отсутствует символ `эта'. Все это потому, что символ `эта' имеет здесь другое значение, а следовательно, этот символ заменен первой точкой там где это необходимо.
Serial Это последовательный номер для этой зоны, он должен увеличиваться каждый раз, когда что-то было изменено. Хорошая структура последовательного номера: YYYYDDMM плюс 2 цифры. Первые четыре цифры - это год, затем день, месяц и последовательный номер. Последнее - полезно когда вы обновляете файл зоны более одного раза в день.
IN NS ns.example.org. Это говорит серверу dns, что 'dns.example.org' является ответственным за эту зону.
В данном случае, этот ответственный сервер dns находится в том же домене (example.org), что и домен за который он отвечает. Вот пример более реалистичной зоны:
$TTL 86400
mydomain.org. IN SOA ns.example.org. admin.example.org. ( 2001220201 ; Serial (YYYYDDMM plus 2 digit serial) 86400 ; refresh (1 day) 7200 ; retry (2 hours) 8640000 ; expire (100 days) 86400) ; minimum (1 day)
IN NS ns.example.org. IN MX 10 mail.example.org.
mydomain.org. A 211.211.211.211 www IN A 212.212.212.212 db IN A 213.213.213.213
Как вы можете видеть в этом примере добавлена запись mx и данные для доменного имени без поддомена. Адрес example.org все еще здесь, поскольку он является ответственным сервером dns.
example.org-reverse Этот файл используется для обратных поисков (lookup)
$TTL 86400
@ IN SOA ns.example.org. admin.example.org. ( 2001220200 ; Serial (date, 2 digits version) 86400 ; refresh (1 day) 7200 ; retry (2 hours) 8640000 ; expire (100 days) 86400) ; minimum (1 day) IN NS ns.example.org.
100 IN PTR sun.example.org. 101 IN PTR moon.example.org.
PTR PTR означает Указатель (Pointer).
localhost.rev Этот файл просто мапит 127.0.0.1 на localhost.
$TTL 3600
@ IN SOA ns.example.org. admin.example.org. ( 2001220200 ; Serial 3600 ; Refresh 900 ; Retry 3600000 ; Expire 3600 ) ; Minimum IN NS ns.example.org. 1 IN PTR localhost.example.org.
Запуск сервера DNS Итак, теперь вы создали/отредактировали все необходимые конфигурационные файлы и хотите запустить ваш сервер. Вы можете сделать это вручную, введя (будучи root) '/usr/sbin/named'. Теперь проверьте /var/log/messages на наличие ошибок. Если ваш сервер запустился без ошибок, измените файл '/etc/resolv.conf' на что-то, соответствующее следующему:
domain example.org nameserver 192.168.1.1
Теперь запустите nslookup и запросите ваш сервер по одному из поддоменов в вашем файле зоны.
Если все это работает, то вы, вероятно, захотите, чтобы сервер DNS автоматически запускался при загрузке вашего сервера. Вставьте следующие строки в '/etc/rc.conf'
Убедитесь, что пользователь и группа 'bind' существуют. Если вы не запустили named с этими пользователем/группой, то он будет запускаться с правами root:wheel (нужно объяснять, почему так делать не стоит?)