1. 동적 업데이트 개요
- 1997년 4월 국제표준 발표 (RFC 2136 http://www.ietf.org/rfc/rfc2136.txt)
- DNS가 레코드를 동적으로 추가 또는 삭제하는 기능 제공
- 마스터 DNS에서 동적 업데이트 발생 시 serial 번호를 증가시키고 슬레이브 DNS에 notify를 보냄
- 보통 DHCP 등의 프로그램이 동적 업데이트 기능 이용 (클라이언트 컴퓨터에 동적으로 IP 주소를 할당한 후 "이름-주소 맵핑 정보"를 등록하고 마스터 DNS에 전송)

2. DNS 동적 업데이트 적용 사례
2.1 .kr DNS (100초 간격으로 DNS 정보 동적 업데이트)

2.2 DHCP Service와의 연동 예(윈도우 DNS)

2.3 Dynamic Update를 이용한 유동 IP 사용자(ADSL, Cable Modem 등)의 DNS 정보 업데이트
- 서비스 제공자 : dyndns.org, dnsever.com, zoneedit.com, changeip.com 등


3. 동적 업데이트 명령어
3.1 동적업데이트 조건 지정 명령어
> prereq yxdomain FQDN 호스트명
지정한 FQDN 호스트명이 등록되어 있을 것을 조건으로 한다. 아무것도 등록되어 있지 않으면 update는 에러가 된다.
> prereq nxdomain FQDN 호스트명
지정한 FQDN 호스트명의 등록이 전혀 없음을 조건으로 한다. 이미 등록되어 있는 경우에는 update가 에러가 된다.
> prereq yxrrset FQDN 호스트명 (class) type data
지정한 FQDN 호스트명과 레코드가 등록되어 있음을 조건으로 한다.
> prereq yxrrset host.example.kr IN A 192.168.20.20
host.example.kr 에 대한 정방향 룩업이 192.168.20.20으로 사전에 등록되어 있으면 update 가능.
> prereq yxrrset host.example.kr IN A
어떤 IP 주소라도 등록되어 있으면 update 가능.
> prereq nxrrset FQDN 호스트명 (class) type
지정한 FQDN 호스트명으로 레코드가 등록되지 않음을 조건으로 한다. yxrrset과 같이 data까지 지정해도 무시된다.
3.2 BIND 명령어(nsupdate)를 통한 존 추가 및 삭제
- 호스트 추가 (yxdomain 조건)
# nsupdate
> prereq yxdomain mysql.freeserver.kr. # mysql.freeserver.kr이 이미 등록되어 있어야 함
> update add mysql.freeserver.kr. 60 IN A 192.168.0.2 # 호스트 추가
> show
> send
- 호스트 삭제
# nsupdate
> update delete mysql.freeserver.kr. IN A 192.168.0.2 # 호스트 삭제
> show
> send
- 호스트 추가 (nxdomain 조건)
# nsupdate
> prereq nxdomain oracle.freeserver.kr. # oracle.freeserver.kr이 등록되어 있지 않아야 함
> update add oracle.freeserver.kr. 60 IN A 192.168.0.3 # 호스트 추가
> show
> send
- 호스트 추가 및 에러 처리 (nxdomain 조건)
# nsupdate
> prereq nxdomain oracle.freeserver.kr. # oracle.freeserver.kr이 등록되어 있지 않아야 함
> update add oracle.freeserver.kr. 60 IN A 192.168.0.4 # 호스트 추가
> show
> send
update failed: YXDOMAIN # 이미 존재하는 호스트이므로 에러 처리됨
# /etc/log/message 로그에는 아래와 같은 에러 출력
Apr 30 09:56:24 system named[5645]: client xxx.xxx.xxx.xxx#53780: updating zone 'freeserver.kr/IN':
update unsuccessful: oracle.freeserver.kr: 'name not in use' prerequisite not satisfied (YXDOMAIN)
3.3 인증 방식 사용 시 - TSIG를 이용한 동적 업데이트 (xxxx : 키 문자열)
# nsupdate -d -y key.freeserver.kr.:xxxxxxxxxxxxxxxxxx
Creating key...
namefromtext
keycreate
> prereq nxdomain oracle.freeserver.kr.
> update add oracle.freeserver.kr. 60 IN A 192.168.0.4
> show
Outgoing update query:
;; ->>HEADER<<- opcode: UPDATE, status: NOERROR, id: 0
;; flags: ; ZONE: 0, PREREQ: 0, UPDATE: 0, ADDITIONAL: 0
;; PREREQUISITE SECTION:
oracle.freeserver.kr. 0 NONE ANY
;; UPDATE SECTION:
oracle.freeserver.kr. 60 IN A 192.168.0.4
> send
Reply from SOA query:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 61047
;; flags: qr rd ra ; QUESTION: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;oracle.freeserver.kr. IN SOA
;; AUTHORITY SECTION:
freeserver.kr. 0 IN SOA ns1.cslab.net. onmiso.naver.com. 2008061071 3600 600 86400 3600
Found zone name: freeserver.kr
The master is: ns1.cslab.net
Sending update to 119.71.171.49#53
Outgoing update query:
;; ->>HEADER<<- opcode: UPDATE, status: NOERROR, id: 20120
;; flags: ; ZONE: 1, PREREQ: 1, UPDATE: 1, ADDITIONAL: 1
;; ZONE SECTION:
;freeserver.kr. IN SOA
;; PREREQUISITE SECTION:
oracle.freeserver.kr. 0 NONE ANY
;; UPDATE SECTION:
oracle.freeserver.kr. 60 IN A 192.168.0.4
;; TSIG PSEUDOSECTION:
key.freeserver.kr. 0 ANY TSIG hmac-md5.sig-alg.reg.int. 1225711266 300 16 xxxxxxxxxxxxxxxxxxxxxxxx 20120 NOERROR 0
Reply from update query:
;; ->>HEADER<<- opcode: UPDATE, status: NOERROR, id: 20120
;; flags: qr ra ; ZONE: 0, PREREQ: 0, UPDATE: 0, ADDITIONAL: 1
;; TSIG PSEUDOSECTION:
key.freeserver.kr. 0 ANY TSIG hmac-md5.sig-alg.reg.int. 1225711266 300 16 xxxxxxxxxxxxxxxxxxxxxxxx 20120 NOERROR 0
3.4 동적 업데이트 일괄 처리 작업
- 파일을 통한 일괄 처리 가능
- update.txt 파일 마지막 라인은 공백 라인 또는 send 명령어를 입력해야 처리됨
# vi update.txt
update add oracle.freeserver.kr. 60 IN A 192.168.0.4
send
# nsupdate update.txt
4. 동적 업데이트 특이사항
- 확장자가 .jnl인 저널 파일(예: freeserver.kr.zone.jnl)에 동적 업데이트 로그가 기록되며, 시리얼 번호가 증가됨
- 마스터 DNS에서 슬레이브 DNS로의 존 전송은 IXFR(Incremental Zone Transfer,증진적 영역 전송) 방식이 사용됨 (RFC 1995 참조)
- BIND 9에서는 IXFR이 기본 설정 값임
- 슬레이브 DNS는 마스터 DNS에 자신의 영역 버전을 알려 변화된 정보만 전송 받음
- AXFR (All Zone Transfer)와는 달리 영역 전송 크기와 전송 시간을 줄일 수 있음
- BIND 9 저널 파일 본문 (편집기로 내용 확인 불가)
;BIND LOG V9
^@^@^@w°<94>l^@^@^B^@w°<94><90>^@^@ e^@^@^@8^@^@^@^@^@^@^@^@^@^@^
<94>q^@^@^F5w°<94>r^@^@^G^Lw°<94>s^@^@^Gów°<94>t^@^@^HÆw°<94>u^@^@
- 동적 업데이트 내용은 저널 파일에 추가되고 메모리상에 적용됨
- named 재시작이나 종료 시 동적 업데이트를 통해 변경된 내용이 존 파일에 반영(동기화)되며, 마스터 DNS의 저널 파일은 삭제되지 않음
- 단, 슬레이브 DNS의 경우, AXFR 발생 시 저널 파일이 더 이상 필요하지 않으므로 저널 파일 삭제
- 재시작/종료를 통해 저널 파일을 존 파일과 동기화 시키지 않고 존 파일을 직접 수정하면 안됨
- 위와 같은 동기화 과정 없이 직접 존 파일을 편집하고자 하는 경우 freeze 명령 사용
- 동적 업데이트 중단 및 저널 파일 강제 동기화(동기화 후 저널 파일은 삭제됨)
# rndc freeze freeserver.kr.
* 존 파일 편집
# vi freeserver.kr.zone
* 동적 업데이트 재시작 및 reload
# rndc thaw freeserver.kr.
5. 오픈소스 동적업데이트 프로그램
5.1 웹 기반 동적 업데이트 프로그램
- PHP DNS 라이브러리를 이용한 동적 업데이트 프로그램
- 데모 : http://dnsupdate.cslab.net/
5.2 DNS 라이브러리
- PHP Net_DNS Library (http://pear.php.net/package/Net_DNS)
// include class file
include("Net/DNS.php");
// create object
$ndr = new Net_DNS_Resolver();
// uncomment this for debug output
// $ndr->debug = 1;
// query for IP address
$answer = $ndr->search("freeserver.kr", "A");
// print output
print_r($answer);
- dnsjava Library (http://www.dnsjava.org/)
- dnspython - Python DNS toolkit (http://www.dnspython.org/)
출처 : http://bind.cslab.kr/
728x90
댓글