Руководство FreeBSD
Пред. | Глава 27. Сетевые серверы | След.

# 27.6. Domain Name System (DNS)

Текст предоставил Chern Lee, Tom Rhodes, Daniel Gerzo.

## 27.6.1. Обзор

По умолчанию во FreeBSD используется одна из версий программы BIND (Berkeley Internet Name Domain), являющейся самой распространенной реализацией протокола DNS. DNS - это протокол, при помощи которого имена преобразуются в IP-адреса и наоборот. Например, в ответ на запрос о `www.FreeBSD.org` будет получен IP-адрес веб-сервера Проекта FreeBSD, а запрос о `ftp.FreeBSD.org` возвратит IP-адрес соответствующей машины с FTP-сервером. Точно также происходит и обратный процесс. Запрос, содержащий IP-адрес машины, возвратит имя хоста. Для выполнения запросов к DNS вовсе не обязательно иметь в системе работающий сервер имён.

FreeBSD в настоящее время поставляется с сервером DNS BIND9, предоставляющим расширенные настройки безопасности, новую схему расположения файлов конфигурации и автоматические настройки для chroot(8).

В сети Интернет DNS управляется через достаточно сложную систему авторизированных корневых серверов имён, серверов доменов первого уровня (Top Level Domain, TLD) и других менее крупных серверов имён, которые содержат и кэшируют информацию о конкретных доменах.

На данный момент пакет BIND поддерживается Internet Systems Consortium https://www.isc.org/.

## 27.6.2. Используемая терминология

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

Термин | Определение
--- | ---
Прямой запрос к DNS (forward DNS) | Преобразование имён хостов в адреса IP
Ориджин (origin) | Обозначает домен, покрываемый конкретным файлом зоны
named, bind | Общеупотребительные названия для обозначения пакета BIND, обеспечивающего работу сервера имён во FreeBSD.
Резолвер | Системный процесс, посредством которого машина обращается к серверу имён для получения информации о зоне
Обратный DNS (reverse DNS) | Преобразование адресов IP в имена хостов
Корневая зона | Начало иерархии зон Интернет. Все зоны находятся под корневой зоной, подобно тому, как все файлы располагаются ниже корневого каталога.
Зона | Отдельный домен, поддомен или часть DNS, управляемая одним сервером.

Примеры зон:

- `.` — так обычно обозначается в документации корневая зона.

- `org.` — домен верхнего уровня (TLD) в корневой зоне.

- `example.org.` является зоной в домене верхнего уровня (TLD) `org.`.

- `1.168.192.in-addr.arpa` является зоной, в которую включены все IP-адреса, формирующие пространство адресов `192.168.1.*`.

Как можно видеть, уточняющая часть имени хоста появляется слева. Например, `example.org.` более точен, чем `org.`, также, как `org.` более точен, чем корневая зона. Расположение каждой части имени хоста сильно похоже на файловую систему: каталог `/dev` расположен в корневой файловой системе, и так далее.

## 27.6.3. Причины, по которым вам может понадобиться сервер имён

Сервера имён обычно используются в двух видах: авторитетный сервер имён и кэширующий сервер имён, также называемый распознавателем (resolver).

Авторитетный сервер имён нужен, когда:

- нужно предоставлять информацию о DNS остальному миру, отвечая на запросы авторизированно.

- зарегистрирован домен, такой, как `example.org` и в этом домене требуется поставить имена машин в соответствие с их адресами IP.

- блоку адресов IP требуется обратные записи DNS (IP в имена хостов).

- резервный (slave) сервер имён должен отвечать на запросы.

Кэширующий сервер имён нужен, когда:

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

Например, когда кто-нибудь запрашивает информацию о `www.FreeBSD.org`, то обычно резолвер обращается к серверу имён вашего провайдера, посылает запрос и ожидает ответа. С локальным кэширующим сервером DNS запрос во внешний мир будет делаться всего один раз. Последующие запросы не будут посылаться за пределы локальной сети, потому что информация уже имеется в кэше.

## 27.6.4. Как это работает

Во FreeBSD даемон BIND называется named.

Файл | Описание
--- | ---
named(8) | Даемон BIND
rndc(8) | Программа управления даемоном сервера имён
`/etc/namedb` | Каталог, в котором располагается вся информация о зонах BIND
`/etc/namedb/named.conf` | Конфигурационный файл для даемона

Файлы зон обычно располагаются в каталоге `/etc/namedb` и содержат информацию о зоне DNS, за которую отвечает сервер имён.

В зависимости от способа конфигурации зоны на сервере файлы зон могут располагаться в подкаталогах `master`, `slave` или `dynamic` иерархии `/etc/namedb`. Эти файлы содержат DNS информацию, которую и будет сообщать в ответ на запросы сервер имен.

## 27.6.5. Запуск BIND

Так как сервер имён BIND устанавливается по умолчанию, его настройка сравнительно проста.

Стандартная конфигурация named запускает простой кэширующий сервер в ограниченной среде chroot(8), который прослушивает запросы на интерфейсе обратной связи (loopback) с адресом (127.0.0.1). Для одноразового запуска даемона в этой конфигурации используйте команду

    # /etc/rc.d/named onestart

Чтобы даемон named запускался во время загрузки, поместите в `/etc/rc.conf` следующую строку:

    named_enable="YES"

Разумеется, существует множество различных конфигураций `/etc/namedb/named.conf`, лежащих за рамками данного документа. Разнообразные опции запуска named во FreeBSD описаны в переменных `named_`*`` файла `/etc/defaults/rc.conf` и странице справочника rc.conf(5). Кроме того, полезной может оказаться Разд. 12.7.

## 27.6.6. Конфигурационные файлы

Файлы конфигурации даемона named расположены в каталоге `/etc/namedb` и, за исключением случая, когда вам требуется просто резолвер, требуют модификации.

### 27.6.6.1. `/etc/namedb/named.conf`

    // $FreeBSD$
    //
    // If you are going to set up an authoritative server, make sure you
    // understand the hairy details of how DNS works.  Even with
    // simple mistakes, you can break connectivity for affected parties,
    // or cause huge amounts of useless Internet traffic.

    options {
    	// All file and path names are relative to the chroot directory,
    	// if any, and should be fully qualified.
    	directory	"/etc/namedb/working";
    	pid-file	"/var/run/named/pid";
    	dump-file	"/var/dump/named_dump.db";
    	statistics-file	"/var/stats/named.stats";

    // If named is being used only as a local resolver, this is a safe default.
    // For named to be accessible to the network, comment this option, specify
    // the proper IP address, or delete this option.
    	listen-on	{ 127.0.0.1; };

    // If you have IPv6 enabled on this system, uncomment this option for
    // use as a local resolver.  To give access to the network, specify
    // an IPv6 address, or the keyword "any".
    //	listen-on-v6	{ ::1; };

    // These zones are already covered by the empty zones listed below.
    // If you remove the related empty zones below, comment these lines out.
    	disable-empty-zone "255.255.255.255.IN-ADDR.ARPA";
    	disable-empty-zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA";
    	disable-empty-zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA";

    // If you've got a DNS server around at your upstream provider, enter
    // its IP address here, and enable the line below.  This will make you
    // benefit from its cache, thus reduce overall DNS traffic in the Internet.
    /*
    	forwarders {
    		127.0.0.1;
    	};
    */

    // If the 'forwarders' clause is not empty the default is to 'forward first'
    // which will fall back to sending a query from your local server if the name
    // servers in 'forwarders' do not have the answer.  Alternatively you can
    // force your name server to never initiate queries of its own by enabling the
    // following line:
    //	forward only;

    // If you wish to have forwarding configured automatically based on
    // the entries in /etc/resolv.conf, uncomment the following line and
    // set named_auto_forward=yes in /etc/rc.conf.  You can also enable
    // named_auto_forward_only (the effect of which is described above).
    //	include "/etc/namedb/auto_forward.conf";

Как и говорится в комментариях, если вы хотите получить эффект от использования кэша провайдера, то можно включить раздел `forwarders`. В обычном случае сервер имён будет рекурсивно опрашивать определённые серверы имён Интернет до тех пор, пока не получит ответ на свой запрос. При включении этого раздела он будет автоматически опрашивать сервер имён вашего провайдера (или тот, который здесь указан), используя преимущества его кэша. наличия нужной информации. Если соответствующий сервер имён провайдера работает быстро и имеет хороший канал связи, то в результате такой настройки вы можете получить хороший результат.

> Внимание: `127.0.0.1` здесь работать не будет. Измените его на IP-адрес сервера имён провайдера.

    /*
    	   Modern versions of BIND use a random UDP port for each outgoing
    	   query by default in order to dramatically reduce the possibility
    	   of cache poisoning.  All users are strongly encouraged to utilize
    	   this feature, and to configure their firewalls to accommodate it.

    	   AS A LAST RESORT in order to get around a restrictive firewall
    	   policy you can try enabling the option below.  Use of this option
    	   will significantly reduce your ability to withstand cache poisoning
    	   attacks, and should be avoided if at all possible.

    	   Replace NNNNN in the example with a number between 49160 and 65530.
    	*/
    	// query-source address * port NNNNN;
    };

    // If you enable a local name server, don't forget to enter 127.0.0.1
    // first in your /etc/resolv.conf so this server will be queried.
    // Also, make sure to enable it in /etc/rc.conf.

    // The traditional root hints mechanism. Use this, OR the slave zones below.
    zone "." { type hint; file "/etc/namedb/named.root"; };

    /*	Slaving the following zones from the root name servers has some
    	significant advantages:
    	1. Faster local resolution for your users
    	2. No spurious traffic will be sent from your network to the roots
    	3. Greater resilience to any potential root server failure/DDoS

    	On the other hand, this method requires more monitoring than the
    	hints file to be sure that an unexpected failure mode has not
    	incapacitated your server.  Name servers that are serving a lot
    	of clients will benefit more from this approach than individual
    	hosts.  Use with caution.

    	To use this mechanism, uncomment the entries below, and comment
    	the hint zone above.

    	As documented at http://dns.icann.org/services/axfr/ these zones:
    	"." (the root), ARPA, IN-ADDR.ARPA, IP6.ARPA, and ROOT-SERVERS.NET
    	are available for AXFR from these servers on IPv4 and IPv6:
    	xfr.lax.dns.icann.org, xfr.cjr.dns.icann.org
    */
    /*
    zone "." {
    	type slave;
    	file "/etc/namedb/slave/root.slave";
    	masters {
    		192.5.5.241;	// F.ROOT-SERVERS.NET.
    	};
    	notify no;
    };

    zone "arpa" {
    	type slave;
    	file "/etc/namedb/slave/arpa.slave";
    	masters {
    		192.5.5.241;	// F.ROOT-SERVERS.NET.
    	};
    	notify no;
    };
    */

    /*	Serving the following zones locally will prevent any queries
    	for these zones leaving your network and going to the root
    	name servers.  This has two significant advantages:
    	1. Faster local resolution for your users
    	2. No spurious traffic will be sent from your network to the roots
    */
    // RFCs 1912 and 5735 (and BCP 32 for localhost)
    zone "localhost"	{ type master; file "/etc/namedb/master/localhost-forward.db"; };
    zone "127.in-addr.arpa"	{ type master; file "/etc/namedb/master/localhost-reverse.db"; };
    zone "255.in-addr.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };

    // RFC 1912-style zone for IPv6 localhost address
    zone "0.ip6.arpa"	{ type master; file "/etc/namedb/master/localhost-reverse.db"; };

    // "This" Network (RFCs 1912 and 5735)
    zone "0.in-addr.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };

    // Private Use Networks (RFCs 1918 and 5735)
    zone "10.in-addr.arpa"	   { type master; file "/etc/namedb/master/empty.db"; };
    zone "16.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
    zone "17.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
    zone "18.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
    zone "19.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
    zone "20.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
    zone "21.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
    zone "22.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
    zone "23.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
    zone "24.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
    zone "25.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
    zone "26.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
    zone "27.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
    zone "28.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
    zone "29.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
    zone "30.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
    zone "31.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
    zone "168.192.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };

    // Link-local/APIPA (RFCs 3927 and 5735)
    zone "254.169.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };

    // IETF protocol assignments (RFCs 5735 and 5736)
    zone "0.0.192.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };

    // TEST-NET-[1-3] for Documentation (RFCs 5735 and 5737)
    zone "2.0.192.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
    zone "100.51.198.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
    zone "113.0.203.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };

    // IPv6 Range for Documentation (RFC 3849)
    zone "8.b.d.0.1.0.0.2.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };

    // Domain Names for Documentation and Testing (BCP 32)
    zone "test" { type master; file "/etc/namedb/master/empty.db"; };
    zone "example" { type master; file "/etc/namedb/master/empty.db"; };
    zone "invalid" { type master; file "/etc/namedb/master/empty.db"; };
    zone "example.com" { type master; file "/etc/namedb/master/empty.db"; };
    zone "example.net" { type master; file "/etc/namedb/master/empty.db"; };
    zone "example.org" { type master; file "/etc/namedb/master/empty.db"; };

    // Router Benchmark Testing (RFCs 2544 and 5735)
    zone "18.198.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
    zone "19.198.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };

    // IANA Reserved - Old Class E Space (RFC 5735)
    zone "240.in-addr.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "241.in-addr.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "242.in-addr.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "243.in-addr.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "244.in-addr.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "245.in-addr.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "246.in-addr.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "247.in-addr.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "248.in-addr.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "249.in-addr.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "250.in-addr.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "251.in-addr.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "252.in-addr.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "253.in-addr.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "254.in-addr.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };

    // IPv6 Unassigned Addresses (RFC 4291)
    zone "1.ip6.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "3.ip6.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "4.ip6.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "5.ip6.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "6.ip6.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "7.ip6.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "8.ip6.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "9.ip6.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "a.ip6.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "b.ip6.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "c.ip6.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "d.ip6.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "e.ip6.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "0.f.ip6.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "1.f.ip6.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "2.f.ip6.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "3.f.ip6.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "4.f.ip6.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "5.f.ip6.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "6.f.ip6.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "7.f.ip6.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "8.f.ip6.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "9.f.ip6.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "a.f.ip6.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "b.f.ip6.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "0.e.f.ip6.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "1.e.f.ip6.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "2.e.f.ip6.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "3.e.f.ip6.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "4.e.f.ip6.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "5.e.f.ip6.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "6.e.f.ip6.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "7.e.f.ip6.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };

    // IPv6 ULA (RFC 4193)
    zone "c.f.ip6.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "d.f.ip6.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };

    // IPv6 Link Local (RFC 4291)
    zone "8.e.f.ip6.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "9.e.f.ip6.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "a.e.f.ip6.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "b.e.f.ip6.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };

    // IPv6 Deprecated Site-Local Addresses (RFC 3879)
    zone "c.e.f.ip6.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "d.e.f.ip6.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "e.e.f.ip6.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };
    zone "f.e.f.ip6.arpa"	{ type master; file "/etc/namedb/master/empty.db"; };

    // IP6.INT is Deprecated (RFC 4159)
    zone "ip6.int"		{ type master; file "/etc/namedb/master/empty.db"; };

    // NB: Do not use the IP addresses below, they are faked, and only
    // serve demonstration/documentation purposes!
    //
    // Example slave zone config entries.  It can be convenient to become
    // a slave at least for the zone your own domain is in.  Ask
    // your network administrator for the IP address of the responsible
    // master name server.
    //
    // Do not forget to include the reverse lookup zone!
    // This is named after the first bytes of the IP address, in reverse
    // order, with ".IN-ADDR.ARPA" appended, or ".IP6.ARPA" for IPv6.
    //
    // Before starting to set up a master zone, make sure you fully
    // understand how DNS and BIND work.  There are sometimes
    // non-obvious pitfalls.  Setting up a slave zone is usually simpler.
    //
    // NB: Don't blindly enable the examples below. :-)  Use actual names
    // and addresses instead.

    /* An example dynamic zone
    key "exampleorgkey" {
    	algorithm hmac-md5;
    	secret "sf87HJqjkqh8ac87a02lla==";
    };
    zone "example.org" {
    	type master;
    	allow-update {
    		key "exampleorgkey";
    	};
    	file "dynamic/example.org";
    };
    */

    /* Example of a slave reverse zone
    zone "1.168.192.in-addr.arpa" {
    	type slave;
    	file "/etc/namedb/slave/1.168.192.in-addr.arpa";
    	masters {
    		192.168.1.1;
    	};
    };
    */

Это примеры описаний прямой и обратной зон из файла `named.conf` для вторичных серверов.

Для каждого новой зоны, которую будет обслуживать сервер имён, в файл `named.conf` должна быть добавлена запись.

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

    zone "example.org" {
    	type master;
    	file "master/example.org";
    };

Зона является первичной, что отражается в поле `type`, и информация о зоне хранится в файле `/etc/namedb/master/example.org`, что указывается в поле `file`.

    zone "example.org" {
    	type slave;
    	file "slave/example.org";
    };

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

### 27.6.6.2. Файлы зон

Пример файла зоны `example.org` для основного сервера (располагающийся в файле `/etc/namedb/master/example.org`) имеет такой вид:

    $TTL 3600        ; 1 hour default TTL
    example.org.    IN      SOA      ns1.example.org. admin.example.org. (
                                    2006051501      ; Serial
                                    10800           ; Refresh
                                    3600            ; Retry
                                    604800          ; Expire
                                    300             ; Negative Response TTL
                            )

    ; DNS Servers
                    IN      NS      ns1.example.org.
                    IN      NS      ns2.example.org.

    ; MX Records
                    IN      MX 10   mx.example.org.
                    IN      MX 20   mail.example.org.

                    IN      A       192.168.1.1

    ; Machine Names
    localhost       IN      A       127.0.0.1
    ns1             IN      A       192.168.1.2
    ns2             IN      A       192.168.1.3
    mx              IN      A       192.168.1.4
    mail            IN      A       192.168.1.5

    ; Aliases
    www             IN      CNAME   example.org.

Заметьте, что все имена хостов, оканчивающиеся на ''.'', задают полное имя, тогда как все имена без символа ''.'' на конце считаются заданными относительно origin. Например, `ns1` преобразуется в `ns1.`example.org.``

Файл зоны имеет следующий формат:

    recordname      IN recordtype  value

Наиболее часто используемые записи DNS:

SOA

  начало зоны ответственности

NS

  авторитативный сервер имен

A

  адрес хоста

CNAME

  каноническое имя для алиаса

MX

  обмен почтой

PTR

  указатель на доменное имя (используется в обратных зонах DNS)

    example.org. IN SOA ns1.example.org. admin.example.org. (
                            2006051501      ; Serial
                            10800           ; Refresh after 3 hours
                            3600            ; Retry after 1 hour
                            604800          ; Expire after 1 week
                            300 )           ; Negative Response TTL

`example.org.`

  имя домена, а также ориджин для этого файла зоны.

`ns1.example.org.`

  основной/авторитативный сервер имён для этой зоны.

`admin.example.org.`

  человек, отвечающий за эту зону, адрес электронной почты с символом ''@'' замененным на точку. (`<admin@example.org>` становится `admin.example.org`)

`2006051501`

  последовательный номер файла. При каждом изменении файла зоны это число должно увеличиваться. В настоящее время для нумерации многие администраторы предпочитают формат `ггггммддвв`. `2006051501` будет означать, что файл последний раз изменялся 15.05.2006, а последнее число `01` означает, что это была первая модификация файла за день. Последовательный номер важен, так как он служит для того, чтобы вторичные серверы узнавали об обновлении зоны.

           IN      NS      ns1.example.org.

Это NS-запись. Такие записи должны иметься для всех серверов имён, которые будут отвечать за зону.

    localhost       IN      A       127.0.0.1
    ns1             IN      A       192.168.1.2
    ns2             IN      A       192.168.1.3
    mx              IN      A       192.168.1.4
    mail            IN      A       192.168.1.5

Записи типа A служат для обозначения имён машин. Как это видно выше, имя `ns1.example.org` будет преобразовано в `192.168.1.2`.

           IN      A       192.168.1.1

Эта строка присваивает IP адрес `192.168.1.1` текущему ориджину, в данном случае домену `example.org`.

    www	     IN CNAME	@

Записи с каноническими именами обычно используются для присвоения машинам псевдонимов. В этом примере `www` является псевдонимом для ''главной'' машины, имя которой по воле случая совпало с именем домена `example.org` (`192.168.1.1`). Записи типа CNAME нельзя использовать совместно с другими типами записей для одного и того же имени хоста (recordname).

    	       IN MX   10      mail.example.org.

MX-запись указывает, какие почтовые серверы отвечают за обработку входящей электронной почты для зоны. `mail.example.org` является именем почтового сервера, а 10 обозначает приоритет этого почтового сервера.

Можно иметь несколько почтовых серверов с приоритетами, например, 10, 20 и так далее. Почтовый сервер, пытающийся доставить почту для `example.org`, сначала попробует связаться с машиной, имеющий MX-запись с самым большим приоритетом (наименьшим числовым значением в поле MX), затем с приоритетом поменьше и так далее, до тех пор, пока почта не будет отправлена.

Для файлов зон in-addr.arpa (обратные записи DNS) используется тот же самый формат, отличающийся только использованием записей PTR вместо A или CNAME.

    $TTL 3600

    1.168.192.in-addr.arpa. IN SOA ns1.example.org. admin.example.org. (
                            2006051501      ; Serial
                            10800           ; Refresh
                            3600            ; Retry
                            604800          ; Expire
                            300 )           ; Negative Response TTL

            IN      NS      ns1.example.org.
            IN      NS      ns2.example.org.

    1       IN      PTR     example.org.
    2       IN      PTR     ns1.example.org.
    3       IN      PTR     ns2.example.org.
    4       IN      PTR     mx.example.org.
    5       IN      PTR     mail.example.org.

В этом файле дается полное соответствие имён хостов IP-адресам в нашем описанном ранее вымышленном домене.

Следует отметить, что все имена в правой части PTR-записи должны быть полными доменными именами (то есть, заканчиваться точкой ''.'').

## 27.6.7. Кэширующий сервер имён

Кэширующий сервер имён — это сервер имен, чья главная задача — разрешение рекурсивных запросов. Он просто выполняет запросы от своего имени и сохраняет результаты для последующего использования.

## 27.6.8. * DNSSEC

Этот раздел не переведен.

## 27.6.9. Безопасность

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

FreeBSD автоматически запускает named в ограниченном окружении (chroot(8)); помимо этого, есть еще несколько механизмов, помогающих защититься от возможных атак на сервис DNS.

Весьма полезно прочесть сообщения безопасности CERT и подписаться на Список рассылки FreeBSD, посвящённый срочным сообщениям, связанным с безопасностью для того, чтобы быть в курсе текущих проблем с обеспечением безопасности Internet и FreeBSD.

> Подсказка: Если возникает проблема, то наличие последних исходных текстов и свежесобранного named может способствовать её решению.

## 27.6.10. Дополнительная литература

Справочная информация по BIND/named: rndc(8), named(8), named.conf(5), nsupdate(8), dnssec-signzone(8), dnssec-keygen(8)

- Официальная страница ISC BIND

- Официальный форум ISC BIND

- Книга издательства O'Reilly DNS and BIND 5th Edition

- Root DNSSEC

- DNSSEC Trust Anchor Publication for the Root Zone

- RFC1034 - Domain Names - Concepts and Facilities

- RFC1035 - Domain Names - Implementation and Specification

- RFC4033 - DNS Security Introduction and Requirements

- RFC4034 - Resource Records for the DNS Security Extensions

- RFC4035 - Protocol Modifications for the DNS Security Extensions

- RFC4641 - DNSSEC Operational Practices

- RFC5011 - Automated Updates of DNS Security (DNSSEC Trust Anchors

Пред. | Начало | След.
Автоматическая настройка сети (DHCP) | Уровень выше | Apache HTTP сервер

Этот, и другие документы, могут быть скачаны с ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите <doc@FreeBSD.org>.
По вопросам, связанным с русским переводом документации, пишите в рассылку <frdp@FreeBSD.org.ua>.
Информация по подписке на эту рассылку находится на сайте проекта перевода.