BIND (Berkeley Internet Domain Name System) — открытая реализация системы DNS, в системе FreeBSD установлен по умолчанию. BIND — это не отдельная программа, а набор взаимодействующих компонентов:
- named — сервер — отвечает на запросы;
- resolver — клиент — опрашивает другие dns-сервера; resolver library;
- dig, host, nslookup — набор утилит для диагностики работы DNS;
BIND — универсален. Его можно использовать и как авторитетный (master/slave) dns-сервер, и как кеширующий, и как перенаправляющий.
У меня появилась задача поднять DNS-сервер, выполняющий функции авторитетного и кеширующего одновременно. Вообще при больших нагрузках рекомендуют разделять обязанности между несколькими серверами, но у меня нагрузка небольшая, так что один сервер вполне со всем справится.
Коротко о том, что должно получиться:
- кеширующий сервер, обрабатывающий запросы определенных ip-адресов;
- авторитетный master сервер, содержащий 1 прямую зону и несколько обратных;
- slave попросим повесить у провайдера, а можно и воспользоваться бесплатным сервисом — secondary.net.ua;
Файлы конфигурации можно найти в /etc/namedb, что является символической ссылкой на /var/named/etc/namedb:
[14:56]root@noc# ls -al /etc/namedb lrwxr-xr-x 1 root wheel 23 Apr 5 09:05 /etc/namedb -> ../var/named/etc/namedb [14:57]root@noc# ls -al /etc/namedb/ total 33 drwxr-xr-x 6 root wheel 8 Apr 5 09:05 . drwxr-xr-x 3 root wheel 3 Apr 5 09:03 .. drwxr-xr-x 2 bind wheel 2 Apr 5 09:03 dynamic drwxr-xr-x 2 root wheel 5 Apr 5 09:05 master -rw-r--r-- 1 root wheel 19573 Apr 5 09:05 named.conf -rw-r--r-- 1 root wheel 3134 Apr 5 09:05 named.root drwxr-xr-x 2 bind wheel 2 Apr 5 09:03 slave drwxr-xr-x 2 bind wheel 2 Apr 5 09:03 working
Настройка кеширующего dns-сервера:
Кеширующий сервер слушает udp и tcp порт 53, на который принимает рекурсивные (в подавляющем большинстве) запросы клиентов на разрешения каких-либо доменных имен. Приняв запрос от клиента, named сначала ищет ответ в своем кеше, и если не находит, начинает опрашивать другие dns-сервера, начиная с корневых, с помощью нерекурсивных запросов. Получив окончательный ответ (т.е. искомый ip-адрес нужного домена), сохраняет его в кеш и отправляет клиенту.
Для настройка кеширующего сервера эти файлы являются обязательными:
- named.conf — главный conf-файл демона named;
- named.root — файл, содержащий перечень корневых серверов — оставляем без изменений;
Файл конфигурации состоит из набора инструкций, каждая из которых заканчивается точкой с запятой. Все, что помечено «//», «/* текст */» и «#» — комментарии.
Редактируем named.conf
Настройка опций (инструкция options):
options { // # Все файлы и пути относительны chroot директории, // # в другом случае должны быть определены полностью: directory "/etc/namedb/working"; pid-file "/var/run/named/pid"; dump-file "/var/dump/named_dump.db"; statistics-file "/var/stats/named.stats"; // # Разрешить рекурсивные запросы из следующего списка ip-адресов: allow-recursion { 10.10.10.0/24; 192.168.1.0/24 }; // # Если сервер не знает ответа на запрос, он запрашивает другие сервера, и делает это с указаного здесь адреса: query-source address 10.10.10.10; // # Обманываем любопытных кулхацкеров, которые интересуются версией нашего bind'a: version "Microsoft DNS Server ver. 0.99alpha"; // # Указываем, на каких интерфейсах слушать запросы: listen-on { 127.0.0.1; 10.10.10.10; };
Далее оставляем все, как есть:
// # Как я понимаю, у нас есть пустые зоны для IPv6, которым мы не пользуемся, поэтому дисейблим: // 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"; };
Подключение файла подсказок named.root, как уже было сказано, в нем указывается перечень корневых серверов:
// The traditional root hints mechanism. Use this, OR the slave zones below. zone "." { type hint; file "/etc/namedb/named.root"; };
Указание следующих зон локально предотвращают запросы для этих зон вне нашей сети и ненужные запросы к корневым серверам:
// RFCs 1912, 5735 and 6303 (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 (RFC 6303) zone "0.ip6.arpa" { type master; file "/etc/namedb/master/localhost-reverse.db"; }; // "This" Network (RFCs 1912, 5735 and 6303) zone "0.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; // Private Use Networks (RFCs 1918, 5735 and 6303) 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"; }; // Shared Address Space (RFC 6598) zone "64.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "65.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "66.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "67.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "68.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "69.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "70.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "71.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "72.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "73.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "74.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "75.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "76.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "77.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "78.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "79.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "80.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "81.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "82.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "83.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "84.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "85.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "86.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "87.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "88.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "89.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "90.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "91.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "92.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "93.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "94.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "95.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "96.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "97.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "98.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "99.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "100.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "101.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "102.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "103.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "104.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "105.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "106.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "107.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "108.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "109.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "110.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "111.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "112.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "113.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "114.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "115.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "116.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "117.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "118.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "119.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "120.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "121.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "122.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "123.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "124.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "125.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "126.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; zone "127.100.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; // Link-local/APIPA (RFCs 3927, 5735 and 6303) 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, 5737 and 6303) 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 Example Range for Documentation (RFCs 3849 and 6303) 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 (RFCs 4193 and 6303) 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 (RFCs 4291 and 6303) 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 (RFCs 3879 and 6303) 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"; };
Настройка авторитетного dns-сервера (master):
Авторитетный dns-сервер содержит одну или несколько (или целую тучу :-)) зон и отвечает на запросы клиентов и других dns-серверов для разрешения имен именно с этих зон.
Для настройки авторитетного сервера следующие файлы являются обязательными:
- named.conf – главный conf-файл демона named;
- pro-voip.com.ua – файл зоны;
Файлы зоны подключаются к серверу с помощью инструкции zone в файле named.conf:
zone "pro-voip.com.ua" { type master; file "/etc/namedb/master/pro-voip.com.ua"; allow-transfer { 10.10.10.11; }; };
— здесь указывам имя зоны в кавычках «pro-voip.com.ua», тип зоны — master, с помощью директивы file задаем путь к файлу зоны. Сам файл зоны может храниться где угодно, у меня все master-файлы зоны находятся в директории /etc/namedb/master.
Директива allow-transfer задает список slave-серверов, на которые будет скопирована зона.
Для удобства администрирования я выношу все инструкции zone в отдельный файл master.conf, который подключается к главному конфигурационному файлу named.conf с помощью директивы include вот так:
// ### INCLUDE include "/etc/namedb/master.conf";
Если необходимо выкосить какую либо из зон с dns-сервера, комментируем соответствующую инструкцию zone, не трогая сам файл зоны. Если нужно убрать с dns-сервера все зоны, просто комментируем инструкцию include, которая подключает соответствующий файл с зонами. Удобно.
Поднастроим еще опции в named.conf.
options { // # Разрешаем запросы с любых адресов: allow-query { any; }; // # Механизм, позволяющий masterу оповещать своих slave об изменениях в файлах зон: notify yes; // # Определям локальный source-адресс для отправки notify-сообщений slave'ам: notify-source 10.10.10.10; // # Переливать файл зоны на slave со следующим адресом источника: transfer-source 10.10.10.10; }
Настройка авторитетного dns-сервера (slave):
Настройка авторитетного slave-сервера отличается от master’а описанием подключения зоны. Создаем отдельный файл slave.conf, где и будем подключать эти самые зоны; подключаем slave.conf в named.conf:
include "/etc/namedb/slave.conf";
Подключение зон выглядит следующим образом:
zone "pro-voip.com.ua" { type slave; file "/etc/namedb/slave/pro-voip.com.ua"; masters { 10.10.10.10; }; };
— опять-таки указываем название зоны в кавычках, тип slave; путь к файлу зоны задаем с помощью директивы file; masters — задает список master-серверов, откуда будет скачана зона.
Хочу заметить, что при настройке slave-сервера файл зоны создавать не нужно — нужно лишь указать, в какой файл эта зона на slave будет сохранена.
Настройка логирования
Настройка логов действий демона named производится с помощью инструкции logging, в ней в указываем с помощью channel методы и параметры вывода логов, с помощью category — типы сообщений, которые в этот лог будут записаны:
logging { channel logfile { file "/var/named/var/log/named.log" versions unlimited size 10m; severity info; print-category yes; print-severity yes; print-time yes; }; category default { logfile; }; category security { logfile; }; category lame-servers{ null; }; category config { logfile; }; category xfer-in { logfile; }; category xfer-out { logfile; }; category edns-disabled { null; }; };
Имя канала «logfile»; все, что приходит в этот канал, перенаправляется в файл /var/named/var/log/named.log, количество версий лога неограниченное, размер log-файла 10М. Опции для channel: уровень логирования severity (аналог «приоритетов» syslog’а) — info; печатаем в лог категорию, уровень, время — print-category, print-severity, print-time.
Категории сообщений в логе задаем с помощью директивы category, и эти сообщения перенаправляем в канал logfile. Категории, которые не хотим видеть в логе, отправляем в канал null.
Таким образом с помощью каналов и категорий можно создавать столько логов, сколько вам нужно, и определенного вида.