[도메인] 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가 포함되어 있어야 한다.

서진우

슈퍼컴퓨팅 전문 기업 클루닉스/ 상무(기술이사)/ 정보시스템감리사/ 시스존 블로그 운영자

You may also like...

페이스북/트위트/구글 계정으로 댓글 가능합니다.