DNS
Система доменных имён (DNS) представляет собой распределённую базу данных, которая устанавливает соответствие между понятными для человека доменными именами и числовыми IP-адресами. Эти соответствия фиксируются в ресурсных записях, которые хранятся на серверах имён, расположенных по всему интернету. Устройство, которому требуется получить доступ к узлу через интернет, отправляет запрос DNS на сервер имён. Сервер имён считывает свои ресурсные записи и возвращает ответ с IP-адресом указанного имени.
Система ARMA Стена предоставляет три основные функции, связанные с DNS:
системный DNS;
динамический DNS;
перенаправляющий DNS.
Системный DNS
В системном DNS задаётся список серверов имён, используемых системой ARMA Стена для преобразования доменных имён в IP-адреса.
Примечание
На текущий момент маршрутизация DNS-запросов через VRF не поддерживается. Все DNS-запросы выполняются в контексте глобальной таблицы маршрутизации.
Для добавления DNS-сервера используется команда:
set system name-server <address>где <address> – IP-адрес DNS-сервера в формате <x.x.x.x> для IPv4 и <h:h:h:h:h:h:h:h> для IPv6, либо имя сетевого интерфейса, на котором активирован DHCP-клиент.
Поддерживается указание нескольких DNS-серверов. Каждый сервер настраивается отдельной командой set system name-server.
Просмотр списка DNS-серверов:
в конфигурационном режиме:
admin@ngfwos# show system name-server name-server 9.9.9.9 name-server 8.8.8.8 [edit] admin@ngfwos#
в эксплуатационном режиме:
admin@ngfwos:~$ show configuration | match name-server configure-command "delete system name-server" configure-command "set system name-server" configure-command "copy system name-server" configure-command "delete system name-server" configure-command "rename system name-server" configure-command "set system name-server" configure-command "show system name-server" name-server 9.9.9.9 name-server 8.8.8.8 admin@ngfwos:~$
Домены для разрешения неквалифицированных имён
Для разрешения неквалифицированных (неполных) имён система использует список доменов поиска. При выполнении запроса к хосту без указания доменной части система последовательно дополняет запрашиваемое имя каждым из доменов из данного списка до тех пор, пока не будет получено корректное разрешение.
Добавление домена в список поиска осуществляется командой:
set system domain-search <domain>где <domain> – доменное имя, используемое для дополнения неполных имён при разрешении DNS-запросов. Установлены следующие ограничения:
максимальное количество доменов в списке - 6;
максимальная длина полного доменного имени - 253 символа;
максимальное количество меток (элементов, разделённых точками) - 127;
длина отдельной метки - не более 63 символов;
метка не может начинаться или заканчиваться дефисом;
разрешённые символы: латинские буквы (a–z), цифры (0–9), дефисы (-) и точки (.) в качестве разделителей меток.
Пример конфигурации доменов поиска:
Настройка системы на попытку завершения домена в следующем порядке: infowatch.io (первый), infowatch.net (второй) и infowatch.network (последний):
set system domain-search infowatch.io set system domain-search infowatch.net set system domain-search infowatch.networkПросмотр списка доменов поиска:
в конфигурационном режиме:
admin@ngfwos# show system domain-search domain-search infowatch.io [edit] admin@ngfwos#
в эксплуатационном режиме:
admin@ngfwos:~$ show configuration | match domain-search domain-search infowatch.io configure-command "delete system domain-search" configure-command "set system domain-search" admin@ngfwos:~$
Динамический DNS
Динамический DNS (DDNS) — технология, позволяющая информации на DNS-сервере обновляться в реальном времени и, по желанию, в автоматическом режиме. Она применяется для назначения постоянного доменного имени устройству (компьютеру, сетевому накопителю) с динамическим и статическим IP-адресом.
Система ARMA Стена имеет возможность обновлять удалённую запись DNS при получении нового IP-адреса интерфейса. Для этого в состав системы входит клиент ddclient.
Клиент ddclient использует два способа обновления DNS-записей. Первый способ, в соответствии с RFC 2136, предполагает отправку обновлений непосредственно демону DNS. Второй способ предполагает использование стороннего сервиса, такого как DynDNS.com или другой аналогичный сайт. Этот способ использует HTTP-запросы для передачи нового IP-адреса. В системе ARMA Стена возможно настроить оба этих способа.
Команды настройки DDNS в соответствии с RFC 2136
Создать новую конфигурацию DDNS, которая будет обновлять IP-адрес, назначенный указанному интерфейсу:
set service dns dynamic name <service-name> address interface <interface>где:
<service-name> – имя службы DDNS;
<interface> – имя сетевого интерфейса.
Указать описание для настраиваемой службы DDNS:
set service dns dynamic name <service-name> description <text>где <text> - краткое описание <service-name> службы DDNS.
Указать файл, содержащий ключ аутентификации TSIG для обновления RFC2136, совместно используемый с удалённым DNS сервером:
set service dns dynamic name <service-name> key <filename>где <filename> - имя файла, расположенного в директории /config/auth.
Указать адрес 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> - полное доменное имя удалённого сервера.
Указать обновляемую зону DNS:
set service dns dynamic name <service-name> zone <zone>где <zone> - имя зоны DNS.
Указать DNS запись, которая должна быть обновлена:
set service dns dynamic name <service-name> host-name <record>где <record> - имя хоста для регистрации в службе DDNS.
Указать значение TTL для указанной записи ресурса:
set service dns dynamic name <service-name> ttl <ttl>где <ttl> - значение TTL в секундах. Возможно указать значение в диапазоне от «0» до «2147483647». По умолчанию используется значение «600».
Указать интервал обновления 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. Для этого необходимо указать логин, пароль, одно или несколько имён хостов, протокол и сервер.
На одном интерфейсе возможно использовать несколько сервисов.
Создать новую конфигурацию DDNS, которая будет обновлять IP-адрес, назначенный указанному интерфейсу:
set service dns dynamic name <service-name> address interface <interface>где:
<service-name> – имя службы DDNS;
<interface> – имя сетевого интерфейса.
Указать описание для настраиваемой службы DDNS:
set service dns dynamic name <service-name> description <text>где <text> - краткое описание <service-name> службы DDNS.
Указать динамическое DNS-имя хоста, связанное с поставщиком DynDNS:
set service dns dynamic name <service-name> host-name <hostname>где <hostname> - имя хоста для регистрации в службе DDNS.
Указать имя пользователя, используемое при аутентификации запроса на обновление:
set service dns dynamic name <service-name> username <username>где <username> - имя пользователя.
Указать пароль, используемый при аутентификации запроса на обновление:
set service dns dynamic name <service-name> password <password>
Указать протокол 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
Указать сервер, на который отправляются запросы на обновление:
set service dns dynamic name <service-name> server <server>где <server> - адрес удалённого динамического DNS-сервер в формате <x.x.x.x>, <h:h:h:h:h:h:h:h> или <hostname>.
Разрешить явный 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-адреса, необходимо выполнить следующие настройки:
Указать удалённый URL-адрес для получения IP-адреса системы:
set service dns dynamic name <service-name> address web <url>где <url> - удалённый URL-адрес. ddclient загрузит <url> и попытается извлечь системный IP-адрес из полученного ответа.
Указать шаблон для пропу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
Перенаправлять входящие DNS-запросы на DNS-серверы, настроенные в системе:
set service dns forwarding system
Указать интерфейс, на который DHCP-клиенты направляют DNS-запросы:
set service dns forwarding dhcp <interface>где <interface> - имя сетевого интерфейса.
Указать адрес и порт 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 серверов.
Перенаправлять полученные запросы для определённого домена <domain-name> на заданный DNS сервер <address>:
set service dns forwarding domain <domain-name> name-server <address>Возможно указание нескольких серверов имён. Эта функция может быть использована для разделения конфигурации DNS-горизонта.
Примечание
Это также применимо к зонам с обратным поиском (18.172.in-addr.arpa).
Добавить NTA для домена <domain-name>:
set service dns forwarding domain <domain-name> addnta Этот параметр необходимо установить в случае, если домен не поддерживает DNSSEC.
Установить «recursion desired» бит для запросов к вышестоящему DNS-серверу:
set service dns forwarding domain <domain-name> recursion-desired
Указать адрес сети, в которой узлам разрешено использовать перенаправляющий 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-атак.
Указать уровень обработки 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» сбои также будут регистрироваться.
Отключить поиск по имени узла в файле /etc/hosts для перенаправляющего DNS-сервера:
set service dns forwarding ignore-hosts-fileDHCP-сервер системы ARMA Стена использует этот файл для добавления резолверов к назначенным адресам.
Указать максимальное количество записей кэша DNS:
set service dns forwarding cache-size <0-2147483647>где <0-2147483647> - значение максимального количества записей кэша DNS. Возможно указать значение в диапазоне от «0» до «2147483647». По умолчанию используется значение «10000».
Установить максимальное время кэширования отрицательных записей:
set service dns forwarding negative-ttl <0-7200>где <0-7200> - значение времени для кэширования записей NXDOMAIN в секундах. Возможно указать значение в диапазоне от «0» до «7200». По умолчанию используется значение «3600».
Запрос, на который нет подтверждённого ответа, кэшируется, чтобы впоследствии быстро исключить DNS запись, не создавая большой нагрузки на удалённый сервер.
Установить время, в течение которого необходимо ожидать ответа удалённого сервера, прежде чем прервать работу и выдать ответ SERVFAIL:
set service dns forwarding timeout <10-60000>где <10-60000> - значение времени ожидания ответа от удалённого сервера в миллисекундах. Возможно указать значение в диапазоне от «10» до «60000». По умолчанию используется значение «1500».
Указать локальные 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 сервер будет использовать для прослушивания входящих соединений.
Указать локальные 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 запросы.
Включить параметр, который делает перенаправляющий DNS-сервер неизвестным для зон: 10.in-addr.arpa, 168.192.in-addr.arpa, 16-31.172.in-addr.arpa, что позволяет использовать вышестоящие DNS-серверы для обратного поиска этих зон:
set service dns forwarding no-serve-rfc1918
Команды мониторинга и эксплуатация
Показать статистику работы перенаправляющего DNS-сервера:
admin@ngfwos:~$ show dns forwarding statistics
Сброс кэша переадресации DNS:
admin@ngfwos:~$ reset dns forwarding <all | domain <domain-name>>Возможно очистить кэш для всех записей или только для записей, связанных с определённым доменом.
Перезапустить процесс перенаправляющего DNS-сервера:
admin@ngfwos:~$ restart dns forwardingПри этом происходит очистка локального кэша переадресации DNS.
Пример настройки
Пример настройки разделённого DNS (split DNS) для домена example.com.
Для настройки разделённого DNS будут использоваться следующие параметры:
Все DNS-запросы для домена example.com будут перенаправляться на DNS-сервер по адресу 192.0.2.254 и 2001:db8:cafe::1.
Все остальные DNS-запросы будут перенаправлены на другой набор DNS-серверов по адресам 192.0.2.1, 192.0.2.2, 2001:db8::1:ffff и 2001:db8::2:ffff.
Перенаправляющий DNS-сервер будет прослушивать запросы только по адресам внутреннего интерфейса eth1 — 192.168.1.254 для IPv4 и 2001:db8::ffff для IPv6.
Перенаправляющий DNS-сервер будет принимать запросы на поиск только из внутренних подсетей — 192.168.1.0/24 и 2001:db8::/64.
Перенаправляющий 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