네트워크에서 빠질 수 없는 개념이 바로 DNS 개념이다. 쉽게말하면 DNS는 www.daum.net 이라는 것을 입력할 때, 길을 찾아주는 서비스라고 생각하면 된다. 실제로 www.daum.net을 입력할 때, DNS서버들은 다음 순서와 비슷하게 진행한다.
1.사용자는 www.daum.net을 입력한다.
2.캐쉬 DNS서버에서 최상위(root) NS 에게 www.daum.net에 대해 질의한다.
3.Root는 net의 NS를 알려준다.
4.net NS로 들어가 www.daum.net을 물어본다.
5.net NS는 daum.net의 NS를 알려준다.
6.daum.net으로 들어가서 www.daum.net의 서버를 알려준다.
대충 보면 NS는 자기가 하는것만 알려주고 거기로 가라고 유도를 한다.
GNS와 VM들을 이용하여 DNS서버를 구축해보자.
원래는 이렇게 클라우드로 연결하여 외부와 통신이 되게 하려고 하였지만
그냥 내부에서 놀꺼기 때문에 라우터로 연결해주었다.
실습환경은 다음과 같이
USER(사용자) :1.221.80.3 (WIN7)
CashDNS : 1.221.80.2
Root NS : 198.41.0.4 (실제 Root NS IP)
net NS : 192.5.6.30 (실제 net NS IP)
daum NS (실제 daum NS IP)
사용자가 www.daum.net 을 요구하면
cashDNS->Root NS -> net NS ->daum NS 로 가는 구조로 설정할 것이다.
공통적으로 모든 VM에 해야할 것이 있다.
NAT로 연결하고 IP를 dhcp로 주어서
yum install bind* 을 인스톨 할것.
인스톨이 끝나면
chkconfig iptables off 를 하여 방화벽을 재접속해도 off 상태로 유지할 것.
chkconfig named on을 하여 재접속해도 named서비스가 켜지게 할 것.
이 상태로 VM을 3개 완전복제 할 것
완전 복제가 끝나고 ip설정을 할 때, mac주소가 완전 복제 때문에 겹쳐서 통신이 불가하니 설정해줄것
USER(1.221.80.3)의 DNS서버 주소를 1.221.80.2로 설정할 것
1.CashDNS
vi /var/named/named.ca 로 들어가보면 다음과 같이 나온다.
사용자가 물어보면 root의 서버주소를 알려주는 파일이다. A부터 쭉 여러개가 있을텐데,
우리는 하나의 Root를 사용할 것이기 때문에 위와 같이 A.만 남겨두고 다 지우자.
vi /var/named/named.ca
named.comf 에 있는 named.ca 에 들어가보자. 기본적으로 해야할 것은
listten-on port 53 { IP} 인데, 특정한 IP에 대해 허용하고 싶다면 위와 같이 IP 주소를 주면되고, 아니라면 그냥
any;를 입력하면 된다. 여기서는 그냥 any로 주자.
노란색 줄이 쳐져 있는곳을 위와 같이 바꿔주자. dnssec은 방화벽을 내리는거라 생각하면 된다.
다음과 같이 설정하고 user에서 cmd 창으로
nslookup
set type=ns하고 . 하나를 입력하면 다음과 같이 wireshark에 나타난다.
Root로 쿼리를 보내고 CashDNS에서 198.41.0.4(Root NS)로 OPT를 보낸것을 확인하였다.
안된다면 arp -anp |more 를 입력하여서 53번 포트가 열려있는지 확인해보자.
열려있지 않다면 service named start 를 해주어야 한다.
2.Root NS
마찬가지로 vi /etc/named.conf 에들어가서 CashDNS에서 바꿨던것 그대로 해준다.
그다음 아래에
zone "." IN {
type master;
file "root.zone";
};
을 추가한다. . (root)의 master는 나고 그에 대한 정보와 설정은 root.zone 파일에 있다는 뜻이다.
이제 root.zone 파일에 대해 설정해보자. 위에 있는 내용 그대로 만들어줘야 한다.
cd /var/named 로 들어가서 vi root.zone 을 해주자.
설명을 하자면 /1D는 1일 /1H는 1시간 /1W 1주 를 의미한다.
하루마다 refresh하고 실패하면 한시간마다 retry하고 1주동안 안되면 포기한다는 것이다.
내용을 보면 net에 대한 내용도 나타나있다. net의 NS의 이름은 a-srv.net. 이고
a-srv.net은 192.5.6.30 에 있다고 알려준다.
3.net NS
위까지 설정을 했다면 어렵지 않게 할 수 있다.
vi /etc/named.conf로 들어가서 밑줄친곳을 역시 바꿔주고,
나는 net zone의 마스터이고 그에대한 정보는 net.zone에 있다고 설정 해준다.
그다음 vi /var/named/net.zone 을 입력하고 위와같이 입력한다.
내용을 보면 daum의 NS 와 hangame NS를 추가해줬다.
우리는 GNS에 daum NS만 추가해줬으므로 hangame에 대한 길안내는 받지 못하겠지만
이런식으로 DNS가 구성되어 있다는 것을 이해하기 위해 추가했다.
4.daum.net NS
이제는 익숙하다. vi /var/named/daum.net.zone 에 다음과 같이 입력하자.
daum.net의 ns1의 ip는 113.61.106.5 이고
www.daum.net을 쳤을 때, 그것에대한 별칭은 web.daum.net이고.
web 서버는 3개가 있다. 113.61.106.80 ~ 82까지이다. 라는 내용이다.
당연히 vi /etc/named.conf 에 들어가서 설정을 해주어야 한다.
daum.net에 마스터이고 그에 대한 정보는 daum.net.zone 에 있다.라는 걸 추가해주자.
자 이제 모든 설정이 끝났으므로 user컴퓨터로 가서 cmd에서 다음과 같이 입력해보자.
nslookup 을 치면 이제 내가 설정한 Cash DNS으로 간다.
set type=ns (ns에 대한 정보를 알고싶다.) 하고 점하나 찍어주면 root NS로 안내해준다.
root의 nameserver는 a-server이고 address는 198.41.0.4 이다. 라고 표시되었다.
그 다음 net 을 입력해보자.
역시 net 은 a-srv.net 이고 address는 192.5.6.30 이라고 표시되었다.
daum.net은 ns1.daum.net 이고 주소는 113.61.106.5 라고 잘 표시되었다.
wireshark로 패킷을 확인해보면 사용자는 www.daum.net을 질의했을 때,
CashDNS->Root->net->daum.net으로 질의가 가는 것을 확인 할 수 있다.
그리고 마지막에 set type=A 를준다. 이것은 하위에 있는 서버에 대해 알고싶다는 명령어다.
www.daum.net을 치면
아래에 밑줄친 Answers 부분과 같이 답변을 준다.
서버 안에있는 web서버에 대한 정보를 표시하여 주었다.
5.daum NS_Slave
만약 daum에 NS서버를 2개를 두고싶다면 다음과 같이 설정을 해주자.
daum.net 의 첫번째 DNS 에 가서 named.conf 문에 allow-transfer { 113.61.106.6;}; 을 써주자
이것은 113.61.106.6 (2번째 DNS 서버) 에게 daum.net.zone 파일을 넘겨주겠다는 것이다.
특정 ip빼고 모두에게 daum.net.zone 파일을 넘겨주면 네트워크보안에 대해 취약하기 때문에 2번째 DNS서버에 대해서만 넘겨준다고 설정한 것이다.
두번째 DNS에 가서 named.conf에 type을 slave로 주고 자신의 master 의 ip를 적어주자.
처음에 ls를 입력하여 daum.net.zone 파일이 없는것을 확인하자. 그다음
ls -ld /var/named 를 입력하여 named에 대한 권한이 누구에게 있는지 확인하자.
root로 되어있다면 chown named /var/named로 권한을 named로 바꿔주자.
service named restart를 하여서 named 서버를 다시 가동시키면 두번째 DNS에서 마스터 DNS에게
daum.net.zone 파일을 가져와서 slave dns 역할을 할 수 있게 되었다.
ls을 해보면 daum.net.zone 파일이 나타난 것을 확인 할 수 있다.
wireshark를 확인해보면 DNS에 대해 NS 질의들은 UDP로 이루어 졌지만 zone 파일을 주는 통신은 TCP인 것을 확인할 수 있다. 3핸드 쉐이킹이 되고 zone 파일을 넘겨주는 패킷들이다. 이 처럼 zone파일은 TCP통신으로 안전하게 넘겨준다. 만약 해커에게 zone파일이 도난당하면, 그쪽 네트워크지도가 뺏기는 것과 같다.