리눅스 (CentOS) DNS(Domain Name System)
DNS(Domain Name System)
DNS(Domain Name System)
도메인 이름(FQDN, Full Quallified Domain Name)을 IP주소와 매칭 시켜주는 시스템
정방향 조회, 역방향 조회
- 정방향 : FQDN → IP주소
- 역방향 : IP주소 → FQDN
DNS 서비스는 계층화 된 형태로 제공
단일 DNS서버가 모든 DNS 정보를 가지고 있을 수 없음
DNS 서버 질의 방식
재귀 질의(Reculsive Query) : 클라이언트 - 서버, DNS에 대한 요청과 그에 대한 응답으로 구성
순환 질의(Iterative Query) : DNS서버 - 계층적 구조에 따라 DNS서버로 요청을 전송
- DNS서버는 자신이 찾고자 하는 도메인의 최상위 도메인 이름의 정보를 찾기위해 Root DNS(Root Hind DNS)에게 질의 전송
- Root Hint DNS 서버는 최상위 도메인의 바로 아래 단계 도메인의 정보를 가지고 있는 DNS서버의 주소를 안내
- 최종 요청, FQDN의 IP를 확인할 떄 까지 위 과정을 반복
FQDN
호스트이름 + 도메인이름
→ 호스트이름.도메인이름
호스트 이름은 가장 좌측 한개
ex)www(World Wide Web, 웹 서버), mail, mx(메일서버) →ftp.daumkakao.com
도메인 이름은 2개 이상의 계층 구조를 가짐
ex) naver.com, daum.net, nate.com
ex) www.seoul.abc.co.kr, mail.kangnam.seoul.korea.co.kr
가장 뒤 쩍이 가장 상위의 분류
DNS 레코드
유형
A : 특정 이름에 대한 IPv4 정보
AAAA : 특정 이름에 대한 IPv6 정보
CNAME : Canonical Name, 별칭
ex) www, mail : www를 A 레코드로 생성, mail을 CNAME으로 생성, www정보만 변경하여도 mail도 함께 변경
CNAME 사용시 연결하는 FQDN은 현재 도메인과 무관하게 지정 가능
ex) test.example.com CNAME test2.exmple2.comPTR : 포인터 레코드, IP주소에 매칭된 FQDN 이름
NS : Name Server, 해당 도메인의 DNS 서버
MX : Mail exchanger, 메일 교환기, 도메인의 메일 서버
SOA : Start of Authorization, DNS 영역에 대한 정보
영역에 1개의 SOA 레코드 필요
- 네임서버 정보
- 담당자 정보(이메일) : [이름]@[도메인] → [이름].[도메인]
- 일련번호
- 관련된 설정정보(업데이트 등)
- 만료설정
TXT : 정보를 전달하기 위한 레코드
SRV : 서비스 관련 레코드
DNS 조회도구
- host : 리눅스 기본 DNS 조회도구
- host [옵션] [FQDN] [DNS서버]
- 옵션
- -v : 상세 정보 표시
- -t : 레코드 탕비 지정
- -a : ALL, 모든 타입
- -l : list mode, '영역 전송(Zone Transfer)'를 통한 데이터 조회
- nslookup
- 대화형으로 실행
- server : DNS 서버 지정
- set type : 조회 레코드 타입 지정
- dig
- dig [@DNS서버] [FQDN]
DNS서버 구축 : BIND(Berkeley Internet Name Domain)
DNS서버 (BIND) 설치
# yum info bind # yum install bind
bind 정보 확인
#rpm -ql bindd
서비스 정보 확인
# 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 서버로 동작
클라이언트 측 /etc/hosts 파일, DNS 요청, DNS 캐시의 우선순위
- /etc/hosts
- DNS 캐시(시스템)
- DNS요청
DNS서버 측 우선순위
- 관리하고 있는 영역
- DNS 캐시
- DNS 요청
BIND 영역 설정
/var/named
실습환경 예시
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 date/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
역방향조회 파일 설정 : /var/named/data/db.192.168.100
# 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.
/etc/named.conf 파일 수정
...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";};...
영역 설정 확인
named-chechzone → named-chaeczone [영역이름] [파일이름]
ex) named-checkzone example.local /var/named/data/example.local.zone
named-checkconf → named-checkconf [설정파일 이름]
ex) named-checkconf /etc/named.conf
- etc/named.conf 파일에 작성된 내용을 문법적으로 틀린것이 있는지 체크
영역 파일 권한 설정
/var/named/data 내 영역파일을 root 사용자로 작성할 경우 root 사용자의 소유 및 root 그룹의 소유로 생성되며, 다른 사용자에게 읽기 권한이 없음
파일 소유권을 named:named로 변경
# chown named:named /var/named/data/example.local.zone# chown named:named /var/named/data/db.192.168.100
파일 권한을 644(rw-r--r--)로 변경
# chmod 644 /var/named/data/example.local.zone# chmod 644 /var/named/data/db.192.168.100
서비스 재시작 후 동작 확인
정방향조회
윈도우10에서 nslookup 실행 후
server 192.168.100.100
example.local
역뱡향 조회
윈도우10에서 nslookup 실행 후
server 192.168.100.100
192.168.100.100
DNS 이중화
장애 발생 시 대응
부하 분산
DNS 이중화 실습
실습준비
공유폴더에서 CentOS 7.8 ova 파일 다운로드 후 import
네트워크 설정을 고정 IP 설정 :
IP : 192.168.100.200/24
GW : 192.168.100.2
DNS : [BIND가 설치된 서버IP]
# 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 대역으로 변경
1번 서버
IP : 192.168.100.100/24
Gateway : 192.168.100.2
DNS : 192.168.100.2
# 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
2번 서버
IP : 192.168.100.200/24
Gateway : 192.168.100.2
DNS : 192.168.100.100
# 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
DNS 이중화 구성
- 한 서버는 영역의 데이터를 직접 관리하는 Master
- 직접 영역 파일의 설정
- -named.conf 파일 내에 영역 내용 추가
- '영역 전송 설정' 필요 : 보안고려
- 다른 서버는 Master로부터 데이터를 받아오는 Slave
- 직접 영역파일을 생성할 필요가 없음 : 자동생성
- named.conf 파일 내에 역역 내용 추가
DNS 이중화 실습
Master서버의 영역 전송 설정
영역 전송을 허용할 영역의 설정항목 내에 다음 추가(/etc/named.conf 내 영역 zone 항목)
Allow-transfer { [전송을 허가할 서버]; };
설정 확인
# named-checkconf
서비스 재시작
# systemctl restart named.service# systemctl status named.service
Slave에서 /etc/named.conf 파일 수정
기본 접근제어 설정 변경 (위 내용 참고)
영역설정 추가(Slave)
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
캐시 전용 DNS 서버
- BIND 등의 DNS 서버를 직접 관리하는 영역 없이 사용할 경우
- BIND 등의 본격적인 DNS 서버를 영역을 직접 관리하기 위한 용도 이외의 전용 서버로 사용하는 것은 낭비
- 캐시전용 DNS 서버를 위한 별도의 도구가 존재
- 필요성 : 트래픽 감소 등의 효과
- 전달(Forward) : 재귀 쿼리 - 직접 순환커리를 수행하지 않고, 지정한 DNS 서버로 요청을 그대로 전달
캐시전용 DNS 서버 실습 : unbound
unbound 설치
yum search unboundunbound.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.200access-control: 0.0.0.0/0 allow//기본적으로 google dns로 전달하도록, 특정 영역만 bind로 전달하도록 설정forward-zone: name: “.” forward-addr: 8.8.8.8forward-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 컨트롤 명령 확인
- unbound-control
- start : 시작
- stop : 중지
- reload : 설정 다시 읽기
- status : 상태 확인
- lookup [대상] : 대상을 찾기 위해 요청을 전달할 서버 확인
- dump_cache : dns 요청 캐시 확인. 리다이렉션으로 저장
- load_cache : 캐시 파일로부터 읽기
- flush : 요청 항목 캐시 삭제
- flush_zone : 요청 항목 영역 캐시 전체 삭제
- unbound-control