Обновление динамических зон DNS с помощью nsupdate
Одна из зон сервера сделана динамической, для автоматического получения сертификатов от Let’s Encrypt. Она не применяется для других целей, но тоже иногда требует обновления данных.
Посмотреть текущее содержимое зоны можно из командной строки, в нашем случае доступ организован только из командной строки самого сервера.
host -l -a ad-easy.ru
Trying "ad-easy.ru" ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15914 ;; flags: qr aa ra; QUERY: 1, ANSWER: 14, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;ad-easy.ru. IN AXFR ;; ANSWER SECTION: ad-easy.ru. 3600 IN SOA ns0.ad-easy.ru. hostmaster.ad-easy.ru. 2020110657 43200 7200 1209600 86400 ad-easy.ru. 3600 IN NS ns0.net-easy.ru. ad-easy.ru. 3600 IN NS ns1.net-easy.ru. ad-easy.ru. 3600 IN A 78.46.77.166 ad-easy.ru. 3600 IN MX 10 mx.ad-easy.ru. ftp.ad-easy.ru. 3600 IN CNAME www.ad-easy.ru. imap.ad-easy.ru. 3600 IN A 5.9.71.4 mail.ad-easy.ru. 3600 IN A 5.9.71.4 mx.ad-easy.ru. 3600 IN A 5.9.71.4 ns0.ad-easy.ru. 3600 IN A 78.46.77.166 ns1.ad-easy.ru. 3600 IN A 159.69.222.21 smtp.ad-easy.ru. 3600 IN A 5.9.71.4 www.ad-easy.ru. 3600 IN A 78.46.77.166 ad-easy.ru. 3600 IN SOA ns0.ad-easy.ru. hostmaster.ad-easy.ru. 2020110657 43200 7200 1209600 86400
В данном случае, проще сказать, что же тут правильного? Практически вся зона нуждается в корректировке.
Делаем простой скрипт, что бы не вводить длинные пути руками.
root@main:/usr/local/etc/namedb # vim dzone_update.sh
#!/bin/sh export LANG=C # disable current os localization PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin keyfile='/usr/local/etc/namedb/keys/update.key' updscript='./zoneupd.txt' /usr/local/bin/nsupdate -k $keyfile $updscript
chmod +x dzone_update.sh
В том же каталоге заводим текстовый файл zoneupd.txt в котором и пропишем команды для nsupdate.
vim zoneupd.txt
server 127.0.0.1 zone ad-easy.ru update delete ad-easy.ru. 3600 IN SOA update add ad-easy.ru. 3600 IN SOA ns0.net-easy.ru. info.net-easy.ru. 2022031801 43200 7200 1209600 86400 show send answer update delete ad-easy.ru. IN A update add ad-easy.ru. 3600 IN A 83.222.15.147 update delete ftp.ad-easy.ru. IN CNAME update delete imap.ad-easy.ru. IN A update delete mail.ad-easy.ru. IN A update delete mx.ad-easy.ru. IN A update delete ns0.ad-easy.ru. IN A update delete ns1.ad-easy.ru. IN A update delete smtp.ad-easy.ru. IN A update delete www.ad-easy.ru. IN A update delete ad-easy.ru. IN MX update add ad-easy.ru. 3600 IN MX 10 mx.net-easy.ru. show send answer
Вносить изменения при изменении SOA, лучше двумя сообщениями. При добавлении SOA необходимо руками внести новый серийный номер для зоны. В данном случае он выделен жирным шрифтом. При изменении записей других типов серийный номер изменится автоматически.
В первой строке указывается сервер, с которым мы планируем работать. Скрипт надо выполнять там, где располагается первичный DNS сервер.
Во второй строке указана зона, в которую необходимо внести изменения.
Третья строка удалает запись типа SOA с неактуальными данными.
Четвёртая строка добавляет эту запись, но уже исправленную. Запись типа SOA может быть только одна, потому можно обойтись и одной строкой, которая добавляет нужную запись, с нужным серийным номером. Она перезапишет старые данные.
Сообщение для сервера сформировано и команда show отобразит его на экране. Далее команда send передаст его серверу DNS и команда answer покажет результат работ.
Запускаем скрипт: ./dzone_update.sh
Результат выполнения данного скрипта:
Outgoing update query: ;; ->>HEADER<<- opcode: UPDATE, status: NOERROR, id: 0 ;; flags:; ZONE: 0, PREREQ: 0, UPDATE: 0, ADDITIONAL: 0 ;; ZONE SECTION: ;ad-easy.ru. IN SOA ;; UPDATE SECTION: ad-easy.ru. 0 ANY SOA ad-easy.ru. 3600 IN SOA ns0.net-easy.ru. info.net-easy.ru. 2022031801 43200 7200 1209600 86400 Answer: ;; ->>HEADER<<- opcode: UPDATE, status: NOERROR, id: 63841 ;; flags: qr; ZONE: 1, PREREQ: 0, UPDATE: 0, ADDITIONAL: 1 ;; ZONE SECTION: ;ad-easy.ru. IN SOA ;; TSIG PSEUDOSECTION: update. 0 ANY TSIG hmac-sha512. 1647588662 300 64 LqBunHp98nLAOwMWNX+iml2w72fCtX7lkVuyMuTHD 5HTAoklM4KOb2XA lwA6VoCXcY0dDOj6JSNLz94nJQq3IQ== 63841 NOERROR 0 Outgoing update query: ;; ->>HEADER<<- opcode: UPDATE, status: NOERROR, id: 0 ;; flags:; ZONE: 0, PREREQ: 0, UPDATE: 0, ADDITIONAL: 0 ;; ZONE SECTION: ;ad-easy.ru. IN SOA ;; UPDATE SECTION: ad-easy.ru. 0 ANY A ad-easy.ru. 3600 IN A 83.222.15.147 ftp.ad-easy.ru. 0 ANY CNAME imap.ad-easy.ru. 0 ANY A mail.ad-easy.ru. 0 ANY A mx.ad-easy.ru. 0 ANY A ns0.ad-easy.ru. 0 ANY A ns1.ad-easy.ru. 0 ANY A smtp.ad-easy.ru. 0 ANY A www.ad-easy.ru. 0 ANY A ad-easy.ru. 0 ANY MX ad-easy.ru. 3600 IN MX 10 mx.net-easy.ru. Answer: ;; ->>HEADER<<- opcode: UPDATE, status: NOERROR, id: 55810 ;; flags: qr; ZONE: 1, PREREQ: 0, UPDATE: 0, ADDITIONAL: 1 ;; ZONE SECTION: ;ad-easy.ru. IN SOA ;; TSIG PSEUDOSECTION: update. 0 ANY TSIG hmac-sha512. 1647588662 300 64 2FEFYEPVcYo4mFLE2jY+q+uzObswcYbrE5Fjc/lzz aDu9KKgyz0g551L WfYKcvubhzJam58yfdjIDxXorh6FpQ== 55810 NOERROR 0
Теперь можно запросить вторичный сервер DNS и убедиться, что зона распространилась и изменения внесены успешно.
host -l -a ad-easy.ru. ns1.net-easy.ru
Trying "ad-easy.ru" ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41157 ;; flags: qr aa ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;ad-easy.ru. IN AXFR ;; ANSWER SECTION: ad-easy.ru. 3600 IN SOA ns0.net-easy.ru. info.net-easy.ru. 2022031802 43200 7200 1209600 86400 ad-easy.ru. 3600 IN NS ns0.net-easy.ru. ad-easy.ru. 3600 IN NS ns1.net-easy.ru. ad-easy.ru. 3600 IN A 83.222.15.147 ad-easy.ru. 3600 IN MX 10 mx.net-easy.ru. ad-easy.ru. 3600 IN SOA ns0.net-easy.ru. info.net-easy.ru. 2022031802 43200 7200 1209600 86400 Received 187 bytes from 127.0.0.1#53 in 0 ms
Приятной работы.