[리눅스마스터 1급] 이기적 이론서 13회차 정리 - DNS 관련 서비스

🏁 이기적 이론서 학습 범위

  • PART 03 네트워크 및 서비스의 활용
    • CHAPTER 01 네트워크 서비스 (SECTION 05 도메인 관련 서비스)

DNS 관리 서비스

☑️ DNS(Domain Name System)의 개요

DNS의 개념과 구성 요소

  • 개념
    • 도메인 이름과 IP 주소를 상호 변환하는 서비스
    • ex. youngjin-domain.com172.30.1.3 을 매핑한 후 상호 변환하여 사용한다.
  • DNS 서버의 동작과 종류
    • DNS 서버는 도메인을 관리하고, 클라이언트 요청에 따라 도메인명 ↔ IP 주소를 변환하여 응답한다.
    • DNS는 TCP/53, UDP/53 포트를 이용한다.
    • DNS 동작 순서
      1. 클라이언트에서 www.youngjin.com 을 입력하면, Local DNS에 관련 IP 주소를 질의(Query)한다.
      2. Local DNS에 호스트 네임에 대한 정보가 없다면 Root DNS에 질의를 시작한다.
      3. Root DNS에도 관련 정보가 없다면 다른 DNS 서버(com DNS)에 질의한다.
      4. Local DNS는 .com을 관리하는 DNS에게 질의하고 관련 정보가 없을 경우 다시 질의할 다른 DNS 서버의 주소를 응답 받는다.
      5. Local DNS는 www.youngjin.com 를 관리하는 DNS에게 질의하고 관련 정보가 없다면 다시 질의할 다른 DNS 서버의 주소를 응답받는다.
      6. Local DNS는 www.youngjin.com 에 대한 IP 주소를 캐싱하고 클라이언트에게 전달한다.
    • DNS 서버의 종류

      종류설명
      Primary Name ServerMaster Server라고도 하며, 필수 항목이다.
      Secondary Name Server- Slave DNS라고도 하며, Primary Server의 zone 파일을 백업한다.
      - Master DNS에 문제가 있으면 보조 DNS로 사용할 수 있다.
      Caching Name Server- 도메인 관리 없이 리졸빙(resolving) 역할만 수행하는 서버
      - 도메인에 대한 리졸빙 결과를 저장하고 해당 요청이 있다면 바로 응답하여 속도를 향상시킨다.
    • /etc/hosts 파일을 통해 로컬 호스트에서만 사용할 수 있는 DNS 정보를 설정할 수 있다.

        $ vi /etc/hosts
      

☑️ DNS 서비스 사용하기

DNS 서비스 설치

  • DNS 관련 패키지 설치
    • 리눅스 DNS 서버 프로그램 이름은 bind이고, named라는 데몬 이름을 갖는다.
    • DNS 관련 패키지인 bind, bind-libs, bind-utils를 설치한다.

        $ yum -y install bind
      
    • 패키지 설치 시 bind 관련 파일과 디렉터리 및 주요 설정 파일을 확인할 수 있다.
    • bind 관련 파일과 디렉터리

      이름설명
      /etc/named.conf- 존(zone) 파일, 리버스 존(reverse zone) 파일을 비롯한 DNS 서버의 주요 환경을 설정하는 설정 파일
      - zone 파일: 도메인 이름, IP 주소 또는 관련 리소스 간 매핑을 포함하고, 리소스 레코드(resource record)로 구성된다.
      - 리버스 존 : IP 주소에 대한 도메인 정보 조회 제공
      /var/named루트 도메인 서버의 정보를 담은 named.c. 사용자가 설정한 zone 파일 등을 저장하는 디렉터리이다.
    • bind-chroot 패키지를 이용하여 bind의 보안을 향상 시킬 수 있다.
    • bind-chroot 를 사용하면 데몬과 설치한 사용자만 설치 경로를 알 수 있도록 시스템의 루트 디렉터리를 가상의 디렉터리로 변환한다.
    • bind-chroot 이용에 따른 디렉터리로 변경

      기본 디렉터리bind-chroot에 따른 디렉터리
      /etc/named.conf/var/named/chroot/etc/named.conf
      /var/named/var/named/chroot/var/named

/etc/named.conf 파일 설정

  • /etc/named.conf의 형식
    • 주석문과 구문으로 구성된다.
    • 주석은 /* ~ */, //, # 등을 모두 사용할 수 있다.
    • options, acl, logging, zone 등의 주요 구문이 있고, 각 구문은 중괄호 {} 로 둘러싸고 끝날 때 세미콜론 ; 을 붙인다.
    • 별도로 파일에 정의 후 include 지시자를 이용하여 포함할 수 있다.
  • options 구문의 설정 항목
    • options 구문 설정 항목

      설정 항목설명
      directoryzone 파일의 저장 디렉터리를 설정하며, 반드시 필요한 항목이다.
      - ex. directory “/var/named”
      dump-file- 정보 갱신 시 저장 파일로 사용할 dump-file의 파일명을 지정한다.
      - ex. dump-file “/var/named/data/cache_dump.db”
      statistics-file- 통계 정보를 저장할 파일명을 지정한다.
      - ex. statistics-file “/var/named/data/named_stats.txt”;
      memstatistics-file- 메모리 통계 정보를 저장할 파일명을 지정한다.
      - ex. memstatistics-file “/var/named/data/named_mem_stats.txt”;
      recursing-filerecursing query 정보를 저장하는 파일명을 지정한다.
      forward- forwarders 옵션과 함께 사용하며 only 혹은 first 값을 가진다.
      - forward only: 도메인 주소에 대한 질의를 다른 서버에게 넘긴다. - forward first : 다른 서버에서 응답이 없을 경우 자신이 응답하도록 설정한다.
      forwarders- forward를 처리할 서버를 지정한다.
      - 여러 개의 서버를 세미콜론으로 구분하여 설정한다.
      allow-query- 네임 서버에 질의할 수 있는 호스트를 지정한다.
      - ex. allow-query { localhost };
      allow-transfer- 존(zone) 파일 내용을 복사(transfer) 할 대상을 제한한다.
      - ex. allow- transfer { 172.3.1.0/24; };
      datasize- DNS 정보 캐싱에 사용할 메모리 크기를 제한한다.
      - ex. datasize 128M;
      recursion- 하위 도메인 검색 허용 여부를 지정한다.
      - yes로 설정시 네임 서버에 설정하지 않은 도메인을 질의할 경우 캐싱 네임 서버의 역할로 동작하여 DNS 질의를 수행한다. - ex. recursion yes;
  • logging 구문의 설정 항목
    • bind 네임 서버의 로깅 방식을 설정한다.
    • logging 구문 설정 예제

        logging {
                channel default_debg {
                        file "data/named.run";
                        severity dynamic;
                };
        };
      
  • acl 구문의 설정 항목
    • acl(Access Control List) 구문은 여러 호스트들을 하나의 이름으로 지정하여 options 구문의 allow-query, allow-transfer 등에 사용할 수 있도록 한다.
    • acl 구문 설정 예: ihd란 이름을 별칭으로 사용한다.

        acl "ihd" { 192.168.2.24l 192.168.4/24; };
      
  • zone 구문의 설정 항목
    • 도메인을 관리하기 위한 데이터 파일인 zone 파일을 지정한다.
    • zone 구문의 기본 형식

        zone [도메인명] IN {
          type [master | slave |hint];
          file [존 파일명];
        };
      
      • hint : 루트 도메인을 지정한다.
      • master: 1차 네임 서버를 지정한다.
      • slave: 2차 네임 서버를 지정한다.
    • /etc/named.conf 파일을 복잡하지 않게 관리하기 위해, root zone을 제외한 zone 정보를 /etc/named.rfc1912.zones에 설정한 후 include 구문으로 포함하는 것을 권장한다.

zone 파일 설정

  • zone 파일 특징
    • 도메인 이름과 IP 주소 혹은 관련 리소스 간 매핑을 포함하고, 리소스 레코드로 구성된다.
    • 리버스 존(Reverse zone) 파일을 이용하여 IP 주소에 대한 도메인 정보 조회를 제공한다.
    • 일반적으로 zone 파일명은 도메인명.zone 을 따르고, reverse zone 파일명은 도메인명.rev 을 따른다.
    • . 을 이용해 주석을 추가한다.
  • zone 파일 구조
    • zone 파일의 구성 항목

      구성 항목설명
      $TTL- Time To Live의 약자 - 설정한 정보를 다른 DNS 서버에서 조회하였을 경우 캐시에 보관할 시간을 지정한다.
      - zone 파일의 첫 번째 라인에 위치해야 한다. - 기본 시간 단위는 초(Second)이며 W(Week), D(Day), M(Minute) 단위로 설정할 수 있다.
      SOA 레코드- Start Of Authority의 약자
      - 도메인 관리자 메일, 일련번호 등 DNS 핵심 정보를 지정한다.
      - @ 기호는 오리진(origin) 도메인을 의미하며 /etc/named.conf 파일에서 설정한 도메인명이다.
      - 도메인 이름을 직접 지정시 마지막에 . 을 반드시 추가해야 한다.
      - SOA 레코드의 세부 속성은 별도의 표를 참조한다.
      개별 도메인 (리소스 레코드)- [도메인명][IN][Class][Record Type][우선순위][도메인 혹은 IP]의 형식으로 구성한다.
      - 세부 속성은 별도의 표를 참조한다.
    • SOA 레코드의 주요 속성

      속성설명
      Nameserver- 네임 서버의 호스트명과 도메인명을 지정한다.
      - ex. youngjin-dns.com(. (. 으로 끝남)
      Contact_email_address- 계정.도메인. 형식으로 관리자의 이메일 주소를 지정한다.
      - ex. admin.youngjin-dns.com (. 으로 끝난다. )
      Serial_number- Zone 파일이 갱신되면 증가하게 되는 일종의 일련번호
      - 보통 YYYYMMDDNN 형식을 사용하고, NN은 수정 횟수이다.
      Refresh_number- 보조 네임 서버가 정보 업데이트를 위해 주 네임 서버에 얼마나 자주 접근, 점검할 지 정한다.
      - ex. 1D 등
      Expire_number- Retry_number에 설정한 주기로 재시도할 때의 만기시간을 지정한다.
      Minimum_number- 일종의 TTL과 같은 개념으로 정보의 최소 보관 시간을 지정한다. - ex. 3H 등
    • 개별 도메인의 주요 속성

      항목설명
      도메인명- 도메인(호스트)명에는 도메인 이름.호스트 이름. 공백. @ 등 이 올 수 있다.
      - * 은 호스트명, @ 은 현재 도메인, 공백 은 바로 위 자원을 이용하게 된다.
      - 도메인 이름 사용 시 마지막에 . 을 추가해야 한다.
      IN / CLASS일반적으로 인터넷 클래스인 IN을 사용하며, 레코드에 대한 클래스를 지정한다.
      Record Type- 레코드 타입을 지정한다.
      - 세부 항목은 주요 레코드 타입 표를 참고한다.
    • zone 파일의 주요 레코드 타입

      타입설명
      A(Address Mapping Records)도메인 이름에 해당하는 IPv4 주소
      AAAA(IPv6 Address Records)도메인 이름에 해당하는 IPv6 주소
      CNAME(Canonical Name)도메인 이름의 별칭
      HNFO(Host Information)CPU, OS 유형 등 호스트에 대한 정보
      MX(Mail exchanger)도메인 이름에 대한 메일 교환 서버
      NS(Name Server)호스트에 대한 공식 네임 서버
      PTR(Reverse-lookup Pointer records)IP 주소를 기반으로 도메인 이름 반환
      SOA(Start of Authority)도메인 관리자 메일, 일련번호 등 DNS 핵심 정보 지정
      TXT(Text)임의의 텍스트 문자열 지정

DNS 관련 주요 명령어

  • DNS 서비스 시작과 상태 점검
    • systemctl을 통해 named 서비스를 실행하고 자세한 동작 상태를 확인한다.

        $ systemctl start named.service
              
        $ systemctl -l status named.service
      
  • DNS 관련 주요 명령어

    명령어설명
    named-checkzone- zone 파일의 문법적 오류를 점검한다.
    - named-checkzone [도메인명][zone파일경로]의 명령옵션을 이용한다.
    named-checkconf- /etc/named.conf 환경설정 파일의 문법적 오류를 점검한다.
    - named-checkconf [파일경로] 명령 옵션을 이용한다.
    rndc statusDNS 서버의 자세한 상태를 확인한다.
    host- 도메인을 조회한다.
    - dig 명령을 이용하면 좀더 자세한 정보 확인 가능

© 2021. All rights reserved.

yaejinkong의 블로그