Библиотека сайта 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.
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