리눅스

Caching Name-Server

Pulseeee 2022. 12. 28. 11:29
반응형

named파일 수정

 패키지명 : bind
 데 몬 명 : named

 설정파일
  - 메인 설정파일 : /etc/named.conf
  - 추가 설정파일 : /var/named/???.zone
                                                ???.cache

 

/etc/named.conf 파일 vi로 수정

 

options { 
   listen-on port 53 { Server_IPv4; };            //   -> 기본값은 127.0.0.1 IPv4 Loopback 나에게만 귀기울이고 있겠다.
   listen-on v6 port 53 { Server_IPv6; }; ::1; //   -> 0000:0000:0000:0000:0000:0000:0000:0001 IPv6 Loopback
   recursion yse;                                          // 재귀적 질의
   allow-query { Client_IP; Client_Network; };              // 자신의 도메인에 응답
Authoritative Answer
   allow-query-cache { Client_IP; Client_Network; };   // 타 도메인에 응답
Non-Authoritative answer
};
 localhost = 127.0.0.1    // (나 자신, 서버 자신)

 ZONE "도메인" IN {
             type master/slave/hint;
              file ".....zone/....cache";
 };

 ZONE "." IN {
                type hint;
                file "root.cache"; <- /var/named/root
 };

 

[root@ns1 ~]# nslookup www.nate.com 168.126.63.1
Server:         168.126.63.1
Address:        168.126.63.1#53

Non-authoritative answer:
Name:   www.nate.com
Address: 120.50.131.112

[root@ns1 ~]#

[root@ns1 ~]# nslookup www.nate.com 223.62.230.13
Server:         223.62.230.13
Address:        223.62.230.13#53

Name:   www.nate.com
Address: 120.50.131.112

[root@ns1 ~]#

 

vi /etc/named.conf로 수정

 options {
              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";
      
               listen-on port 53      { 수신대기할_서버_IPv4; };
               listen-on-v6 port 53 { 수신대기할_서버_IPv4; };
               recursion yes;         # 재귀질의 허용여부
               allow-query            { 운영중인_도메인질의_허용_IP; }; # Authoratative Answer
               allow-query-cache { 캐쉬DB_도메인질의_허용_IP; };  # Non-Authoratative Answer
       };
      
       ZONE "." IN {                                                    # zone "도메인" IN {
                      type hint;                                           # type master/slave/hint;
                      file "root.cache";                               # file "파일명.zone/cache";  /var/named/
      };                                                                      # };

named.conf 수정 전
named.conf 수정 후

 

[root@ns1 ~]# named-checkconf /etc/named.conf
-> named.conf 파일의 문법 검사 해주는 명령어 (수정한뒤에 검사해준다.)

아무 문제 없다면 아무것도 나오지 않고 넘어 간다.

[root@ns1 ~]# cd /var/named/
[root@ns1 named]# ls
chroot  data  dynamic  named.ca  named.empty  named.localhost  named.loopback  slaves
[root@ns1 named]# mv named.ca root.cache
[root@ns1 named]# ls
chroot  data  dynamic  named.empty  named.localhost  named.loopback  root.cache  slaves
[root@ns1 named]#

root.cache 생성

named.ca -> root.cache로 이름 변경

 

C:\Users\st01>nslookup www.naver.com 192.168.0.21
DNS request timed out.
    timeout was 2 seconds.
서버:    UnKnown
Address:  192.168.0.21

DNS request timed out.
    timeout was 2 seconds.
DNS request timed out.
    timeout was 2 seconds.
DNS request timed out.
    timeout was 2 seconds.
DNS request timed out.
    timeout was 2 seconds.
*** UnKnown에 대한 요청이 제한 시간을 초과했습니다.

C:\Users\st01>
-> 7계층 문제
[root@ns1 named]# firewall-cmd --add-port=53/udp --permanent (상시열기)
[root@ns1 named]# firewall-cmd --add-port=53/udp

서비스 구동 및 방화벽을 열어준다.
firewall-cmd --info-zone=public 명령어로 적용 사항을 확인 할 수 있다.

vi /etc/named.conf

      9         listen-on port 53 { 127.0.0.1 192.168.0.21; }; <- Linux IP주소
     10         listen-on-v6 port 53 { ::1; };
     11         recursion yes;
     12         allow-query       { localhost; };
     13         allow-query-cache { localhost 192.168.0.20; }; <- WIN10 IP주소

 

C:\Users\st01>nslookup www.naver.com 192.168.0.21
서버:    UnKnown
Address:  192.168.0.21

권한 없는 응답:
이름:    www.naver.com.nheos.com
Addresses:  223.130.195.200
          223.130.195.95
Aliases:  www.naver.com
-> Linux IP주소로 질의 한 것을 확인 할 수 있다.

 

dns주소 를 루프백으로 바꿔줄수 있다.

nmcli con mod ens33 ipv4.dns 127.0.0.1
[root@ns1 named]# cat /etc/resolv.conf
# Generated by NetworkManager
search kck.co.ki
nameserver 168.126.63.1
nameserver 168.126.63.2
[root@ns1 named]# nmcli con up ens33
연결이 성공적으로 활성화되었습니다 (D-Bus 활성 경로: /org/freedesktop/NetworkManager/ActiveConnection/4)
[root@ns1 named]# cat /etc/resolv.conf
# Generated by NetworkManager
search kck.co.ki
nameserver 127.0.0.1


INTERNIC : root 도메인 사이트로 최신의 root도메인 정보를 받을 수 있다.

/var/named/ 위치로 이동 한 뒤에 wget ftp://ftp.internic.net/domain/named.cache 명령어로 다운받는다.

 

 

CentOS7 1st
[root@ns1 named]# vi /etc/named.conf
[root@ns1 named]# named-checkconf

zone "kck.co.ki" IN { -> 내가 사용할 도메인명
        type master;  -> 첫번째 ns1 두번째는 slave
        file "kck.co.ki.zone"; 
};

[root@ns1 named]# touch kck.co.ki.zone
[root@ns1 named]#

-> zone 파일을 만들어 /etc/named.conf 파일에 해당 내용을 추가해준다.

 

DNS Record (질문의 종류)        www.naver.com.                  IN             A
                                                   www.naver.com.                  IN             A
                                                           naver.com.                  IN             NS
                                                           naver.com.                  IN             SOA
                                                              kck.co.ki.                  IN             SOA

A : IPv4 Address(정방향: 호스트명 -> IPv4 주소)
  질의형식-> nslookup -type=a www.google.com
AAAA : IPv6 Address(정방향: 호스트명 -> IPv6 주소)
  질의형식-> nslookup -type=aaaa www.google.com
SOA : Start Of Authority(권한의 시작), Master 네임서버/관리자 E-Mail
  질의형식-> nslookup -type=soa google.com(도메인명)
NS : NameServer (네임서버, Master/Slave의 구분은 없음)
  질의형식-> nslookup -type=ns google.com(도메인명)
MX : MaileXchanger (메일 교환기, 수긴메일 서버)
  질의형식-> nslookup -type=mx google.com(도메인명)
PTR : Pointer(역방향: IP 주소 -> 도메인네임)
  질의형식-> nslookup -type=ptr 1.163.126.168.in-addr.arpa 
      (168.126.63.1 역방향(호스트명))
CNAME : Canonnical NAME (별칭/별명)
  질의형식-> nslookup -type=cname www.google.com(호스트명)

 

이러한 질의형식을 넣을 수 있고 named.conf파일과 마찬가지로 zone 파일도

명령어로 가능하다.

 

 1. named-checkconf : named.conf 파일을 문법 검사
예) named-checkconf : /etc/named.conf 파일의 문법 검사
    named-checkconf 경로/named.conf : 다른위치 named.conf 파일의 문법 검사

 2. named-checkzone : /var/named 디렉토리에 있는 도메인.zone 파일의 문법 검사
형식) named-checkzone 도메인명 경로/도메인명.zone

예) named-checkzone kck.co.ki /var/named/kck.co.ki.zone

 

/etc/named.conf에 zone파일의 위치와 내용을 추가해준다.


zone "kck.co.ki" IN {
type master;              // 1번째 네임서버
file "kck.co.ki.zone";
};

 

/var/named/도메인명.zone 파일을 만드는 형식들
$ORIGIN             초기값          <- @와 동일하게 해석, 모든 호스트명에 추가되는 이름
$TTL                   Cache타임   <- Cache에 저장할 시간(Positive, 긍정)       ※TTL(Time To Live) 살아있는 횟수 (루프방지)
                                도메인명.        IN          SOA          Master네임서버.            관리자E-Mail      (
                                                                                       YYYYMMDDnn             ; Serial Number (최종 갱신 날짜/시간/횟수)
                                                                                                 갱신주기             ; Refresh
                                                                                              재시도주기            ; Retry
                                                                                                     만료일            ; Expire
                                                                                                  기본TTL       )    ; Default TTL (Cache에 저장할 시간/                                                                                                                                          Negative, 부정) 없는정보 저장값

 

1. FQDN (Fully Qualified Domain Name) 형식
   $ORIGIN kck.co.ki.
   $TTL    1D
                                                kck.co.ki.       IN        SOA                ns1.kck.co.ki.             root.kck.co.ki.  (
                                                                                                          2022122700             ; Serial Number
                                                                                                                         3H              ; Refresh (갱신주기)
                                                                                                                      15M               ; Retry   (재시도)
                                                                                                                       1W                ; Expire  (만료일)
                                                                                                                       1D     )           ; TTL 

   kck.co.ki.           IN      NS   ns1.kck.co.ki.
   ns1.kck.co.ki.    IN      A      192.168.0.21
   www.kck.co.ki.   IN     A      192.168.0.22

 

2. 생략 : ORIGIN으로 지정된 도메인은 아래에 @으로 대체해서 사용할 수 있다.
 $ORIGIN kck.co.ki.  사용하면, kck.co.ki. => @
 . 으로 마무리되지 않은 모든 도메인네임은 자동으로 @(ORIGIN)이 따라 붙는다.
 www.kck.co.ki.                              -해석->                      www.kck.co.ki.
 www                                             -해석->                      www.kck.co.ki.
                                                                                               <-ORIGIN->
 www.kck.co.ki                              -해석->                      www.kck.co.ki.kck.co.ki.
                                                                                                              <-ORIGIN->
 $ORIGIN을 지정하지 않을 경우, /etc/named.conf 파일에
 설정된 zone "도메인명" IN { 에 사용된 도메인명이
 자동으로 설정된다.

   $ORIGIN kck.co.ki.
   $TTL    1D
   @           IN      SOA                    ns1                              root  (
                                                       2022122800              ; Serial Number
                                                       3H                              ; Refresh (갱신주기)
                                                       15M                            ; Retry   (재시도)
                                                        1W                             ; Expire  (만료일)
                                                        1D             )               ; TTL 

   @ <- 생략가능             IN       NS                   ns1
   ns1                              IN         A                    192.168.0.21
   www                            IN         A                    192.168.0.22
   www <-생략가능         IN         A                    192.168.0.23

 

@와 www는 위에 정보를 따라가서 생략 가능하다.

3. 생략 : 실수로 .을 생략해도 .만 추가한다.  
         $ORIGIN 도메인명은 zone파일안에서 여러번 재정의가 가능하다.   

   $ORIGIN .
   $TTL    1D
   kck.co.ki            IN         SOA                     ns1.kck.co.ki                     root.kck.co.ki           (
                                                                      2022122700             ; Serial Number
                                                                                     3H              ; Refresh (갱신주기)
                                                                                   15M              ; Retry   (재시도)
                                                                                    1W               ; Expire  (만료일)
                                                                                     1D     )        ; TTL 

   kck.co.ki                   IN  NS       ns1.kck.co.ki
   ns1.kck.co.ki            IN  A          192.168.0.21
   www.kck.co.ki          IN  A          192.168.0.22

ORIGIN.으로 정의 했을 경우
ORIGIN. 으로 사용 했을때도 윈도우에서 정상 작동하는 것을 확인 할 수 있다.

 

$ORIGIN. 을 추가로 정의 할 수 있다.

 

 

/etc/named.conf 파일에서 recursion을 no로 바꾸면 재귀적 질의를 하지 않는다는 뜻으로

질의를 하지 않아 응답이 돌아오지 못한다.

 

하지만 리눅스 서버의 IP주소는 질의를 받고 응답한다.
query는 루프백으로 query cache는 localhost로 변경 하였을때
리눅스 서버에서는 자신의 IP임으로 질의와 응답을 해주지만
윈도우에서는 응답을 해주지 않는다.
하지만 query cache를 루프백으로 변경시 서버 자신의 IP로도 응답을 해주지 않고 루프백주소로만 응답을 해준다.

 

웹페이지는 모두에게 잘 알려지길 바라기 때문에 자신의 도메인에 응답인 query를 any로 하고 타 도메인에 응답인 query-cache는 루프백과 자신과 같은 네트워크 PC에게만 응답하도록 변경한다.

 

반응형