'zone transfer'에 해당되는 글 2건

  1. 2009/05/13 네임서버 1차, 2차에 대해서
  2. 2007/08/28 gentoo에서 bind 설치/운영
http://domain.baitop.net/faq/board_list.asp?page=2
네임서버를 1, 2차로 복수 운영하고 있습니다. 이 중 2차(SLAVE) 네임서버는 1차(MASTER)가 동작하지 않을 때에만 질의요청을 받게 되나요?

그렇지 않습니다.
외부 사용자(네임서버)의 관점에서 보면 네임서버가 1차인지 2차인지를 구별하지 않습니다. 1차 네임서버에 질의를 요청한 후 응답이 없을 경우 2차 네임서버에 질의를 요청하는 것이 아니고 미리 응답속도를 체크하였다가 응답이 빠른 서버 쪽으로 질의를 요청하게 됩니다.

질의 대상 서버의 결정은 내부적으로는 RTT(Round Trip Time)이라는 좀더 복잡한 과정에 따라 결정되지만 1,2차 네임서버 중 네트워크 응답속도가 빠른 서버에 질의를 보냅니다.

네임서버를 복수로 운영할 경우 주(master) 서버의 자료만을 관리하고 보조(slave) 서버들은 주 서버의 자료를 전송받아 운영하도록 하면 서버 관리가 수월합니다.

즉, 네임서버의 1차, 2차 구분은 서버를 운영할 때 어느 서버를 주 서버로 사용하겠는지를 정하는 것이며, 사용자에게 서비스를 위한 질의 요청을 먼저 받는 서버를 결정하는 것은 아닙니다.

외부 네임서버에서 우리 네임서버 영역의 정보를 질의할때 우선적으로 1차에 질의하는게 아니라 응답속도가 빠른 서버를 기억했다가 응답을 보내준다.

사실, DNS 캐시로 인해 실제로 네임서버에 질의하는 경우는 드물고 1차 또는 2차 중 하나가 죽었을경우 TTL 값이 만료되면 살아있는 네임서버에 질의하기 때문에 하나만 정상적으로 작동해도 무리는 없다는걸 알 수 있다.

보통, 서버관리자 입장에서 1차(master), 2차(slave) 로 나누고 master 에서 slave로 zone transfer 로 동기화 시키는 개념에서 1차, 2차의 의미가 있을뿐이다.
OpenVZ으로 기본적인 네트워크 구축이 끝났다.
각 서버마다 호스트명과 IP를 할당하고 DNS 서버를 설치/운영한다.


DNS 서버는 bind로 돌리고 master, slave로 구축한다.
ns1.ddong.ac.kr - master name server
ns2.ddong.ac.kr - slave name server

1. master name server 설치

1) gentoo portage에서 최신 bind(bind-9.4.1-P1)를 받아서 설치한다
# emerge bind

2) /etc/bind/named.conf 편집
# cat /etc/bind/named.conf
options {
       directory "/var/bind";
       dump-file "/var/bind/named_dump.db";
       statistics-file "/var/bind/named.stats";
       pid-file "/var/run/named/named.pid";

       // uncomment the following lines to turn on DNS forwarding,
       // and change the forwarding ip address(es) :
       //forward first;
       //forwarders {
       //      123.123.123.123;
       //      123.123.123.123;
       //};

       listen-on-v6 { none; };
       //listen-on { 127.0.0.1; };

       // to allow only specific hosts to use the DNS server:
       //allow-query {
       //      127.0.0.1;
       //};

       // if you have problems and are behind a firewall:
       //query-source address * port 53;
};
zone "." IN {
       type hint;
       file "named.ca";        // linked root.cache
};

zone "localhost" IN {
       type master;
       file "pri/localhost.zone";
       allow-update { none; };
       notify no;
};

zone "127.in-addr.arpa" IN {
       type master;
       file "pri/127.zone";
       allow-update { none; };
       notify no;
};

zone "ddong.ac.kr" IN {
       type master;
       file "zone/ddong.ac.kr.zone";
      allow-transfer { 1.1.2.200; };
       notify yes;
};

zone "1.1.in-addr.arpa" IN {
       type master;
       file "pri/ddong.ac.kr.rev.zone";
};

3) /var/bind/zone/ddong.ac.kr.zone 파일 편집
# cat /var/bind/zone/ddong.ac.kr.zone
$ORIGIN 1.1.in-addr.arpa.
$TTL 86400
@       IN      SOA     ns1.ddong.ac.kr.        gogisnim.gmail.com. (
                       2007082620      ; serial
                       3H              ; refresh
                       15M             ; retry
                       1W              ; expiry
                       1D )            ; minimum

               IN      NS      ns1.ddong.ac.kr.;
;      
               IN      MX      10      mail
               IN      MX      20      mail2
;
; host configuration
localhost       IN      A       127.0.0.1
ns1             IN      A       1.1.1.200
ns2             IN      A       1.1.2.200
ddong.ac.kr.    IN      A       1.1.1.200
www1            IN      A       1.1.1.200
www2            IN      A       1.1.2.200
www3            IN      A       1.1.3.200
mail            IN      A       1.1.1.201
mail2           IN      A       1.1.2.201
pop3            IN      A       1.1.1.201
ftp             IN      A       1.1.1.203
db              IN      A       1.1.1.204
fw              IN      A       1.1.1.10
gw              IN      A       1.1.1.10

www             IN      CNAME   www1

주의
첫 라인의 $ORIGIN 에 /etc/bind/named.conf에서 지정해준 reverse zone 영역명칭이 와야한다. 만약 ddong.ac.kr. 이되면 named 구동시 아래와 같은 메시지가 나온다
# tail -f /var/log/messages
...
Aug 29 00:42:31 ddong named[29017]: zone/ddong.ac.kr.rev.zone:3: ignoring out-of-zone data (ddong.ac.kr)
Aug 29 00:42:31 ddong named[29017]: zone/ddong.ac.kr.rev.zone:14: ignoring out-of-zone data (200.1.ddong.ac.kr)
Aug 29 00:42:31 ddong named[29017]: zone/ddong.ac.kr.rev.zone:15: ignoring out-of-zone data (200.2.ddong.ac.kr)
Aug 29 00:42:31 ddong named[29017]: zone/ddong.ac.kr.rev.zone:16: ignoring out-of-zone data (200.1.ddong.ac.kr)
...

4) named를 구동하고 부팅과 동시에 named 이 구동되게 rc-update에 등록
# /etc/init.d/named start
# rc-update add named default


2. slave name server 설치

1) gentoo portage에서 최신 bind(bind-9.4.1-P1)를 받아서 설치한다
# emerge bind

2) /etc/bind/named.conf 편집
# cat /etc/bind/named.conf
options {
       directory "/var/bind";
       dump-file "/var/bind/named_dump.db";
       statistics-file "/var/bind/named.stats";
       pid-file "/var/run/named/named.pid";

       // uncomment the following lines to turn on DNS forwarding,
       // and change the forwarding ip address(es) :
       //forward first;
       //forwarders {
       //      123.123.123.123;
       //      123.123.123.123;
       //};

       listen-on-v6 { none; };
       //listen-on { 127.0.0.1; };

       // to allow only specific hosts to use the DNS server:
       //allow-query {
       //      127.0.0.1;
       //};

       // if you have problems and are behind a firewall:
       //query-source address * port 53;
};
zone "." IN {
       type hint;
       file "named.ca";        // linked root.cache
};

zone "localhost" IN {
       type master;
       file "pri/localhost.zone";
       allow-update { none; };
       notify no;
};

zone "127.in-addr.arpa" IN {
       type master;
       file "pri/127.zone";
       allow-update { none; };
       notify no;
};

zone "ddong.ac.kr" IN {
       type slave;
       file "sl/bak.ddong.ac.kr.zone";
       masters { 1.1.1.200; };
};

zone "1.1.in-addr.arpa" IN {
       type slave;
       file "sl/bak.ddong.ac.kr.rev.zone";
       masters { 1.1.1.200; };
};

3) slave에서는 zone 파일을 설정할 필요가 없다.
master에서 zone transfer로 받아서 직접 생성해주기 때문..
주의할점은 이 상태에서 named을 구동하면 에러가 발생한다.
(named는 구동이 되지만 실제 zone transfer는 일어나지 않는다)
왜냐하면, gentoo에서 named는 root계정으로 실행되지 않고 named 계정으로 실행된다.
zone transfer가 일어날때 slave 의 zone 영역(/var/bind)은 root 권한만 쓸 수 있는데 일반계정인 named로 write하니 permission denied 가 일어나는 것이다.

http://www.isc.org/index.pl?/sw/bind/FAQ.php 참조한다.

# ls -l /var/bind
-rw-r--r-- 1 root  root  2518 Aug 27 20:39 named.ca
drwxr-xr-x 2 root  root  4096 Aug 28 01:48 pri
lrwxrwxrwx 1 root  root    23 Aug 27 20:39 root.cache -> ../../var/bind/named.ca
drwxr-xr-x 2 root  root  4096 Aug 27 20:39 sec
drwxr-xr-x 2 root  root  4096 Aug 28 02:48 sl

tail -f /var/log/messages
Aug 28 01:42:51 ns2 named[22077]: zone ddong.ac.kr/IN: Transfer started.
Aug 28 01:42:51 ns2 named[22077]: transfer of 'ddong.ac.kr/IN' from 1.1.1.200#53: connected using 1.1.2.200#48915
Aug 28 01:42:51 ns2 named[22077]: dumping master file: zone/tmp-boAPWlF76G: open: permission denied
Aug 28 01:42:51 ns2 named[22077]: transfer of 'ddong.ac.kr/IN' from 1.1.1.200#53: failed while receiving responses: permission denied
Aug 28 01:42:51 ns2 named[22077]: transfer of 'ddong.ac.kr/IN' from 1.1.1.200#53: end of transfer

named에서 쓰기 이벤트가 일어나는 곳은 sl/ 이하이다.
named에 owner 권한을 변경한다.
# chown -R named.named sl/

4) named를 구동하고 부팅과 동시에 named 이 구동되게 rc-update에 등록
# /etc/init.d/named start
# rc-update add named default


3. nslookup, dig, dnstop 사용

1) root DNS부터 검색해서 innu.pe.kr 까지 내려오기
$ nslookup
> server a.root-servers.net
> set q=ns
> kr.
> server b.dns.kr
> pe.kr.
> server c.dns.kr
> innu.pe.kr.
> server ns.80port.com
> set q=a
> innu.pe.kr
Address:    xxx.xxx.xxx.xxx#53

2) bind 버전 알아보기
$ dig @ns2.ddong.ac.kr txt chaos version.bind

; <<>> DiG 9.3.2 <<>> @ns2.ddong.ac.kr txt chaos version.bind
; (1 server found)
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13391
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;version.bind.                  CH      TXT

;; ANSWER SECTION:
version.bind.           0       CH      TXT     "9.4.1-P1"

;; AUTHORITY SECTION:
version.bind.           0       CH      NS      version.bind.

;; Query time: 1 msec
;; SERVER: 1.1.2.200#53(1.1.2.200)
;; WHEN: Tue Aug 28 03:43:46 2007
;; MSG SIZE  rcvd: 65

위의 9.3.2는 dig의 버전이고 아래 "9.4.1-P1" 이 name server의 bind 버전이다.

3) reverse dns가 제대로 작동하는지 테스트
# dig @ns1.ddong.ac.kr 204.1.1.1.in-addr.arpa ptr
; <<>> DiG 9.4.1-P1 <<>> @ns1.ddong.ac.kr 204.1.1.1.in-addr.arpa ptr
; (1 server found)
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55312
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;204.1.1.1.in-addr.arpa.                IN      PTR

;; ANSWER SECTION:
204.1.1.1.in-addr.arpa. 86400   IN      PTR     db.ddong.ac.kr.

;; AUTHORITY SECTION:
1.1.in-addr.arpa.       86400   IN      NS      ns1.ddong.ac.kr.

;; ADDITIONAL SECTION:
ns1.ddong.ac.kr.        86400   IN      A       1.1.1.200

;; Query time: 1 msec
;; SERVER: 1.1.1.200#53(1.1.1.200)
;; WHEN: Wed Aug 29 01:37:02 2007
;; MSG SIZE  rcvd: 102

또는

# dig -x 1.1.1.204
; <<>> DiG 9.4.1-P1 <<>> -x 1.1.1.204
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 20304
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;204.1.1.1.in-addr.arpa.                IN      PTR

;; ANSWER SECTION:
204.1.1.1.in-addr.arpa. 86400   IN      PTR     db.ddong.ac.kr.

;; AUTHORITY SECTION:
1.1.in-addr.arpa.       86400   IN      NS      ns1.ddong.ac.kr.

;; ADDITIONAL SECTION:
ns1.ddong.ac.kr.        86400   IN      A       1.1.1.200

;; Query time: 0 msec
;; SERVER: 1.1.1.200#53(1.1.1.200)
;; WHEN: Wed Aug 29 01:38:46 2007
;; MSG SIZE  rcvd: 102



4) dnstop으로 dns query 모니터링
# dnstop eth0

사용자 삽입 이미지


사용자 삽입 이미지

dig, nslookup, host 의 command는 bind-tools 패키지에 포함되어 있다.
dnstop command는 dnstop 패키지에 포함되어 있다.