##############################################
## 주제 : DNS (Domain Name System) ##
## ##
## Written by K.S.W 2014051901 ##
## boaniyagi@naver.com ##
## date : 2014.5.19 ##
##############################################
o DNS 관련 사이트
김승영의 Powered by DNS
- https://wiki.kldp.org/KoreanDoc/html/PoweredByDNS-KLDP/
http://dns.kisa.or.kr
http://domain.kisa.or.kr
http://dnssec.kisa.or.kr <-- DNS보안
http://cafe.naver.com/dnspro
o BIND DNS 설치 및 운영
공식 사이트 : http://isc.org
# yum search bind
yum 과 소스로 설치하는 두 가지 방식이 있다.
1. 소스설치하기
o 소스설치
1. 다운로드
2. 압축해제/환경설정
3. 컴파일
4. 설치
5. 세팅
6. 데몬실행
# wget ftp://ftp.isc.org/isc/bind9/9.7.6-P1/bind-9.7.6-P1.tar.gz
# tar xzf bind-9.7.6-P1.tar.gz
# cd bind-9.9.1-P1
# ls
CHANGES FAQ README HISTORY ... <-- 읽어볼 것!!!
# ./configure --help <-- 어떤 옵션이 있는지 확인
--prefix=PATH <-- 설치경로 지정
--with-libtool <-- 공유라이브러리 빌드를 가능하게 하는 옵션
--with-openssl=PATH <-- openssl의 경로를 지정 DNSSEC 을 지원
--enable-threads <-- threads 지원
# yum remove bind-utils bind-libs
# ./configure \
--prefix=/usr/local/bind \
--with-libtool \
--with-openssl=/usr/local/openssl \
--enable-threads
# make && make install
2. 패키지를 이용해서 설치하는 방법
2-1. DVD/CD 를 이용해서 설치하는 방법
- CD/DVD 를 넣고 아래 명령어를 사용해서 설치한다.
# mount -t iso9660 -o ro /dev/cdrom /media
# rpm -Uvh /media/CentOS/bind-9.3.6-20.P1.el5.i386.rpm
# rpm -Uvh /media/CentOS/bind-chroot-9.3.6-20.P1.el5.i386.rpm
# rpm -Uvh /media/CentOS/caching-nameserver-9.3.6-20.P1.el5.i386.rpm
# rpm -Uvh /media/CentOS/bind-utils-9.3.6-20.P1.el5.i386.rpm
# rpm -Uvh /media/CentOS/bind-libs-9.3.6-20.P1.el5.i386.rpm
# eject
2-2. yum 을 이용해서 설치하는 방법
- 패키지 그룹 : DNS Name Server
- 패키지 : caching-nameserver, bind-utils
- 네임서버를 구동하기 위한 패키지그룹을 설치
# yum -y groupinstall "DNS Name Server"
:
bind-libs
bind
bind-chroot
:
# yum -y install caching-nameserver <-- 캐쉬전용 네임서버 세팅
# yum -y install bind-utils <-- DNS 전용 유틸리티 명령어 설치
# /etc/init.d/named start <-- 네임서버 시작
# cat /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no <-- IPV6 사용여부 확인
HOSTNAME=localhost.localdomain
# netstat -nltpu | grep 53 <-- 데몬포트 확인!!!
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 18963/named <-- IPV4
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 18963/named <-- IPV4
tcp 0 0 ::1:53 :::* LISTEN 18963/named <-- IPV6
tcp 0 0 ::1:953 :::* LISTEN 18963/named <-- IPV6
udp 0 0 127.0.0.1:53 0.0.0.0:* 18963/named <-- IPV4
udp 0 0 ::1:53 :::* 18963/named <-- IPV6
========================================================================
DNS-LAB1> 특정 도메인의 DNS에 등록된 정보를 확인해보자.
- /etc/resolv.conf 에 등록된 nameserver 로 질의하는 방법
# dig daum.net
# dig daum.net mx
# dig daum.net ns
# dig daum.net soa
- 자신의 DNS 서버로 질의하는 방법
- 사용방법은 @<nameserver ip address> 를 사용한다.
# dig @localhost daum.net
# dig @localhost daum.net mx
# dig @localhost daum.net ns
# dig @localhost daum.net soa
========================================================================
========================================================================
DNS-LAB2> caching-nameserver 를 설치하고 외부의 DNS를 허용할 수 있게 세팅해보자.
caching-nameserver IP : 172.16.10.147
1. caching-nameserver 설치
# yum install caching-nameserver
# rpm -ql caching-nameserver
2. 데몬을 실행
설정파일을 수정해서 127.0.0.1 <-- 0.0.0.0 으로 변경
127.0.0.1:53 -> 0.0.0.0:53
3. 외부의 쿼리를 받도록 설정을 변경
!!! 예전에는 nameserver 설정파일이 named.conf 였고 버전이 올라오면서
!!! 이 파일이 두개로 분리가 되었다.
!!! named.caching-nameserver.conf , named.rfc1912.zones
!!! 예전 내용과 호환이 되기 위해서는 named.rfc1912.zones 를
!!! /etc/named.conf 로 링크를 걸어주면 된다.
# ln -s /var/named/chroot/etc/named.rfc1912.zones /etc/named.conf
# ls -l /etc/named.*
lrwxrwxrwx 1 root named 51 Mar 5 01:36 /etc/named.caching-nameserver.conf -> /var/named/chroot/etc/named.caching-nameserver.conf
lrwxrwxrwx 1 root named 41 Mar 5 01:36 /etc/named.rfc1912.zones -> /var/named/chroot/etc/named.rfc1912.zones
# vi /etc/named.caching-nameserver.conf
options {
...
query-source port 53;
listen-on port 53 { any; }; <-- any 로 변경
// listen-on-v6 port 53 { ::1; };
allow-query { any; }; <-- any 로 변경
allow-query-cache { any; }; <-- any 로 변경
}
view localhost_resolver {
match-clients { any; }; <-- any 로 변경
match-destinations { any; }; <-- any 로 변경
recursion yes; <-- (나중에 보안상 yes를 no로 변경)
...
}
(스샷처럼 변경)
# /etc/init.d/named restart
# netstat -nltu|grep 53
tcp 0 0 192.168.56.102:53 0.0.0.0:* LISTEN
tcp 0 0 10.0.2.15:53 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN
udp 0 0 192.168.56.102:53 0.0.0.0:*
udp 0 0 10.0.2.15:53 0.0.0.0:*
udp 0 0 127.0.0.1:53 0.0.0.0:*
윈도우 cmd에서 확인
ipconfig /flushdns <-- cache 삭제
ipconfig /displaydns | findstr daum.net
nslookup daum.net 192.168.0.13 (리눅스 DNS 서버의 주소)
========================================================================
notepad %systemroot%\system32\drivers\etc\hosts
리눅스에서의 /etc/hosts 파일
========================================================================
DNS-LAB3> 아래 도메인명에 해당하는 간단한 네임서버 세팅하기!!
리눅스 IP : 192.168.56.200 allow-transfer { 192.168.56.210 ; };
도메인명 : sbs.com
호스트명 : www.sbs.com
-- 작업 순서 --
1. 설정파일에 도메인 영역 추가
2. forward zone 파일 생성
3. 심볼릭 링크생성
4. 네임서버 설정 확인
5. 네임서버 재시작
6. 확인
-- 작업 순서 --
- 전체설정
- 호스트 방화벽에서 DNS 53번 룰을 설정
# iptables -F
# iptables -I INPUT -p udp --dport 53 -j ACCEPT
# iptables -nvL
# ifconfig eth1:1 192.168.56.200
1. 설정파일에 도메인 영역 추가
- 실제 파일 : /var/named/chroot/etc/named.rfc1912.zones
- 링크 파일 : /etc/named.rfc1912.zones
# vi /etc/named.rfc1912.zones
-- /etc/named.rfc1912.zones --
:
:
zone "sbs.com" IN { <-- 파일의 끝에 추가한다.
type master;
file "sbs.com.zone";
allow-update { none; };
};
-- /etc/named.rfc1912.zones --
2. forward zone 파일 생성 <-- host 가 담겨있는 DB 파일이다.
- 실제파일 : /var/named/chroot/var/named/sbs.com.zone
# cd /var/named/chroot/var/named
# cp -a localhost.zone sbs.com.zone
# vi sbs.com.zone
-- sbs.com_zone --
$TTL 60
@ IN SOA @ root (
42 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
IN NS @
IN A 192.168.56.200
www IN A 192.168.56.200
-- sbs.com_zone --
3. 심볼릭 링크생성
- ln -s `pwd`/<tab>
# ln -s /var/named/chroot/var/named/sbs.com.zone /var/named/sbs.com.zone
4. 네임서버 설정 확인
# named-checkconf /etc/named.rfc1912.zones
# named-checkzone sbs.com sbs.com.zone
zone sbs.com/IN: loaded serial 42
OK
5. 네임서버 재시작
# /etc/init.d/named restart
6. 확인
- linux 에서 확인
- dig, nslookup, host
# dig @localhost sbs.com +short
192.168.56.200
# dig @localhost www.sbs.com +short
192.168.56.200
# nslookup sbs.com localhost
# nslookup www.sbs.com localhost
- windows 에서 확인
시작-> cmd -> c:\> nslookup sbs.com 192.168.56.200 (리눅스 DNS 서버 IP)
!!! 팁 : 네임서버가 세팅이 잘안되면 아래를 확인 !!!
!!! 1. 로그를 확인 <--- ****
/var/log/messages
!!! 2. 설정 확인
/var/named/chroot/etc/named.rfc1912.zones
/var/named/chroot/etc/named.caching-nameserver.conf
!!! 3. 권한 확인
/var/named/chroot/var/named/zonefile* named 가 읽기권한 O
/var/named/chroot/var/named/* -> /var/name/* 링크생성
!!! 4. 데몬이 떠있는지 확인 netstat -natu <-- 53 포트 (udp 확인)
!!! 5. 방화벽에 53번 포트가 막혀있는지 확인
========================================================================
========================================================================
DNS-LAB4> 아래 도메인명에 해당하는 간단한 네임서버 세팅하기!!
--> 해보길..
리눅스 IP : 192.168.56.200
도메인명 : kbs.com : 192.168.56.200
호스트명 : www.kbs.com : 192.168.56.200
-- 작업 순서 --
1. 설정파일에 도메인 영역 추가
2. forward zone 파일 생성
3. 심볼릭 링크생성
4. 네임서버 설정 확인
5. 네임서버 재시작
6. 확인
-- 작업 순서 --
1. 설정파일에 도메인 영역 추가
- 실제 파일 : /var/named/chroot/etc/named.rfc1912.zones
# vi /etc/named.rfc1912.zones
-- /etc/named.rfc1912.zones --
:
:
zone "kbs.com" IN {
type master;
file "kbs.com.zone";
allow-update { none; };
};
-- /etc/named.rfc1912.zones --
2. forward zone 파일 생성 <-- host 가 담겨있는 DB 파일이다.
- 실제파일 : /var/named/chroot/var/named/kbs.com.zone
# cd /var/named/chroot/var/named
# cp -a sbs.com.zone kbs.com.zone
# vi kbs.com.zone
-- kbs.com.zone --
$TTL 60
@ IN SOA @ root (
42 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
IN NS @
IN A 192.168.56.200
www IN A 192.168.56.200
-- kbs.com.zone --
3. 심볼릭 링크생성
# ln -s /var/named/chroot/var/named/kbs.com_zone /var/named
4. 네임서버 설정 확인
# named-checkconf /etc/named.rfc1912.zones
# named-checkzone kbs.com kbs.com.zone
zone kbs.com/IN: loaded serial 42
OK
5. 네임서버 재시작
# /etc/init.d/named restart
6. 확인
- linux 에서 확인
# dig @localhost kbs.com +short
192.168.56.200
# dig @localhost www.kbs.com +short
192.168.56.200
- windows 에서 확인
시작-> cmd -> c:\> nslookup kbs.com 192.168.56.200
!!! 팁 : 네임서버가 세팅이 잘안되면 아래를 확인 !!!
!!! 1. 로그를 확인 <--- ****
/var/log/messages
!!! 2. 설정 확인
/var/named/chroot/etc/named.rfc1912.zones
/var/named/chroot/etc/named.caching-nameserver.conf
!!! 3. 권한 확인
/var/named/chroot/var/named/zonefile* named 가 읽기권한 O
/var/named/chroot/var/named/* -> /var/name/* 링크생성
!!! 4. 데몬이 떠있는지 확인 netstat -natu <-- 53 포트 (udp 확인)
========================================================================
========================================================================
DNS-LAB5> 아래 조건에 해당하는 도메인명에 대한 네임서버 세팅하기!!
--> 해보길..
forward zone file : mbc.com.zone
도메인명 : mbc.com 192.168.56.200
호스트명 : www.mbc.com 192.168.56.200
호스트명 : db.mbc.com 192.168.56.101
호스트명 : backup.mbc.com 192.168.56.110
========================================================================
========================================================================
DNS-LAB5> 아래 조건에 해당하는 네임서버와 가상호스트 세팅하기!!
============ 조건 ==================
-- WEB 세팅 --
도메인명 : ytn.com, www.ytn.com
시스템 사용자 : ytnuser
DocumentRoot : /home/ytnuser/public_html
index.html 내용 : Welcome to ytn.com
-- DNS 세팅 --
도메인명 : ytn.com
IP 주소 : 192.168.56.200
forward zone file : ytn.com.zone
호스트명 : www.ytn.com 192.168.56.200
호스트명 : db.ytn.com 192.168.56.201
호스트명 : backup.ytn.com 192.168.56.202
============ 조건 ==================
-- WEB 작업 순서 --
1. 사용자를 생성
2. 사용자 디렉토리의 권한을 변경
3. index.html 생성
4. 웹 설정파일에서 가상호스트를 세팅
5. 아파치 재시작
6. 확인
-- WEB 작업 순서 --
-- DNS 작업 순서 --
1. 설정파일에 도메인 영역 추가
2. forward zone 파일 생성
3. 심볼릭 링크생성
4. 네임서버 설정 확인
5. 네임서버 재시작
6. 확인
-- DNS 작업 순서 --
-- WEB 작업 순서 --
1. 사용자를 생성
# useradd -D -b /home
# useradd -D
:
HOME=/home <-- /home 이 아니면 /home 변경
:
# ls /etc/skel
public_html/ <-- 없으면 생성
# useradd ytnuser
2. 사용자 디렉토리의 권한을 변경
# chmod 711 /home/ytnuser <-- 755 는 보안상 711보다 약하다 그래서 변경
3. index.html 생성
# echo "Welcome to ytn.com" > /home/ytnuser/public_html/index.html
# chown ytnuser.ytnuser /home/ytnuser/public_html/index.html
4. 웹 설정파일에서 가상호스트를 세팅
# vi /usr/local/apache/conf/httpd.conf
-- /usr/local/apache/conf/httpd.conf --
:
:
<VirtualHost *:80>
DocumentRoot /home/ytnuser/public_html
ServerName ytn.com
ServerAlias www.ytn.com
</VirtualHost>
-- /usr/local/apache/conf/httpd.conf --
5. 아파치 재시작
# apachectl configtest
# apachectl restart
6. 확인
# vi /etc/resolv.conf
-- /etc/resolv.conf --
nameserver 127.0.0.1
-- /etc/resolv.conf --
# vi /etc/hosts
-- /etc/hosts --
192.168.56.200 ytn.com
192.168.56.200 www.ytn.com
-- /etc/hosts --
# yum -y install lynx
# lynx --dump ytn.com
Welcome to ytn.com
# lynx --dump www.ytn.com
Welcome to ytn.com
-- WEB 작업 순서 --
-- DNS 작업 순서 --
1. 설정파일에 도메인 영역 추가
# vi /etc/named.rfc1912.zones
-- /etc/named.rfc1912.zones --
:
:
zone "ytn.com" IN {
type master;
file "ytn.com.zone";
allow-update { none; };
};
-- /etc/named.rfc1912.zones --
2. forward zone 파일 생성
# cd /var/named/chroot/var/named
# cp -a sbs.com.zone ytn.com.zone
# ls -l ytn.com.zone <-- named 사용자가 읽을 수 있는 권한이 있어야 한다. ** 중요 **
-rw-r----- 1 root named 217 Mar 21 09:12 ytn.com.zone
# vi ytn.com.zone
-- ytn.com.zone --
$TTL 60
@ IN SOA @ root (
42 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
IN NS @
IN A 192.168.56.200
www IN A 192.168.56.200
db IN A 192.168.56.201
backup IN A 192.168.56.202
-- ytn.com.zone --
3. 심볼릭 링크생성
# ln -s /var/named/chroot/var/named/ytn.com.zone /var/named/ytn.com.zone
4. 네임서버 설정 확인
# named-checkconf /etc/named.rfc1912.zones
# named-checkzone ytn.com ytn.com.zone
zone ytn.com/IN: loaded serial 42
OK
5. 네임서버 재시작
# /etc/init.d/named restart
6. 확인
# vim /etc/hosts
# cat /etc/resolv.conf
-- /etc/resolv.conf --
nameserver 127.0.0.1
-- /etc/resolv.conf --
# dig ytn.com +short <-- /etc/resolv.conf 가 현재 자신의 서버로 등록이
192.168.56.200 <-- 되어있다면 네임서버를 지정하지 않아도 된다.
# dig www.ytn.com +short
192.168.56.200
# dig db.ytn.com +short
192.168.56.201
# dig backup.ytn.com +short
192.168.56.202
Host OS 에서 DNS를 192.168.56.200 으로 설정하고 브라우저에서 확인해서
Welcome to ytn.com 이 나오면 성공!!!
========================================================================