[도메인] named 를 재시작하지 않고 정보를 업데이트하는법
nsupdate 를 이용하여 DNS를 재시작하지 않고도 정보 변경하는 법
아래는 실제로 두루넷에 있는 host1.tt.co.kr 에서 테스트한 내용입니다.
/etc/named.conf 설정
zone “fusionroad.com” {
type master;
file “domain.zone”;
allow-update { 211.110.12.8; };
};
위와 같이 named.conf 에 allow-update 를 설정해 준다.
아래와 같이 확인.
[root@host1 /root]# nslookup www.fusionroad.com
Server: host1.tt.co.kr
Address: 211.110.12.8
Name: www.fusionroad.com
Address: 211.110.12.8
[root@host1 /root]# nsupdate
> prereq yxdomain fusionroad.com.
> update delete www.fusionroad.com.
> update add www.fusionroad.com. 86400 IN A 211.47.64.46
> Ctrl+D
[root@host1 /root]# nslookup www.fusionroad.com
Server: host1.tt.co.kr
Address: 211.110.12.8
Name: www.fusionroad.com
Address: 211.47.64.46
즉, named 를 재시작하지 않고도 위와 같이 변경 설정한 내용이 적용된다.
================= 참고 Dynamic Update ==========================
참고: RFC2136
BIND-8 부터 지원되는 Dynamic Update는 해당 도메인의 Authority를 갖는
네임서버를 통해 Zone 파일을 수정치 않고도 레코드를 동적으로 원격 갱신할 수
있도록 한다. 도메인 관리를 자동화 하거나, 사용자별로 접속 도메인을 실시간
변경하여 제공하거나, DHCP에서의 주소-IP 매칭등과 같이 실시간 적으로
레코드가 변경, 갱신 될 필요가 있는 서비스에 특히 유용할 수 있겠다.
Dynamic Update는 보안을 이유로 기본적으로 기능이 꺼져있기 때문에 허용할
도메인에 대해 allow-update 옵션을 추가해야 한다.
zone “freebsd.org” {
type master;
file “zone-freebsd.org”;
allow-update { 210.124.149.130; };
}
Dynamic Update는 BIND 배포판에 포함되어 있는 nsupdate 도구를 사용하여
명령행(non-interactive) 혹은 대화형(interactive)으로 조작이 가능하다.
대화형 모드에서 주어진 명령문은 묶음(조건문과 명령문)으로 실행이 가능하기
때문에 입력한 명령문(들)은 공백 라인에서 엔터를 한번 더 입력하여야 한다.
명령행 모드는 명령문을 주어진 파일이나 stdin 에서 입력받는다. 다음은
nsupdate에서 사용가능한 명령문이다.
prereq yxdomain DOMAIN-NAME
DOMAIN-NAME이 존재(하나이상의 레코드가 설정되어 있음)함을 연속된
명령의 선행 조건으로 삼는다.
prereq nxdomain DOMAIN-NAME
DOMAIN-NAME에 어떠한 레코드도 설정되어 있지 않음을 연속된 명령의 선행
조건으로 삼는다.
prereq yxrrset DOMAIN-NAME [CLASS] TYPE [DATA]
DOMAIN-NAME에 해당 레코드가 존재함을 연속된 명령의 선행 조건으로
삼는다. DATA가 명시되어 있을 경우에는 정확하게 매칭이 되는 경우에만
조건이 성립된다.
prereq nxrrset DOMAIN-NAME [CLASS] TYPE
DOMAIN-NAME에 해당 레코드가 존재하지 않음을 연속된 명령의 선행
조건으로 삼는다.
update delete DOMAIN-NAME [CLASS] [TYPE [DATA…]]
TYPE이 명시되지 않았을 경우엔 해당 DOMAIN-NAME에 소속된 레코드를 모두
삭제한다. TYPE이 명시될 경우엔 매칭되는 레코드만이 제거된다.
update add DOMAIN-NAME TTL [CLASS] TYPE DATA…
지정된 레코드를 해당 도메인에 추가한다.
$ nsupdate
> update add freefall.freebsd.org. 3600 IN A 210.124.149.150
> [Enter]
…(messages)…
> ^D
$ nsupdate
> prereq nxrrset freebsd.org. IN MX
> update add freebsd.org. 3600 IN MX 10 mail.freebsd.org.
> [Enter]
…(messages)…
> ^D
기존에 A, CNAME 등의 레코드가 설정된 도메인명에 대해서 delete를 수행치 않고
add 명령을 입력했을때 기존 레코드의 데이터가 입력된 레코드의 데이터로
교체될거라는 생각은 하지 말아야 한다. 중복된 A 레코드의 입력은 도메인에
여러개의 IP를 매핑할 것이고, CNAME이 설정된 도메인명은 다른 레코드가 존재할
수 없음에도 CNAME을 add하는 명령이 해당 도메인의 A, MX와 같은 레코드를
자동으로 제거해주지는 않기 때문이다.
Dynamic Update를 통해 수정된 내역은 즉시 적용되며 named가 종료될 때 해당
Zone 데이터베이스에 직접 기록되어 다음번 구동시에도 그 내역이 변함없이
적용될 수 있도록 한다.
Dynamic Update에 대한 요청이 해당 도메인의 Authority를 갖는 Secondary로
보내어 졌다면 Secondary 네임서버는 Primary 네임서버로 요청을 전달하도록
되어있다. 물론 이러할 경우엔 Primary의 allow-update 억세스 리스트에는
Secondary가 포함되어 있어야 한다.