DNS

Система доменных имён (DNS) представляет собой распределённую базу данных, которая устанавливает соответствие между понятными для человека доменными именами и числовыми IP-адресами. Эти соответствия фиксируются в ресурсных записях, которые хранятся на серверах имён, расположенных по всему интернету. Устройство, которому требуется получить доступ к узлу через интернет, отправляет запрос DNS на сервер имён. Сервер имён считывает свои ресурсные записи и возвращает ответ с IP-адресом указанного имени.

Система ARMA Стена предоставляет три основные функции, связанные с DNS:

  1. системный DNS;

  2. динамический DNS;

  3. перенаправляющий DNS.

Системный DNS

В системном DNS определяется список серверов имён, которые система ARMA Стена будет использовать для преобразования имён узлов в IP-адреса.

Примечание

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

Для добавления адреса сервера доменных имён необходимо ввести команду:

set system name-server <address>

где <address> – IP-адрес сервера доменных имён в формате <x.x.x.x> для IPv4 и <h:h:h:h:h:h:h:h> для IPv6.

Для того чтобы система могла использовать и заполнять неквалифицированные имена хостов, необходимо определить список, который будет использоваться для поиска доменов:

set system domain-search <domain>

где <domain> – доменное имя. Система будет использовать его для заполнения неквалифицированных имён хостов. Максимальное количество записей — 6. Доменные имена могут включать в себя символы латинского алфавита, цифры, дефисы и точки. При этом максимальная длина доменного имени не должна превышать 253 символов. Количество элементов (разделённых точками) в доменном имени не должно превышать 127. Элементы доменного имени не должны начинаться или заканчиваться дефисом, а длина каждого элемента не должна превышать 63 символа.

Пример настройки:

Настройка системы на попытку завершения домена в следующем порядке: infowatch.io (первый), infowatch.net (второй) и infowatch.network (последний):

set system domain-search infowatch.io
set system domain-search infowatch.net
set system domain-search infowatch.network

Динамический DNS

Динамический DNS (DDNS) — технология, позволяющая информации на DNS-сервере обновляться в реальном времени и, по желанию, в автоматическом режиме. Она применяется для назначения постоянного доменного имени устройству (компьютеру, сетевому накопителю) с динамическим и статическим IP-адресом.

Система ARMA Стена имеет возможность обновлять удалённую запись DNS при получении нового IP-адреса интерфейса. Для этого в состав системы входит клиент ddclient.

Клиент ddclient использует два способа обновления DNS-записей. Первый способ, в соответствии с RFC 2136, предполагает отправку обновлений непосредственно демону DNS. Второй способ предполагает использование стороннего сервиса, такого как DynDNS.com или другой аналогичный сайт. Этот способ использует HTTP-запросы для передачи нового IP-адреса. В системе ARMA Стена возможно настроить оба этих способа.

Команды настройки DDNS в соответствии с RFC 2136

  1. Создать новую конфигурацию DDNS, которая будет обновлять IP-адрес, назначенный указанному интерфейсу:

set service dns dynamic name <service-name> address interface <interface>

где:

<service-name> – имя службы DDNS;

<interface> – имя сетевого интерфейса.

  1. Указать описание для настраиваемой службы DDNS:

set service dns dynamic name <service-name> description <text>

где <text> - краткое описание <service-name> службы DDNS.

  1. Указать файл, содержащий ключ аутентификации TSIG для обновления RFC2136, совместно используемый с удалённым DNS сервером:

set service dns dynamic name <service-name> key <filename>

где <filename> - имя файла, расположенного в директории /config/auth.

  1. Указать адрес DNS-сервера, используемый при обновлении данного динамического назначения:

set service dns dynamic name <service-name> server <server>

где <server> - адрес DNS-сервера в формате: <x.x.x.x> - для IPv4; <h:h:h:h:h:h:h:h> - для IPv6; <hostname> - полное доменное имя удалённого сервера.

  1. Указать обновляемую зону DNS:

set service dns dynamic name <service-name> zone <zone>

где <zone> - имя зоны DNS.

  1. Указать DNS запись, которая должна быть обновлена:

set service dns dynamic name <service-name> host-name <record>

где <record> - имя хоста для регистрации в службе DDNS.

  1. Указать значение TTL для указанной записи ресурса:

set service dns dynamic name <service-name> ttl <ttl>

где <ttl> - значение TTL в секундах. Возможно указать значение в диапазоне от «0» до «2147483647». По умолчанию используется значение «600».

  1. Указать интервал обновления DDNS:

set service dns dynamic interval <60-3600>

где <60-3600> - интервал обновления в секундах. Возможно указать значение в диапазоне от «60» до «3600». По умолчанию используется значение «300».

Пример настройки DDNS

Необходимо зарегистрировать DNS-запись example.arma.ru на DNS-сервере ns1.arma.ru. Для аутентификации используется файл my.key, который находится в директории /config/auth/my.key. Значение TTL должно быть установлено равным 300 секундам.

Для данной настройки необходимо ввести следующие команды:

set service dns dynamic name test-DNS address interface eth0
set service dns dynamic name test-DNS description 'RFC 2136 dynamic dns service'
set service dns dynamic name test-DNS key /config/auth/my.key
set service dns dynamic name test-DNS server ns1.arma.ru
set service dns dynamic name test-DNS zone arma.ru
set service dns dynamic name test-DNS host-name example.arma.ru
set service dns dynamic name test-DNS protocol nsupdate
set service dns dynamic name test-DNS ttl 300
commit
save

Для просмотра настроек необходимо в конфигурационном режиме ввести команду «show service dns dynamic»:

admin@ngfwos# show service dns dynamic
 name test-DNS {
     address {
         interface eth0
     }
     description "RFC 2136 dynamic dns service"
     host-name example.arma.ru
     key /config/auth/my.key
     protocol nsupdate
     server ns1.arma.ru
     ttl 300
     zone arma.ru
 }
[edit]
admin@ngfwos#

Вид записи в конфигурации ddclient:

# ddclient configuration for interface "eth0":
#
# Web service dynamic DNS configuration for test-DNS: [nsupdate, example.arma.ru]
use=if, \
if=eth0, \
protocol=nsupdate, \
server=ns1.arma.ru, \
zone=arma.ru, \
password='/config/auth/my.key', \
ttl=300 \
example.arma.ru

Команды настройки DDNS на основе HTTP

Примечание

В ARMA Стена возможно использовать любые сервисы, основанные на протоколах, поддерживаемых ddclient. Для этого необходимо указать логин, пароль, одно или несколько имён хостов, протокол и сервер.

На одном интерфейсе возможно использовать несколько сервисов.

  1. Создать новую конфигурацию DDNS, которая будет обновлять IP-адрес, назначенный указанному интерфейсу:

set service dns dynamic name <service-name> address interface <interface>

где:

<service-name> – имя службы DDNS;

<interface> – имя сетевого интерфейса.

  1. Указать описание для настраиваемой службы DDNS:

set service dns dynamic name <service-name> description <text>

где <text> - краткое описание <service-name> службы DDNS.

  1. Указать динамическое DNS-имя хоста, связанное с поставщиком DynDNS:

set service dns dynamic name <service-name> host-name <hostname>

где <hostname> - имя хоста для регистрации в службе DDNS.

  1. Указать имя пользователя, используемое при аутентификации запроса на обновление:

set service dns dynamic name <service-name> username <username>

где <username> - имя пользователя.

  1. Указать пароль, используемый при аутентификации запроса на обновление:

set service dns dynamic name <service-name> password <password>
  1. Указать протокол ddclient, используемый для связи с провайдером:

set service dns dynamic name <service-name> protocol <protocol>

где <protocol> - имя протокола. Возможно указать следующие значения:

  • 1984

  • changeip

  • cloudflare

  • digitalocean

  • dinahosting

  • dnsexit2

  • dnsmadeeasy

  • domeneshop

  • dondominio

  • dslreports1

  • duckdns

  • dyndns1

  • dyndns2

  • easydns

  • enom

  • freedns

  • freemyip

  • gandi

  • godaddy

  • googledomains

  • hetzner

  • infomaniak

  • keysystems

  • mythicdyn

  • namecheap

  • nfsn

  • njalla

  • noip

  • nsupdate

  • ovh

  • regfishde

  • sitelutions

  • woima

  • yandex

  • zoneedit1

  1. Указать сервер, на который отправляются запросы на обновление:

set service dns dynamic name <service-name> server <server>

где <server> - адрес удалённого динамического DNS-сервер в формате <x.x.x.x>, <h:h:h:h:h:h:h:h> или <hostname>.

  1. Разрешить явный IPv6-адрес для интерфейса:

set service dns dynamic name <service-name> ip-version ipv6

Пример настройки DDNS

Использовать deSEC (dedyn.io) в качестве предпочтительного поставщика услуг:

set service dns dynamic name dedyn description 'deSEC dynamic dns service'
set service dns dynamic name dedyn username myusername
set service dns dynamic name dedyn password mypassword
set service dns dynamic name dedyn host-name myhostname.dedyn.io
set service dns dynamic name dedyn protocol dyndns2
set service dns dynamic name dedyn server update.dedyn.io
set service dns dynamic name dedyn address interface eth0

Настройки для работы с NAT

По умолчанию ddclient обновляет динамическую DNS-запись, используя IP-адрес, непосредственно подключённый к интерфейсу. Если устройство находится за NAT, то запись будет обновлена и будет указывать на внутренний IP-адрес.

Для того чтобы ddclient определял внешние IP-адреса, необходимо выполнить следующие настройки:

  1. Указать удалённый URL-адрес для получения IP-адреса системы:

set service dns dynamic name <service-name> address web <url>

где <url> - удалённый URL-адрес. ddclient загрузит <url> и попытается извлечь системный IP-адрес из полученного ответа.

  1. Указать шаблон для пропуcка ответов HTTP(S) для извлечения внешнего IP-адреса:

set service dns dynamic name <service-name> address web skip <pattern>

где <pattern> - шаблон для пропуска ответов HTTP(S). Клиент ddclient будет игнорировать все адреса, расположенные перед строкой, указанной в поле <pattern>.

Перенаправляющий DNS

Перенаправляющий DNS-сервер выполняет функцию пересылки полученных рекурсивных запросов вышестоящему кэширующему серверу в виде рекурсивных запросов. Это позволяет снизить нагрузку на кэширующий DNS-сервер.

Перенаправляющий DNS-сервер обладает следующими характеристиками:

  • Способность обрабатывать рекурсивные запросы без выполнения рекурсии.

  • Предоставление локального кэша в ближайшем сетевом расположении.

  • Увеличение гибкости в определении локального доменного пространства.

В системе ARMA Стена перенаправляющий DNS-сервер может работать без вышестоящего DNS-сервера. Он может выступать как в качестве полноценного рекурсивного DNS-сервера, так и пересылать запросы на настраиваемые вышестоящего DNS-серверы.

Команды настройки перенаправляющего DNS

  1. Перенаправлять входящие DNS-запросы на DNS-серверы, настроенные в системе:

set service dns forwarding system
  1. Указать интерфейс, на который DHCP-клиенты направляют DNS-запросы:

set service dns forwarding dhcp <interface>

где <interface> - имя сетевого интерфейса.

  1. Указать адрес и порт DNS-сервера, на который будут передаваться все DNS-запросы:

set service dns forwarding name-server <address> [port <port>]

где:

  • <address> - адрес DNS-сервера в формате <x.x.x.x> для IPv4 и <h:h:h:h:h:h:h:h> для IPv6;

  • <port> - номер порта DNS-сервера. Возможно указать значение в диапазоне от «1» до «65535». По умолчанию используется «53» порт.

Поддерживается возможность указать несколько адресов для использования различных DNS серверов.

  1. Перенаправлять полученные запросы для определенного домена <domain-name> на заданный DNS сервер <address>:

set service dns forwarding domain <domain-name> name-server <address>

Возможно указание нескольких серверов имён. Эта функция может быть использована для разделения конфигурации DNS-горизонта.

Примечание

Это также применимо к зонам с обратным поиском (18.172.in-addr.arpa).

  1. Добавить NTA для домена <domain-name>:

  set service dns forwarding domain <domain-name> addnta

Этот параметр необходимо установить в случае, если домен не поддерживает DNSSEC.
  1. Установить «recursion desired» бит для запросов к вышестоящему DNS-серверу:

set service dns forwarding domain <domain-name> recursion-desired
  1. Указать адрес сети, в которой узлам разрешено использовать перенаправляющий DNS-сервер:

set service dns forwarding allow-from <network>

где <network> - адрес сети в формате <x.x.x.x/x> для IPv4 и <h:h:h:h:h:h:h:h/x> для IPv6.

Сеть 0.0.0.0/0 или ::/0 позволит всем сетям IPv4 и IPv6 обращаться к этому серверу. Однако, как правило, это нежелательно, поскольку открытые DNS-ретрансляторы могут быть использованы для проведения DDoS-атак.

  1. Указать уровень обработки DNSSEC:

set service dns forwarding dnssec <off | process-no-validate | process | log-fail | validate>

где <off | process-no-validate | process | log-fail | validate> - уровень обработки. Перенаправляющий DNS-сервер имеет 5 различных уровней обработки DNSSEC (в порядке от наименьшего к наибольшему уровню обработки):

  • «off» - в этом режиме обработка DNSSEC не выполняется. Перенаправляющий DNS-сервер не будет устанавливать бит DNSSEC OK (DO) в исходящих запросах и будет игнорировать биты DO и AD в запросах;

  • «process-no-validate» - в этом режиме перенаправляющий DNS сервер будет устанавливать DO-бит в исходящих запросах и предоставлять RR-наборы, связанные с DNSSEC RRsets (NSEC, RRSIG), клиентам, которые их запрашивают (с помощью DO-бита в запросе), за исключением зон, предоставляемых с помощью настройки зон для авторизации. В этом режиме он не будет выполнять никаких проверок, даже по запросу клиента. Используется по умолчанию;

  • «process» - поведение перенаправляющего DNS-сервера будет аналогично поведению в режиме «process-no-validate». Однако перенаправляющий DNS сервер попытается проверить данные, если в запросе установлен хотя бы один из битов DO или AD. В этом случае он установит бит AD в ответе, когда данные будут успешно проверены, или отправит SERVFAIL, когда проверка окажется ложной;

  • «log-fail» - в этом режиме перенаправляющий DNS сервер будет пытаться проверить все данные, получаемые с доверенных серверов, независимо от запросов клиента по DNSSEC, и записывать результат проверки в журнал. Этот режим можно использовать для определения дополнительной нагрузки и количества возможных фиктивных ответов перед включением полномасштабной проверки. Ответы на запросы клиента такие же, как и в «process».

  • «validate» - максимальный режим обработки DNSSEC. В этом режиме все запросы будут проверены и в случае обнаружения нелегитимных данных будет отправлен ответ SERVFAIL, независимо от запроса клиента.

Примечание

Инструмент Dig для Unix/Linux при выполнении запроса устанавливает AD-бит, что может привести к неожиданным результатам запроса при тестировании. В таком случае рекомендуется использовать опцию +noad в командной строке dig.

Примечание

CD бит корректно выполняется для «process» и «validate». Для «log-fail» сбои также будут регистрироваться.

  1. Отключить поиск по имени узла в файле /etc/hosts для перенаправляющего DNS-сервера:

set service dns forwarding ignore-hosts-file

DHCP-сервер системы ARMA Стена использует этот файл для добавления резолверов к назначенным адресам.

  1. Указать максимальное количество записей кэша DNS:

set service dns forwarding cache-size <0-2147483647>

где <0-2147483647> - значение максимального количества записей кэша DNS. Возможно указать значение в диапазоне от «0» до «2147483647». По умолчанию используется значение «10000».

  1. Установить максимальное время кэширования отрицательных записей:

set service dns forwarding negative-ttl <0-7200>

где <0-7200> - значение времени для кэширования записей NXDOMAIN в секундах. Возможно указать значение в диапазоне от «0» до «7200». По умолчанию используется значение «3600».

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

  1. Установить время, в течение которого необходимо ожидать ответа удалённого сервера, прежде чем прервать работу и выдать ответ SERVFAIL:

set service dns forwarding timeout <10-60000>

где <10-60000> - значение времени ожидания ответа от удалённого сервера в миллисекундах. Возможно указать значение в диапазоне от «10» до «60000». По умолчанию используется значение «1500».

  1. Указать локальные IPv4 или IPv6 адреса, к которым будет привязан перенаправляющий DNS-сервер:

set service dns forwarding listen-address <address>

где <address> - локальный адрес в формате <x.x.x.x> для IPv4 и <h:h:h:h:h:h:h:h> для IPv6. Эти адреса перенаправляющий DNS сервер будет использовать для прослушивания входящих соединений.

  1. Указать локальные IPv4 или IPv6 адреса, используемые в качестве адреса источника для отправки запросов:

set service dns forwarding source-address <address>

где <address> - локальный адрес в формате <x.x.x.x> для IPv4 и <h:h:h:h:h:h:h:h> для IPv6. С этого адреса перенаправляющий DNS сервер будет отправлять перенаправленные на него исходящие DNS запросы.

  1. Включить параметр, который делает перенаправляющий DNS-сервер неизвестным для зон: 10.in-addr.arpa, 168.192.in-addr.arpa, 16-31.172.in-addr.arpa, что позволяет использовать вышестоящие DNS-серверы для обратного поиска этих зон:

set service dns forwarding no-serve-rfc1918

Команды мониторинга и эксплуатация

  1. Показать статистику работы перенаправляющего DNS-сервера:

admin@ngfwos:~$ show dns forwarding statistics
  1. Сброс кэша переадресации DNS:

admin@ngfwos:~$ reset dns forwarding <all | domain <domain-name>>

Возможно очистить кэш для всех записей или только для записей, связанных с определённым доменом.

  1. Перезапустить процесс перенаправляющего DNS-сервера:

admin@ngfwos:~$ restart dns forwarding

При этом происходит очистка локального кэша переадресации DNS.

Пример настройки

Пример настройки разделённого DNS (split DNS) для домена example.com.

Для настройки разделённого DNS будут использоваться следующие параметры:

  1. Все DNS-запросы для домена example.com будут перенаправляться на DNS-сервер по адресу 192.0.2.254 и 2001:db8:cafe::1.

  2. Все остальные DNS-запросы будут перенаправлены на другой набор DNS-серверов по адресам 192.0.2.1, 192.0.2.2, 2001:db8::1:ffff и 2001:db8::2:ffff.

  3. Перенаправляющий DNS-сервер будет прослушивать запросы только по адресам внутреннего интерфейса eth1 — 192.168.1.254 для IPv4 и 2001:db8::ffff для IPv6.

  4. Перенаправляющий DNS-сервер будет принимать запросы на поиск только из внутренних подсетей — 192.168.1.0/24 и 2001:db8::/64.

  5. Перенаправляющий DNS-сервер будет передавать обратные запросы на поиск для зон 10.in-addr.arpa, 168.192.in-addr.arpa, 16-31.172.in-addr.arpa на вышестоящий сервер.

Список команд для настройки:

set service dns forwarding domain example.com name-server 192.0.2.254
set service dns forwarding domain example.com name-server 2001:db8:cafe::1
set service dns forwarding name-server 192.0.2.1
set service dns forwarding name-server 192.0.2.2
set service dns forwarding name-server 2001:db8::1:ffff
set service dns forwarding name-server 2001:db8::2:ffff
set service dns forwarding listen-address 192.168.1.254
set service dns forwarding listen-address 2001:db8::ffff
set service dns forwarding allow-from 192.168.1.0/24
set service dns forwarding allow-from 2001:db8::/64
set service dns forwarding no-serve-rfc1918