[Linux (리눅스)/#10 DNS]

SeungWoo·2023년 11월 6일

[Linux(리눅스)]

목록 보기
11/13
post-thumbnail

DNC 서비스

  • DNC 개념
    IP Address 를 Domain 형식 (문자열)으로 변환해주는 서비스

  • Domain Name이란.

    • 네트워크에 연결되어 있는 모든 시스템에는 숫자의 조합으로 구성되는 주소를 가지고 있다. 하지만 이러한 주소를 다 외우기는 불가능 하므로 알파벳으로 이루어지는 도메인 이름을 사용
  • 도메인 등록 원칙

    • 도메인 이름은 영문자(a-z), 숫자(0-9) 10개, 특수기호( - ) 1 를 합쳐 총 37개의 글자 조합으로 나타낼 수 있음
    • 영문자의 경우 대문자 소분자의 구별은 하지 않으며 특수 기호인( - )은 도메인의 처음과 끝에 올 수 없음
    • 도메인 이름의 체계는 피라미드 구조를 하고 있으며 , 각 단계별로 독자적으로 관리
    • 도메인 이름은 전 세계적으로 겹치지 않게 하나만 부여되며 First Come, First Served 원칙에따라 부여
  • DNS 관련 파일

    • /etc/hosts
      • 인터넷 주소와 호스트 이름의 관계를 설정
      • 매우 간단하게 설정할 수 있는 장점이 있지만, 이 파일의 내용은 로컬 시스템에서만 유효하게 사용할 수 있음
    • /etc/resolv.conf
      • 호스트가 사용할 DNS 서버의 주소를 설정
      • 자신의 호스트가 DNS 서버라면 자신의 IP주소를 적어줘야 함
  • DNS SERVER

    • KT
      • 168.126.6.31 (kns.kornet.net)
      • 168.126.63.2 (kns2.kornet.net)
    • LG Dacom
      • 164.124.101.2 (ns.lgdacom.net)
      • 203.248.252.2 (cns3.bora.net)
    • LG U+
      • 162.124.107.9 (cns2.bora.net)
    • SK Broadband
      • 210.220.163.82 (bns1.hananet.net)
      • 219.250.36.130 (bns2.hananet.net)
    • google
      • 8.8.8.8 (google-public-dns-a.google.com)
      • 8.8.4.4 (google-public-dns-b.google.com)
  • Domain Name 구조

    • 인터넷상에서 사용되는 도메인은 전 세계적으로 고유하게 존재하는 이름으로 정해진 규칙 및
      체계에 따라야 하며, 임의로 변경되거나 생성될 수 없음
    • 도메인의 체계적인 분류와 관리를 위해 도메인 이름은 몇 개의 짦은 영문자를 '. (닷, 점)'으로
      연결한 계층 구조를 갖고 있음
    • 역트리(Inverted tree) 구조라고 하며 트리 구조의 정점을 루트(root)라고 함

  • 1단계 1단계 도메인 또는 최상위도메인TLD, Top Level Doamin: 루트 바로 아래 단계의 도메인
    • 'kr'과 같이 국가를 나타내는 국가 코드 도메인
      • .kr(한국) , .us(미국) , .jp(일본) , .cn(중국) , .uk(영국) , .fr(프랑스)
    • 'com'같이 등록인의 목적에 따라 사용되는 일반 도메인
      • .com , .org , .net , .edu , .gov , .mil , .arpa
  • 2단계 도메인
    • 조직의 속성을 구분하는 도메인
    • .co(영리) , .or(비영리) , .go(정부) , .ac(대학/대학원) , .mil(국방조직)
  • 3단계 도메인
    • 조직이나 서비스의 이름을 나타내는 도메인 이름으로 도메인 사용자가 원하는 문자열을 사용할 수 있음
    • naver , google , nate , kernerl, nobreak
  • Subdomain
    • 호스트가 위치
    • www , blog , cafe , news
  • Domain 동작 방식

    • 도메인은 도메인 계층 구조를 반영한 네임 서버(DNS 서버라고도 함)에 저장 및 관리
    • 각 네임 서버는 도메인 계층의 일부 영역을 담당하고 그 영역에 속한 도메인을 관리
    • 상위 계층의 네임 서버는 하위 계층의 도메인에 대한 정보를 관리하고 하위 계층 네임 서버의 IP 주소를 갖고 있음
    • 최상위 계층인 루트 네임 서버의 IP 주소는 모든 DNS 서버가 등록하여 관리
  • 동작방식 종류

    • 재귀 쿼리
      • 사용자는 자신의 요청한 DNS 서버에게만 요청을 전송하고, 요청에 대한 응답을 수신함
      • 이렇게 이름 요청을 전송하고, 요청에 대한 정확한 응답을 수신하는 과정을 재귀 쿼리라고 함
      • 재귀 쿼리는 일반적으로 클라이언트가 DNS 서버에게 요청할 때 발생
      • 경우에 따라 DNS가 다시 다른 DNS 서버에게 요청하는 경우에도 사용
    • 순환 쿼리(Iterative Query)
      - 클라이언트로 부터 받은 이름 요청에 대한 답변이 없는 경우 다른 DNS 서버로부터 단계적으로 질의하는 과정을 수행
  • 정방향 조회 / 역방향 조회

    • 정방향 조회
      • DNS 서버는 호스트의 이름에 대한 요청을 수신한 후 요청한 이름에 대한 IP 주소를 응답
      • 기본적 DNS 구조는 계층적 구조에서 도메인의 정보를 가지고 있는 DNS 서버를 찾고, 해당 DNS 서버에서 호스트의 정보를 확인하도록 설계
    • 역방향 조회
      • IP 주소에 대한 요청을 수신 한후 요청한 IP 주소에 대한 호스트 이름을 응답
      • 역방향 조회는 IP 주소로 호스트 및 도메인의 이름 조회하기 때문에 해당 IP 주소에 대한 레코드를 가지고 있는 DNS 서버를 찾는 것이 불가능
      • 이러한 문제점을 해결하기 위하여 역방향 조회를 지원하기 위한 특수 도메인이 설계되었는데 이 특수 도메인이 in-addr.arpa 도메인임
      • in-addr.arpa 도메인에서 다시 각 IP 주소의 대역별로 IP 주소를 조회할 수 있는 DNS 서버가 계층구조로 구성되어 있음
      • 역방향 조회를 사용하려면 DNS 서버가 서비스하고 있는 도메인의 각 호스트에 대한 역방향 조회 영역이 필요
      • 역방향 조회 영역에서는 포인트 레코드(PTR)가 필요
  • DNS 캐시

    • DNS 요청은 시스템이 모르는 이름에 대한 IP 주소가 필요할 때 이루어짐
    • 최근에 조회했던 내용을 다시 조회 할때는 DNS 요청이 발생하지 않을 수도 있음
    • 이미 시스템이 해당 이름에 대한 IP 주소를 알고 있기 때문임
    • 이와같이 시스템이 기억하고 있는 이름과 IP 주소의 기록을 DNS 캐시라고 함
    • 만약 DNS 캐시가 없이 주소가 필요할 때마다 매번 DNS 요청을 전달하면 비효율적인 상황이 발생
    • DNS 서비스를 제공하는 서버의 입장에서 동일한 내용에 대한 반복적인 응답 수행으로 인해서 시스템에 과도한 부하가 발생할 수 있음
    • 이러한 일이 발생하지 않도록 DNS는 레코드의 수명을 설정하여 한번 조회한 레코드의 수명이 다하기 전까지는 해당 레코드를 그대로 사용하도록 설계
    • 레코드의 수명은 TTL(Time To Live)라고 함
    • DNS 캐시는 엔드포인트에서만 사용되는 것으로 착각하기 쉽지만, DNS 캐시는 DNS 서버에도 존재, DNS 서버도 다른 DNS 서버에서 얻어온 정보를 DNS 캐시로 저장
  • DNS 레코드

    • DNS 서버는 DNS 요청을 통해 전달된 특정 호스트의 주소를 응답하는 기능을 수행함
    • 하지만 DNS 서버는 단순히 특적 이름에 대한 응답만을 수행하는 것이 아니라 영역(zone), 즉 도메인 전체에 대한 정보를 제공하기 함
    • DNS 서버는 다양한 형태로 되어 있는 DNS 레코드를 저장하고 있어야 함
  • 레코드 종류

    • A,AAAA
      • IP 주소와 도메인 이름을 연결하고 있는 레코드
      • A : IPv4
      • AAAA : IPv6
    • CNAME
      • 다른 DNS 레코드의 별칭 레코드
    • MX
      • 메일 서버에 대한 정보를 저장
    • NS
      • 현재 도메인의 이름 서버(Name Server)를 지정
    • PTR
      • PTR 레코드는 A 레코드와 반대로 특정 IP 주소에 해당하는 도메인의 이름 정보를 저장
    • SOA
      • 영역의 권한 시작 정보(Start of Authority)
      • 영역을 구성하는 가장 기본 레코드
      • 모든 영역은 한개의 SOA 레코드를 가지고 있음
    • TXT
      • 자유로운 형식의 텍스트 정보를 제공
      • 다양한 정보를 포함할 수 있는 텍스트 문자열
  • DNS 조회 방법

    • host command
      • host [option] name [server]
        -v : 상제한 정보 표시
        -t : 조회할 레코드 타입 지정
        -a : 모든 타입의 레코드 조회
        -l : 리스트 모드로 결과 출력
    • nslookup command
      • nslookup [name][server]
    • dig command
      • dig [@server][name]
      • dig 명령은 DNS 서버를 지정할 때, 서버의 주소 앞에'@' 기호를 반드시 추가해야 함
DNS 서버 구성

1. 패키기 설치 (bind , bind-utils )
 - yum -y install bind bind-utils

2. 서비스 설정
 - 고정 아이피 설정
 - DNS 서버 주소 설정
 - hostname 설정
 - /etc/named.conf 설정
 - /var/named => zone 설정

3. 서비스 활성화
 - systemctl start named
 - systemctl enable named

4. 방화벽 설정
 - firewall-cmd --add-service=dns --permanent
 - firewall-cmd --reload

===========================================

도메인 확인 명령어

nslookup

> www.naver.com
> 192.168.56.101


host www.naver.com
host -t A www.naver.com
host -t PTR   192.168.56.1010
host -v -t A www.naver.com

dig www.naver.com

=============================================


dns 서버 구성 실습

초기 설정으로 스냅샷

패키지 설치

bind

bind-utils

방화벽 열기 (dns 서버에 대해서)

서버 주소 설정 및 호스트네임 변경

ip   192.168.56.101/24

hostname dns.test.example.com

/etc/hosts

192.168.56.101 dns.test.example.com  작성


named.conf 파일 설정

정뱡향 조회
vi /etc/named.conf

options {
        listen-on port 53 { any; };
        listen-on-v6 port 53 { none; };
        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";
        allow-query     { any; };

zone "test.example.com" IN {
        type master;
        file "test.example.com.zone";
};




zone 

cd /var/named

cp  named.empty    test.example.com.zone

vi test.example.com.zone

$TTL 3H
@       IN SOA  test.example.com. root.test.example.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns.test.example.com.

dns     A         192.168.56.101
www     A         192.168.56.20
ftp     A         192.168.56.30
mail    A         192.168.56.40
blog    A         192.168.56.50

:wq

chmod 660 test.example.com.zone
chown :named test.example.com.zone

systemctl enable named --now

firewall-cmd --add-service=dns --permanent
firewall-cmd --reload


dns 확인
역방향 조회

vi /etc/named.conf 

zone "56.168.192.in-addr.arpa" IN {
        type master;
        file "192.168.56.0.zone";
};



zone

cp -ap test.example.com.zone   192.168.56.0.zone

vi   192.168.56.0.zone

$TTL 3H
@       IN SOA  test.example.com. root.test.example.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns.test.example.com.


101    PTR       dns.test.example.com.
20     PTR       www.test.example.com.
30     PTR       ftp.test.example.com.
40     PTR       mail.test.example.com.
50     PTR       blog.test.example.com.

:wq


chmod 660   192.168.56.0.zone
chown :named   192.168.56.0.zone


systemctl restart named.service
================================================================

master / slave 구성


-------------------------------------------------------------------
master 

vi /etc/named.conf

zone "test.example.com" IN {
        type master;
        file "test.example.com.zone";
        allow-transfer { 192.168.56.101; }; => 추가
};

zone "56.168.192.in-addr.arpa" IN {
        type master;
        file "192.168.56.1010.zone";
        allow-transfer { 192.168.56.101; }; => 추가
};

vi /var/named/test.example.com.zone


$TTL 3H
@       IN SOA  test.example.com. root.test.example.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns.test.example.com.
        NS      slave.test.example.com.          =>   추가

dns     A         192.168.56.101
www     A         192.168.56.20
ftp     A         192.168.56.30
mail    A         192.168.56.40
blog    A         192.168.56.50
slave   A         192.168.56.110                     =>   추가


:wq

vi   192.168.56.0.zone

$TTL 3H
@       IN SOA  test.example.com. root.test.example.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns.test.example.com.
        NS      slave.test.example.com.          =>   추가


10     PTR       dns.test.example.com.
20     PTR       www.test.example.com.
30     PTR       ftp.test.example.com.
40     PTR       mail.test.example.com.
50     PTR       blog.test.example.com.
110    PTR      slave.test.example.com.       =>  추가

:wq
----------------------------------------------------------------

slave

기존 가상 머신을 복제해서 새로운 가상머신 생성


패키지 설치
bind
bind-utils
dnf -y install bind ==> 패키지 설치


방화벽 열기 (dns 서버에 대해서)

서버 주소 설정 및 호스트네임 변경
nmcli con add con-name static1 
		ifname eth1 
		type ethernet 
		ip4 "192.168.56.110/24" 
		gw4 "192.168.56.1"        --> 으로변경
== ip 192.168.56.110

hostname slave.test.example.com
systemctl restart named

/etc/hosts 파일
192.168.56.110 slave.test.example.com  작성

dns   192.168.56.101 

vi /etc/named.conf

options {
        listen-on port 53 { any; };
        listen-on-v6 port 53 { none; };
        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";
        allow-query     { any; };

zone "test.example.com" IN {
        type slave;
        masters { 192.168.56.101; };
        file "slaves/test.example.com.zone";
        notify no;
};

---> "56.168.192.in-addr.arpa" 역 방향 조회
zone "2.0.10.in-addr.arpa" IN {
        type slave;
        masters { 192.168.56.101; };
        file "slaves/192.168.56.0.zone";
        notify no;
};

:wq


systemctl enable named --now

firewall-cmd --add-service=dns --permanent
firewall-cmd --reload

ls /var/named/slaves/


---------------------------------------------------------

client 실행

nmcli con mod static +ipv4.dns 192.168.56.110

host dns.test.example.com 192.168.56.110

nmcli dev disconnect eth2 ==> ip 충돌을 방지하기 위해 끄기

=======================================================
profile
This is my study archive

0개의 댓글