nsupdate를 사용하여 레코드를 업데이트하는 방법은 무엇입니까?

nsupdate를 사용하여 레코드를 업데이트하는 방법은 무엇입니까?

다음 단계를 수행하여 레코드(해당 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
  1. 보시다시피 somehost.bar44.com을 알고 있습니다. 데이터베이스에 존재하는 경우 기존 레코드의 IP를 업데이트하려는 경우에는 작동하지만 IP 대신 호스트 이름을 변경하려면 어떻게 해야 합니까? 예를 들어 somehost22.bar44.com의 IP로 10.10.10.1을 설정하고 싶습니다. somehost.bar44.com이 IP를 사용하고 있다는 것을 어떻게 알 수 있나요?

  2. 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

관련 정보