본문 바로가기

[혁신성장 청년인재] 인공지능을 활용한 보안전문가 양성과정

Day11: 리눅스 관리자 | DNS 서버 구성| DNS 조회 | nslookup | dig | host | DNS 서버 관리

이번 주 월요일은 학원 휴일이었고, 화요일부터 이번 주 시작!

오늘은 C프로그래밍실습 중간고사라서 9시 반부터 1시간동안 시험을 보고나서, 수업에 참석했다. 

 

이번 주도 새책! 일주일에 한 권씩 새 책을 배운다 ㅋㅋㅋㅋㅋㅋㅋ

 

http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9788996376071&orderClick=LA7&Kc=

 

엔터프라이즈 리눅스 핵심 운영 가이드. 2 - 교보문고

이 책은 기초는 "테크넷과 함께 하는 솔라리스 11으로 배우는 유닉스/리눅스 입문가이드" 에서 다루었기 때문에 본격적인 시스템 관리에 집중하도록 집필 되었다. 현업에서 필요한 데이터베이스

www.kyobobook.co.kr

 

강사님도 새로운 분이 오셨는데, 이전 선생님과 수업방식이 정말 다르다. 

이전 선생님은 책을 위주로 강의를 하신 반면, 새로 오신 선생님은 실습을 하면서 책을 참고하는 정도?

 

암튼 DNS 서버에 대해 알아보고, 실습했다. 

집에 빨리 가고싶으니까 서비스 flow랑 명령어만 간단하게 정리해야겠다.


DNS ( Domain Name System) 

정방향 조회: 호스트 이름을 IP 주소로 변환해주는 DNS 조회 방식

역방향 조회: IP 주소에 대한 호스트 이름을 조회, in-addr.arpa 도메인에서 각 IP 주소의 대역대별로 IP 조회하도록 구성됨. 역방향 조회를 사용하려면 포인터 레코드가 필요.

 

DNS 캐시

모르는 이름에 대한 IP 주소가 필요할 때 DNS요청이 이루어짐. 하지만 최근 조회한 내용은 시스템이 기억하고 있는데(매번 받아오면 비효율적이기 때문), 이를 DNS 캐시라고 함. 엔드 포인트에서만 사용되는 것이 아니라, DNS 서버들도 DNS 캐시로 저장. DNS 관련된 불필요한 외부 트래픽 감소시킬 수 있음.

 

DNS 레코드

A, AAAA 특정 호스트의 주소 (IPv4, IPv6)
CNAME 호스트의 별칭(Alias) 정보 (Canonical Name)
MX 메일 교환기(mail exchanger)
NS 도메인의 네임 서버 (name server)
PTR 도메인 이름에 대한 포인터 (Pointer)
SOA 영역의 권한 시작 정보 (Start of Authority)
TXT 텍스트 문자열

 

DNS 조회방법

host, dig, nslookup

 

host 사용법

host [option] name [server]

host google.com 8.8.8.8

Trying "naver.com"
Using domain server:
Name: 8.8.8.8
Address: 8.8.8.8#53
Aliases: 
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42330
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;naver.com.			IN	ANY
;; ANSWER SECTION:
naver.com.		153	IN	SOA	ns1.naver.com. webmaster.naver.com. 2020072005 21600 1800 1209600 180
Received 77 bytes from 8.8.8.8#53 in 55 ms

 

쿼리를 요청할 dns server 를 지정해 줄 수 있다. -a 옵션을 사용하면 all 모두 보인다.

 

 

nslookup 사용법

nslookup [opriont] [name] [server]

한 줄로 입력해도 되고, nslookup 하면 커멘드라인이 > 로 변한다. 대화형으로 쿼리 실행!
이 때 dns server 를 지정해도 되고, 검색하고 싶은 도메인 네임을 입력해도 된다.

 

dig 명령어 사용법

dig [@server] [option] [name]

dig @8.8.8.8 google.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-16.P2.el7 <<>> @8.8.8.8 naver.com ns
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29044
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;naver.com.			IN	NS
;; ANSWER SECTION:
naver.com.		21440	IN	NS	ns2.naver.com.
naver.com.		21440	IN	NS	ns1.naver.com.
;; Query time: 53 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Tue Jul 21 11:16:29 KST 2020
;; MSG SIZE  rcvd: 74

# trace 가능
dig @10.0.2.4 naver.com +trace | more

DNS 서버 구성

1. BIND 설치 

yum info bind

yum -y install bind

 

bind 패키지가 설치되면 DNS 서비스를 제공하기 위한 named 서비스를 사용할 수 있다. 

 

관련 설정 파일들

/etc/named.conf

/etc/named.rfc1912.zones

/var/named/*

data dynamic named.ca named.empty named.localhost named.loopback slaves

 

설치 시 생성되는 파일들이다. ( 내가 만든 적 없는데 있었음)

 

named.empty 가 설정 뼈대같은 거고, 이거 복사해서 설정하면 된다. 

cp named.empty data/hyeonjoeng.kr.zone
cp named.loopback data/hyeonjeong.kr.rev

named.empty 의 내용

cat named.empty
$TTL 3H
@	IN SOA	@ rname.invalid. (
					0	; serial
					1D	; refresh
					1H	; retry
					1W	; expire
					3H )	; minimum
	NS	@
	A	127.0.0.1
	AAAA	::1

named.rfc1912.zones 내용

// named.rfc1912.zones:
//
// Provided by Red Hat caching-nameserver package 
//
// ISC BIND named zone configuration for zones recommended by
// RFC 1912 section 4.1 : localhost TLDs and address zones
// and http://www.ietf.org/internet-drafts/draft-ietf-dnsop-default-local-zones-02.txt
// (c)2007 R W Franks
// 
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//

zone "localhost.localdomain" IN {
	type master;
	file "named.localhost";
	allow-update { none; };
};

zone "localhost" IN {
	type master;
	file "named.localhost";
	allow-update { none; };
};

zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
	type master;
	file "named.loopback";
	allow-update { none; };
};

zone "1.0.0.127.in-addr.arpa" IN {
	type master;
	file "named.loopback";
	allow-update { none; };
};

zone "0.in-addr.arpa" IN {
	type master;
	file "named.empty";
	allow-update { none; };
};

 

원래는 /etc/named.conf 에서 모든 설정을 했지만, 그럴 시 오류나고 꼬이는 경우가 많아져서 파일의 내용을 나누게 되었다고 한다. named.conf 에 기본 설정이 있고, 이젠 이 파일은 거의 수정하지 않는다고 한다.

대신 /etc/named.rgc1912.zones, /var/named/* 이 파일들을 수정한다. 

 

2. 새로운 도메인 추가 설정

1. /etc/named.rgc1912.zones 파일에 zone 추가해주기!

// 2020.7.21 hyeonjeong added

//정방향 조회 설정
zone "hyeonjeong.kr" IN {
	type master;
	file "data/hyeonjeong.kr.zone";
	allow-update { none; };
};

//역방향 조회 설정. arpa style 로 써야 하기 때문에 IP 주소를 뒤에서부터 써준다.
zone "4.2.0.10.in-addr.arpa" IN 
	type master;
	file "data/hyeonjeong.kr.rev";
	allow-update { none; };
};

2. /var/named 에 zone 파일 생성해서 설정해주기!

( * 유의점: zone 파일 권한 중 owner - group 을 named 로 줘야 한다. )

[root@web named]# ls -l data/hyeonjeong.kr.*
-rw-r-----. 1 root root  176 Jul 21 14:29 data/hyeonjeong.kr.rev
-rw-r-----. 1 root named 195 Jul 21 14:01 data/hyeonjeong.kr.zone

// data/hyeonjeong.kr.rev 파일의 그룹 권한이 root 이기 때문에 chgrp 명령으로 named로 바꿔줌
[root@web named]# chgrp named data/hyeonjeong.kr.rev 
[root@web named]# ls -l data/hyeonjeong.kr.*
-rw-r-----. 1 root named 176 Jul 21 14:29 data/hyeonjeong.kr.rev
-rw-r-----. 1 root named 195 Jul 21 14:01 data/hyeonjeong.kr.zone

/var/named/data/hyeonjeong.kr.zone 

정방향 설정

$TTL 3H
@	IN SOA	@ master.hyeonjeong.kr. (
					0	; serial
					1D	; refresh
					1H	; retry
					1W	; expire
					3H )	; minimum
	NS	ns.hyeonjeong.kr.	
	A	10.0.2.4
ns	A	10.0.2.4

/var/named/data/hyeonjeong.kr.rev

역방향 설정

$TTL 3H 
@	IN SOA	@ master.hyeonjeong.kr. (
					0	; serial
					1D	; refresh
					1H	; retry
					1W	; expire
					3H )	; minimum

	NS	ns.hyeonjeong.kr.	
	PTR	hyeonjeong.kr.	

 

 

3. 설정이 잘 되었는 지 확인하기!

 

//CASE1 : OK
named-checkzone hyeonjeong.kr /var/named/data/hyeonjeong.kr.zone 
zone hyeonjeong.kr/IN: loaded serial 0
OK

//CASE2: 뭐 잘못됨 ㅋㅋ
named-checkzone hyeonjeong.kr /var/named/data/hyeonjeong.kr.rev
zone hyeonjeong.kr/IN: NS 'ns.hyeonjeong.kr' has no address records (A or AAAA)
zone hyeonjeong.kr/IN: not loaded due to errors.

[root@web named]# named-checkconf /etc/named.rfc1912.zones 
/etc/named.rfc1912.zones:32: '{' expected near 'type'
[root@web named]# named-checkconf /etc/named.conf
/etc/named.rfc1912.zones:32: '{' expected near 'type'
named-checkzone ZoneName FileName
named-checkconf FileName

위의 두 명령어를 활용해도 되지만, 

 

systemctl restart named.service 를 해보면 된다.

서비스 재실행이 잘 되면 문제가 없는거고, 잘 안됐으면 오류가 날거다. 

 

나는 } 이거 기호 하나 빠뜨려서 오류가 났었다.

항상 그렇지만, 앞으로는 괄호 같은거나 ; 등을 더 유심히 봐야겠다.

 

3. DNS 서비스 동작 확인

host hyeonjeong.kr 

nslookup hyeonjeong.kr

dig hyeonjeong.kr

DNS 서버 관리

DNS 서버에 장애가 발생한 경우를 대비하여 DNS 서버를 이중화 할 필요가 있다. 

DNS 서버를 이중화하면 부하를 분산시키는 효과도 있다. 

따라서 Master DNS 서버Slave DNS 서버를 구성하여 영역전송을 할 수 있다. 

 

Master DNS 설정

영역을 전송하려면 기존 DNS 서버(Master)에서 영역 전송에 대한 허가를 해주어야 한다. 

/etc/named.rfc1912.zones 에서 Allow-transfer { slave-DNS server address; }; 를 추가해준다. 

 

slave 에서는 /etc/named.rfc1912.zones 에 아래의 slave type 을 적어준다.

zone "hyeonjeong.kr" IN {
	type slave;
    masters { master-dns-address; };
    file "slaves/hyeonjeong.kr.slave";
};

반응형