Установка сервера DNS на FreeBSВведение
В этом документе я попытаюсь дать вам пример установки сервера DNS.
Большинство этой информации взято из 'FreeBSD handbook' (печатная
версия). Встроенные FreeBSD dns демон называется 'named' и является частью
порта 'bind' (/usr/ports/bind8). Директория '/etc/namedb' - это место,
где named ищет конфигурационные файлы / файлы зон.
Нас интересуют следующие файлы и мы будем создавать/редактировать их
довольно долго:
named.conf
db.example.org
example-reverse
localhost.rev
В данном документе я объясню как создать/отредактировать эти файлы для
конфигурации сервера DNS, который будет работать в локальной сети и
опрашивать два внешних сервера DNS, если ответ на один из запросов ему
не известен.
Вот схема сети:
/-----------------------\
| интернет |
\-----------------------/
|
|
|--------------------|
| DNS сервер/шлюз |
| ns.example.org |
| 192.168.1.1 |
|--------------------|
|
|
|-------------------------------------------------|
| |
|-----------------| |------------------|
| Хост | | Хост |
| sun.example.org | | moon.example.org |
| 192.168.1.100 | | 192.168.1.101 |
|-----------------| |------------------|
named.conf
По умолчнию этот файл находится в директории /etc/namedb и нам
необходимо отредактировать его.
Вот пример того, как он должен выглядеть:
---
options {
directory "/etc/namedb";
forwarders {
[dns-сервер 1]; [dns-сервер 2];
};
query-source address * port 53;
};
zone "." {
type hint;
file "named.root";
};
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'
---
named_enable="YES"
named_program="/usr/sbin/named"
named_flags="-u bind -g bind"
---
Убедитесь, что пользователь и группа 'bind' существуют. Если вы не
запустили named с этими пользователем/группой, то он будет запускаться
с правами root:wheel (нужно объяснять, почему так делать не стоит?)
Что ж, если у вас еще есть вопросы, можете попробовать
i_dont_get_it@lowlife.org и если у нас будет время и вы сказали слово
`пожалуйста', то мы ответим >;-)D