다음 단계를 수행하여 레코드(해당 IP)를 업데이트할 수 있다는 것을 알고 있습니다.
nsupdate
server ns.bar44.com
zone bar44.com
update delete somehost.bar44.com. A
update add somehost.bar44.com. 86400 A 10.10.10.1
show
send
보시다시피 somehost.bar44.com을 알고 있습니다. 데이터베이스에 존재하는 경우 기존 레코드의 IP를 업데이트하려는 경우에는 작동하지만 IP 대신 호스트 이름을 변경하려면 어떻게 해야 합니까? 예를 들어 somehost22.bar44.com의 IP로 10.10.10.1을 설정하고 싶습니다. somehost.bar44.com이 IP를 사용하고 있다는 것을 어떻게 알 수 있나요?
nsupdate를 사용하여 지역의 전체 데이터베이스를 삭제하는 방법입니까?
답변1
부인 성명: 이 스크립트를 사용하는 데 따른 책임은 사용자 본인에게 있습니다.
그게 뭘 할 수 있지?
O/P가 원하는 대로 추가를 원 somedomain.bar44.com
하고 somedomain44.bar44.com
이미 영역에 존재한다고 가정하면 먼저 제거한 somedomain44.bar44.com
다음 somedomain.bar44.com
영역에 다시 추가해야 합니다. 아래 스크립트가 바로 그 일을 합니다. BIND9를 사용하여 Ubuntu에서 테스트되었습니다.
즉, xyz.bar.com
아직 존재하지 않으면 추가하고, 존재하면 먼저 제거( xyz*.bar.com
)한 다음 사용자가 제공한 새 정보로 다시 추가합니다.
스크립트:
#!/bin/bash
#
## Update DNS Records Interactive
## Rahul Patil <http://www.linuxian.com>
#
## Functions
#
ask() {
while [[ $ans == "" ]]
do
read -p "${@}" ans
done
echo $ans
}
forward_zone_update() {
local rr=${@}
echo "
server $DNS_SERVER
zone $DNS_ZONE
update add $rr
show
send" | nsupdate
}
delete_record() {
local rr=${@}
echo "
server $DNS_SERVER
zone $DNS_ZONE
update delete $rr
show
send" | nsupdate
}
#
## Global Variable
#
DNS_IP="127.0.0.1"
DNS_SERVER="ns1.rahul.local"
DNS_ZONE="rahul.local"
DIG_CMD='dig +noquestion +nocmd +nostat +nocomments'
update_rr_a=$( ask "Enter FQDN of Record (Ex. xyz.${DNS_ZONE}) :-")
update_rr=$( ask "Enter IP of Record :-")
found_rr=$($DIG_CMD @${DNS_IP} AXFR ${DNS_ZONE} | grep ^"${update_rr_a%.$DNS_ZONE}" | tee /tmp/rr.tmp )
echo "Checking ${update_rr_a}..."
if [[ -z "${found_rr}" ]]
then
echo "${update_rr_a} does exists"
echo "${update_rr_a} adding to ${DNS_ZONE}"
forward_zone_update "${update_rr_a} 86400 IN A ${update_rr}"
echo "Done!!"
else
echo "${update_rr_a} already exists"
ans=$(ask "Do you want to Delete RR and want to re-add(y/n?)")
case $ans in
[yY]|[yY][eE][sS]) while read r;
do delete_record $r ;
done < /tmp/rr.tmp ;;
[nN]|[nN][oO]) exit 1 ;;
esac
forward_zone_update "${update_rr_a} 86400 IN A ${update_rr}"
echo "Done!!"
fi