Такая ситуация, Linux-хост введен в домен AD, но при смене ip-адреса на хосте, A запись не обновляется автоматически.
Скрипт dns_update.sh который обновляет A, AAA, PTR записи:
#!/bin/bash
# Prepare with some variables
#
# Change to your DNS admin file location
dns_admin_file="/path/to/pass"
dns_admin=`cat $dns_admin_file | awk 'NR==1 {print; exit}'`
dns_admin_pw=`cat $dns_admin_file | awk 'NR==2 {print; exit}'`
# ipv4 may need some adjustment in case of multiple eth interfaces
# In default case we assume that you have only one eth interface
ipv4=`/bin/ip -o -4 addr list | grep -v 127.0.0.1 | awk '{print $4}' | cut -d/ -f1`
rev_ipv4=`echo $ipv4 | awk -F. '{print $4"."$3"." $2"."$1}'`.in-addr.arpa.
fqdn=`hostname --fqdn`
# Get old ipv4 for future deletion
old_ipv4=`dig $fqdn |grep 'ANSWER SECTION' -A1 | grep 'IN' | awk '{print $5}'`
rev_old_ipv4=`echo $old_ipv4 | awk -F. '{print $4"."$3"." $2"."$1}'`.in-addr.arpa.
domain=`echo $fqdn | sed 's/^[^.]*.//g'`
dom_up_case=`echo $domain | tr [:lower:] [:upper:]`
kdc=`cat /etc/krb5.conf | grep 'admin_server =' | awk '{print $3}' | tr [:upper:] [:lower:]`
# Change the ttl to your liking
ttl=3600
# Change file location to your liking
keytab_file="/etc/krb5.keytab"
# Check if DNS update is needed
if [[ "$ipv4" != "$old_ipv4" ]]; then
# Create/update keytab file
ktutil <<EOF
addent -password -p $dns_admin@$dom_up_case -k 1 -e rc4-hmac
$dns_admin_pw
write_kt $keytab_file
quit
EOF
# Get ticket for DNS admin
kinit -k $dns_admin
# Create file for forward zone update
/bin/echo "gsstsig
server $kdc
zone $domain
update delete $fqdn a
update add $fqdn $ttl a $ipv4
send
" > /tmp/ad_dns_fw
# Create file for reverse zone update
/bin/echo "gsstsig
server $kdc
update delete $rev_old_ipv4 PTR
update add $rev_ipv4 $ttl PTR $fqdn.
send
" > /tmp/ad_dns_rev
# Run reverse zone update first
/usr/bin/nsupdate /tmp/ad_dns_rev
# And then run forward zone update
/usr/bin/nsupdate /tmp/ad_dns_fw
fi
Файл /path/to/pass, (см. dns_admin_file="/path/to/pass"), содержащий логин и пароль учетки в AD, которая может удалять/добавлять, читать/записывать в нужной зоне, или (это небезопасно) учетка входящая в группу DNSAdmins в Active Directory.
Содержимое /path/to/pass:
dns_adm1
3215178
Права на чтение только для владельца:
chmod 400 /path/to/pass
Можно добавить скрипт длы выполнения в cron, но лучше обернуть его в systemd юнит.
Создадим файл /etc/systemd/system/ad_dns_update.service, и добавим в него следующее содержание:
Права на чтение только для владельца:
chmod 400 /path/to/pass
Можно добавить скрипт длы выполнения в cron, но лучше обернуть его в systemd юнит.
Создадим файл /etc/systemd/system/ad_dns_update.service, и добавим в него следующее содержание:
[Unit]
Description=AD DNS entries updater
Wants=network-online.target
After=network.target network-online.target
[Service]
ExecStart=/path/to/dns_update.sh
[Install]
WantedBy=multi-user.target
После этого:
systemctl daemon-reload && systemctl enable ad_dns_update.service
После этого:
systemctl daemon-reload && systemctl enable ad_dns_update.service
Комментариев нет:
Отправить комментарий