BIND9 (методическое пособие)

Материал из wiki
Версия от 07:14, 20 февраля 2014; Moiseevvi (обсуждение | вклад) (Управление)
Перейти к: навигация, поиск

Архитектура DNS

root(.)

gTLD

ccTLD

TSIG

DNSSEC

Домены, поддомены, псевдо-поддомены, зоны прямые и обратные

Делегирование зон

Трансфер зон

Рекурсивный и нерекурсивный запрос

Stub-resolver. Тупиковый резолвер с кэшем поддерживает только рекурсивный запрос. (win: DNS-client)

Сервер имен BIND9

Управление

Проверяет конфиг сервера имен

named-checkconf

Перезагружает сервер имен

rndc reload

Перезагружает только изменившиеся зоны

rndc reconfig

Запуск

service bind9 start

Опции

Списки доступа

acl network1 {
        1.2.3.0/24;
        192.168.0.0/20;
};
acl GoodDns {
       1.2.3.4;
};

Ограничение на трансфер зон и запросы

        allow-transfer {
                localhost;
               GoodDns;
        };
        allow-query {
               any;
        };

Настройка зоны и подключение файла зоны

zone "example.com" {
        type master;
        file "/etc/bind/db.example.com.";
        allow-query {
                any;
        };
};

Зона прямого просмотра

Зоны прямого просмотра делегируются нам владельцем родительского домена.

Пример файла зоны, для которой мы являемся мастером (SOA ns1.model.local.) Сервер ns.example.com. указан в качестве вторичного.

;
$ORIGIN model.local.
$TTL 1h
;
@       IN      SOA     ns1.model.local.        hostmaster.model.local. (
                                                2014023001      ; Serial Number
                                                10800           ; refresh
                                                3600            ; retry
                                                604800          ; expire
                                                86400   )       ; min TTL
;
                        IN      NS      ns1.model.local.
                        IN      NS      ns.example.com.
                        IN      MX      10      mail1
;
gw                      IN      A       10.13.0.1
; несколько имен на один адрес
ns1                     IN      A       10.13.0.2
net-ctrl-1              IN      A       10.13.0.2
mail1                  IN      A       10.13.0.10
front2                  IN      A       10.13.0.11
back1                   IN      A       10.13.0.20
back2                   IN      A       10.13.0.21
; несколько адресов на одно имя - балансировка
back                    IN      A       10.13.0.20
                        IN      A       10.13.0.21
stor1                   IN      A       10.13.0.30
stor2                   IN      A       10.13.0.31
stor-vip                IN      A       10.13.0.40
front-vrrp              IN      A       10.13.0.50
www                     IN      CNAME   model.local.
bc                      IN      A       10.13.0.255
;
; users
user1                  IN      CNAME   back.model.local.
www.user1              IN      CNAME   back.model.local.
user2                  IN      CNAME   back.model.local.
www.user2              IN      CNAME   back.model.local.
;

Зона обратного просмотра

Зона обратного просмотра управляется владельцем диапазона ip адресов.

Пример файла зоны обратного просмотра, для которой мы являемся мастером

;
$ORIGIN 0.13.10.IN-ADDR.ARPA.
$TTL 1h
;
@       IN      SOA     ns1.model.local.        hostmaster.model.local. (
                                                2014023001      ; Serial Number
                                                10800           ; refresh
                                                3600            ; retry
                                                604800          ; expire
                                                86400   )       ; min TTL
;
                        IN      NS      ns1.model.local.
;
2                       IN      PTR     ns1.model.local.
101                     IN      PTR     netctrl-01.model.local.
255                     IN      PTR     bc.model.local.
;

Зоны по-умолчанию

Зона типа hint для домена точки со списком корневых серверов. Файл зона необходимо периодически обновлять с сервера ftp://ftp.internic.net/domain/named.cache

zone "." {
        type hint;
        file "/etc/bind/db.root";
};

Зоны замыкания на себя прямые, обратные и броадкастов.

zone "localhost" {
        type master;
        file "/etc/bind/db.local";
};

zone "127.in-addr.arpa" {
        type master;
        file "/etc/bind/db.127";
};

zone "0.in-addr.arpa" {
        type master;
        file "/etc/bind/db.0";
};

zone "255.in-addr.arpa" {
        type master;
        file "/etc/bind/db.255";
};

Пример прямой и обратной зоны замыкания на себя, входящих в дистрибутив BIND9

; BIND data file for local loopback interface
;
$TTL    604800
@       IN      SOA     localhost. root.localhost. (
                              2         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      localhost.
@       IN      A       127.0.0.1
@       IN      AAAA    ::1
;
$TTL    604800
@       IN      SOA     localhost. root.localhost. (
                              1         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      localhost.
1.0.0   IN      PTR     localhost.

Типы ресурсных записей (RR)

SOA

SOA запись в файле зоны должна быть только одна. В файле она должна стоять первой. Запись SOA определяет какой сервер является владельцем зоны и какие на зону установлены параметры. После записи SOA надо обязательно указать IN NS запись с тем-же сервером, что и в заголовке.

Пример: домен example.com обслуживается серверами ns.example.com и ns.examle.net. После указания директивы $ORIGIN сервер автоматически допишет за нас все неполные dns имена (таким образом hostmaster читается как hostmaster.example.com). Имя сервера вне зоны пишется полностью.

$TTL 2d ; zone TTL default = 2 days or 172800 seconds
$ORIGIN example.com.
@      IN      SOA   ns hostmaster (
               2003080800 ; serial number
               1d12h      ; refresh =  1 day 12 hours
               15M        ; update retry = 15 minutes
               3W12h      ; expiry = 3 weeks + 12 hours
               2h20M      ; minimum = 2 hours + 20 minutes
               )
       IN      NS  ns
       IN      NS  ns.example.net.  ; out-of-zone 
...
; A record for the NS RR above
ns     IN      A   192.168.2.1
;

Пример 2: домен example.com обслуживается двумя серверами вне зоны. Для них указаны полные имена в записях IN NS. Т.к. домен обслуживается другими серверами никакие A записи не допускаются.

$TTL 2d ; zone TTL default = 2 days or 172800 seconds
$ORIGIN example.com.
@      IN      SOA   ns.example.net. hostmaster.example.com. (
               2003080800 ; serial number
               1d12h      ; refresh =  1 day 12 hours
               15M        ; update retry = 15 minutes
               3W12h      ; expiry = 3 weeks + 12 hours
               2h20M      ; minimum = 2 hours + 20 minutes
               )
        IN     NS    ns.example.net. ; out-of-zone name server
        IN     NS    ns.example.org. ; out-of-zone name server

NS

Инфраструктурная запись, указывающая имя сервера имен для данного домена. Формат

owner-name     ttl  class   rr     target-name
example.com.        IN      NS      ns1.example.com.

Согласно стандарту, каждый публичный домен должен иметь минимум 2 сервера имен. Частный домен может обслуживаться и одним сервером.

Если NS сервер для нашего домена находится в нашем домене, то мы обязаны указать A-запись для этого сервера (glue-record). Если NS сервер лежит вне домена - A-запись указывать не нужно.

Пример: NS записи для основного домена и для делегированного поддомена с указанием glue-records.

$TTL 2d ; default TTL is 2 days
$ORIGIN example.com.
@              IN      SOA   ns1.example.com. hostmaster.example.com. (
               2003080800 ; serial number
               2h         ; refresh =  2 hours 
               15M        ; update retry = 15 minutes
               3W12h      ; expiry = 3 weeks + 12 hours
               2h20M      ; minimum = 2 hours + 20 minutes
               )
              IN      NS     ns1.example.com.
              IN      NS     ns2.example.com.
; обязательно указываем адреса этих серверов
ns1           IN      A      192.168.0.3
ns2           IN      A      192.168.0.4
; переключение на поддомен
$ORIGIN us.example.com.
@             IN      NS     ns3.us.example.com.
              IN      NS     ns1.example.com.
; обязательно указываем на сервер поддомена
ns3.us.example.com. A 10.10.0.24

A, AAAA

A-запись указывает на ip адрес для данного имени хоста. Опционально указать особо ttl.

Пример: различные вариации записи

$TTL 2d ; zone default = 2 days or 172800 seconds
joe        IN      A      192.168.0.3  ; одинаковые ip
www        IN      A      192.168.0.3
; можно указать домен полностью
www.example.com.   A      192.168.0.3
fred  3600 IN      A      192.168.0.4  ; указан другой ttl
ftp        IN      A      192.168.0.24 ; разные ip для одного имени
           IN      A      192.168.0.7
mail       IN      A      192.168.0.15  ; разные ip для одного имени
mail       IN      A      192.168.0.32
mail       IN      A      192.168.0.3
squat      IN      A      10.0.14.13  ; другая подсеть

AAAA-запись используется для IPv6 адресов

ws1-29                  A       10.0.10.29                                                                                      
                        AAAA    2002:d4c0:4090::d110:1011 

Когда одному имени сопоставлено много адресов, в обратной записи для адреса нужно выдрать только одно имя.

MX

Инфраструктурная запись указывающая на имя почтового сервера для домена. Если имя сервера в этом-же домене - требуется еще А-запись с ip адресом почтового сервера.

Почтовых серверов для домена можно указать несколько с разными приоритетами.

Пример: почтовые сервера для домена и поддомена в одном файле

$TTL 2d ; zone default = 2 days or 172800 seconds
$ORIGIN example.com.
example.com. IN     SOA   ns1.example.com. root.example.com. (
               2003080800 ; serial number
               2h         ; refresh =  2 hours 
               15M        ; update retry = 15 minutes
               3W12h      ; expiry = 3 weeks + 12 hours
               2h20M      ; minimum = 2 hours + 20 minutes
               )
; почтовый сервер для адресов вида user@example.com
              IN      MX 10  mail.example.com.
; почтовые сервера для поддомена user@us.example.com
us            IN      MX 10  mail.us.example.com.
us            IN      MX 20  mail.example.com.
; A-запись для основного почтового сервера
mail          IN      A      192.168.0.5
; Переключение на поддомен
$ORIGIN us.example.com.
; A-запись для почтового сервера поддомена
mail          IN      A      10.10.0.29

CNAME

Запись CNAME используется для указания псевдонима или ссылки одного имени на другое. Если сервер вернул клиенту CNAME в ответ на запрос, то клиенту придется повторно делать запрос на разрешение CNAME. Используется для удобства администрирования при наличии многих имен у одного сервера.

Примеры различных псевдонимов в домене example.com.:

joe        IN      A      192.168.254.3   
www        IN      CNAME  joe 
www        IN      CNAME  joe.example.com. 
ftp        IN      CNAME  www.example.com. ; паровоз
bill       IN      CNAME  fred.another.com. ; перенаправление на имя в другом домене
;
           IN      A      192.168.254.8
www        IN      CNAME  example.com.

PTR

Обратная запись указывает на имя по ip адресу. Используется специальный домен .IN-ADDR.ARPA. Для IPv6 используется другой домен - IP6.ARPA. Поэтому обратные записи необходимо держать в разных файлах для ipv4 и ipv6.

Пример для IPv4:

$TTL 2d ; 172800 secs
$ORIGIN 23.168.192.IN-ADDR.ARPA.
@             IN      SOA   ns1.example.com. hostmaster.example.com. (
                              2003080800 ; serial number
                              12h         ; refresh
                              15m        ; update retry
                              3w         ; expiry
                              3h         ; minimum
                              )
              IN      NS      ns1.example.com.
              IN      NS      ns2.example.com.
2             IN      PTR     joe.example.com. ; FDQN
15            IN      PTR     www.example.com.
17            IN      PTR     bill.example.com.
74            IN      PTR     fred.example.com.

Пример для IPv6:

; reverse IPV6 zone file for example.com
$TTL 2d    ; default TTL for zone 172800 secs
$ORIGIN 0.0.0.0.8.b.d.0.1.0.0.2.IP6.ARPA.
@         IN      SOA   ns1.example.com. hostmaster.example.com. (
                        2003080800 ; sn = serial number
                        12h         ; refresh = refresh
                        15m        ; retry = update retry
                        3w         ; expiry = expiry
                        2h         ; min = minimum
                        )
          IN      NS      ns1.example.com.
          IN      NS      ns2.example.net.
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.0.0.0         IN      PTR     ns1.example.com.
2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.0.0.0         IN      PTR     mail.example.com.
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.0.0         IN      PTR     joe.example.com.
2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.0.0         IN      PTR     www.example.com.

SRV

Директивы сервера bind

$TTL $ORIGIN

View - ограничение видимости зон

Использование ограничения видимости позволяет применять различные опции по отношению к различным клиентам. Опция вступают в действие в зависимости от ip адреса клиента - источника запроса.

Это позволяет использовать разные данные по одной и той-же зоне для разных клиентов. Для внутренних клиентов мы должны разрешить рекурсивные запросы, для внешних - запретить.

Конфигурация зон /etc/bind/named.conf

; список доступа - наши внутренние клиенты
acl internal {
    10.13.0.0/24;
    localhost;
};

; область видимости для внутренних клиентов
view "internal-view" {
  ; клиент - соответствует списку доступа
  match-clients { internal; };
  ; разрешена рекурсия для внутренних клиентов
  recursion yes;

 ;  зона видима только для внутренних клиентов
  zone "model.local" in {
    type master;
    file "/etc/bind/db.model.local";
  };

; зона видима для внутренних клиентов иначе, чем для внешних
; файл зоны свой
  zone "model.example.net" in {
    type master;
    file "/etc/bind/db.model.example.net.internal";
  };

; обратная зона для внутренних клиентов тоже своя
  zone "0.13.10.in-addr.arpa" in {
    type master;
    file "/etc/bind/rev.10.13.0.internal";
  };

; дефолтные зоны сервера
  include "/etc/bind/named.conf.default-zones";
};

; область видимости, доступная всем прочим клиентам
view "external-view" {
  match-clients { any; };
; запрет рекурсии
  recursion no;

; зона видится внешними клиентами не так, как внутренними
; файл зоны свой
  zone "model.example.net" in {
    type master;
    file "/etc/bind/db.model.example.net";
  };

;  обратная зона видится внешними клиентами не так, как внутренними
; файл зоны свой
  zone "0.13.10.in-addr.arpa" in {
    type master;
    file "/etc/bind/rev.10.13.0";
  };

};