nsupdate: динамический редактор зон DNS

nsupdate: динамический редактор зон DNS.

Содержание

1 Общая информация

  • nsupdate используется для внесения изменений в динамический DNS без необходимости редактирования файлов зоны и перезапуска DNS-сервера.

2 Обновление зоны по ключу

2.1 Создание ключа

  • Создадим ключ для зоны example.com:
    1mkdir -p /etc/named/keys
    2tsig-keygen -a HMAC-SHA256 example.com > /etc/named/keys/example.com.key
    
  • Файл /etc/named/keys/example.com.key будет иметь следующий вид:
    1key "example.com" {
    2    algorithm hmac-sha256;
    3    secret "KbWuOipDOQ80ZoCiSWxhJmulLmaWSNgw43v9KkUQZBY=";
    4};
    

2.2 Настройка DNS Bind

  • Настройка происходит в файле /etc/named.conf.
  • Ключ скопируем на хост с DNS-сервером (если это другой сервер).
  • Поместим его в файл /etc/named/keys/example.com.key.
  • Подключим ключ:
    1include "/etc/named/keys/example.com.key";
    
  • Разрешим обновление зон:
     1zone "example.com" IN {
     2     type master;
     3     file "local.zone.db";
     4     allow-update { key "example.com"; };
     5};
     6
     7zone "0.168.192.in-addr.arpa" IN {
     8     type master;
     9     file "192.168.0.db";
    10     allow-update { key "example.com"; };
    11};
    
  • Поправим права доступа:
    1chown -R named:named /var/named
    2chown -R named:named /etc/named
    3find /var/named -type d -exec chmod 770 {} \;
    4find /var/named -type f -exec chmod 660 {} \;
    

3 Использование nsupdate

3.1 Вызов nsupdate

  • При запуске nsupdate вы попадете в базовую среду командной строки для отправки команд обновления в DNS.
  • Опции запуска:
    • -v : связь с DNS должна осуществляться по протоколу TCP, а не UDP;
    • -k : указывает на файл ключа.
  • Вызов nsupdate:
    1nsupdate -v -k /etc/named/keys/example.com.key
    
  • Чтобы выйти из сеанса nsupdate, просто нажмите CTRL-D или введите quit и нажмите RETURN.

3.2 Удаление записи

  • Безоговорочное удаление записи DNS (например, записи CNAME www.example.com).
  • В командной строке nsupdate введите:
    1> update delete www.example.com cname
    2> send
    
  • Когда вы вводите send и нажимаете RETURN, запрос на обновление создаётся, подписывается и отправляется на соответствующий DNS-сервер.
  • Если ключ был авторизован для выполнения запроса, DNS обновит свою базу данных, обновит файлы журнала, увеличит серийный номер записи SOA и отправит уведомление об изменении всем подчиненным DNS.
  • Подчинённые устройства запустят AXFR (или IXFR) для сбора обновлений с главного DNS.

3.3 Несколько обновлений

  • Чтобы сэкономить время и уменьшить DNS-трафик, можно одновременно отправить несколько запросов на обновление в одном пакете:
    1> update delete www.example.com cname
    2> update delete www1.example.com a
    3> update delete www2.example.com a
    4> update delete www3.example.com a
    5> send
    
  • Все обновления в одном пакете send должны относиться к одной и той же зоне.
  • Особенности реализации: из-за фиксированного входного буфера более 2000 запросов за раз иногда не проходят.

3.4 Добавление записей

  • Добавим записи A, CNAME и PTR. При добавлении необходимо указать TTL — время жизни записи в секундах:
    1> update add www1.example.com 86400 a 172.16.1.1
    2> update add www.example.com 600 cname www1.example.com.
    3> send
    4> update add 1.1.16.172.in-addr.arpa 86400 ptr www1.example.com.
    5> send
    

3.5 Неинтерактивное использование

  • Неинтерактивный запуск: можно указать файл, содержащий пакет команд, или просто передать их по STDIN.

3.5.1 С помощью файла

  • Например, создадим файл batch.txt:
    1update delete www.example.com cname
    2update delete www1.example.com a
    3update delete www2.example.com a
    4update delete www3.example.com a
    5send
    
  • Запустите его, выполнив:
    1nsupdate -v -k /etc/named/keys/example.com.key batch.txt
    

3.5.2 Удалить все записи A, начинающиеся с www, в зоне example.com

  • Удалить все записи A, начинающиеся с www, в зоне example.com:
    1( host -t a -l example.com | grep -i '^www' | awk '{ print "update delete "$1" a" }' ; echo send ) | nsupdate -v -k /etc/named/keys/example.com.key
    

3.5.3 Добавить хост

  • Добавим хост www.example.com:
    1echo -e "update add www.example.com 86400 a 192.168.1.1\nshow\nsend" | nsupdate -v -k /etc/named/keys/example.com.key
    

4 Материалы


Дмитрий Сергеевич Кулябов
Дмитрий Сергеевич Кулябов
Профессор кафедры теории вероятностей и кибербезопасности

Мои научные интересы включают физику, администрирование Unix и сетей.

Похожие