Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Серверы Linux. Часть III. Сервер DNS

Оригинал: Advanced DNS
Автор: Paul Cobbaut
Дата публикации: 24 мая 2015 г.
Перевод: A.Панин
Дата перевода: 12 июля 2015 г.

Глава 5. Дополнительная информация о серверах DNS

В данной главе описываются такие механизмы, связанные с функционированием серверов DNS, как механизм изменения порядка передачи адресов серверов сервером DNS (round robin DNS), предназначенный для балансировки нагрузки на серверы, механизм делегирования зон DNS (DNS delegation), предназначенный для делегирования полномочий управления дочерними доменами другой команде администраторов, а также механизм изменения ответов серверов DNS в зависимости от источников запросов (split horizon DNS), предназначенный для предоставления клиентам возможности работы с локальными сервисами.

Ввиду того, что номенклатура механизмов, связанных с функционированием серверов DNS, не ограничивается упомянутыми выше механизмами, данная глава будет дополняться.

5.1. Пример: использование механизма изменения порядка передачи адресов серверов сервером DNS

В том случае, если вы создадите множество ресурсных записей A для одного и того же доменного имени, сервер DNS bind будет изменять порядок передачи данных этих ресурсных записей клиенту. Данная возможность позволяет использовать сервер DNS в качестве системы балансировки нагрузки на серверы, так как клиенты сервера DNS обычно соединяется с сервером, IP-адрес которого был предоставлен первым.

Рассмотрите следующий пример файла конфигурации зоны DNS, расположенного по пути /etc/bind/db.paul.local. В нем приведены описания двух ресурсных записей A для поддомена www, указывающих на два отдельных IP-адреса.

root@debian7:~# grep www /etc/bind/db.paul.local
www             IN      A       10.104.33.30
www             IN      A       10.104.33.31

Ниже приведен пример использования утилиты nslookup для получения данных ресурсной записи A от сервера DNS с активированным механизмом балансировки нагрузки. Обратите внимание на порядок следования IP-адресов в ответе сервера DNS.

root@debian7:~# nslookup www.paul.local 10.104.33.30
Server:         10.104.33.30
Address:        10.104.33.30#53

Name:   www.paul.local
Address: 10.104.33.31
Name:   www.paul.local
Address: 10.104.33.30

root@debian7:~# nslookup www.paul.local 10.104.33.30
Server:         10.104.33.30
Address:        10.104.33.30#53

Name:   www.paul.local
Address: 10.104.33.30
Name:   www.paul.local
Address: 10.104.33.31

Попытайтесь самостоятельно разместить данные веб-сайта на двух веб-серверах (внеся небольшие изменения в данные веб-сайта на одном из веб-серверов для того, чтобы иметь возможность отличать веб-сайты на разных веб-серверах) и протестируйте механизм изменения порядка передачи адресов сервером DNS.

5.2. Механизм делегирования зон DNS

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

Механизм делегирования зон DNS

В случае осуществления корректного делегирования зоны DNS, клиенты, запрашивающие информацию о родительской зоне DNS, получат возможность осуществления запроса информации и о дочерних делегированных зонах DNS.

5.3. Пример: использование механизма делегирования зоны DNS

Рассмотрим ситуацию, когда у нас в распоряжении имеется дополнительный сервер на основе Linux с именем debian7b и мы хотим сделать его ответственным за обслуживание дочернего домена test42.paul.local.

Обратите внимание на то, что именами серверов из примеров являются debian7 (данный сервер обслуживает родительский домен) и debian7b (данный сервер обслуживает дочерний домен).

Начнем работу с модификации файла конфигурации /etc/bind/named.conf.local (на сервере, обслуживающем родительский домен) для того, чтобы быть уверенными в том, что перенаправляющий сервер не будет использован процессе разрешения авторитативных имен.

root@debian7:~# grep -A4 paul.local /etc/bind/named.conf.local
zone "paul.local" IN {
        type master;
        file "/etc/bind/db.paul.local";
        allow-update { none; };
        allow-transfer { 10.104.15.20; };
        forwarders { };
};
root@debian7:~#

В техническом плане, вы могли бы также установить значение {any; }; директивы allow-transfer для диагностики сервера DNS и заменить его на приведенное выше позднее, но это действие не является необходимым для делегирования зоны DNS.

После этого мы можем добавить директиву для делегирования зоны DNS в файл базы данных нашей зоны DNS:

root@debian7:~# tail -3 /etc/bind/db.paul.local
$ORIGIN test42.paul.local.
@       IN      NS      ns2.test42.paul.local.
ns2     IN      A       10.104.33.31    ; связующая запись
root@debian7:~#

Не забудьте перезапустить службу сервера DNS bind и проверить наличие сообщений об ошибках в файле системного журнала /var/log/syslog.

root@debian7:~# service bind9 restart
Stopping domain name service...: bind9.
Starting domain name service...: bind9.
root@debian7:~# grep paul.local /var/log/syslog | cut -c28- | tail -2
named[3202]: zone paul.local/IN: loaded serial 2014100801
named[3202]: zone paul.local/IN: sending notifies (serial 2014100801)
root@debian7:~#

Учтите, что в терминале своей системы вы можете использовать команду tail -40 /var/log/sysog для чтения большего количества записей системного журнала, ведь единственная причина, по которой я использую команды grep, cut и tail -2, заключается в стремлении к сокращению объема примеров в данной книге.

Далее мы должны создать файл базы данных зоны DNS на втором сервере, аналогичный показанному в следующем примере:

root@debian7b:~# cat /etc/bind/db.test42.paul.local
; дочерняя зона DNS, используемая в учебных целях
$TTL    86400
$ORIGIN test42.paul.local.
@       IN      SOA     ns2.test42.paul.local. root.test42.paul.local. (
                        2014100802      ; Serial
                        1h              ; Refresh
                        1h              ; Retry
                        2h              ; Expire
                        900 )           ; Negative Cache TTL
;
; серверы имен
;
        IN      NS      ns2.test42.paul.local.
        IN      NS      debian7b.test42.paul.local.
;
; серверы
;
ns2             IN      A       10.104.33.31
debian7b        IN      A       10.104.33.31
testsrv         IN      A       10.104.33.31
root@debian7b:~#

Для ввода в эксплуатацию второго сервера также необходимо создать описание зоны DNS в файле конфигурации named.conf.local и перезапустить службу сервера DNS bind.

root@debian7b:~# cat /etc/bind/named.conf.local
//
// Do any local configuration here
//

// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";

zone "test42.paul.local" IN {
        type master;
        file "/etc/bind/db.test42.paul.local";
        allow-update { none; };
        allow-transfer { any; };
};
root@debian7b:~#

Процесс тестирования родительского сервера:

root@debian7:~# dig ns1.paul.local +short
10.104.33.30
root@debian7:~# dig ns2.test42.paul.local +short
10.104.33.31
root@debian7:~# dig debian7b.test42.paul.local +short
10.104.33.31

Предыдущий раздел: Оглавление Следующий раздел:
4.14. Пример: настройка первичного авторитативного сервера DNS   5.4. Пример: использование механизма изменения ответов сервера DNS в зависимости от источников запросов