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

UnixForum





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

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

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

Глава 4. Вводная информация о серверах DNS

4.14. Пример: настройка первичного авторитативного сервера DNS

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

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

root@debian7:~# 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 "paul.local" IN {
        type master;
        file "/etc/bind/db.paul.local";
        allow-update { none; };
};

3. Также следует добавить файл базы данных зоны DNS с содержанием, аналогичным приведенному ниже (необходимо добавить в данный файл несколько ресурсных записей A для тестирования). При настройке не следует завышать значения параметров Refresh и Retry, соответствующих длительностям интервалов между обновлением данных зон DNS и попытками повторного обновления этих данных при возникновении ошибок, для того, чтобы не возникало сложностей при работе со сниффером (в данном примере ведомый сервер взаимодействует с ведущим сервером с интервалом в час).

root@debian7:~# cat /etc/bind/db.paul.local
; zone for classroom teaching
$TTL    86400
@       IN      SOA     debianpaul.paul.local. root.paul.local (
                        2014100101      ; Serial
                        1h              ; Refresh
                        1h              ; Retry
                        2h              ; Expire
                        900 )           ; Negative Cache TTL
;
; name servers
;
        IN      NS      ns1
        IN      NS      debianpaul
        IN      NS      debian7
;
; servers
;
debianpaul      IN      A       10.104.33.30
debian7         IN      A       10.104.33.30
ns1             IN      A       10.104.33.30
;www            IN      A       10.104.33.30
root@debian7:~#

Обратите внимание на то, что запись www отмечена как комментарий, поэтому соответствующее доменное имя не будет работоспособным.

4.14.1. Использование собственного сервера DNS

Если вы убеждены в работоспособности вашего сервера DNS, вы можете использовать его в качестве единственного стандартного сервера DNS вашей системы, модифицировав соответствующим образом файл конфигурации /etc/resolv.conf.

root@debian7:~# cat /etc/resolv.conf
nameserver 10.104.33.30
root@debian7:~#

В том случае, если вы также используете клиент DHCP с именем dhclient, вам придется добавить информацию о вашем сервере DNS в файл конфигурации клиента DHCP, расположенный по пути /etc/dhcp/dhclient.conf.

root@debian7:~# diff /etc/dhcp/dhclient.conf /etc/dhcp/dhclient.conf.original
21c21
< prepend domain-name-servers 10.104.33.30;
---
> #prepend domain-name-servers 127.0.0.1;
23,24c23
< #     domain-name, domain-name-servers, domain-search, host-name,
<       domain-name, domain-search, host-name,
---
>       domain-name, domain-name-servers, domain-search, host-name,
root@debian7:~#

В примере выше показано, что IP-адрес 10.104.33.30 становится стандартным адресом, который клиент DHCP более не должен запрашивать у сервера DHCP.

Отредактируйте файл конфигурации /etc/hosts таким образом, чтобы в нем было отражено ваше доменное имя и проверьте корректность редактирования с помощью утилит hostname и dnsdomainname.

root@debian7:~# grep debian7 /etc/hosts
127.0.1.1 debian7.paul.local debian7
root@debian7:~# hostname
debian7
root@debian7:~# hostname --fqdn
debian7.paul.local
root@debian7:~# dnsdomainname
paul.local

4.14.2. Использование собственного домена

Рассмотрите следующий пример:

root@debian7b:~# cat /etc/resolv.conf
nameserver 10.104.33.30
root@debian7b:~# ping -c1 www
ping: unknown host www
root@debian7b:~# vi /etc/resolv.conf
root@debian7b:~# cat /etc/resolv.conf
nameserver 10.104.33.30
domain paul.local
root@debian7b:~# ping -c1 www
PING www.paul.local (10.104.33.31) 56(84) bytes of data.
64 bytes from 10.104.33.31: icmp_req=1 ttl=64 time=0.021 ms

--- www.paul.local ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.021/0.021/0.021/0.000 ms
root@debian7b:~#

Добавление директивы domain paul.local в файл конфигурации /etc/resolv.conf позволяет избежать необходимости указания имени домена при использовании имен узлов.

Вы можете использовать данную возможность автоматически, просто отредактировав файл конфигурации клиента DHCP с именем dhclient.conf.

root@debian7:~# grep paul.local /etc/dhcp/dhclient.conf
prepend domain-name "paul.local";
prepend domain-search "paul.local";
root@debian7:~#

4. Перезапустите службу вашего сервера DNS и проверьте наличие сообщений о вашей зоне DNS в системном журнале.

root@debian7:~# service bind9 restart
Stopping domain name service...: bind9.
Starting domain name service...: bind9.
root@debian7:~# grep paul.local /var/log/syslog
Oct  6 09:22:18 debian7 named[2707]: zone paul.local/IN: loaded seria\
l 2014100101
Oct  6 09:22:18 debian7 named[2707]: zone paul.local/IN: sending noti\
fies (serial 2014100101)

5. Используйте утилиту dig или nslookup (или даже утилиту ping) для проверки корректности ресурсных записей A вашей зоны DNS.

root@debian7:~# ping -c1 ns1.paul.local
PING ns1.paul.local (10.104.33.30) 56(84) bytes of data.
64 bytes from 10.104.33.30: icmp_req=1 ttl=64 time=0.006 ms

--- ns1.paul.local ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.006/0.006/0.006/0.000 ms
root@debian7:~# ping -c1 www.paul.local
ping: unknown host www.paul.local

Обратите внимание на то, что запись www была отмечена как комментарий, поэтому при обращении к ней возникает ошибка.

root@debian7:~# dig debian7.paul.local

; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> debian7.paul.local
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50491
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 2

;; QUESTION SECTION:
;debian7.paul.local.            IN      A

;; ANSWER SECTION:
debian7.paul.local.     86400   IN      A       10.104.33.30

;; AUTHORITY SECTION:
paul.local.             86400   IN      NS      ns1.paul.local.
paul.local.             86400   IN      NS      debian7.paul.local.
paul.local.             86400   IN      NS      debianpaul.paul.local.

;; ADDITIONAL SECTION:
ns1.paul.local.         86400   IN      A       10.104.33.30
debianpaul.paul.local.  86400   IN      A       10.104.33.30

;; Query time: 4 msec
;; SERVER: 10.104.33.30#53(10.104.33.30)
;; WHEN: Mon Oct  6 09:35:25 2014
;; MSG SIZE  rcvd: 141

root@debian7:~#

6. На данный момент наш первичный сервер DNS должен быть корректно настроен и должен функционировать. Следует обратить внимание на следующую информацию о сервере:

ОС сервера   : Debian 7
IP-адрес     : 10.104.33.30
Доменное имя : paul.local
Имя сервера  : ns1.paul.local

4.15. Пример: настройка ведомого сервера DNS

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

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

Представьте, что студентка с именем Джесс закончила выполнение описанной выше последовательности действий и создала зону DNS jesse.local с IP-адресом 10.104.15.20. После этого ее задача будет заключаться в создании ведомого сервера DNS для обслуживания зоны DNS paul.local на ее компьютере, а ваша - в создании ведомого сервера DNS для обслуживания зоны DNS jesse.local на вашем компьютере.

Ниже приведен пример использования директивы allow-transfer. Будьте осторожны, ведь по умолчанию разрешена передача данных зоны DNS на любой сервер DNS.

root@debian7:/etc/bind# cat 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 "paul.local" IN {
        type master;
        file "/etc/bind/db.paul.local";
        allow-update { none; };
        allow-transfer { 10.104.15.20; };
};

3. Благодаря следующим параметрам конфигурации вы можете сделать свой сервер DNS ведомым сервером для зоны DNS jesse.local.

root@debian7:/etc/bind# tail -6 named.conf.local
zone "jesse.local" IN {
        type slave;
        file "/var/cache/named/db.jesse.local";
        masters { 10.104.15.20; };
};

root@debian7:/etc/bind# mkdir /var/cache/named/
root@debian7:/etc/bind# chown bind:bind /var/cache/named/
root@debian7:/etc/bind# ls -ld /var/cache/named/
drwxr-xr-x 2 bind bind 4096 окт  1 20:01 /var/cache/named/

Обратите внимание на то, что мы размещаем описания зон DNS, при обслуживании которых сервер является ведомым, в конфигурационном файле из директории /var/cache/named, а не /etc/bind.

4. После перезапуска службы сервера DNS bind ведомый сервер должен инициировать передачу файла данных зоны DNS. Проверьте наличие соответствующих записей в файле системного журнала /avr/log/syslog (в выводе из примера ниже убраны метки даты и времени, причем сервер DNS на компьютере Джесс не использовал текущую дату при формировании порядкового номера записей зоны DNS...)

root@debian7:/etc/bind# grep jesse /var/log/syslog
named[2731]: zone jesse.local/IN: Transfer started.
named[2731]: transfer of 'jesse.local/IN' from 10.104.15.20#53: connected u\
sing 10.104.33.30#44719
named[2731]: zone jesse.local/IN: transferred serial 20110516
named[2731]: transfer of 'jesse.local/IN' from 10.104.15.20#53: Transfer co\
mpleted: 1 messages, 8 records, 239 bytes, 0.001 secs (239000 bytes/sec)

А это записи зоны DNS на ведомом сервере DNS:

root@debian7:/etc/bind# cat /var/cache/named/db.jesse.local
$ORIGIN .
$TTL 604800     ; 1 week
jesse.local             IN SOA  ns.jesse.local. root.jesse.local.jesse.local. (
                                20110516   ; serial
                                300        ; refresh (5 minutes)
                                200        ; retry (3 minutes 20 seconds)
                                2419200    ; expire (4 weeks)
                                604800     ; minimum (1 week)
                                )
                        NS      ns.jesse.local.
$ORIGIN jesse.local.
anya                    A       10.104.15.1
mac                     A       10.104.15.30
ns                      A       10.104.15.20
ubu1010srv              A       10.104.15.20
www                     A       10.104.15.25
root@debian7:/etc/bind

4.16. Практическое задание: DNS

1. Установите сервер DNS bind9 в систему и проверьте с помощью сниффера его работоспособность.

2. Добавьте в конфигурационный файл вашего сервера DNS параметры доступа к перенаправляющему серверу DNS и проверьте их работоспособность.

3. Создайте первичный сервер DNS для обслуживания зоны DNS с именем <ваше_имя>.local, которая должна содержать как минимум две ресурсных записи NS и четыре ресурсных записи A.

4. Используйте утилиту dig или nslookup для проверки корректности добавления ресурсных записей NS и A.

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

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

4.17. Корректная процедура выполнения практического задания: DNS

1. Установите сервер DNS bind9 в систему и проверьте с помощью сниффера его работоспособность.

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

2. Добавьте в конфигурационный файл вашего сервера DNS параметры доступа к перенаправляющему серверу DNS и проверьте их работоспособность.

Параметры для доступа к перенаправляющему серверу DNS могут быть добавлены в файл конфигурации с именем named.conf.options таким же образом, как показано в разделе с теоретической информацией.

3. Создайте первичный сервер DNS для обслуживания зоны DNS с именем <ваше_имя>.local, которая должна содержать как минимум две ресурсных записи NS и четыре ресурсных записи A.

Решение подробно описано в разделе с теоретической информацией.

4. Используйте утилиту dig или nslookup для проверки корректности добавления ресурсных записей NS и A.

Решение подробно описано в разделе с теоретической информацией.

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

Решение подробно описано в разделе с теоретической информацией.

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

Условно-перенаправляющий сервер DNS описывается как зона DNS в конфигурационном файле с именем named.conf.local (обратитесь к информации о перенаправляющих серверах DNS из раздела с теоретической информацией).


Предыдущий раздел: Оглавление Следующий раздел:
4.10. Кэш DNS   Глава 5. Дополнительная информация о серверах DNS