'nslookup'에 해당되는 글 1건

  1. 2007/08/28 gentoo에서 bind 설치/운영
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 패키지에 포함되어 있다.