DNS (Domain Name System) 의 개요
1) DNS 의 개념과 구성요소
1. DNS 서비스의 개념
도메인 이름과 IP 주소를 상호 변환하는 서비스
2. DNS 서버의 동작과 종류
DNS 서버는 도메인을 관리하고 클라이언트 요청에 따라 도메인명 <-> IP주소 를 변환하여 응답
TCP/53, UDP/53 포트를 이용.
1 - 클라이언트에서 도메인 주소를 입력하면, Local DNS 관련 IP 주소를 질의
2 - Local DNS에 호스트 네임에 대한 정보가 없을 경우 Root DNS에 질의 시작
3 - Root DNS 에도 관련정보가 없으면 다른 DNS 서버에 질의
4,5 - Local DNS는 .com 을 관리하는 DNS에게 질의하고 관련 정보가 없을경우 다시 질의할 다른 DNS 서버의 주소를 응답 받음.
6,7 - Local DNS는 www.youngjin.com을 관리하는 DNS에 질의하고 관련 정보가 있을경우 IP 주소를 응답 받음.
8 - Local DNS는 www.youngjin.com 에 대한 IP 주소를 캐싱하고 클라이언트에게 전달
Primary Name Server | Master Server 라고 하며, 필수 항목. |
SecondaryName Server | Slave DNS 라고 하며, Primary Server의 zone 파일을 백업. Master DNS에 문제가 있을경우 보조 DNS로 사용가능. |
Caching Name Server | 도메인 관리없이 리졸빙 resolving 역할만 수행하는 서버로 도메인에 대한 리졸빙 결과를 저장하고 해당 요청이 있을시 바로 응답하여 속도를 향상시키는 역할을 담당. |
DNS 서비스 사용하기
1) DNS 서비스 설치
1. DNS 관련 패키지 설치
리눅스의 DNS 서버 프로그램 이름은 bind이며, named라는 데몬 이름을 가짐.
yum -y install bind 명령으로 DNS 관련 패키지인 bind, bind-libs, bind-utils 설치
bind 관련 파일과 디렉터리
/etc/rc.d/init.d/named | DNS 서버를 시작하기 위한 데몬 스크립트 stop, start, restart, reload 등 실행 옵션 사용가능 |
/etc/named.conf | 존 파일, 리버스 존 파일을 비롯한 DNS 서버의 주요한 환경을 설정하는 설정파일. zone 파일은 도메인 이름과 IP주소 혹은 관련 리소스간 매핑을 포함하고 이소스 레코드로 구성. 리버스 존 파일을 이용해 IP주소에 대한 도메인 정보 조회를 제공 |
/var/named | 루트 도메인 서버의 정보를 담은 named.ca. 사용자가 설정한 zone파일 등을 저장하는 디렉터리. |
2) /etc/named.conf 파일 설정
1. /etc/named.conf 형식
- options, acl, logging, zone 등의 주요 구문이 있음.
각 구문은 중괄호 {} 로 둘러싸고 끝날때는 세미콜론 ; 을 사용. - include 지시자를 선언하여 별도의 파일에 추가 정의 가능
2. options 구문의 설정 항목
options { listen-on port 53 { any; }; // DNS 서버의 port 번호 설정과 접근 할 수 있는 IP 설정 옵션 // DNS port 53에 대한 모든 IP가 접근 가능하도록 설정 // zone 파일 디렉토리 설정 옵션 //cache dump 파일이 생성되는 파일의 디렉토리 설정 옵션 statistics-file "/var/named/data/named_stats.txt"; // 통계파일이 생성되는 디렉토리와 파일의 이름을 지정하는 설정 옵션 //memory관련 통계파일이 생성되는 디렉토리와 파일의 이름을 지정하는 설정 옵션 allow-query { any; }; // DNS 서버의 쿼리를 허용할 ip 대역 설정 recursion yes; // 하위도메인 검색 허용 여부 지정. 외부에서 Name Server를 지정하여 허용/차단 옵션 dnssec-enable yes; // DNSSEC 서명검증 기능 설정 (공개키 암호화방식으로 데이터 위조-변조 공격을 막는 설정 ) // DNSSEC ( Domain Name System Security Extension ),bind 9버전 부터 적용 // DNSSEC 검증 확인 설정 /* Path to ISC DLV key */ managed-keys-directory "/var/named/dynamic"; // DLV ( DNSsec Lookaside Validator ) |
3. logging 구문의 설정 항목
bind 네임 서버의 로깅방식을 설정
logging { //Name Server의 실행에 있어 디버깅시에 참조 할 수 있는 log파일 생성 위치를 지정하는 설정 옵션 |
4. acl 구문의 설정 항목
acl(Access Control List) 구문은 여러 호스트 들을 하나의 이름으로 지정하여 options 구문의 allow-query, allow-transfer 등에 사용.
options 구문 이전에 설정.
ex) ihd 란 이름을 별칭으로 사용
acl ihd { 192.168.2.24; 192.168.4/24; } |
5. zone 구문의 설정 항목
도메인을 관리하기 위한 데이터 파일인 zone 파일을 지정.
zone [도메인명] IN { type [master | save | hint]; file [존 파일명]; } hint : 루트 도메인 지정 master : 1차 네임서버를 지정 slave : 2차 네임서버 지정 |
zone "." IN { type hint; file "named.ca"; } zone "linux.or.kr" IN { type master; file "linux.zone"; } |
2) zone 파일 설정
1. zone 파일 특징
- zone 파일은 도메인 이름과 IP 주소 혹은 관련 리소스 간 매핑 mapping을 포함하고, 리소스 레코드로 구성.
- 리버스 존 파일을 이용해 IP 주소에 대한 도메인 정보 조회를 제공.
- ; 를 이용하여 주석을 추가.
2. 구조
$TTL 1D @ IN SOA ns.ihd.or.kr. kait.ihd.or.kr ( ... 3H) ; minimum IN NS ns.ihd.or.kr. IN A 192.168.12.22 IN MX 10 ihd.or.kr. www IN A 192.168.12.22 www1 IN CNAME www |
구성항목
$TTL | - Time To Live 의 약자. 설정한 정보를 다른 DNS 서버에서 조회하였을 경우 캐시에 보관할 시간 지정 - zone 파일의 첫번째 라인에 위치. - 기본 시간 단위는 초. W,D,M 단위로 설정 |
SOA 레코드 | - Start Of Authority 약자로 도메인 관리자 메일, 일련번호 등 DNS 핵심정보 지정. - @ 기호는 오리진 도메인을 의미. /etc/named.conf 파일에서 설정한 도메인명. 만일 도메인명을 직접 지어할경우 마지막에 '.' 을 반드시 추가 SOA 레코드의 세부 속성은 별도의 표 참조. |
개별도메인 (리소스 레코드) |
[도메인명][IN][Class][Record Type][우선순위][도메인 혹은 IP] 형식 |
SOA 레코드 주요 속성
Nameserver | 네임 서버의 호스트명과 도메인 명을 지정. google.com. ('.'으로 끝남) |
Contact_email_address | 계정.도메인. 형식으로 관리자의 이메일 주소를 지정 |
Sereal_number | Zone 파일이 갱신되면 증가하게 되는 일종의 일련번호 보통 YYYYMMDDNN 형식을 사용, NN 은 수정 횟수를 기입. |
Refresh_number | 보조네임 서버가 정보 업데이트를 위해 주 네임 서버에 얼마나 자주 접근 점검할 것인지 설정. |
Retry_number | 보조네임서버가 주 네임 서버로 접근 실패할 경우 재시도할 주기를 결정 |
Expire_number | Retry_number에 설정한 주기로 재시도할 때의 만기시간을 지정 |
Minimum_number | 일종의 TTL과 같은 개념으로 정보의 최소 보관 시간을 설정. |
주요 레코드 타입
A(Address Mapping Records) | 도메인 이름에 해당하는 IPv4 주소 |
AAAA(IPv6 Address Records) | 도메인 이름에 해당하는 IPv6 주소 |
CNAME(Canonical Name) | 도메인 이름의 별칭 |
HINFO(Host Infomation) | CPU, OS 유형 등 호스트에 대한 정보 |
MX(Mail exchanger) | 도메인 이름에 대한 공식 네임 서버 |
NS(Name Server) | 호스트에 대한 공식 네임 서버 |
PTR(Reverse-lookup Pointer records) | IP 주소를 기반으로 도메인 이름 반환 |
SOA(Start of Authority) | 도메인 관리자 메일, 일련번호 등 DNS 핵심 정보 지정 |
TXT(Text) | 임의의 텍스트 문자열 저장. |
3) DNS 관련 주요 명령어
1. DNS 서비스 시작과 상태 점검
service를 명령어를 이용해 named 데몬을 실행하고 자세한 동작 상태를 확인
2. DNS 관련 주요 명령어
named-checkzone | zone 파일의 문법적 오류를 점검 named-checkzone [도메인명][zone파일경로]의 명령 옵션을 이용 |
named-checkconf | /etc/named.conf 환경성정 파일의 문법적 오류를 점검. named-checkconf [파일경로] 의 명령 옵션 이용 |
rndc status | DNS 서버의 자세한 상태를 확인 |
host | 도메인을 조회하는 명령어 dig 명령을 이용하면 좀더 자세한 정보를 확인. |