Product SiteDocumentation Site

10.6. Система Доменных Имен Серверов (DNS)

10.6.1. Принципы и механизм

Система Доменных Имен Серверов или Domain Name Service (DNS) является одним из фундаментальных понятий сети Internet: она представляет из себя таблицу преобразования узлов сети в IP адреса (и наоборот), что позволяет использовать строку вида www.debian.org взамен цифровых 5.153.231.4 или 2001:41c8:1000:21::21:4.
Записи DNS организованы по зонам; каждая зона соответствует какому-нибудь домену (или субдомену) или указанному диапазону IP адресов (в котором IP адреса, включённые в диапазон, расположены обычно последовательно). Главный сервер является авторитетным и содержит таблицу по зоне; вторичные серверы, обычно располагаемые на отдельных машинах, содержат регулярно обновляемые копии файла таблицы главной зоны.
Каждая зона может содержать записи различных видов (Resource Records):
  • A: адрес IPv4.
  • CNAME: псевдоним или alias (canonical name).
  • MX: mail exchange, почтовый сервер. Эту информацию используют другие почтовые серверы для определения способа отправки письма по указанному адресу. Каждой записи MX присвоен свой приоритет. Сервер с наивысшим приоритетом (с наименьшим номером) используется в первую очередь (смотри вкладку НАЗАД К ОСНОВАМ SMTP); с другими серверами связываются в порядке уменьшения их приоритетов в случае, если первый сервер не отвечает.
  • PTR: преобразование IP адресов в текстовое имя. Такая запись хранится в зоне, названной “reverse DNS” (“обратная DNS”) после диапазона IP адресов. Для примера, 1.168.192.in-addr.arpa является зоной, содержащей обратное отображение всех адресов в диапазоне 192.168.1.0/24.
  • AAAA: адреса IPv6.
  • NS: отображает имя сервера имён (name server или NS). Каждый домен должен иметь по крайней мере хотя бы одну запись NS. Эти записи указывают на DNS сервер, который может ответить на запросы касательно данного домена; они обычно указывают на главный или вторичный серверы для данного домена. Кроме этого записи могут также позволить делегировать часть полномочий DNS кому-то; например, зона falcot.com может быть включена как NS запись для internal.falcot.com, а это означает, что внутренняя зона internal.falcot.com будет обрабатываться другим (не первым) сервером. Конечно в этом случае данный сервер должен быть предварительно объявлен в зоне internal.falcot.com.
Справочный сервер имён, Bind, был создан и в настоящее время поддерживается организацией ISC (Internet Software Consortium). В Debian он включён в пакет bind9. По сравнения с предыдущей версией, в версию 9 включили два важных изменения. Первое: DNS сервер может теперь запускаться от лица непривилегированного пользователя. Это в свою очередь не позволит атакующему (систему), при возможно имеющихся секретных уязвимостях на сервере, воспользоваться правами суперпользователя (как можно было ранее неоднократно видеть, начиная с версий 8.x).
Второе: Bind поддерживает стандарт DNSSEC для подписывания (и поэтому для выполнения идентификации) записей DNS. А это, в свою очередь, позволит блокировать любые изменённые данные (в записях DNS) в момент осуществления атаки "man-in-the-middle attacks".

10.6.2. Настройка

Файлы настройки программы bind, независимо от версии, имеют одинаковую структуру.
Администраторы компании Falcot создали первичную зону falcot.com, в которой располагается информация, касающаяся данного домена, и зону 168.192.in-addr.arpa для обратного преобразования IP адресов в адреса локальной сети (то есть сопоставления их).
Следующие выдержки взяты из файлов настройки, использующихся в компании Falcot, и могут послужить отправной точкой для настраивания сервера DNS:

Пример 10.12. Выдержка из /etc/bind/named.conf.local

zone "falcot.com" {
        type master;
        file "/etc/bind/db.falcot.com";
        allow-query { any; };
        allow-transfer {
                195.20.105.149/32 ; // ns0.xname.org
                193.23.158.13/32 ; // ns1.xname.org
        };
};

zone "internal.falcot.com" {
        type master;
        file "/etc/bind/db.internal.falcot.com";
        allow-query { 192.168.0.0/16; };
};

zone "168.192.in-addr.arpa" {
        type master;
        file "/etc/bind/db.192.168";
        allow-query { 192.168.0.0/16; };
};

Пример 10.13. Выдержка из /etc/bind/db.falcot.com

; falcot.com Zone 
; admin.falcot.com. => zone contact: admin@falcot.com
$TTL    604800
@       IN      SOA     falcot.com. admin.falcot.com. (
                        20040121        ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
; The @ refers to the zone name ("falcot.com" here)
; or to $ORIGIN if that directive has been used
;
@       IN      NS      ns
@       IN      NS      ns0.xname.org.

internal IN      NS      192.168.0.2

@       IN      A       212.94.201.10
@       IN      MX      5 mail
@       IN      MX      10 mail2

ns      IN      A       212.94.201.10
mail    IN      A       212.94.201.10
mail2   IN      A       212.94.201.11
www     IN      A       212.94.201.11

dns     IN      CNAME   ns

Пример 10.14. Выдержка из /etc/bind/db.192.168

; Reverse zone for 192.168.0.0/16
; admin.falcot.com. => zone contact: admin@falcot.com
$TTL    604800
@       IN      SOA     ns.internal.falcot.com. admin.falcot.com. (
                        20040121        ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL

        IN      NS      ns.internal.falcot.com.

; 192.168.0.1 -> arrakis
1.0     IN      PTR     arrakis.internal.falcot.com.
; 192.168.0.2 -> neptune
2.0     IN      PTR     neptune.internal.falcot.com.

; 192.168.3.1 -> pau
1.3     IN      PTR     pau.internal.falcot.com.