본문 바로가기

DevOps/Linux

[Linux] DNS 서버 만들기 실습

DNS 서버 만들기 실습

* 캐시 전용 네임 서버 만들기 실습

  - DNS 서버 : 자기 자신은 DNS 정보를 가지고 있지 않고 다른 DNS서버에 질의를 하는 것이다.

 

* 실습할 VM을 2개 준비한다.

 

yum -y install bind bind-chroot

DNS서버를 구성하기 위한 bind , bind-chroot를 설치한다.

-y 옵션은 install 할 때 나오는 yes/no 에 대하여 모두 yes를 한다는 의미이다.

yum -y install httpd
systemctl restart httpd

httpd를 install 한 후 restart를 통해 httpd를 active 상태로 만들어준다.

vi /etc/named.conf
     12 options {
     13         listen-on port 53 { 127.0.0.1; }; # { any;로 수정}
     14         listen-on-v6 port 53 { ::1; }; # none; 으로 수정
     15         directory       "/var/named";
     16         dump-file       "/var/named/data/cache_dump.db";
     17         statistics-file "/var/named/data/named_stats.txt";
     18         memstatistics-file "/var/named/data/named_mem_stats.txt";
     19         recursing-file  "/var/named/data/named.recursing";
     20         secroots-file   "/var/named/data/named.secroots";
     21         allow-query     { localhost; }; # any로 수정
     22
     23         /*

* 네임 서버를 만드는 Daemon이다.

13         listen-on port 53 { 127.0.0.1; }; -> { any;로 수정} # 누구나 접속을 허용한다
14         listen-on-v6 port 53 { ::1; }; -> none; 으로 수정 # IPv6의 접속을 꺼놓는 것이다.
21         allow-query     { localhost; }; -> any로 수정 # DNS쿼리 즉, 질의를 누구에게든 허용
     # 수정본
     12 options {
     13         listen-on port 53 { any; };
     14         listen-on-v6 port 53 { none; };
     15         directory       "/var/named";
     16         dump-file       "/var/named/data/cache_dump.db";
     17         statistics-file "/var/named/data/named_stats.txt";
     18         memstatistics-file "/var/named/data/named_mem_stats.txt";
     19         recursing-file  "/var/named/data/named.recursing";
     20         secroots-file   "/var/named/data/named.secroots";
     21         allow-query     { any; };
systemctl restart named

named 도 httpd와 같이 active 상태로 만들기 위해 restart 해준다.

systemctl status named
● named.service - Berkeley Internet Name Domain (DNS)
   Loaded: loaded (/usr/lib/systemd/system/named.service; disabled; vendor preset: disabled)
   Active: active (running) since Mon 2021-08-23 11:32:13 KST; 33s ago
  Process: 2704 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} $OPTIONS (code=exited, status=0/SUCCESS)
  Process: 2701 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z "$NAMEDCONF"; else echo "Checking of zone files is disabled"; fi (code=exited, status=0/SUCCESS)
 Main PID: 2706 (named)
    Tasks: 5
   CGroup: /system.slice/named.service
           └─2706 /usr/sbin/named -u named -c /etc/named.conf

named 의 상태를 확인 하는 명령어를 입력 후 Acitve 상태가 active (running) 임을 알 수 있다.

systemctl enable named

시스템을 재부팅하더라도 named를 실행시키도록 설정한다.


방화벽 열기

 

firewall-cmd --permanent --add-port=53/tcp
firewall-cmd --permanent --add-port=53/udp

DNS는 90%는 UDP로 동작한다고 한다. 그러니 TCP와 UDP를 둘다 열어둔다.

firewall-cmd --reload

위의 세가지 모두 Success가 됨을 확인한다.

첫번쨰 VM 리눅스가 DNS 서버가 되었다.

 

cat /etc/resolv.conf

resolv.conf에 시스템의 DNS 정보가 담겨있다.

 

nslookup
> server
> server 192.168.56.100

아이피의 경우 본인이 설정한 DNS 서버의 ens0s8의 정보이다.

 

rpm -qa httpd
httpd-2. 4. 6-97.el7. centos. x86_64

rpm -qa 명령어를 통해 httpd가 설치가 되어있는지 확인

아래와같이 httpd-2. 4. 6-97.el7. centos. x86_64 문구가 나온다면 확인됨

systemctl restart httpd

httpd를 재시작한다.

firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reload

웹서버 방화벽을 오픈하고 재실행한다.

 

vi /etc/named.conf
zone "linux.com" IN {
	type master;
	file "linux.com.db";
	allow-update { none;};
};

DNS 서버로 지정한 VM1번의 named.conf 파일의 가장 하단부에 추가해준다. 리눅스 시스템이 linux.com의 마스터 서버가 된다는 것이다. 상세 정보는 linux.com.db를 통해 확인할 것이고 

allow-update 는 zone transfer 허용 유무를 뜻하므로 slave 서버를 따로 만들지 않을것이므로 none 하였다.

 * 마스터 네임 서버 : 도메인에 대한 모든 권한을 가지고 있는 주 네임 서버

 * 슬레이브 네임 서버 : 마스터 네임 서버가 다운되었을 때 대용

 

named-checkconf

오타를 확인해 주는 명령어를 이용하여 오타를 확인한다.

cd /var/named
cp named.localhost linux.com.db
vi linux.com.db

오타가 없다면 위의 명령어를 통해 named 로 이동후 파일을 복사 하고 편집한다.

$TTL 1D
@       IN SOA  @ rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      @
        A       127.0.0.1
        AAAA    ::1
$TTL 3H # time to live , 3Hours 정도 DNS정보가 유지된다.
@       SOA     @ root. ( # @는 리눅스 닷컴을 의미 SOA는 권한이 있다. 즉 리눅스 닷컴에 리눅스 닷컴이가 권한이 있다
                                        0       ; serial # 버전
                                        1D      ; refresh # 갱신 주기
                                        1H      ; retry # 접속이 안될 때 재접속 시도
                                        1W      ; expire # 1주일 이내 접속이 안되면 만료
                                        3H )    ; minimum # 업데이트 주기 유효기간
        IN      NS      @ # IN : 인터넷 ns: 도메인네임서버. linux.com 의 네임서버는 @다
        IN      A       192.168.56.100 # A는 HOST의 IP주소를 의미한다. 여긴까진 기본세팅
www     IN      A       192.168.56.100 # 본격적 시스템 IP 세팅. www.linux.com 으로 호스트 										  이름세팅
# 메일서버를 추가하고싶다
# mail	IN 		MX		192.168.56.100
# 교재 108 참조

위의 내용을 아래와 같이 수정한다. linux.com에 대한 설정을 변경해준다. 

named-checkzone linux.com linux.com.db
zone linux.com/IN: loaded serial 0
OK

named파일 역시 오타를 확인해주고 아래와 같은 응답이 나온다면 문제가 없는 것이다.

chmod -R 754 /var/named #퍼미션 권한 부여
systemctl restart named

이후 named를 재시작해준다


정상적인 연결확인

dig @192.168.56.100 www.linux.com
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.5 <<>> @192.168.56.100 www.linux.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33506
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.linux.com.                 IN      A

;; ANSWER SECTION:
www.linux.com.          10800   IN      A       192.168.56.100

;; AUTHORITY SECTION:
linux.com.              10800   IN      NS      linux.com.

;; ADDITIONAL SECTION:
linux.com.              10800   IN      A       192.168.56.100

;; Query time: 0 msec
;; SERVER: 192.168.56.100#53(192.168.56.100)
;; WHEN: Mon Aug 23 14:27:41 KST 2021
;; MSG SIZE  rcvd: 88

 

nslookup
> server 192.168.56.100
-bash-4.2# nslookup
> server 192.168.56.100
Default server: 192.168.56.100
Address: 192.168.56.100#53
> server
Default server: 192.168.56.100
Address: 192.168.56.100#53
> www.linux.com
Server:         192.168.56.100
Address:        192.168.56.100#53

Name:   www.linux.com
Address: 192.168.56.100

 

curl www.linux.com
<html>
<head><title>301 Moved Permanently</title></head>
<body>
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx</center>
</body>
</html>

 

브라우저에 www.linux.com 을 입력하면 실제 www.linux.com 이 접속이 된다. 그래서 게스트 서버로 지정한 두번째 VM인 VM2로 접속하여 DNS nameserver를 수정한다.

vi /etc/resolv.conf
# Generated by NetworkManager
search example.com
nameserver 192.168.56.100
~

 


 

'DevOps > Linux' 카테고리의 다른 글

[Linux] Linux 데이터베이스 기초  (0) 2021.08.24
[Linux] DNS 레코드  (0) 2021.08.23
[Linux] DNS  (0) 2021.08.23
[Linux] Linux 명령어 grep  (0) 2021.08.10
[Linux] Linux 명령어 ls Commnad  (0) 2021.08.10