본문 바로가기
네이버클라우드/Linux

Linux 7일차 (2023-05-02) Linux Network - DNS Server

by prometedor 2023. 5. 2.

Domain 과 Hostname 개념

ㄴ domain 은 네트워크의 외부 이름
ex) naver.com
 
ㄴ hostname 은 네트워크 내부의 컴퓨터를 구분하기 위한 이름
ex) www.naver.com

 


 

domain ==> ip 로 변환해줌 (반대의 기능도 함)

네트워크에 참여하는 컴퓨터가 많지 않을 때는 /etc/hosts 파일만으로 통신할 수 있지만 
네트워크에 참여하는 컴퓨터가 늘어나면서 모든 정보를 기억하는 것이 불가능

 
 

DNS 란?

ㄴ  DNS 실습 전 중요한 정보들을 알아보자
 

1. nslookup

    ㄴ 입력하는 주소에 대한 ip 정보를 가져옴
    ㄴ ip 를 입력할 경우 컴퓨터의 hostname을 볼 수 있음

#nslookup
> naver.com 	: naver.com 사이트의 ip 정보를 가져옴
> 223.130.195.200 	: 컴퓨터의 hostname 이 나옴

 

** 윈도우 명령프롬프트에서의  nslookup

Microsoft Windows [Version 10.0.19044.2846]
(c) Microsoft Corporation. All rights reserved.

C:\Users\bitcamp>nslookup
기본 서버:  kns.kornet.net
Address:  168.126.63.1

> hp.com  --> domain => ip
서버:    kns.kornet.net
Address:  168.126.63.1

권한 없는 응답:
이름:    hp.com
Addresses:  15.73.145.56
          15.72.80.135

> 15.73.145.56  --> ip => domain
서버:    kns.kornet.net
Address:  168.126.63.1

이름:    hpprintcartridge.com
Address:  15.73.145.56

> exit

 
 
**추가실습 : 메모장 관리자권한으로 실행

223.130.200.104 	naver.com 	aa.com

ㄴ hosts 파일 맨 밑에 위 내용 추가 하면 브라우저에서 aa 입력 시 naver 로 이동 가능

 
 

C:\Users\bitcamp>nslookup  --> 네임서버 찾기
기본 서버:  kns.kornet.net
Address:  168.126.63.1

> kro.kr  --> DNS 한테 물어봄
서버:    kns.kornet.net
Address:  168.126.63.1

권한 없는 응답:  --> 직접 알아본 것이 아니고 알아봐준 것임을 의미함
이름:    kro.kr
Addresses:  139.99.89.153
          172.104.112.214

> server 8.8.8.8  -->  Google Public DNS 서비스에서 제공하는 DNS 서버의 IP 주소
기본 서버:  dns.google  --> google dns 가 답해주고 있는 것
Address:  8.8.8.8

> korea.com
서버:    dns.google  --> google dns 가 답해주고 있는 것
Address:  8.8.8.8

권한 없는 응답:
이름:    korea.com
Address:  119.205.213.227

>

 

** 리눅스에서의  nslookup

root@ysy1:~# nslookup
> korea.com
Server:         127.0.0.53
Address:        127.0.0.53#53

Non-authoritative answer:
Name:   korea.com
Address: 119.205.213.227
>
> server 8.8.8.8
Default server: 8.8.8.8
Address: 8.8.8.8#53
> oracle.com
Server:         8.8.8.8
Address:        8.8.8.8#53

Non-authoritative answer:
Name:   oracle.com
Address: 138.1.33.162
>

 

port number : TCP/IP port

# grep domain /etc/services : 모든 프로그램들의 포트번호를 알 수 있음

 

네임서버 구조

 



 

bind 

bind 설치

root@ysy1:~# aq bind9  --> bind 설치 확인

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

bind9-dnsutils/jammy-security,now 1:9.18.1-1ubuntu1.3 amd64 [installed,upgradable to: 1:9.18.12-0ubuntu0.22.04.1]
bind9-host/jammy-security,now 1:9.18.1-1ubuntu1.3 amd64 [installed,upgradable to: 1:9.18.12-0ubuntu0.22.04.1]
bind9-libs/jammy-security,now 1:9.18.1-1ubuntu1.3 amd64 [installed,upgradable to: 1:9.18.12-0ubuntu0.22.04.1]


root@ysy1:~# ai bind9  --> 설치
root@ysy1:~# aq bind9  --> 설치 확인

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

bind9-dnsutils/jammy-updates,now 1:9.18.12-0ubuntu0.22.04.1 amd64 [installed,automatic]
bind9-host/jammy-updates,now 1:9.18.12-0ubuntu0.22.04.1 amd64 [installed,automatic]
bind9-libs/jammy-updates,now 1:9.18.12-0ubuntu0.22.04.1 amd64 [installed,automatic]
bind9-utils/jammy-updates,now 1:9.18.12-0ubuntu0.22.04.1 amd64 [installed,automatic]
bind9/jammy-updates,now 1:9.18.12-0ubuntu0.22.04.1 amd64 [installed]

bind 실행

root@ysy1:~# systemctl start bind9  --> bind 실행 명령
root@ysy1:~# systemctl start named  --> bind 실행 명령

root@ysy1:~# ps -ef | grep named  --> bind 실행 확인
bind       22285       1  0 10:28 ?        00:00:00 /usr/sbin/named -u bind
root       22444   21878  0 10:31 pts/7    00:00:00 grep --color=auto named

root@ysy1:~# ufw status  --> 방화벽 상태 확인
Status: inactive  --> 방화벽 비활성화 상태

 

/etc/bind 

root@ysy1:~#  cd /etc/bind/
root@ysy1:/etc/bind# ls
bind.keys  db.255    named.conf                named.conf.options
db.0       db.empty  named.conf.default-zones  rndc.key
db.127     db.local  named.conf.local          zones.rfc1918
기본 구성 파일 : /etc/bind/named.conf   --> named.conf 파일 에서는 주석을 // 로 함


/etc/bind/named.conf.options : 글로벌 DNS 옵션

/etc/bind/named.conf.local : 귀하의 지역

/etc/bind/named.conf.default-zones : localhost 와 같은 기본 영역, 역방향 및 루트 힌트


루트 네임 서버는 파일에 설명되어 /etc/bind/db.root 에 있었음
이것은 패키지 /usr/share/dns/root.hints 와 함께 제공된 파일 대신 제공되며
위 dns-root-data 의 named.conf.default-zones 구성 파일에서 참조


root@ysy1:/etc/bind# ls
bind.keys  db.255    named.conf                named.conf.options
db.0       db.empty  named.conf.default-zones  rndc.key
db.127     db.local  named.conf.local          zones.rfc1918

 

/etc/bind/named.conf.options 파일 편집

root@ysy1:/etc/bind# vi named.conf.options

 

/etc/bind/db.local

root@ysy1:/etc/bind# nl /etc/bind/db.local
     1  ;
     2  ; BIND data file for local loopback interface
     3  ;
     4  $TTL  --> 살아있는 시간    604800  --> 7일
     5  @  --> 도메인 자체     IN --> 인터넷     SOA     localhost. --> 네임서버 root.localhost. (
     6                                2         ; Serial
     7                           604800         ; Refresh
     8                            86400 --> 24시간        ; Retry
     9                          2419200         ; Expire
    10                           604800 )       ; Negative Cache TTL
    11  ;
    12  @       IN      NS      localhost.
    13  @       IN      A       127.0.0.1
    14  @       IN      AAAA    ::1

 

/etc/bind/db.127

root@ysy1:~# nslookup
> localhost
Server:         127.0.0.53
Address:        127.0.0.53#53

Name:   localhost
Address: 127.0.0.1  --> /etc/bind/db.local 파일에서 확인 가능
Name:   localhost
Address: ::1

root@ysy1:~# nl /etc/bind/db.127
     1  ;
     2  ; BIND reverse data file for local loopback interface
     3  ;
     4  $TTL    604800
     5  @       IN      SOA     localhost. root.localhost. (
     6                                1         ; Serial
     7                           604800         ; Refresh
     8                            86400         ; Retry
     9                          2419200         ; Expire
    10                           604800 )       ; Negative Cache TTL
    11  ;
    12  @       IN      NS      localhost.  
    13  1.0.0   IN      PTR     localhost.  --> 127.0.0.1  => localhost 라고 대답(역방향)

 

파일 설정 완료 후

root@ysy1:/etc/bind# systemctl restart named  --> 파일 설정 완료 후 재시작 필요

--> 에러 발생 시 /etc/bind/named.conf.options 다시 확인

 

/etc/bind/named.conf.default-zones

root@ysy1:/etc/bind# vi named.conf.default-zones

ㄴ 아래 내용 추가

 

/etc/bind/nc.zone (/etc/bind/db.local 파일 복사본) 설정

root@ysy1:/etc/bind# cp db.local nc.zone
root@ysy1:/etc/bind# vi nc.zone

ㄴ 아래와 같이 수정

 

/etc/bind/nc.rev (생성해둔 /etc/bind/nc.zone 파일 복사본)

root@ysy1:/etc/bind# cp nc.zone nc.rev  --> 편하게 작성하기 위해 nc.zone 을 복사한 것
root@ysy1:/etc/bind# vi nc.rev

 
** 주의 : 설정후 재 시작 

root@ysy1:/etc/bind# systemctl restart named

 

nslookup 으로 확인

root@ysy1:/etc/bind# nslookup

> server 127.0.0.1  --> 서버 127.0.0.1 로 바꿔주어야 함
Default server: 127.0.0.1
Address: 127.0.0.1#53

> nc.co.kr 
;; communications error to 127.0.0.1#53: timed out
Server:         127.0.0.1
Address:        127.0.0.1#53

Name:   nc.co.kr
Address: 200.100.50.10  --> nc.co.kr => 200.100.50.10 확인

> ns.nc.co.kr
;; communications error to 127.0.0.1#53: timed out
Server:         127.0.0.1
Address:        127.0.0.1#53

Name:   ns.nc.co.kr
Address: 200.100.50.10  --> ns.nc.co.kr => 200.100.50.10 확인

> 200.100.50.10
;; communications error to 127.0.0.1#53: timed out
10.50.100.200.in-addr.arpa      name = ns.nc.co.kr.  --> 200.100.50.10 => ns.nc.co.kr. 확인
10.50.100.200.in-addr.arpa      name = nc.co.kr.  --> 200.100.50.10 => nc.co.kr. 확인



> www.nc.co.kr
;; communications error to 127.0.0.1#53: timed out
Server:         127.0.0.1
Address:        127.0.0.1#53

Name:   www.nc.co.kr
Address: 200.100.50.20  --> www.nc.co.kr => 200.100.50.20 확인

> web.nc.co.kr
;; communications error to 127.0.0.1#53: timed out
Server:         127.0.0.1
Address:        127.0.0.1#53

web.nc.co.kr    canonical name = www.nc.co.kr.  --> web.nc.co.kr. == www.nc.co.kr. 같음을 뜻함
Name:   www.nc.co.kr
Address: 200.100.50.20  --> web.nc.co.kr => 200.100.50.20 확인

> 200.100.50.20
;; communications error to 127.0.0.1#53: timed out
20.50.100.200.in-addr.arpa      name = www.nc.co.kr.  --> 200.100.50.20 => www.nc.co.kr. 확인
20.50.100.200.in-addr.arpa      name = web.nc.co.kr.  --> 200.100.50.20 => web.nc.co.kr. 확인



> ftp.nc.co.kr
;; communications error to 127.0.0.1#53: timed out
Server:         127.0.0.1
Address:        127.0.0.1#53

Name:   ftp.nc.co.kr
Address: 200.100.50.30  --> ftp.nc.co.kr => 200.100.50.30 확인

> 200.100.50.30
;; communications error to 127.0.0.1#53: timed out
30.50.100.200.in-addr.arpa      name = ftp.nc.co.kr.  --> 200.100.50.30 => ftp.nc.co.kr. 확인



> mail.nc.co.kr
;; communications error to 127.0.0.1#53: timed out
Server:         127.0.0.1
Address:        127.0.0.1#53

Name:   mail.nc.co.kr
Address: 200.100.50.40  -->  mail.nc.co.kr => 200.100.50.40 확인

> 200.100.50.40
;; communications error to 127.0.0.1#53: timed out
40.50.100.200.in-addr.arpa      name = mail.nc.co.kr.  --> 200.100.50.40 => mail.nc.co.kr. 확인