15. Method of Dynamic Update
Dynamic Update 는 해당 도메인의 Authority 를 갖는 네임서버를 통해 Zone 파일을 수정치 않고
도 레코드를 동적으로 원격 갱신할 수 있도록 한다. 도메인 관리를 자동화 하거나, 사용자 별로
접속 도메인을 실시간 변경하여 제공하거나, DHCP에서의 주소-IP 매칭등과 같이 실시간적으로 레
코드가 변경, 갱신 될 필요가 있는 서비스에 특히 유용할 수 있겠다.
Dynamic Update 는 BIND 8 부터 지원이 되며 BIND 9 에서의 변화는 dnssec-key 를 이용한 인증부
분의 강화에 있다.
일단 Dynamic Update 를 가능하게 하기 위해서는 named.conf 의 zone block 정의에서 allow-update
에 정의가 되어 있는 key 를 사용해야 한다.
Hanterm - cat /etc/named.conf |
[root@bbuwoo /etc]$ cat /etc/named.conf
...
zone "oops.org" IN {
type master;
file oops.zone
allow-update { key "oops-key"; };
};
...
[root@bbuwoo /etc]#
|
위와 같이 allow-update 에 인증을 위한 key 를 설정을 한다. ip address 로도 설정을 할 수 있
지만 별로 권장하지는 않는다. ip address 와 key 를 동시에 설정했을 경우 AND 연산인지 OR 연
산인지는 필자도 잘 모르겠다. 일단 설정은 여기까지만 되면 된다.
단 주의할 것은, 퍼미션 관리를 잘해야 한다는 것이다. 일단 key-name 과 secret 값만 알면 누구
나 변경을 할 수 있기 때문에, rndc.conf 와 named.conf 의 소유권과 퍼미션을 변경해 주도록 한
다.
chown root.named /etc/named.conf /etc/rndc.conf
chmod 750 /etc/named.conf /etc/rndc.conf
다음, journal file 이 생성될 수 있도록 /var/named 디렉토리에도 named user 에게 쓰기 권한을
줘야 한다.
chown -R root.named /var/named
chmod -R g+rw /var/named
여기까지 Dynamic Update 를 하기위한 설정을 마쳤다. 이제 nsupdate 를 이용하여 update 를 시
도해 본다. nsupdate 를 실행하기 위해서는 /etc/named.conf 의 key name 과 secret 값을 이용하
여 접속을 한다.
nsupdate -d -y key-name:secret_value
의 형식으로 실행을 한다. nsupdate 는 shell mode 에서 응답식으로 진행을 하게된다. 그럼 여기
서는 간단하게 oops.zone 에 있는 babo.oops.org 의 A record 를 210.24.154.156 에서 200 번으
로 변경하는 예제를 들겠다. 원격 호스트에서 한다고 예를 들겠다.
Hanterm - nsupdate -d -y oops-key:n+h/daGNTmmEKimn25/h4g== |
[root@bbuwoo /etc]$ nsupdate -d -y oops-key:n+h/daGNTmmEKimn25/h4g==
Creating key...
namefromtext
keycreate
> server 210.24.154.2
> prereq yxdomain babo.oops.org
> update delete babo.oops.org A
> update add babo.oops.org 86400 A 210.24.154.200
> send
Reply from SOA query:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 55957
;; flags: qr aa rd ra ; QUESTION: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;babo.oops.org. IN SOA
;; AUTHORITY SECTION:
oops.org. 0 IN SOA oops.org. root.oops.org. 2002051811 10800 900 604800 86400
Found zone name: oops.org
The master is: oops.org
Reply from update query:
;; ->>HEADER<<- opcode: UPDATE, status: NOERROR, id: 12736
;; flags: qr ra ; ZONE: 0, PREREQ: 0, UPDATE: 0, ADDITIONAL: 1
;; TSIG PSEUDOSECTION:
oops-key. 0 ANY TSIG hmac-md5.sig-alg.reg.int. 1024649869 300 16 \
90YFfkY0HZIEEcKKG67Wuw== 12736 NOERROR 0
oops-key. 라인의 마지막 \ 문자는 한줄로 라는 의미이다.
> quit
[root@bbuwoo /etc]# nslookup babo.oops.org
Server: 10.0.0.1
Address: 10.0.0.1#53
Name: babo.oops.org
Address: 210.24.154.200
[root@bbuwoo /etc]#
|
위의 예제는 babo.oops.org 의 A 레코드를 156 번에서 200 번으로 변경하는 예제이다. nsupdate
에는 edit 가 없기 때문에 존재하는 도메인은 삭제를 하고 다시 설정을 해야한다. 그래서 update
delete 후에 update add 를 행하게 되는 것이다.
그럼 nsupdate 의 명령행에 대해서 논하겠다.
server servername [ port ]
모든 dynamic update 의 요청을 지정한 서버로 보낸다. server 가 지정이 되지 않았을 경우에는
master server 로 지정된 서버로 요청을 보낸다. 포트는 기본값으로 53 번을 사용한다.
local address [ port ]
모든 dynamic update 요청을 local address 를 이용해 전송한다. 만약 지정되지 않는다면 시스템
에 의해 선택된 주소와 포트를 이용해서 요청을 전송한다.
zone zonename
업데이트가 이루어질 zone 이름을 지정한다. 만약 지정되어 있지 않다면 요청된 정보에 의거하여
알맞은 zone 을 선택하도록 시도를 한다.
prereq yxdomain domain-name
domain-name 이 존재(하나 이상의 레코드가 설정되어 있음) 함을 연속된 명령의 선행조건으로 삼
는다.
prereq nxdomain domain-name
domain-name 에 어떠한 레코드도 설정되어 있지 않음을 연속된 명령의 선행 조건으로 삼는다.
update delete domain-name [ ttl ] [ class ] [ type [ data... ] ]
TYPE 이 명시되지 않았을 경우엔 해당 domain-name 에 소속된 레코드를 모두 삭제한다. TYPE 이
명시될 경우엔 매칭되는 레코드만이 제거된다.
update add domain-name ttl [ class ] type data...
지정된 레코드를 해당 도메인에 추가한다.
show
마지막 send 전 까지의 모든 선행 조건과 업데이트 스펙을 포함한 모든 메세지를 출력한다.
send
현재 메세지를 서버로 전송하여 업데이트를 시도한다.
더 자세한 것은 manual page 를 참고하기 바란다.
Dynamic Update 에 의해 변경된 사항은 즉시 반영이 되며, named 가 종료될 때 해당 Zone 파일에
직접 기록을 하여 다음번 구동시 적용이 될 수 있도록 한다. 단 named 가 종료될 때는 rndc stop
으로 종료가 되어야 한다.
>> 이전 : Name Server Error Debugging
>> 다음 : INTERNET Service를 위한 NAME Service의 바른이해
|