11. Служба dns

11.1. Общие сведения

Служба dns – иерархическая и распределённая служба имён, которая обеспечивает систему именования компьютеров, служб и других ресурсов в сети Интернет или других сетях Интернет-протокола (IP). В ПАК “Фортикс” служба dns обеспечивает функциональность узла службы DNS.

11.2. Базовые настройки службы

Настройка службы dns ПАК “Фортикс” осуществляется по иерархическому принципу: верхний уровень является обязательными для вложенных уровней ниже.

Всего таких уровня три:

  1. глобальный уровень конфигурации службы;

  2. уровень конфигурации представления – view;

  3. уровень конфигурации зоны – zone.

Абстракция view введена для “виртуализации” функциональности сервиса DNS в рамках одного процесса. С практической точки зрения каждое представление view работает как отдельный экземпляр службы dns. Таким образом, возможно, например, описать одну и ту же зону в зависимости от сети, из которой был сделан запрос.

11.2.1. Глобальные настройки службы

Глобальная настройка службы dns осуществляется на следующем уровне конфигурации:

[edit service dns]

На данном уровне конфигурации доступны следующие настройки:

  • enable – включить службу;

  • acl <acl-name> address <address> – задать именованный список IP-адресов и сетей для использования в других настройках в качестве подстановки, где <acl-name> – строка, <address> – IPv4-адрес в формате A.B.C.D[/mask] или IPv6-адрес в формате A:B:..:H[/mask];

  • listen <address>|<acl-name> – задать список IP-адресов или список acl, по которым служба принимает запросы, где <address> – IPv4-адрес в формате A.B.C.D или IPv6-адрес в формате A:B:..:H, <acl-name> – имя существующего списка IP-адресов и сетей;

  • dnssec-validation yes|no|auto – включить/выключить проверку dnssec, где по умолчанию – auto – автоматическая проверка подлинности DNS-данных (см. подраздел 11.3 DNSSEC);

  • allow-query <address>|<acl-name> – задать список IP-адресов или список acl узлов сети, с которых разрешено получение DNS-запросов, где <address> – IPv4-адрес в формате A.B.C.D или IPv6-адрес в формате A:B:..:H, <acl-name> – строка;

  • allow-transfer <address>|<acl-name> – задать список IP-адресов или список acl, которым доступны зоны с сервера, где <address> – IPv4-адрес в формате A.B.C.D или IPv6-адрес в формате A:B:..:H, <acl-name> – строка;

  • allow-recursion  <address>|<acl-name> – задать список IP-адресов или список acl, для которых разрешены рекурсивные запросы (для остальных – итеративные), где <address> – IPv4-адрес в формате A.B.C.D или IPv6-адрес в формате A:B:..:H, <acl-name> – имя существующего списка IP-адресов и сетей, по умолчанию сервер выполняет рекурсивные запросы для всех сетей;

  • allow-notify <address>|<acl-name> – задать список IP-адресов или список acl первичных серверов зоны, от которых служба, как вторичный уполномоченный сервер, принимает извещения об изменениях зоны, где <address> – IPv4-адрес в формате A.B.C.D или IPv6-адрес в формате A:B:..:H, <acl-name> – имя существующего списка IP-адресов и сетей;

  • allow-update <address>|<acl-name> – задать список IP-адресов или список acl, определяющий системы, которым разрешено динамически обновлять primary-зону, где <address> – IPv4-адрес в формате A.B.C.D или IPv6-адрес в формате A:B:..:H, <acl-name> – имя существующего списка IP-адресов и сетей;

  • forwarder <address>|<acl-name> – задать список IP-адресов или список acl, которые обслуживают перенаправленные запросы, где <address> – IPv4-адрес в формате A.B.C.D или IPv6-адрес в формате A:B:..:H, <acl-name> – имя существующего списка IP-адресов и сетей.

11.2.2. Настройки представления view

Настройка представления осуществляется на следующем уровне конфигурации:

[edit service dns view <view-name>]

где <view-name> – строка.

На данном уровне конфигурации доступны следующие настройки:

  • match-client <address>|<acl-name> – определить представление пространства имён DNS для заданного подмножества IP-адресов клиента, где <address> – IPv4-адрес в формате A.B.C.D или IPv6-адрес в формате A:B:..:H, <acl-name> – имя существующего списка IP-адресов и сетей;

  • match-destination <address>|<acl-name> – определить представление пространства имён DNS для заданного подмножества IP-адресов назначения, где <address> – IPv4-адрес в формате A.B.C.D или IPv6-адрес в формате A:B:..:H, <acl-name> – имя существующего списка IP-адресов и сетей;

  • match-recursive-only true|false – определить, обслуживает ли представление только рекурсивные запросы.

Настройки allow-notify, allow-query, allow-recursion, allow-transfer, allow-update, forwarder данного уровня конфигурации аналогичны глобальному уровню конфигурации службы.

11.2.3. Настройки зоны zone

Настройка зоны осуществляется на следующем уровне конфигурации:

[edit service dns view <view-name> zone <zone-name>]

где

  • <view-name> – имя существующего представления;

  • <zone-name> – строка-доменное имя, оканчивающаяся на “.”.

На данном уровне конфигурации доступны следующие настройки:

  • type <zone-type> – задать один из типов зоны: primary, secondary, forward;

  • origin <domain-name> – задать доменное имя, которое добавляется к любым неквалифицированным записям, где <domain-name> – строка, оканчивающаяся на “.”;

  • ttl <ttl-value> – определить TTL по умолчанию для всех записей в текущей зоне, где <ttl-value> – число 0 до 4294967295;

  • update – разрешить обновление зоны DHCP-сервером.

Настройки allow-notify, allow-query, allow-transfer, allow-update, forwarder аналогичны уровню конфигурации представления.

11.2.4. Пример конфигурации службы dns

Пример минимальной конфигурации службы dns:

dns {
  enable
  dnssec-validation no
  forwarder 1.1.1.1
  view default {
    zone 100.168.192.in-addr.arpa. {
      type primary
      soa {
        domain 100.168.192.in-addr.arpa.
        master gw.example.com.
        admin admin.gw.example.com.
        serial 1
      }
      ns 100.168.192.in-addr.arpa. server gw.example.com.
      ptr 10 host foo.example.com.
    }
    zone example.com. {
      type primary
      origin example.com.
      soa {
        domain example.com.
        master gw.example.com.
        admin admin.gw.example.com.
        serial 1
      }
      ns example.com. server gw.example.com.
      a foo address 192.168.100.10
      a gw address 192.168.100.254
    }
  }
  allow-query 192.168.100.0/24
}

11.2.5. Команды режима администрирования

Для просмотра текущего статуса службы dns применяется команда:

> show service dns status

11.3. DNSSEC

DNSSEC – расширение DNS, предназначенное для повышения безопасности. Оно гарантирует подлинность и целостность DNS‑данных, защищая их от атак: загрязнения кэша, перенаправления и подмены запросов.

Для DNSSEC применяется криптография с открытым ключом (PKI): добавляется цифровая подпись к данным DNS‑зоны. Это позволяет проверять, что ответ не изменён при передаче и исходит от доверенного источника.

При этом DNSSEC не создаёт защищённый туннель и не шифрует DNS‑данные.

11.3.1. Настройки расширения DNSSEC для зоны

Настройка зоны осуществляется на следующем уровне конфигурации:

[edit service dns view <view-name> zone <zone-name>]

где

  • <view-name> – имя существующего представления;

  • <zone-name> – строка-доменное имя, оканчивающаяся на “.”.

На данном уровне конфигурации доступны следующие настройки расширения DNSSEC для зоны:

  • sign ksk <ksk-key-id> zsk <zsk-key-id> – подписать зону в системе, где <ksk-key-id> – идентификатор в системе ключа подписывания ключей, <zsk-key-id> – идентификатор в системе ключа подписывания зоны.

11.3.2. Команды режима администрирования

Для расширения DNSSEC используется два типа ключей:

  • KSK – ключ подписывания ключей;

  • ZSK – ключ подписывания зоны.

Для генерации нового ключа применяется команда:

> dnssec key generate new ksk|zsk <view-name> <zone-name> <key-algorithm> [ttl <ttl-value>] [size <size-value>] [nsec3 <nsec3-algorithm-name>]

где

  • <view-name> – имя существующего представления;

  • <zone-name> – имя существующей зоны, для которой создаётся ключ;

  • zsk|ksk – тип ключа;

  • <key-algorithm> – криптографический алгоритм формирования ключа, по умолчанию – RSASHA1;

  • <ttl-value> – время жизни от 0 до 4294967295 записи DNSKEY, формируемой службой из ключа при создании зонного файла;

  • <size-value> – длина ключа, по умолчанию – 1024;

  • <nsec3-algorithm-name> – криптографический алгоритм формирования ключа с поддержкой NSEC3, по умолчанию – NSEC3RSASHA1*.

В зависимости от используемого криптографического алгоритма длина ключа может принимать следующие значения:

  • RSASHA1: от 1024 до 4096;

  • NSEC3RSASHA1: от 1024 до 4096;

  • RSASHA256: от 1024 до 4096;

  • RSASHA512: от 1024 до 4096;

  • ECDSAP256SHA256: для алгоритма предусмотрена фиксированная длина ключа;

  • ECDSAP384SHA384: для алгоритма предусмотрена фиксированная длина ключа;

  • ED25519: для алгоритма предусмотрена фиксированная длина ключа;

  • ED448: для алгоритма предусмотрена фиксированная длина ключа;

  • DH: от 128 до 4096.

При этом в системе генерируется ключ с идентификатором key-id, сформированным по правилу: <algo>-<id>, где <algo> – используемый алгоритм, <id> – уникальный 16-битный идентификатор.

По умолчанию для сгенерированного ключа устанавливаются временные метки следующего типа:

  • create – время создания (генерации) ключа;

  • publish – время публикации ключа: после указанного времени ключ включается в зону и не используется для формирования подписи;

  • activate – время активации ключа: после указанного времени ключ остаётся в зоне и используется для формирования подписи.

По умолчанию данным меткам присваиваются значения, равные времени генерации ключа.

Дополнительно для ключа могут быть установлены метки следующего типа:

  • revoke – время отзыва ключа: после указанного времени в ключе устанавливается флаг отзыва, при этом ключ остаётся в зоне и используется для подписи;

  • inactive – время деактивации ключа: после указанного времени ключ остаётся в зоне и не используется для подписи (фактически это “срок годности” ключа);

  • delete – время удаления ключа: после указанного времени ключ не включается в зону и остаётся в виде файла в файловой системе, и может быть удалён.

Для генерации ключа-преемника применяется команда:

> dnssec key generate successor ksk|zsk <view-name> <zone-name> <key-id>

где

  • <view-name> – имя существующего представления;

  • <zone-name> – имя существующей зоны, для которой создаётся ключ-преемник;

  • zsk|ksk – тип ключа;

  • <key-id> – идентификатор существующего ключа, параметры которого наследуются в ключе-преемнике.

Для определения временной метки ключа применяется команда:

> dnssec key set time ksk|zsk <view-name> <zone-name> <key-id> create|publish|activate|revoke|inactive|delete <time-value>

где

  • <view-name> – имя существующего представления;

  • <zone-name> – имя существующей зоны;

  • create|publish|activate|revoke|inactive|delete – тип временной метки;

  • <time-value> – значение временной метки в одном из следующих форматов:

    • YYYYMMDD, где YYYY – год, MM – месяц, DD – день;

    • YYYYMMDDHHMMSS, где YYYY – год, MM – месяц, DD – день, HH – часы, MM – минуты, SS – секунды;

    • <+->N[y|mo|w|d|h|mi] – смещение по времени в будущее (+) или прошлое (-), где N – число единиц времени (y – лет, mo – месяцев, w – недель, d – дней, h – часов, mi – минут, по умолчанию – секунд).

Для получения списка ключей зоны применяется команда:

> dnssec key list <view-name> <zone-name>

где

  • <view-name> – имя существующего представления;

  • <zone-name> – имя существующей зоны.

Для удаления ключа применяется команда:

> dnssec key remove <view-name> <zone-name> <key-id>

где

  • <view-name> – имя существующего представления;

  • <zone-name> – имя существующей зоны;

  • <key-id> – идентификатор существующего ключа.

Для проверки корректности подписи зоны применяется команда:

> dnssec key verify <view-name> <zone-name>

где

  • <view-name> – имя существующего представления;

  • <zone-name> – имя существующей зоны.