Настройка named

Представим себе ситуацию, когда Вам необходимо поднять свой собственный ДНС сервер. К примеру, Вам необходимо поднять свой домен, а платить провайдерам Вам влом.

Переходим в каталог named

cd /etc/namedb/

Делаем

mv named.conf named.conf-dist

Мы сами будем создавать свой собственный named.conf

/etc/namedb/>vi named.conf
options {
listen-on {
127.0.0.1;
213.125.15.4;
};
allow-query { any; };
recursion no;
version “8.2.4″;
directory “/etc/namedb”;
pid-file “/var/run/named/pid”;
notify yes;
};

zone “.” {
type hint;
file “named.root”;
};

zone “0.0.127.in-addr.arpa” {
type master;
file “master/localhost.rev”;
notify no;
};

Директива options определяет каталог, в котором хранятся файлы описания зон, директива zone определяет зоны, которые поддерживает сервер.
Зона “.” сервером не поддерживается. Это корневая зона. Поэтому она имеет тип hint, т.е. “подсказка” на то, где описаны серверы корневой зоны.
Зона “0.0.127.in-addr.arpa” имеет тип master, т.к. данный сервер действительно является мастером для этой зоны.
Значение version “8.2.4″; добавляется для того, чтоб злоумышленник не мог определить точную версию нашего ДНС сервер.
Значение recursion no делает запрет на рекурсию.
Значение listen-on говорит на каких ИП отрабатывать запросы.

Если мы сделаем следующее

/etc/namedb/>ll /etc/namedb/ | grep named.root
-rw-r–r–  1 root  wheel  2600 Jan 12  2007 named.root

то увидим то такой файл уже существует. Тут проблем не будет. Для создания localhost.rev необходимо выполнить следующее

/etc/namedb/>sh make-localhost
/etc/namedb/>ll master/
total 8
-rw-r–r–  1 root  wheel  451 Nov 15 14:27 localhost-v6.rev
-rw-r–r–  1 root  wheel  451 Nov 15 14:27 localhost.rev
/etc/namedb/>

Вот в принципе и все. Дальше делаем

/etc/namedb/>echo “named_enable=”YES”" >> /etc/rc.conf
/etc/namedb/>cat /etc/rc.conf | grep named
named_enable=YES
/etc/namedb/>/etc/rc.d/named start
Starting named.
/etc/namedb/>tail -f /var/log/messages
Nov 17 12:22:34 host named[14438]: starting BIND 9.3.3 -t /var/named -u bind
Nov 17 12:22:34 host named[14438]: command channel listening on 127.0.0.1#953
Nov 17 12:22:34 host named[14438]: running
^C
/etc/namedb/>ps ax | grep named
14438  ??  Ss     0:00.02 /usr/sbin/named -t /var/named -u bind
14442  p0  R+     0:00.00 grep named

Если у Вы видите подобное – это значит, что у Вас все работает как нужно.
Но, это еще не все. Сервер то мы запустили. А как же домен? Идем дальше.
Мы решили, что нам необходимо завести домен test.org.ua
В named.conf добавляем следующее:

zone “test.org.ua” {
type master;
file “master/test.org.ua”;
allow-transfer {
215.57.121.1;
};
};

где zone “test.org.ua” название нашей зоны, file “master/test.org.ua”; пусть где будет хранится запись о зоне, 215.57.121.1; вторичный ДНС сервер.

Создаем зону test.org.ua

/etc/namedb/>vi master/test.org.ua
; Zone file for test.org.ua
$TTL 14400
@       IN      SOA      test.org.ua. webmaster.test.org.ua. (
2007101501       ; serial, todays date+todays
3600           ; refresh, seconds
300            ; retry, seconds
1209600         ; expire, seconds
43200 )         ; minimum, seconds

IN      NS      ns1.test.org.ua.
IN      NS      ns.secondary.net.ua.
MX      10      ns1.test.org.ua.
IN      A       213.125.15.4

ns1     IN      A       213.125.15.4
www     IN      A       213.125.15.5
pop3    IN      A       213.125.15.4
smtp    IN      A       213.125.15.4
mail    IN      A       213.125.15.4
ftp     IN      A       213.125.15.6

Вот собственно все и готово.
Подробно объяснять не буду что и как тут задано, есть Интернет, есть гугл.
В принципе все готово. За исключением одного.

Делаем следующее:

/etc/namedb/>/usr/sbin/rndc-confgen
# Start of rndc.conf
key “rndc-key” {
algorithm hmac-md5;
secret “PSgoANtaZ9nhGiiJMdHkNw==”;
};

options {
default-key “rndc-key”;
default-server 127.0.0.1;
default-port 953;
};
# End of rndc.conf

# Use with the following in named.conf, adjusting the allow list as needed:
# key “rndc-key” {
#       algorithm hmac-md5;
#       secret “PSgoANtaZ9nhGiiJMdHkNw==”;
# };
#
# controls {
#       inet 127.0.0.1 port 953
#               allow { 127.0.0.1; } keys { “rndc-key”; };
# };
# End of named.conf

Создаем файл /etc/named/rndc.conf куда добавляем следующее

/etc/namedb/>vi /etc/namedb/rndc.conf
key “rndc-key” {
algorithm hmac-md5;
secret “PSgoANtaZ9nhGiiJMdHkNw==”;
};

options {
default-key “rndc-key”;
default-server 127.0.0.1;
default-port 953;
};

А в /etc/namedb/named.conf добавляем оставшееся, и получаем полный конфиг вашего сервера:

/etc/namedb/>vi /etc/namedb/named.conf
key “rndc-key” {
algorithm hmac-md5;
secret “PSgoANtaZ9nhGiiJMdHkNw==”;
};

options {
default-key “rndc-key”;
default-server 127.0.0.1;
default-port 953;
};

options {
listen-on {
127.0.0.1;
213.125.15.4;
};
allow-query { any; };
recursion no;
version “8.2.4″;
directory “/etc/namedb”;
pid-file “/var/run/named/pid”;
notify yes;
};

zone “.” {
type hint;
file “named.root”;
};

zone “0.0.127.in-addr.arpa” {
type master;
file “master/localhost.rev”;
notify no;
};

zone “test.org.ua” {
type master;
file “master/test.org.ua”;
allow-transfer {
215.57.121.1;
};
};

Проверяем:

/etc/namedb/>rndc reload
server reload successful
/etc/namedb/>rndc status
number of zones: 2
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/1000
tcp clients: 0/100
server is up and running
/etc/namedb/>sockstat | grep named
bind     named      14438 3  dgram  -> /var/run/logpriv
bind     named      14438 20 udp4   213.125.15.4:53     *:*
bind     named      14438 21 tcp4   213.125.15.4:53     *:*
bind     named      14438 22 udp4   127.0.0.1:53          *:*
bind     named      14438 23 tcp4   127.0.0.1:53          *:*
bind     named      14438 24 udp4   *:63739               *:*
bind     named      14438 25 udp6   *:63740               *:*
bind     named      14438 26 tcp4   127.0.0.1:953         *:*

Утилита rnc нам необходима для работы в сервером ДНС: перезагрузка, статус, ошибки и т.д. Вот собственно и все.

З.Ы. Если нужны логи:

logging {
channel “log_default” {
file “/var/log/named.log” versions 10 size 10m;
severity info;
print-time yes;
print-severity yes;
print-category yes;
};
channel “log_security” {
file “/var/log/named-security.log” versions 5 size 10m;
severity info;
print-time yes;
print-severity yes;
print-category yes;
};
channel “null” {
null;
};
category “default” { “log_default”; };
category “security” { “log_security”; };
category “unmatched” { “null”; };
};

В последний версия сервера произошли небольшие изменения касательно make-localhost. Сейчас файлы уже готовы, и находятся в директории 

18:02 user@ns [/etc/namedb]#ll master/
total 14
-rw-r--r--  1 root  wheel  231 Feb 24  2008 empty.db
-rw-r--r--  1 root  wheel  253 Feb 24  2008 localhost-forward.db
-rw-r--r--  1 root  wheel  321 Feb 24  2008 localhost-reverse.db