Linux // DNS
DNS ( Domain Name Service/System )
1) DNS 서비스는 도메인을 IP주소로 변환시켜주는 이름 관리 서비스이며, 초기 알파넷의 이름 관리 서비스를 위해 사용했던 hosts.txt의 한계를 극복하기 위해 시작된 서비스
2) DNS는 도메임(Domain) 이라고 불리는 이름을 숫자로 구성된 IP주소와 일치 시켜 주는 데이터 베이스
3) 도메인은 사람이 기억하기 쉬운 문자로 구성되어 사용하기 편리하지만 컴퓨터는 글자가 아니라 숫자로 구성된 IP주소를 이용해 컴퓨터간에 통신을 함
4) 사람이 글자로 이루어진 도메인을 입력하면 DNS는 이 도메인에 대한 IP주소를 찾아 변환/해석을 해주고, 컴퓨터가 IP주소로 접속할 수 있게 도와줘 컴퓨터간에 통신 을 가능하게 함
DNS 서버의 종류
1) Primary Name Server
> 사용하는 도메인을 관리하기 위해 필수적으로 구성하는 서버 ( Master DNS ) 도메인을 등록할 때 이 서버의 IP 주소를 등록하고, 자체 도메인에 대한 정보를 관리함
2) Secondary Name Server
> zone 파일을 백업하는 역할을 수행 ( Slave DNS ) 외부 클라이언트에서 이 서버를 2차 DNS 서버로 설정하면 Master DNS가 다운된 상태라도 정상 리졸빙 제공
3) Caching Name Server
> 관리하는 도메인 없이 리졸빙만을 제공하기 위해 구성하는 서버. 도메인에 대한 리졸빙 결과를 저장하고 서버에 기록된 정보에 대한 요청이 들어올 경우 직접 조회 하지 않고 바로 응답해 주는 역할 수행
DNS 서버 구축
1. 패키지 설치
# yum install bind bind-utils bind-libs bind-chroot // 필요한 패키지 설치
# rpm -qa |grep bind // 정상 설치 확인
1) bind : dns 서버 구축 프로그램 제공
2) bind-utils : DNS서버 질의를 위해 사용되는 유틸리티 모음 제공
3) bind-libs : BIND와 BIND 유틸리티 프로그램이 사용하는 라이브러리 패키지
4) bind-chroot : BIND 의 chroot 환경을 위해 사용되는 파일 제공
chroot란, change root의 약어로서 named데몬이 사용하는 홈 디렉토리는 일반적으로 /var/named/chroot 를 사용함. DNS 서버의 보안을 높이기 위한 방식으로 /var/named/chroot 디렉토리를 최상위 '/'루트로 인식하여 상대경로로 파일을 참조. 설정 파일들은 chroot 디렉토리 내부에 있어야 함!
2. 주요 파일 및 디렉토리
1) /etc/named.conf
> 네임 서버의 주 설정 파일
2) /etc/named.rfc1912.zones
> 존 정보를 설정하기 위한 파일
3) /etc/named.root.key
> DNSSEC에서 루트 존을 위해 사용되는 DNSKEY가 보관된 파일
4) /var/named
> 네임 서버의 데이터 베이스 파일을 보관하는 디렉토리
5) /usr/sbin/named
> 네임 서버 데몬 파일
3. ROOT 네임서버 정보 갱신
# wget ftp://rs.internic.net/domain/named.root // wget 명령어로 root 네임 서버 정보 파일을 공식 사이트로부터 다운로드 함
# mv named.root /var/named/ ; cd /var/named // 현재 경로위치에 다운로드한 named.root파일을 /var/named/ 디렉토리로 이동
# cp -p named.root named.ca // 다운로드한 파일을 기존 named.ca 파일에 덮어씌움
4. 도메인 설정
# vim /etc/named.conf // 네임 서버의 주 설정 파일을 설정
listen-on port 53 { any; }; // 53번 포트에 모든 접속을 허용
listen-on-v6 port 53 { none; }; // ipv6는 사용하지 않음
recursion yes; // yes : 다른 도메인에 대한 정보도 클라이언트에게 저공한다는 의미
no : 오직 현재 설정 파일에 정의된 도메인 정보만 클라이언트에게 제공한다는 의미
allow-query { any; }; // 현재 네임 서버가 제공하는 도메인 정보에 대한 질의를 할 수 있는 클라이언트 명시 ( any는 모두 )
5. 도메인 추가
# vim /etc/named.rfc1912.zones // 도메인 추가를 위해 사용하는 기본 파일
zone "taehyun.com" IN { // 도메인 taehyun.com을 이용해 새로운 존 생성
type master; // type의 종류
file "taehyun.zone"; // 해당 존의 정보를 포함하는 데이터베이스 파일의 이름
allow-update { none; };
};
zone " 100.100.100.in-addr.arpa" IN { // 도메인 taehyun.com에 해당하는 ip주소의 네트워크 부분을 이용해 Reverse Lookup 정보를 제공 ( 역주소 )
type master;
file "taehyun.rev.zone";
allow-update { none;};
};
type의 종류
1) master : 해당 존에 대한 정보를 제공하기 위해 지정되었음을 의미
2) slave : 해당 존에 정보를 마스터 서버로 부터 받아 제공하는 슬레이브 네임서버로 지정되었음을 의미
3) forward : 해당 존에 대한 요청을 모두 다른 네임 서버에게 전달하기 위해 지정되었음을 의미
4) hint : 질의에 대한 응답을 직접 제공하지 않고 루트 네임 서버로부터 응답을 받기 위해 서버들을 가리키는 특별한 형식의 존을 의미
6. 1> 데이터베이스 파일 생성
# cp named.empty taehyun.zone // 기본 양식 파일을 이용하여 도메인 taehyun.com에 대한 정보를 저장하는 파일 생성
# vim taehyun.zone // 수정
$TTL 1D
@ IN SOA @ ns.taehyun.com. admin.taehyun.com. (
1) @는 /etc/named.rfc1912.zones 파일에 설정된 존 이름을 의미함 해당 예제에서는 taehyun.com을 의미하고 IN은 internet, SOA는 Start of Authority의 약어로서, 해당 존에 대한 정보를 제공할 권한을 가진 서버 이름을 지정 ex) ns.taehyun.com
2) admin.taehyun.com은 해당 도메인에 대한 이메일 이름을 지정하는데 주의할 점은 이메일 표시하는 '@'대신에 점(.)이 해당 존을 의미 ('@'과 혼란을 피하기 위해 )
20170124 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS ns.taehyun.com.
MX 10 ms.taehyun.com.
1) NS는 Name Server의 약어로 해당 존에 대한 정보를 제공하는 네임서버의 이름
2) MX는 Mail Exchange의 약어로서 메일 서버를 지정하는 리소스 레코드며, 숫자 10은 메일 서버 간 우선순위를 지정할 때 사용하고 보통 5또는 10단위로 숫자를 증가 시킴
IN A 100.100.100.110
ns IN A 100.100.100.110
ms IN A 100.100.100.110
www IN A 100.100.100.110
ftp IN A 100.100.100.110
web IN CNAME www
1) 맨 앞의 공간은 비어 있는데, 여기엔 암묵적으로 존을 상징하는 '@'이 생략되어 있음. 즉 해당 도메인의 ip주소가 100.100.100.110 이라는 의미
2) ns 뒤에 @이 생략되어 있고 해당 네임서버가 사용하는 ip 주소를 가리킴
3) mx 는메일서버 이름으로 FQDN 표기법으로는 ms.taehyun.com. 이며 사용하는 ip 주소를 가리킴
4) www 는 웹서버 이름으로 FQDN 표기법으로는 www.taehyun.com. 이며 사용하는 ip 주소를 가리킴
5) ftp 는 ftp서버 이름으로 FQDN 표기법으로는 ftp.taehyun.com. 이며 사용하는 ip 주소를 가리킴
6) CNAME 은 Canonical Name 의 약어로 보통 별칭 이라함. 사용중인 다른 호스트의 또 다른 이름이라는 의미. ( web.taehyun.com. 은 www.taehyun.com. 을 가리킴)
리소스 레코드 종류
리소스 레코드( RR, Resource Record) 란, 존이나 도메인의 특성을 나타내기 위해 사용된 특별한 용어들을 의미
TTL : Time To Live로 네임서버가 설정한 도메인에 대한 정보를 제공받은 클라이언트들이 얼마 동안 이 정보를 캐시에 저장 할 지 결정하는 시간
serial : 존 정보가 업데이트 되었는지를 슬레이브 네임 서버에 전달하기 위해 사용하는 숫자
refresh : 슬레이브 네임 서버가 얼마의 주기로 마스터 서버에 접속해 정보가 변경되었는지를 점검하기 위해 사용되는 시간을 의미
retry : 슬레이브 네임 서버가 마스터 서버로의 refresh 접근이 실패할 경우 얼마 후에 다시 접근할지를 결정하는 시간 단위
expire : 슬레이브 네임 서버가 retry를 얼마 동안 허용할 지 결정하는 시간이며, 이 시간 이후 슬레이브 네임서버는 마스터 서버의 접근을 더이상 시도 안함
minimum : 잘못된 호스트에 대한 정보를 저장하기 위한 TTL 을 의미
ns : 해당 도메인의 네임 서버를 지정하기 위해 사용
mx : 해당 도메인의 메일 서버를 지정하기 위해 사용
A : 도메인의 ip주소 를 지정하기 위해 사용 ( IPv4 )
AAAA : 도메인의 ip주소 를 지정하기 위해 사용 ( IPv6 )
PTR : Pointer의 약어로서 ip주소에 일치하는 도메인을 가리키기 위해 사용
CNAME : Canonical Name 의 약어로 기존 호스트의 다름 이름을 지정하기 위해 사용
TXT : 해당 도메인의 TEXT정보를 설정하기 위해 사용
2> 데이터베이스 파일 생성
# cp.taehyun.zone taehyun.rev.zone // 설정한 Forward 존 파일을 이용하여 Reverse 존 파일 설정을 하기위해 복사
# vim taehyun.rev.zone
PTR taehyun.com.
110 PTR ms.taehyun.com.
110 PTR www.taehyun.com.
110 PTR ftp.taehyun.com.
1) PTR은 Pointer의 의미로서 곧 /etc/named.rfc.1912.zones 파일의 존 "100.100.100.in-arpa"이 도메인 taehyun.com (@) 을 가리킨다는 의미
2) 숫자 110은 뒤에 '@'이 생락되어 곧 100.100.100.110이 ms.taehyun.com을 가리킴
7. 데이터베이스 파일 확인
# chown root:named taehyun.zone // named 데몬이 접근이 가능하도록 Forward 존 파일 소유권 변경
# chown root:named taehyun.rev.zone // named 데몬이 접근이 가능하도록 Reverse 존 파일 소유권 변경
# service named restart // 네임서버 재시작
# named-checkconf /etc/named.rfc1912.zones // 설정한 파일의 문법을 검사하는 명령 ( 이상 없을 시 메세지 출력 없음 )
# named-checkzone taehyun.zone taehyun.revzone // 존 설정 검사시 사용하는 명령 ( 이상 없을 시 OK 가 출력 )
8. 동작확인
# nslookup
# >server 100.100.100.110
> www.taehyun.com
> ftp.taehyun.com
> ns.taehyun.com
역방향 조회
> 100.100.100.110
TCP/UDP를 사용하는 이유
DNS서비스는 일반적으로 UDP를 사용하는데 두 가지 이유로 인해 TCP를 통해서도 서비스가 이루어져야 함!
1. UDP가 최대로 전송 가능한 DNS 데이터 크기는 UDP상에서 512바이트인데 DNS헤더를 포함한 DNS메세지의 길이가 512바이트를 초과하는 경우 TCP 53번 포트를 사용하여 TCP연결을 통한 DNS 질의와 응답이 이루어지도록 설계 되어있음
2. 마스터와 슬레이브 네임서버 간 도메인에 대한 존 전송을 하게되는데 이 경우 많은 양의 데이터의 전송이 필요하기 때문에 TCP를 사용. 전송이 이루어짐