2009.03.17 21:19

BIND 네임서버 동적 업데이트(Dynamic Update)

1. 동적 업데이트 개요

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

2. DNS 동적 업데이트 적용 사례

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

kr_DNS_Dynamic_Update.jpg

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

2000DNS_4-14.jpg

2.3 Dynamic Update를 이용한 유동 IP 사용자(ADSL, Cable Modem 등)의 DNS 정보 업데이트

  • 서비스 제공자 : dyndns.org, dnsever.com, zoneedit.com, changeip.com 등
section01_cg.gif
dyndns_updater.gif

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 웹 기반 동적 업데이트 프로그램

5.2 DNS 라이브러리

<?php

// 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);

?>



출처 : http://bind.cslab.kr/

Trackback 0 Comment 1
  1. yawala3@naver.com 2010.03.22 14:54 address edit & del reply

    dsa