DNS (Domain Name Service/System)
- DNS서비스는 도메인을 IP주소로 변환시켜주는 이름 관리 서비스 이며, 초기 알파넷의 이름관리 서비스를 위해 사용했던
hosts.txt의 한계를 극복 하기 위해 시작된 서비스
- DNS는 도메인(Domain)이라고 불리는 이름을 숫자로 구성된 IP주소와 일치 시켜 주는 데이터 베이스이다.
- 도메인은 사람이 기억하기 쉬운 문자로 구성되어 사용하기 편리하지만 컴퓨터는 글자가 아니라 숫자로 구성된 IP주소를
이용해 컴퓨터간에 통신을 한다.
- 사람이 글자로 이루어진 도메인ㄴ을 입력하면 DNS는 이 도메인에 대한 P주소를 찾아 변환/해석(Resolving)을 해주고,
컴퓨터가 IP주소로 접속 할 수 있게 도와줘 컴퓨터 간에 통신을 가능하게 한다.
도메인 (사람)
ww.xxxxx.com
↑
│
│
│
│
↓
IP주소 (컴퓨터)
100.100.100.110
DNS의 구조
- 계층적 구조형태로 구성되어 있으며, 4단계 도메인 레벨로 세분화 할 수 있다.
[1] Root Level Domain
도메인 구조에서 최상위에 위치해 있으며, 표시는 닷(dot '.')을 이용하며,
전 세계에서 Root Level Domain에 대한 정보를 제공하는 13개의 네임서버가 있다.
[2] Top Level Domain
TLD라고 불리며, 여기에는 ccTLD(country-code-Top-Level-Domain)와
gTLD(Generic-code-Top-Level-Domain)가 있으며, IANA에 의해 관리된다.
IANA(Internet Assigned Number Authority)
인터넷 할당 번호 관리 기관, 전세계 DNS를 관리하고 정하는 기구로서 인터넷의 안정적이고 효율적인
운영에 대한 책임을 지고 모든 정책적 권한을 행사하는 기관이다.
[3] Second Level Domain
사용자들의 요청에 따라 사용자들의 조직이나 회사, 개인의 목적에 부합하는 문자 및 숫자로 이루어진 도메인
[4] Third Level Domain
Second Level Domain에서 각 목적에 따라 도메인이 더 필요한 경우 생성되고 보통 서브 도메인 이라 한다.
루트 레벨 도메인부터 각 컴퓨터에 할당된 도메인 네임까지 이러한 논리적이며 계층적인 DNS구조를 도메인 네임 스페이스(이름공간)라고 한다.
하나의 도메인에 대해 권한이 있는 서버(Authority Name Server)에 의해 관리되는 전체 노드들의 집합을 DNS존이라고 부른다.
www taehoon com .
Third Second Top Root
Level Level Level Level
NSLOOKUP 테스트
(1)#yum -y install bind-util //nslookup 유틸리티를 포함한 DNS질의 시 필요한 유틸리티를 제공하는 패키지
(2)#nslookup //네임서버의 정보를 검색하기 위해 가장 많이 사용하는 유틸리티.
(3)>server // /etc/resolv.conf 파일에 명시된 DNS서버의 주소 출력
- nslookup 실행 후 대화형 프롬프트 '>'를 표시하고 /etc/resolv.conf에 명시된 첫 번째 네임서버를 기본질의 서버로 설정한다.
- nslookup은 기본적으로 입력된 도메인에 대해 A레코드(IP주소)를 검색하고, IP주소 입력 시 PTR레코드(도메인)을 검색한다.
- 오타 수정 Ctrl + Backspace, 종료 시 exit 입력
nslookup 질의 네임 서버 변경
> server [네임서버 IP/도메인]
(4) www.nate.com
네임서버에 등록된 네이트 웹 서버 www.nate.com에 대한 IP주소 질의
(5) www.google.com
네임서버에 등록된 네이트 웹 서버 www.google.com에 대한 IP주소 질의
(6) www.fbi.gov
네임서버에 등록된 네이트 웹 서버 www.fvi.gov에 대한 IP주소 질의
/etc/hosts 테스트
(1) Firefox 실행
Vmware에서 Server-A Desktop환경에 설치된 Firefox 실행
(2) URL입력란에 www.nate.com 입력 후 접속 확인
(3) Firefox 종료
(4) cat /etc/resolv.conf
설정된 기본 DNS서버 확인
(5) cat /etc/sysconfig/network-scripts/ifcfg-eth0
설정된 기본 DNS서버 확인
(6) vi /etc/resolv.conf
설정된 기본 DNS서버 주석 처리
(7) vi /etc/sysconfig/network-scripts/ifcfg-eth0
설정된 기본 DNS서버 주석 처리
/etc/hosts 테스트
(1)Firefox 실행
Vmware에서 Server-A Desktop환경에 설치된 Firefox 실행
(2)URL 입력란에 www.nate.com 입력 후 접속 확인
현재는 DNS서버와 통신이 불가능 하므로 접속이 불가능
(3)nslookup을 확인 했던 IP주소로 URL입력란에 입력
www.nate.com에 접속 확인
(4) vi /etc/hosts (IP가 도메인 보다 우선순위, 도메인에 오타가 나도 IP가 올바로 입력되었으면 IP주소로 통해 접속가능)
120.50.131.112 www.nate.com
hosts 파일에 www.nate.com의 IP주소와 도메인(URL)입력
(5) Firefox 실행
Vmware에서 Server-A Desktop환경에 설치된 Firefox 실행
(6) URL 입력창에 www.nate.com 입력 후 접속 확인
120.50.131.112에 접속 확인
- 윈도우 hosts 파일 경로
C:/Windows/System32/drivers/etc/hosts
VMware는 기본적으로 NAT, Gateway, DHCP, DNS(HostOS의 DNS를 공유)를 제공한다.
Local Name Server
- 리눅스에는 각 서버 마다 사용하는 네임 서버가 /etc/resolv.conf파일에
'nameserver IP주소' 형식으로 설정되며, 해당 네임 서버를 로컬 네임 서버라고 한다.
- 사용자가 URL입력 후 IP주소를 요구하면 해당 로컬 네임 서버에게 질의를 하게 된다.
- 로컬 네임 서버가 전세계의 모든 컴퓨터의 도메인 이름을 관리 할 수 없기 때문에,
자신의 DB에 존재하는 도메인이라면 바로 알려 주지만, 대부분 그렇지 않기 때문에 최상위 도메인에 위치한 Root 네임 서버에게 질의를 한다.
/etc/host
공백(빈파일)
-etc/hosts우선 확인
order hosts, bind
- /etc/hosts 우선 확인, hosts 파일확인후, 관련 정보가 없다면 bind 확인 (/etc/resolv.conf에 명시된 DNS서버에 질의)
order bind, hosts
- /etc/resolv.conf 명시된 DNS서버에 먼저 확인 후 hosts 파일 확인
multi on (/etc/host.conf에서 설정)
- /etc/hosts 파일에 여러개의 URL을 사용 할 수 있다는 의미
Name Server
- 원하는 서버에 접근하기 위해 알기 쉽게 입력한 문자로 된 도메인 주소를 컴퓨터가 처리할 수 있는 IP주소로 변환시켜주는 서비스를 제공하는 서버
- DNS서버는 자신의 도메인 정보를 관리하고, 외부 DNS서버의 문의에 대응하는 기능을 한다.
- DNS가 관리하는 도메인의 범위를 영역(zone)이라 한다.
구성요소
도메인 이름공간과 리소스 레코드
도메인 구성과 리소스를 정의하는 DNS영역파일
네임서버
서버의 데몬 프로세스로 동작하는 네임 서버 프로그램
리졸버
리졸버는 클라이언트의 요청을 네임서버로 전달하고 네임 서버로 부터 정보(도메인 이름과 IP주소)를 받아
클라이언트에게 제공하는 기능을 수행
/etc/resolv.conf
(로컬)DNS서버의 IP주소를 설정하는 파일
리졸버와 Lookup
리졸버는 요청한 도메인 네임 스페이스(이름공간)대한 정보를 얻기 위해 DNS 메세지를 보내는 DNS 클라이언트 프로그램을 의미하며,
/etc/resolv.conf에 정의된 네임서버가 리졸버로 동작한다.
resolve(이름해석)
-IP주소를 도메인 이름으로, 도메인이름을 IP주소로 변환하는 작업
도메인 <---> IP주소
Forward Lookup & Reverse Lookup
Forward Lookup(정방향 조회)은 DNS의 일반적인 기능으로 도메인에 대한 정보를 IP주소로 변환 시켜주는 기능을 의미하며,
반대로 Reverser Lookup(역방향 조회)은 IP주소를 그에 해당하는 도메인으로 변환 시켜주는 기능을 의미한다.
Forward, Reverse Lookup 시 사용되는 데이터 베이스 파일을 각각 Forward Zone, Reverse Zone 파일이라 한다.
DNS 서버 구축
DNS서버의 유형
권한 있는 네임 서버
(Authoritative Name Server)
- 특정 도메인에 대한 정보를 설정하고 도메인에 대한 정보를 요청하는 클라이언트들에게 독점적으로 해당 도메인에 대한 최종적인 정보를
제공하는 서버를 Authoritative 네임서버라고 한다.
- 보통 Master (Primary, Main) 서버, 그리고 해당 서버들의 정보를 동기화하는 Slave (Secondary, Backup)서버를 뜻한다.
Recursive & Caching Only Name Server
- 도메인 정보를 제공하는 것은 권한 있는 네임 서버와 동일하지만, 설정한 특정 도메인에 대한 정보를
제공하는 것이 아니라 클라이언트가 요청하는 도메인에 대한 정보를 그 도메인의 권한 있는 서버로 부터
가져온 후에 메모리의 캐시에 일정 시간 (TTL)동안 저장해 제공하는 서버를 Caching-Only 네임 서버라 한다.
- 대부분의 ISP 업체의 네임서버가 이런 유형의 네임서버이다.
Caching-Only 네임 서버
- DNS서버는 한 번 검색한 결과는 메모리의 캐시에 기록하며 같은 정보가 요청되면 캐시에 있는 정보를 전송한다.
- 캐시에는 유효기간(TTL : Time To Live)이 정해져 있으므로 유효기간이 지난 정보는 캐시에서 삭제된다.
BIND설치와 DNS 서버 시작
BIND(Berkeley Internet Name Domain)
패키지 설치 후 생성되는 주요 파일 및 디렉토리
/etc/named.conf
네임 서버의 주 설정 파일
/etc/named.rfc1912.zones
존 정보를 설정하기 위한 파일
/etc/rnd.conf
RNDC서비스를 제공하기 위한 설정파일
/etc/named.root.key
DNSSEC에서 루트 존을 위해 사용되는 DNSKEY가 보관된 파일
/var/named
네임 서버의 데이터베이스 파일을 보관하는 디렉토리
/usr/sbin/named
네임 서버 데몬 파일
패키지 설치
-dns주석 해제
(1) #yum install bind bind-utils bind-libs bind-chroot
(2) #rpm -qa | grep bind
설치 패키지
bind
dns 서버 구축 프로그램을 제공
bind-utils
DNS서버 질의를 위해 사용되는 유틸리티 모음제공
bind-libs
BIND와 BIND 유틸리티 프로그램이 사용하는 라이브러리 패키지
bind-chroot
BIND의 chroot 환경을 위해 사용되는 파일들을 제공
chroot
change root의 약어로서 named 데몬이 사용하는 홈 디렉토리는 일반적으로 /var/named/chroot를 사용한다.
DNS서버의 보안을 높이기 위한 방식으로 /var/named/chroot 디렉토리를 최상위 '/' 루트로 인식하여 상대 경로로 파일 참조 한다.
설정파일들은 chroot 디렉토리 내부에 있어야 한다.
chroot 동작 확인
(1) vi /etc/sysconfig/named
ROOTDIR=/var/named/chroot
최상위 디렉토리로 사용하기 위한 경로가 설정되어 있다.
(2)cd /var/named
네임서버의 데이터베이스 파일을 보관하는 디렉토리로 이동
(3)ls
chroot
ls명령어를 이용하여 chroot디렉토리 확인
네임서버의 주 설정 파일의 경로는 /etc/named.conf 파일이지만,
chroot 기능에 의해 ROOTDIR에 설정된 디렉토리를 최상위 '/'로 인식하여 실제 위치는 아래와 같다.
/etc/named/chroot
named 데몬이 접근이 가능한 최상위 디렉토리를 의미하며, 해당 디렉토리외에 다른 디렉토리는
접근이 불가능 하다고 해서 chroot jail(감옥) 이라고 한다.
(4) #cd /var/named/chroot/etc
(5) #pwd
/var/named/chroot/etc
(6) #ls
(7) #service named start
named 서비스 시작
(8) #ls
ls 명령어로 파일 목록 확인
named 서비스를 시작하면 /etc 디렉토리에 위치한 네임서버의 원본 설정 파일이
해당 디렉토리에 복사가 되어 동작한다.
(9) #service named stop
named 서비스 중지
(10) #ls
DNS 서버 시작
(1) #service named start
service 명령어를 이용해 named 데몬 시작
(2) #service named status
데몬 시작 이후 상태를 알기 위해 사용하며, 프로세스가 활성화 되어 있는지, 그리고 어떤 존들이 현재 제공 되고 있는지를 확인 할 수 있다.
(3) #chkconfig named on
재부팅 이후에도 자동으로 데몬을 활성화시키기 위해 사용
(4) #chkconfig --list named
설정확인
(5) #netstat -natu | grep 53
named 데몬은 TCP와 UDP 53번이 열려 있는 상태로서 서비스 준비가 되어 있음을 뜻한다
(6) #cat /etc/services | grep -w domain
/etc/services에 명시된 정보 확인
(7) #tail -45 /var/log/messages
TCP/UDP를 사용하는 이유
DNS서비스는 일반적으로 UDP를 사용하는데 두가지 이유로 인해 TCP를 통해서도 서비스가 이루어져야 한다.
1. UDP가 최대로 전송 가능한 DNS 데이터 크기는 UDP상에서 512바이트인데 DNS헤더를 포함한 DNS메세지의 길이가 512 바이트를
초과하는 경우 TCP 53번 포트를 사용하여 TCP연결을 통한 DNS질의와 응답이 이루어 지도록 설계 되어 있다.
2. 마스터와 슬레이브 네임서버 간 도메인에 대한 존 전송을 하게되는데 이 경우 많은 야으이 데이터의 전송이 필요하기 때문에
TCP를 사용해 전송이 이루어 진다.
TIP
- 루트 네임 서버 (/var/named/named.ca)
루트 네임서버는 전세계 13개가 운영되고 있으며 더 이상 늘리지 않는 이유는 DNS 프로토콜 상의 UDP 512바이트 제약 때문이다.
UDP 512바이트를 초과하게 되면 TCP로 동작을 하게 되고, UDP보다 상대적으로 더 많은 부하가 발생한다.
이런한 문제로 루트 네임서버는 질의 대한 응답을 512BYTE로 조절하고 있다.
루트 네임 서버가 13개일 경우 응답 메세지의 크기는 493바이트인데, 루트 네임서버 하나가 추가되면
512 바이트를 초과하게 되기 때문에 더 이상의 루트네임서버를 증설 할 수 없는 상태이다.
ROOT 네임 서버 정보 갱신
[1] wget ftp://rs.internic.net/domain/named.root
wget명령어로 root네임 서버 정보 파일을 공식 사이트로 부터 다운로드 한다.
[2] mv named.root /var/named/
현재 경로 위치에 다운로드한 named.root 파일을 /var/named/ 디렉토리로 이동
[3] cd /var/named/
/var/named/로 이동
[4] cp -p named.root named.ca
cp: overwrite `named.ca'? y
다운로드한 파일로 기존 named.ca 파일을 덮어 씌운다.
[5] vi /var/named/named.ca
vi 를 이용하여 12번(:set nu) 라인의 최근 없데이트 날짜와 루트서버에 대한 정보도 함께 확인한다.
'Linux' 카테고리의 다른 글
Day-33 DNS (0) | 2017.01.26 |
---|---|
Day-32 DNS (0) | 2017.01.25 |
Day-30 DHCP (0) | 2017.01.23 |
Day-29 DHCP (0) | 2017.01.22 |
Day-28 공개키 기반 인증 (0) | 2017.01.20 |