Linux(CentOS) DNS

박종현·2022년 5월 16일
1

리눅스(CentOS)

목록 보기
10/13

DNS(Domain Name System)

DNS(Domain Name System)

  • 도메인 이름(FQDN, Full Quallified Domain Name)을 IP주소와 매칭 시켜주는 시스템

  • 정방향 조회, 역방향 조회

    • 정방향 : FQDN → IP주소
    • 역방향 : IP주소 → FQDN
  • DNS 서비스는 계층화 된 형태로 제공

    단일 DNS서버가 모든 DNS 정보를 가지고 있을 수 없음

  • DNS 서버 질의 방식

    • 재귀 질의(Reculsive Query) : 클라이언트 - 서버, DNS에 대한 요청과 그에 대한 응답으로 구성

    • 순환 질의(Iterative Query) : DNS서버 - 계층적 구조에 따라 DNS서버로 요청을 전송

      1. DNS서버는 자신이 찾고자 하는 도메인의 최상위 도메인 이름의 정보를 찾기위해 Root DNS(Root Hind DNS)에게 질의 전송
      2. Root Hint DNS 서버는 최상위 도메인의 바로 아래 단계 도메인의 정보를 가지고 있는 DNS서버의 주소를 안내
      3. 최종 요청, FQDN의 IP를 확인할 떄 까지 위 과정을 반복

FQDN

  • 호스트이름 + 도메인이름 → 호스트이름.도메인이름
  • 호스트 이름은 가장 좌측 한개 ex)www(World Wide Web, 웹 서버), mail, mx(메일서버) →ftp.daumkakao.com
  • 도메인 이름은 2개 이상의 계층 구조를 가짐 ex) naver.com, daum.net, nate.com ex) www.seoul.abc.co.kr, mail.kangnam.seoul.korea.co.kr
  • 가장 뒤 쩍이 가장 상위의 분류

DNS 레코드

  • 유형
    • A : 특정 이름에 대한 IPv4 정보
    • AAAA : 특정 이름에 대한 IPv6 정보
    • CNAME : Canonical Name, 별칭 ex) www, mail : www를 A 레코드로 생성, mail을 CNAME으로 생성, www정보만 변경하여도 mail도 함께 변경

      CNAME 사용시 연결하는 FQDN은 현재 도메인과 무관하게 지정 가능
      ex) test.example.com CNAME test2.exmple2.com

    • PTR : 포인터 레코드, IP주소에 매칭된 FQDN 이름
    • NS : Name Server, 해당 도메인의 DNS 서버
    • MX : Mail exchanger, 메일 교환기, 도메인의 메일 서버
    • SOA : Start of Authorization, DNS 영역에 대한 정보 영역에 1개의 SOA 레코드 필요
      • 네임서버 정보
      • 담당자 정보(이메일) : [이름]@[도메인] → [이름].[도메인]
      • 일련번호
      • 관련된 설정정보(업데이트 등)
      • 만료설정
    • TXT : 정보를 전달하기 위한 레코드
    • SRV : 서비스 관련 레코드

DNS 조회도구

  1. host : 리눅스 기본 DNS 조회도구
    • host [옵션][FQDN] [DNS서버]
    • 옵션
      • v : 상세 정보 표시
      • t : 레코드 탕비 지정
      • a : ALL, 모든 타입
      • l : list mode, '영역 전송(Zone Transfer)'를 통한 데이터 조회
  2. nslookup
    • 대화형으로 실행
    • server : DNS 서버 지정
    • set type : 조회 레코드 타입 지정
  3. dig
    • dig [@DNS서버][FQDN]

DNS서버 구축 : BIND(Berkeley Internet Name Domain)

  1. DNS서버 (BIND) 설치

     # yum info bind
     # yum install bind
  2. bind 정보 확인

     #rpm -ql bind
  3. 서비스 정보 확인

     # systemctl status named.service
  4. 서비스 설정 파일 확인 및 수정

     #vi /etc/named.conf
     
     //확인
     options {
             listen-on port 53 { 127.0.0.1; };
             listen-on-v6 port 53 { ::1; };
             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     { localhost; };
    
     //수정
     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; };
  5. DNS서비스 시작

     # systemctl start named.service
     # systemctl enable named.service
  6. 서비스 동작상태 확인

     # systemctl status named.service
  7. 동작테스트 - 윈도우 시스템에서 cmd창열고 nslookup실행

     C:\Users\Playdata>nslookup
     기본 서버:  UnKnown
     Address:  192.168.4.254
     
     > server 192.168.100.100
     기본 서버:  [192.168.100.100]
     Address:  192.168.100.100
     
     > www.naver.com
     서버:    [192.168.100.100]
     Address:  192.168.100.100
     
     권한 없는 응답:
     이름:    www.naver.com.nheos.com
     Addresses:  223.130.195.95
               223.130.195.200
     Aliases:  www.naver.com
  8. 이와 같이 설정할 경우, BIND는 Cache 전용 DNS 서버로 동작

  • 클라이언트 측 /etc/hosts 파일, DNS 요청, DNS 캐시의 우선순위
    1. /etc/hosts
    2. DNS 캐시(시스템)
    3. DNS요청
  • DNS서버 측 우선순위
    1. 관리하고 있는 영역
    2. DNS 캐시
    3. DNS 요청
  • BIND 영역 설정 /var/named

    실습환경 예시

    example.local 도메인 구성

    ns.example.local : 192.168.100.100

    mail.example.local : 192.168.100.101

    www.example.local : 192.168.100.100

    ftp.example.local : www.example.local

    • 정방향 조회 영역파일 생성 : /var/named/data/example.local.zone
      ```
       # cd /var/named
       # cp named.empty data/example.local.zone
       # vi data/example.local.zone
       
       $TTL 3H
       @       IN SOA  @ rname.invalid. (
                                               0       ; serial
                                               1D      ; refresh
                                               1H      ; retry
                                               1W      ; expire
                                               3H )    ; minimum
               NS      @
               A       127.0.0.1
               AAAA    ::1
      
       //아래와 같이 수정
       $TTL 3H
       @       IN SOA  ns.example.local.  root.example.local. (
                                               0       ; serial
                                               1D      ; refresh
                                               1H      ; retry
                                               1W      ; expire
                                               3H )    ; minimum
       
       @       IN      NS      ns.example.local.
               IN      MX 10   mail.example.local.
               IN      A       192.168.100.100
       
       ns      IN      A       192.168.100.100
       mail    IN      A       192.168.100.101
       www     IN      A       192.168.100.100
       ftp     IN      CNAME   www
       
      ```
      
    • 역방향조회 파일 설정 : /var/named/data/db.192.168.100
       # cd /var/named
       # cp named.empty date/db.192.169.100
       # vi data/db.192.168.100
       
       $TTL 3H
       @       IN SOA  @ rname.invalid. (
                                               0       ; serial
                                               1D      ; refresh
                                               1H      ; retry
                                               1W      ; expire
                                               3H )    ; minimum
               NS      @
               A       127.0.0.1
               AAAA    ::1
      
       //아래와 같이 수정
       $TTL 3H
       @       IN SOA  ns.example.local. root.example.local. (
                                               0       ; serial
                                               1D      ; refresh
                                               1H      ; retry
                                               1W      ; expire
                                               3H )    ; minimum
       
       @       IN      NS      ns.example.local.
       100     IN      PTR     ns.example.local.
       101     IN      PTR     mail.example.local.
       100     IN      PTR     www.example.local.
       
    • /etc/named.conf 파일 수정
       ...
       
       zone "example.local" IN {
               type master;
               file "data/example.local.zone";
       };
       
       zone "100.168.192.in-addr.arpa" {
               type master;
               file "data/db.192.168.100";
       };
       
       ...
    • 영역 설정 확인
      • named-chechzone → named-chaeczone [영역이름][파일이름] ex) named-checkzone example.local /var/named/data/example.local.zone
      • named-checkconf → named-checkconf [설정파일 이름] ex) named-checkconf /etc/named.conf
        • etc/named.conf 파일에 작성된 내용을 문법적으로 틀린것이 있는지 체크
    • 영역 파일 권한 설정 /var/named/data 내 영역파일을 root 사용자로 작성할 경우 root 사용자의 소유 및 root 그룹의 소유로 생성되며, 다른 사용자에게 읽기 권한이 없음
      • 파일 소유권을 named:named로 변경
         # chown named:named /var/named/data/example.local.zone
         # chown named:named /var/named/data/db.192.168.100
      • 파일 권한을 644(rw-r--r--)로 변경
         # chmod 644 /var/named/data/example.local.zone
         # chmod 644 /var/named/data/db.192.168.100
    • 서비스 재시작 후 동작 확인
      • 정방향조회 윈도우10에서 nslookup 실행 후 server 192.168.100.100 example.local www.example.local
      • 역뱡향 조회 윈도우10에서 nslookup 실행 후 server 192.168.100.100 192.168.100.100

DNS 이중화

  • 장애 발생 시 대응
  • 부하 분산

DNS 이중화 실습

실습준비

  • 공유폴더에서 CentOS 7.8 ova 파일 다운로드 후 import
  • 네트워크 설정을 고정 IP 설정 :
    • IP : 192.168.100.200/24
    • GW : 192.168.100.2
    • DNS : [BIND가 설치된 서버IP]
       # nmcli connection add con-name static ifname ens33 type ethernet ipv4.method manual ipv4.addresses 192.168.100.200/24 ipv4.gateway 192.168.100.2 ipv4.dns 192.168.100.100
       # nmcli connection up static

실습환경 통일을 하기 위한 설정

VMware Virtual Network

서브넷 : 192.168.100.0

서브넷마스크 : 255.255.255.0

NAT, DHCP : 192.168.100.0 대역으로 변경

  • 1번 서버
    • IP : 192.168.100.100/24
    • Gateway : 192.168.100.2
    • DNS : 192.168.100.2
       # nmcli connection add con-name static ifname ens33 type ethernet ipv4.addresses 192.168.100.100/24 ipv4.gateway 192.168.100.2 ipv4.dns 192.168.100.2 ipv4.method manual
       # nmcli connection up static
  • 2번 서버
    • IP : 192.168.100.200/24
    • Gateway : 192.168.100.2
    • DNS : 192.168.100.100
       # nmcli connection add con-name static ifname ens33 type ethernet ipv4.addresses 192.168.100.200/24 ipv4.gateway 192.168.100.2 ipv4.dns 192.168.100.100 ipv4.method manual
       # nmcli connection up static

DNS 이중화 구성

  • 한 서버는 영역의 데이터를 직접 관리하는 Master
    • 직접 영역 파일의 설정
    • named.conf 파일 내에 영역 내용 추가
    • '영역 전송 설정' 필요 : 보안고려
  • 다른 서버는 Master로부터 데이터를 받아오는 Slave
    • 직접 영역파일을 생성할 필요가 없음 : 자동생성
    • named.conf 파일 내에 영역 내용 추가
  1. Master서버의 영역 전송 설정

    영역 전송을 허용할 영역의 설정항목 내에 다음 추가(/etc/named.conf 내 영역 zone 항목)

     Allow-transfer { [전송을 허가할 서버]; };
  2. 설정 확인

     # named-checkconf
  3. 서비스 재시작

     # systemctl restart named.service
     # systemctl status named.service
  4. Slave에서 /etc/named.conf 파일 수정

    • 기본 접근제어 설정 변경 (위 내용 참고)
    • 영역설정 추가(Slave)
       zone "example.local" IN {
               type slave;
               masters { 192.168.100.100; };
               file "slaves/example.local.zone";
       };
  5. Slave에서 설정 확인 및 서비스 시작

     # named-checkconf /etc/named.conf
     # systemctl start named.service
  6. 동작확인

     # host example.local localhost
     # ls -l /var/named/slaves/
     # cat /var/named/slaves/example.local.zone

캐시 전용 DNS 서버

  • BIND 등의 DNS 서버를 직접 관리하는 영역 없이 사용할 경우
  • BIND 등의 본격적인 DNS 서버를 영역을 직접 관리하기 위한 용도 이외의 전용 서버로 사용하는 것은 낭비
  • 캐시전용 DNS 서버를 위한 별도의 도구가 존재
  • 필요성 : 트래픽 감소 등의 효과
  • 전달(Forward) : 재귀 쿼리 - 직접 순환커리를 수행하지 않고, 지정한 DNS 서버로 요청을 그대로 전달

캐시전용 DNS 서버 실습 : unbound

  1. unbound 설치

      yum search unbound
     unbound.x86_64 : Validating, recursive, and caching DNS(SEC) resolver
     # yum install unbound
  2. unbound 기본 설정 변경

      vi /etc/unbound/unbound.conf
     …
     interface [인터페이스IP]
     …
     access-control: [접근제어대상IP/네트워크] [allow/refuse/deny]
     …
     forward-zone:
         name: [전달할 영역]
         forward-addr: [전달할 DNS 서버]
     
     //전체 접근 허용 예시
     interface: 192.168.100.200
     access-control: 0.0.0.0/0 allow
     
     //기본적으로 google dns로 전달하도록, 특정 영역만 bind로 전달하도록 설정
     forward-zone:
         name: “.”
         forward-addr: 8.8.8.8
     forward-zone:
         name: “example.local”
         forward-addr: 192.168.100.100
     
  3. DNS서비스 구동

     # systemctl start unbound.service
     # systemctl enable unbound.service
  4. 방화벽 서비스 해제

     # firewall-cmd --add-service=dns --permanent
     # firewall-cmd --reload
  5. unbound 동작 확인

     # host google.com 192.168.100.200
     
     //cmd에서
     >nslookup
     >server 192.168.100.200
     >google.com
  6. unbound 컨트롤 명령 확인

    • unbound-control
      • start : 시작
      • stop : 중지
      • reload : 설정 다시 읽기
      • status : 상태 확인
      • lookup [대상] : 대상을 찾기 위해 요청을 전달할 서버 확인
      • dump_cache : dns 요청 캐시 확인. 리다이렉션으로 저장
      • load_cache : 캐시 파일로부터 읽기
      • flush : 요청 항목 캐시 삭제
      • flush_zone : 요청 항목 영역 캐시 전체 삭제

0개의 댓글