Настройка собственного DNS

28.09.2010 - 08:36

Раньше этот сайт находился на бесплатном домене site_name.no-ip.org (dyndns), который привязывался к моему динамическому ip. Если org.ua бесплатный, почему же не перейти на него? Но для регистрации необходимо было два DNS-сервера которые могли бы поддерживать мою зону unigx.org.ua. На бесплатных серверах регистрация не прошла, видимо регистратор ввел некоторые ограничения, хотя раньше все работало, решил поднимать у себя на сервере, который смотрит в интернет.

Для начала немного терминологии:
DNS (Система доменных имен) - с помощью которой можно преобразовать IP-адреса в имена, и на оборот.
Forward DNS (Прямой запрос к DNS) - преобразование имени хоста в адрес IP.
Reverse DNS (Обратный DNS) - преобразование адреса IP в имя хоста (операция обратная форварду).
Origin (Ориджин) - домен, покрываемый конкретным файлом зоны.
Корневая зона(.) - Начало иерархии зон в Internet.
Резолвер - процесс, отвечающий за преобразование доменных имен в IP-адреса. Резолвер, в свою очередь, обращается за просьбой к серверу DNS, который указан в файле /etc/resolv.conf.
Master - ведущий DNS сервер.
Slave - ведомый DNS сервер.

После установке FreeBSD, DNS-сервер уже присутствует в системе он называется BIND (Berkeley Internet Name Domain).
Конфигурационные файлы находятся в /var/named/etc/namedb или алиас /etc/namedb.
Конфиг. файл named - /etc/namedb/named.conf
Логи тут: /var/named/var/log.

Идем в /etc/namedb/named.conf и добавляем поддержку зоны unigx.org.ua:

# описываем зону unigx.org.ua
zone "unigx.org.ua" {
# тип
        type master;
# файл форвард зоны
        file "master/unigx.org.ua.forw";
# сервера на которые разрешено передавать зону
        allow-transfer { 193.108.251.254; };
# при изменении зоны все вторичные DNS сервера получают уведомление
        notify yes;
};

Далее создаём файл форвард зоны нашего домена:

[root@router /]#cd /etc/namedb/master/
[root@router /etc/namedb/master/]#cat > unigx.org.ua.forw
;время жизни до обновления кеша по умолчанию 1 час.
$TTL    3600

;запись SOA - начальная запись зоны
@               IN      SOA     ns.unigx.org.ua. admin.unigx.org.ua.  (
                                2010092801      ; Серийный номер формат YYYYMMDDNN
                                3600            ; Обновление
                                900             ; Повтор
                                3600000         ; Истечение срока
                                3600 )          ; Минимальное TTL
;серверы DNS
@               IN      NS      ns.unigx.org.ua.
@               IN      NS      ns.yuren.com.ua.

;записи MX
@               MX      10      mail.unigx.org.ua.

;сопоставление имя - ip
@               IN      A       82.207.87.36
@               IN      AAAA    2001:470:27:9ab::2
www             IN      A       82.207.87.36
www             IN      AAAA    2001:470:27:9ab::2
mx              IN      A       82.207.87.36
ftp             IN      A       82.207.87.36
ns              IN      A       82.207.87.36

Сам файл имеет четкую структуру, немного опишу его:
1. Директива $TTL (время жизни по умолчанию)
2. Запись SOA (Start of Authority - начальная запись зоны)
3. Записи DNS (список ответственных NS серверов за данную зону)
4. Записи A (соответствие Адрес - IP)
4a. Записи AAAA (соответствие Адрес - IPv6)
5. Записи CNAME (Canonical Name - псевдонимы)
6. Записи MX (сервера которые ответственные за роботу с почтой с этой зоне)
Хотел бы немного остановится на записи SOA, что она собой представляет:
Она имеет свой формат:
Имя TTL класс тип значение

Вместо "Имя" я использую $ORIGING - это имя домена, которое описывается в директиве zone "unigx.org.ua" в named.conf.
@ - это и есть ссылка на текущее значение $ORIGING.
"TTL" я уже казал уже в глобально директиве в $TTL.
"IN" - это и есть клас.
"SOA" - тип
"значение" - имя первичного DNS сервера зоны, далее указываем адрес электронной почты админа домена у меня это admin.unigx.org.ua, но вместо @, ставим точку.
далее..
"Серийный номер" - с помощью него BIND проверяет актуальность файла зоны. Обычно он имеет формат YYYYMMDDNN (год_месяц_день_номер последнего редактирования за день). После модификации файла зоны, не забываем его увеличивать.

Далее добавляем в автозапуск /etc/rc.conf:

[root@router /]# echo 'named_enable="YES"' >> /etc/rc.conf
[root@router /]# echo 'named_flags="-u bind -g bind"' >> /etc/rc.conf

И пробуем запускать:

[root@router /etc/rc.d]# ./named start
[root@router /etc/rc.d]# ps -A | grep named
879  ??  Ss     0:13,40 /usr/sbin/syslogd -l /var/run/log -l /var/named/var/run/log -s
37336  ??  Ss     0:41,71 /usr/sbin/named -t /var/named -u bind

Проверяем работоспособность:

[root@router ~]# dig @ns.unigx.org.ua unigx.org.ua
; <<>> DiG 9.4.2 <<>> @ns.unigx.org.ua unigx.org.ua
; (1 server found)
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62662
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;unigx.org.ua.                  IN      A

;; ANSWER SECTION:
unigx.org.ua.           3600    IN      A       82.207.87.36

;; AUTHORITY SECTION:
unigx.org.ua.           3600    IN      NS      ns.yuren.com.ua.
unigx.org.ua.           3600    IN      NS      ns.unigx.org.ua.

;; ADDITIONAL SECTION:
ns.unigx.org.ua.        3600    IN      A       82.207.87.36

;; Query time: 32 msec
;; SERVER: 193.108.251.254#53(193.108.251.254)
;; WHEN: Wed Sep 29 14:48:14 2010
;; MSG SIZE  rcvd: 106

Не забываем открыть 53 порт наружу, выдержка с servises:

domain           53/tcp    #Domain Name Server
domain           53/udp    #Domain Name Server

Для pf это:

pass in on $ext_if inet proto { tcp,udp } from any to $ext_if port 53 flags S/SA keep state

По желанию можно обновлять named.root, заходим в /etc/namedb, но это уже в другой статье:
[root@router /etc/namedb]# fetch ftp://ftp.internic.net/domain/named.root

Ваша оценка: Нет Средняя: 4 (5 votes)

Комментарии:


Здравствуйте, заранее извиняюсь за ламерский вопрос, но я действительно новичок: В локальной сети есть веб сервер по IP из локальной сети к нему обратиться удается, а вот по доменному имени нет. Как настроить DNS локальной сети как чтобы обращение к нему по доменному имени стало возможным. Сервер настроен на FreeBSD 8.2.



Добрый, с вопросами не по статье пишите на форум, там все обсудим.