본문 바로가기

DevOps/Linux

[Linux] DNS

DNS (Domain Name Service)

사용자가 도메인 이름을 요청할 때 이 도메인 이름을 실제 주소인 IP로 바꿔서 사용자에게 전달해주는 서비스

클라이언트(사용자)가 서버(웹)에 접속하기 위해서는 IP가 필요하다. 그러나 모든 웹사이트의 IP를 알고있을수는 없으므로 웹주소를 통해IP로 접속하는 것이다.

이러한 서비스르 제공하는 서버가 DNS서버이다.


호스트와 도메인

호스트 이름 : 네트워크상의 컴퓨터 각각의 이름

도메인 이름 : 네트워크의 범위를 지정하는 이름

-> 구역같은 느낌으로 생각해보자

www.naver.com  

 

네이버

네이버 메인에서 다양한 정보와 유용한 컨텐츠를 만나 보세요

www.naver.com

www : 호스트 이름

naver.com : 도메인 이름


FQDN (Fully Qulified Domain Name)

호스트이름과 도메인 이름을 모두 표기한 풀 주소 이름을 FQDN 이라고 한다. 전체 도메인 네임, 즉 도메인 이름 뿐만 아니라 하위 파라미터까지 포함한 경로를 의미한다.


DNS 

클라이언트가 DNS 서버에 네이버의 아이피가 어떻게 되는지 요청을 한다. DNS 서버는 IP를 알려주고 그 아이피를 이용해 클라이언트는 실제 WEB사이트를 IP를 이용해 접속을 한다. DNS라는 프로토콜을 이용해서 통신을 하고 응답을 한다.


nslookup

* 윈도우에서 실행한 경우입니다.

nslookup

 

기본 서버: kns.kornet.net
Address: 168.126.63.1

DNS 쿼리를 DNS에 날려서 통신을 해주는 명령어이다.

> www.naver.com

 

권한 없는 응답:
이름:    www.naver.com.nheos.com
Addresses:  223.130.195.200
          223.130.195.95
Aliases:  www.naver.com

이후 네이버의 주소를 입력해보자. 해당 도메인 네임에 해당하는 실제 IP를 알려준다. 즉 nslookup은 실제 DNS의 아이피 주소를 알아낼 때 이용하게 된다.


set type

* 윈도우에서 실행한 경우입니다.

 

set type =mx

 

naver.com

 

서버:    kns.kornet.net
Address:  168.126.63.1

권한 없는 응답:
naver.com       MX preference = 10, mail exchanger = mx1.naver.com
naver.com       MX preference = 10, mail exchanger = mx3.naver.com
naver.com       MX preference = 10, mail exchanger = mx2.naver.com

naver.com       nameserver = e-ns.naver.com
naver.com       nameserver = ns2.naver.com
naver.com       nameserver = ns1.naver.com
mx1.naver.com   internet address = 125.209.238.100
mx2.naver.com   internet address = 125.209.238.137
mx3.naver.com   internet address = 125.209.222.14
ns1.naver.com   internet address = 125.209.248.6
ns2.naver.com   internet address = 125.209.249.6
e-ns.naver.com  internet address = 175.158.6.250

set type =mx는 해당 도메인의 메일서버를 알아내는 명령어이다.

 

set type =ns

 

www.naver.com

 

권한 없는 응답:
www.naver.com   canonical name = www.naver.com.nheos.com

nheos.com
        primary name server = gns1.nheos.com
        responsible mail addr = hostmaster.nheos.com
        serial  = 2021081901
        refresh = 10800 (3 hours)
        retry   = 3600 (1 hour)
        expire  = 604800 (7 days)
        default TTL = 180 (3 mins)

set type =ns는 해당 도메인의 DNS서버를 알려주는 명령어이다.

 

set type =all

 

naver.com

 

권한 없는 응답:
naver.com       text =

        "v=spf1 include:_spfblocka.naver.com include:_spfblockb.naver.com include:_spfblockc.naver.com include:_spfblockd.naver.com include:_spfblocke.naver.com include:_spfblockf.naver.com include:spf.worksmobile.com ~all"
naver.com       text =

        "facebook-domain-verification=0qyhf0qnkiuqfx4owhfuvwvsvjz8fk"
naver.com       text =

        "google-site-verification=fK9dDFcEOeNM2Wr3xzNAN-XLcerfAGpOABdSYiqw4_s"
naver.com       MX preference = 10, mail exchanger = mx3.naver.com
naver.com       MX preference = 10, mail exchanger = mx1.naver.com
naver.com       MX preference = 10, mail exchanger = mx2.naver.com
naver.com       internet address = 125.209.222.142
naver.com       internet address = 223.130.195.200
naver.com       internet address = 223.130.195.95
naver.com       internet address = 125.209.222.141
naver.com       nameserver = e-ns.naver.com
naver.com       nameserver = ns2.naver.com
naver.com       nameserver = ns1.naver.com

mx1.naver.com   internet address = 125.209.238.100
mx3.naver.com   internet address = 125.209.222.14
ns1.naver.com   internet address = 125.209.248.6
ns2.naver.com   internet address = 125.209.249.6
e-ns.naver.com  internet address = 175.158.6.250

set type =all 은 해당 도메인의 모든 정보를 알려준다. 


Hosts 파일

DNS 서비스보다 우선 실행되는 hosts 파일이 있다.

/etc/host # 리눅스

 

/windows/system32/drivers/eetc/hosts # 윈도우

* 윈도우에서 실행한 경우입니다.

1. 윈도우의 경우 메모장을 관리자 권한으로 실행

2. 위의 경로 /windows/system32/drivers/eetc/hosts 로 이동하여 hosts 파일을 연다

# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
#      102.54.94.97     rhino.acme.com          # source server
#       38.25.63.10     x.acme.com              # x client host

# localhost name resolution is handled within DNS itself.
#	127.0.0.1       localhost
#	::1             localhost

해당 파일 맨 아래에 아래와 같은 내용을 추가해준다.

223.130.195.200 www.daum.net # 네이버 IP

해당 내용을 Ctrl + S 저장 후 브라우저에서 www.daum.net  을 실행하면 네이버가 뜬다.

아이피하고 DNS를 매핑시키는 파일인 hosts파일이다. hosts파일에 데이터가 없다면 DNS서버로 전송이 된다.

초창기에는 hosts파일에 url과 IP를 기록했으나 한계가 있어서 DNS 서버가 등장했다고 한다.


DNS 서버의 구조

DNS서버는 트리 구조 형식으로 운영되고 있다.

ex) www.nate.com  사이트 접속하고 싶다고 가정하자

1. hosts 파일에 물어보고 기록이 없으면

ipconfig /displaydns

2.  DNS 캐쉬에 요청을 한다. 그 이후에도 존재하지 않을 시

3. DNS 서버에 요청을 하게 된다.

 * 시스템이 도메인 이름의 IP를 알아내는 순서

   - Hosts -> DNS 캐쉬 -> 시스템에 설정되어있는 DNS서버 -> root DNS 서버 -> .com 최상위 도메인 서버에 요청을 한다 -> naver.com의 도메인 서버에 질의(nslookup ns1번인 ns1.naver.com으로 요청) -> IP를 알려줌 -> 시스템에 설정되어있는 DNS서버는 이제 시스템에게 IP를 알려준다 -> 해당 아이피로 접속한다.

 

만약 DNS에서 요청한 도메인의 IP를 모른다. 그러면 root DNS 서버에 요청. root DNS는 전 세계의 최상위 도메인 주소를 알고있기에 가능하다.


DNS 캐쉬

클라이언트와 DNS 사이에 통신을 주고 받은 후 전달 받은 IP를 클라이언트 메모리에 저장한다. 다음에는 같은 DNS를 입력하게 되면 DNS 사이에 통신을 주고받지 않고 바로 WEB으로 전송하여 접속하게 된다.

* DNS 캐쉬는 휘발성이므로 껐다 키면 날라감


IN LINUX

 

nslookup www.naver.com

 

Server:         8.8.8.8
Address:        8.8.8.8#53

Non-authoritative answer:
www.naver.com   canonical name = www.naver.com.nheos.com.
www.naver.com.nheos.com canonical name = www.naver.com.edgekey.net.
www.naver.com.edgekey.net       canonical name = e6030.a.akamaiedge.net.
Name:   e6030.a.akamaiedge.net
Address: 23.50.3.12

리눅스에서도 역시 nslookup 명령어를 통해 DNS 정보를 확인 가능하다.

dig @8.8.8.8

 

host naver.com

 

naver.com has address 125.209.222.142
naver.com has address 223.130.195.95
naver.com has address 223.130.195.200
naver.com has address 125.209.222.141
naver.com mail is handled by 10 mx2.naver.com.
naver.com mail is handled by 10 mx3.naver.com.
naver.com mail is handled by 10 mx1.naver.com.

 

host -a naver.com

 

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35905
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;naver.com.                     IN      ANY

;; ANSWER SECTION:
naver.com.              279     IN      SOA     ns1.naver.com. webmaster.naver.com. 2021082001 21600 1800 1209600 180

Received 77 bytes from 8.8.8.8#53 in 42 ms

여기서 -a 옵션은 all을 뜻한다.

 

host -al www.naver.com

 

Trying "naver.com"
; Transfer failed.
Trying "naver.com.example.com"
Host naver.com.example.com not found: 2(SERVFAIL)
Received 39 bytes from 8.8.8.8#53 in 40 ms
; Transfer failed.
[study@gurm ~]$ host -al www.naver.com
Trying "www.naver.com"
; Transfer failed.
Trying "www.naver.com.example.com"
Host www.naver.com.example.com not found: 2(SERVFAIL)
Received 43 bytes from 8.8.8.8#53 in 43 ms
; Transfer failed.

-al 옵션은 zone transfer 정보도 알려준다.

 

host -l www.naver.com

 

; Transfer failed.
Host www.naver.com.example.com not found: 2(SERVFAIL)
; Transfer failed.

-l 은 DNS정보를 가져오는 것이다. 네이버가 이를 허용해뒀을리 없으니 failed 가 뜨게 된다. 왠만한 DNS서버들은 DNS 정보를 가저오는것을 허용하지 않았다.

 

'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