Product SiteDocumentation Site

6.2.3. nsupdate

Утилита nsupdate используется для отправки запросов на обновление динамического DNS серверу имен в соответствии со стандартом RFC 2136. С ее помощью можно добавлять или удалять записи ресурсов из зоны без необходимости правки зонного файла вручную. Один запрос на обновление может содержать запросы на добавление или удаление нескольких записей ресурсов.
Синтаксис команды nsupdate:
nsupdate [-dDi] [-L level] [-l][-g | -o | -y keyname:secret | -k keyfile] [-v] [-V] [-P] [-T] [-4 | -6] [filename]

Таблица 6.6. Опции команды nsupdate

Ключ
Описание
-4
Использовать только IPv4
-6
Использовать только IPv6
-d
Включить режим отладки
-D
Включить дополнительный режим отладки
-i
Принудительно включить интерактивный режим, даже если стандартный ввод не является терминалом
-k keyfile
Позволяет указать файл, содержащий ключ аутентификации TSIG. Файлы могут быть в двух форматах: один файл, содержащий оператор ключа named.conf-format, который может быть автоматически сгенерирован ddns-confgen; или пара файлов, имена которых имеют формат K{name}.+157.+{random}.key и K{name}.+157.+{random}.private, которые могут быть сгенерированы dnssec-keygen. Параметр -k также может использоваться для указания ключа SIG(0), используемого для аутентификации запросов на обновление Dynamic DNS. В этом случае указанный ключ не является ключом HMAC-MD5
-l
Установить режим локального хоста. Адрес сервера будет установлен на на localhost (отключая сервер, чтобы адрес сервера не мог быть переопределен). Подключения к локальному серверу используют ключ TSIG, найденный в /var/run/named/session.key, который автоматически генерируется named, если какая-либо локальная первичная зона установила update-policy на local. Расположение этого файла ключа можно переопределить с помощью опции -k
-L level
Установить уровень отладки ведения журнала. Если 0, ведение журнала отключено
-p port
Установить порт для подключения к серверу имен. Значение по умолчанию — 53
-P
Вывести список частных типов записей ресурсов BIND, формат которых понимает nsupdate
-r udpretries
Установить количество повторных попыток UDP. Значение по умолчанию — 3. Если 0, выполняется только один запрос на обновление
-t timeout
Установить максимальное время, которое может занять запрос на обновление, прежде чем он будет прерван. Значение по умолчанию — 300 секунд. Если 0, тайм-аут отключен
-T
Вывести список стандартных типов записей ресурсов IANA, формат которых понимает nsupdate. nsupdate завершает работу после вывода списков. Параметр -T можно комбинировать с параметром -P.
Другие типы можно ввести с помощью TYPEXXXXX, где XXXXX — это десятичное значение типа без начальных нулей. Rdata, если они присутствуют, анализируются с использованием формата UNKNOWN rdata (<обратная косая черта> <хэш> <пробел> <длина> <пробел> <шестнадцатеричная строка>)
-u udptimeout
Задать интервал повтора UDP. Значение по умолчанию — 3 секунды. Если равно 0, интервал вычисляется из интервала тайм-аута и количества повторов UDP
-v
Указывает, что TCP следует использовать даже для небольших запросов на обновление. По умолчанию nsupdate использует UDP для отправки запросов на обновление на сервер имен, если только они не слишком велики для того, чтобы поместиться в запрос UDP, в этом случае используется TCP. TCP может быть предпочтительнее, когда выполняется пакет запросов на обновление
-V
Вывести номер версии
-y [hmac:]keyname:secret
Задает буквальный ключ аутентификации TSIG. keyname — имя ключа, а secret — общий секрет в кодировке base64. hmac — имя алгоритма ключа; допустимые варианты: hmac-md5, hmac-sha1, hmac-sha224, hmac-sha256, hmac-sha384 или hmac-sha512. Если hmac не указан, по умолчанию используется hmac-md5 или, если MD5 отключен, hmac-sha256.

Примечание

Использование опции -y не рекомендуется, поскольку общий секрет предоставляется как аргумент командной строки в виде открытого текста.
nsupdate считывает входные данные из filename или стандартного ввода. Каждая команда предоставляется ровно в одной строке ввода. Некоторые команды предназначены для административных целей; другие — это либо инструкции по обновлению, либо проверки предварительных условий содержимого зоны. Эти проверки устанавливают условия, что некоторое имя или набор записей ресурсов (RRset) либо существует, либо отсутствует в зоне. Эти условия должны быть выполнены, чтобы весь запрос на обновление был успешным. Обновления отклоняются, если тесты на предварительные условия не пройдены.
Каждый запрос на обновление состоит из нуля или более предварительных условий и нуля или более обновлений. Это позволяет соответствующим образом аутентифицированному запросу на обновление продолжить работу, если некоторые указанные записи ресурсов либо присутствуют, либо отсутствуют в зоне. Пустая строка ввода (или команда send) приводит к отправке накопленных команд как одного запроса на обновление Dynamic DNS на сервер имен.

Таблица 6.7. Форматы команд и их значения

Команда
Описание
server servername port
Отправить все динамические запросы на обновление на сервер имен servername. Если не указано ни одного оператора сервера, nsupdate отправляет обновления на основной сервер правильной зоны. Поле MNAME записи SOA этой зоны определяет основной сервер для этой зоны. port — это номер порта на servername, куда отправляются динамические запросы на обновление. Если номер порта не указан, используется номер порта DNS по умолчанию 53.

Примечание

Эта команда не действует, если используется GSS-TSIG.
local address port
Отправить все динамические запросы на обновление, используя локальный адрес. Если локальный оператор не указан, nsupdate отправляет обновления, используя адрес и порт, выбранные системой. port также может использоваться для принудительного поступления запросов с определенного порта. Если номер порта не указан, система назначает его
zone zonename
Указывает, что все обновления должны быть сделаны в зоне zonename. Если оператор zone не указан, nsupdate пытается определить правильную зону для обновления на основе остальной части ввода
class classname
Указывает класс по умолчанию. Если класс не указан, класс по умолчанию — IN
ttl seconds
Указывает время жизни по умолчанию в секундах для добавляемых записей. Значение none очищает TTL по умолчанию
key hmac:keyname secret
Указывает, что все обновления должны быть подписаны TSIG с использованием пары keyname-secret. Если указан hmac, он устанавливает используемый алгоритм подписи. Значение по умолчанию — hmac-md5; если MD5 отключен, то по умолчанию используется hmac-sha256. Команда key переопределяет любой ключ, указанный в командной строке с помощью -y или -k
gsstsig
Эта команда использует GSS-TSIG для подписи обновлений. Это эквивалентно указанию -g в командной строке
oldgsstsig
Эта команда использует версию GSS-TSIG для Windows 2000 для подписи обновлений. Это эквивалентно указанию -o в командной строке
realm [realm_name]
При использовании GSS-TSIG эта команда указывает использование realm_name вместо realm по умолчанию в krb5.conf. Если realm не указан, сохраненная realm очищается
check-names [yes_or_no]
Включить или выключить обработку check-names для добавляемых записей. Check-names не влияет на предварительные условия или удаляемые записи. По умолчанию обработка check-names включена. Если обработка check-names завершается неудачей, запись не добавляется в сообщение UPDATE
prereq nxdomain domain-name
Эта команда требует, чтобы не существовало ни одной записи ресурса любого типа с именем domain-name
prereq yxdomain domain-name
Эта команда требует, чтобы существовал domain-name (как минимум одна запись ресурса любого типа)
prereq nxrrset domain-name class type
Эта команда требует, чтобы не существовало ни одной записи ресурса указанного типа, класса и domain-name. Если class не указан, предполагается IN (Интернет)
prereq yxrrset domain-name class type
Для этой команды требуется, чтобы существовала запись ресурса указанного типа, класса и доменного имени. Если class не указан, предполагается IN (Интернет)
prereq yxrrset domain-name class type data
С помощью этой команды данные из каждого набора предварительных условий этой формы, имеющих общий тип, класс и доменное имя, объединяются для формирования набора RR. Этот набор RR должен точно соответствовать набору RR, существующих в зоне с указанным типом, классом и доменным именем. Данные записываются в стандартном текстовом представлении RDATA записи ресурса
update delete domain-name ttl class type data
Удалить все записи ресурсов с именем domain-name. Если указаны type и data, удаляются только соответствующие записи ресурсов. Если class не указан, предполагается класс Internet. TTL игнорируется и допускается только для совместимости
update add domain-name ttl class type data
Добавить новую запись ресурса с указанным ttl, class и data
show
Отобразить текущее сообщение, содержащее все предварительные условия и обновления, указанные с момента последней отправки
send
Отправить текущее сообщение (эквивалентно вводу пустой строки)
answer
Отобразить ответ
debug
Включить отладку
version
Вывести номер версии
help
Вывести список команд

Примечание

Строки, начинающиеся с точки с запятой (;), являются комментариями и игнорируются.
При использовании утилиты nsupdate для динамического обновления DNS-записей в доменных средах AD, необходимо использовать механизм аутентификации GSS-TSIG, который использует Kerberos-билет для аутентификации машины в домене. Kerberos-билет используется при обновлении DNS-записей с помощью nsupdate с флагом -g.
Перед выполнением команды nsupdate -g необходимо получить Kerberos-билет для машинного аккаунта с помощью команды:
# kinit -k 'MACHINENAME$'

Примечание

Имя машинного аккаунта можно узнать, используя команду hostname -s. В команде kinit имя машинного аккаунта нужно указывать в верхнем регистре со знаком $, например:
# hostname -s
comp01
# kinit -k 'COMP01$'
В следующих примерах показано использование команды nsupdate для добавления и удаления записей ресурсов из зоны test.alt.
  • Удалить записи A для oldhost.test.alt и добавить запись A для newhost.test.alt с IP-адресом 192.168.0.195:
    # nsupdate -g
    > update delete oldhost.test.alt A
    > update add newhost.test.alt 86400 A 192.168.0.195
    > send
    
    Новая запись будет имеет TTL 1 день (86400 секунд).
  • Указать предварительное условие перед обновлением DNS-сервера:
    # nsupdate -g
    > prereq nxdomain nickname.test.alt
    > update add nickname.test.alt 86400 CNAME somehost.test.alt
    > send
    
    Предварительное условие позволяет серверу имен проверить, нет ли записей о ресурсах любого типа для nickname.test.alt. Если в зоне есть записи ресурсов, запрос на обновление не выполняется. Если этого имени не существует, добавляется CNAME.