도메인 이름(FQDN, Full Quallified Domain Name)을 IP주소와 매칭 시켜주는 시스템
정방향 조회, 역방향 조회
DNS 서비스는 계층화 된 형태로 제공
단일 DNS서버가 모든 DNS 정보를 가지고 있을 수 없음
DNS 서버 질의 방식
재귀 질의(Reculsive Query) : 클라이언트 - 서버, DNS에 대한 요청과 그에 대한 응답으로 구성
순환 질의(Iterative Query) : DNS서버 - 계층적 구조에 따라 DNS서버로 요청을 전송
1. DNS서버는 자신이 찾고자 하는 도메인의 최상위 도메인 이름의 정보를 찾기위해 Root DNS(Root Hind DNS)에게 질의 전송
2. Root Hint DNS 서버는 최상위 도메인의 바로 아래 단계 도메인의 정보를 가지고 있는 DNS서버의 주소를 안내
3. 최종 요청, FQDN의 IP를 확인할 떄 까지 위 과정을 반복
CNAME 사용시 연결하는 FQDN은 현재 도메인과 무관하게 지정 가능
ex) test.example.com CNAME test2.exmple2.com
DNS서버 (BIND) 설치
# yum info bind
# yum install bind
bind 정보 확인
#rpm -ql bind
서비스 정보 확인
# systemctl status named.service
서비스 설정 파일 확인 및 수정
#vi /etc/named.conf
//확인
options {
listen-on port 53 { 127.0.0.1; };
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
recursing-file "/var/named/data/named.recursing";
secroots-file "/var/named/data/named.secroots";
allow-query { localhost; };
//수정
options {
listen-on port 53 { any; };
listen-on-v6 port 53 { none; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
recursing-file "/var/named/data/named.recursing";
secroots-file "/var/named/data/named.secroots";
allow-query { any; };
DNS서비스 시작
# systemctl start named.service
# systemctl enable named.service
서비스 동작상태 확인
# systemctl status named.service
동작테스트 - 윈도우 시스템에서 cmd창열고 nslookup실행
C:\Users\Playdata>nslookup
기본 서버: UnKnown
Address: 192.168.4.254
> server 192.168.100.100
기본 서버: [192.168.100.100]
Address: 192.168.100.100
> www.naver.com
서버: [192.168.100.100]
Address: 192.168.100.100
권한 없는 응답:
이름: www.naver.com.nheos.com
Addresses: 223.130.195.95
223.130.195.200
Aliases: www.naver.com
이와 같이 설정할 경우, BIND는 Cache 전용 DNS 서버로 동작
실습환경 예시
example.local 도메인 구성
ns.example.local : 192.168.100.100
mail.example.local : 192.168.100.101
www.example.local : 192.168.100.100
ftp.example.local : www.example.local
- 정방향 조회 영역파일 생성 : /var/named/data/example.local.zone
```
# cd /var/named
# cp named.empty data/example.local.zone
# vi data/example.local.zone
$TTL 3H
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS @
A 127.0.0.1
AAAA ::1
//아래와 같이 수정
$TTL 3H
@ IN SOA ns.example.local. root.example.local. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ IN NS ns.example.local.
IN MX 10 mail.example.local.
IN A 192.168.100.100
ns IN A 192.168.100.100
mail IN A 192.168.100.101
www IN A 192.168.100.100
ftp IN CNAME www
```
# cd /var/named
# cp named.empty date/db.192.169.100
# vi data/db.192.168.100
$TTL 3H
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS @
A 127.0.0.1
AAAA ::1
//아래와 같이 수정
$TTL 3H
@ IN SOA ns.example.local. root.example.local. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ IN NS ns.example.local.
100 IN PTR ns.example.local.
101 IN PTR mail.example.local.
100 IN PTR www.example.local.
...
zone "example.local" IN {
type master;
file "data/example.local.zone";
};
zone "100.168.192.in-addr.arpa" {
type master;
file "data/db.192.168.100";
};
...
# chown named:named /var/named/data/example.local.zone
# chown named:named /var/named/data/db.192.168.100
# chmod 644 /var/named/data/example.local.zone
# chmod 644 /var/named/data/db.192.168.100
실습준비
# nmcli connection add con-name static ifname ens33 type ethernet ipv4.method manual ipv4.addresses 192.168.100.200/24 ipv4.gateway 192.168.100.2 ipv4.dns 192.168.100.100
# nmcli connection up static
VMware Virtual Network
서브넷 : 192.168.100.0
서브넷마스크 : 255.255.255.0
NAT, DHCP : 192.168.100.0 대역으로 변경
# nmcli connection add con-name static ifname ens33 type ethernet ipv4.addresses 192.168.100.100/24 ipv4.gateway 192.168.100.2 ipv4.dns 192.168.100.2 ipv4.method manual
# nmcli connection up static
# nmcli connection add con-name static ifname ens33 type ethernet ipv4.addresses 192.168.100.200/24 ipv4.gateway 192.168.100.2 ipv4.dns 192.168.100.100 ipv4.method manual
# nmcli connection up static
Master서버의 영역 전송 설정
영역 전송을 허용할 영역의 설정항목 내에 다음 추가(/etc/named.conf 내 영역 zone 항목)
Allow-transfer { [전송을 허가할 서버]; };
설정 확인
# named-checkconf
서비스 재시작
# systemctl restart named.service
# systemctl status named.service
Slave에서 /etc/named.conf 파일 수정
zone "example.local" IN {
type slave;
masters { 192.168.100.100; };
file "slaves/example.local.zone";
};
Slave에서 설정 확인 및 서비스 시작
# named-checkconf /etc/named.conf
# systemctl start named.service
동작확인
# host example.local localhost
# ls -l /var/named/slaves/
# cat /var/named/slaves/example.local.zone
unbound 설치
yum search unbound
unbound.x86_64 : Validating, recursive, and caching DNS(SEC) resolver
# yum install unbound
unbound 기본 설정 변경
vi /etc/unbound/unbound.conf
…
interface [인터페이스IP]
…
access-control: [접근제어대상IP/네트워크] [allow/refuse/deny]
…
forward-zone:
name: [전달할 영역]
forward-addr: [전달할 DNS 서버]
//전체 접근 허용 예시
interface: 192.168.100.200
access-control: 0.0.0.0/0 allow
//기본적으로 google dns로 전달하도록, 특정 영역만 bind로 전달하도록 설정
forward-zone:
name: “.”
forward-addr: 8.8.8.8
forward-zone:
name: “example.local”
forward-addr: 192.168.100.100
DNS서비스 구동
# systemctl start unbound.service
# systemctl enable unbound.service
방화벽 서비스 해제
# firewall-cmd --add-service=dns --permanent
# firewall-cmd --reload
unbound 동작 확인
# host google.com 192.168.100.200
//cmd에서
>nslookup
>server 192.168.100.200
>google.com
unbound 컨트롤 명령 확인