King of Stock

[DNS] ubuntu server 18.04 DNS 서버 구성해보기 본문

IT 기술

[DNS] ubuntu server 18.04 DNS 서버 구성해보기

king of stock 2019. 12. 21. 15:31

DNS 서버 환경설정

본 문서에서는 같은 네트워크(subnet)에서 특정 dns 서버를 지정한 호스트들이 사용할 우분투 DNS 서버 설정을 가이드 한다. 현재 설정된 DNS 서버의 정보는 아래와 같다. 참고로 이 서버는 윈도우 워크스테이션 하위에 VMware workstation(VMware Workstation Pro 다운로드) 가상화를 통해서 설치된 서버이다

  • 서버 IP 주소: 192.168.100.3
  • DNS 서버 호스트 이름: ns1.kuk.lab
  • 호스트 OS: Ubuntu 18.04 server(Download Ubuntu Server)
  • 호스트 관리자 계정: dns
  • DNS 구성에 사용한 패키지: bind9

DNS 서버 호스트 변경

DNS 서버의 호스트 이름을 다음의 명령어를 통해서 의미 있는 이름으로 변경한다.

$ hostnamectl set-hostname ns1.kuk.lab
==== AUTHENTICATING FOR org.freedesktop.hostname1.set-static-hostname ===
Authentication is required to set the statically configured local host name, as well as the pretty host name.
Authenticating as: dns
Password:
==== AUTHENTICATION COMPLETE ===
$ hostnamectl status
   Static hostname: ns1.kuk.lab
         Icon name: computer-vm
           Chassis: vm
        Machine ID: u433e252ada44a248b064092916ac8e0
           Boot ID: a1b314eb70f8102b9241b7ue901ce7cd
    Virtualization: vmware
  Operating System: Ubuntu 18.04.3 LTS
            Kernel: Linux 4.15.0-72-generic
      Architecture: x86-64

DNS 서버 고정 IP 설정

DNS 서버는 고정 IP로 지정을 해야 하니 다음과 같이 작업을 한다. 네트워크 인터페이스 목록을 확인하고 해당 인터페이스에 대한 IP를 설정하였다.

# 네트워크 인터페이스 확인
$ ls /sys/class/net
ens33  lo
# 설정하기 전에 백업
$ sudo cp /etc/netplan/50-cloud-init.yaml /etc/netplan/50-cloud-init.yaml.20191221
$ sudo vi /etc/netplan/50-cloud-init.yaml
# 다음과 같이 추가 및 수정
network:
    ethernets:
        ens33:
            addresses: [192.168.100.3/24]
            gateway4: 192.168.100.1
            nameservers:
                    addresses: [192.168.100.3,8.8.8.8]
            dhcp4: false
    version: 2
# 아래와 같이 실행하면 IP 변경이 처리가 되고 ssh 연결이 끊긴다. 재접속을 하여 검증이 된 것으로 봐도 무방함
$ sudo netplan apply

DNS 동작을 처리하는 패키지 설치

본 서버는 간단하게 설정 할 수 있는 bind9(CentOS에서는 bind) 패키지를 설치하여 사용하였다. 다음과 같이 설치했다.

$ sudo apt-get install -y bind9

bind9 설정

로그 설정

문제가 발생했을때 확인을 위해서 로그 설정을 다음과 같이 하였으며 그 내용은 다음과 같다. 이 설정은 bind9 로그설정 참고하여 설정하였다.

$ sudo vi /etc/bind/named.conf
# 다음과 같이 추가
logging {
        channel default_debug {
                file "/var/lib/bind/bind.log" versions 10 size 20m;
                print-time yes;
                print-severity yes;
                print-category yes;
                severity info;
        };
        category queries { "default_debug"; };
        category default { "default_debug"; };
        category config { "default_debug"; };
};

bind9 설정

bind9 패키지에 기본적인 설정을 위해서 다음과 같은 설정을 하였다. 이 DNS 서버는 동일한 네트워크(subnet) 혹은 로컬에서만 53포트를 통해 listen 한다.

$ sudo vi /etc/bind/named.conf.options
# 다음과 같이 추가
listen-on port 53 { localhost; 192.168.100.0/24; }; # 로컬호스트 혹은 동일한 서브넷의 요청에 대해서 listen
allow-query { any; };                               # 허용하는 쿼리는 종류에 상관 없음
forwarders { 192.168.100.1; };                      # 인터넷을 위한 게이트웨이 주소를 forwarders 로 설정

bind9 zone 설정

여기서 설정하여 사용하는 메인 도메인은 kuk.lab으로 지정하고 다음과 같이 정방향, 역방향 zone 설정을 하였다. 역방향의 경우에는 설정을 하지 않아도 되지만 나의 경우에는 vsphere, esxi, bosh 관련 테스트를 해보기 위해서 정방향 및 역방향을 모두 설정해줘야 정상 동작하기 때문에 모두 설정을 하였다. 집에서 간단하게 dns 서버를 만들고 내 PC 환경에서만 이용하는 것이라면 설정하지 않아도 될것으로 보인다.

  • 정방향 설정

    아래에 file "kuk.lab.zone";file "kuk.lab.zone.rev"; 설정을 통해서 zone 설정파일을 분리하였다.

    $ sudo vi /etc/bind/named.conf.local
    // forward zone config
    zone "kuk.lab" IN {
      type master;
      file "kuk.lab.zone";
    };
  • 역방향 설정

    $ sudo vi /etc/bind/named.conf.local
    // backward zone config
    zone "100.168.192.in-addr.arpa" IN {
      type master;
      file "kuk.lab.zone.rev";
    };
  • 정방향 상세 설정

    위에서 설정한 정방향 설정에 대한 실제 설정 파일을 다음과 같이 만들고 내용을 추가한다. 상세 설정 내용에 ; serial, ; dns server 등의 구문은 주석이다.

    $ sudo touch /var/cache/bind/kuk.lab.zone
    $ sudo vi /var/cache/bind/kuk.lab.zone
    # 다음과 같이 추가
    $TTL 30
    
    @ IN SOA kuk.lab. root.kuk.lab. (
      2019122114 ; serial
      3600       ; refresh
      900        ; retry
      604800     ; expire
      86400      ; minimum ttl
    )
    
    ; dns server
    @      IN NS ns1.kuk.lab.
    
    ; ip address of dns server
    ns1    IN A  192.168.100.3
    
    ; A Record list of vsphere in kuk home lab
    ; vCenter
    vcsa   IN A  192.168.100.100
    ; esxi host in window workstation
    esxi1  IN A  192.168.100.101
    ; esxi host in window notebook
    esxi2  IN A  192.168.100.102
  • 역방향 상세 설정

    위에서 설정한 역방향 설정에 대한 실제 설정 파일을 다음과 같이 만들고 내용을 추가한다.

    $ sudo touch /var/cache/bind/kuk.lab.zone.rev
    $ sudo vi /var/cache/bind/kuk.lab.zone.rev
    # 다음과 같이 추가
    $TTL 30
    
    @ IN SOA kuk.lab. root.kuk.lab. (
      2019122114 ; serial
      3600       ; refresh
      900        ; retry
      604800     ; expire
      86400      ; minimum ttl
    )
    
    ; dns server
    @      IN NS ns1.kuk.lab.
    
    ; ip address of dns server
    3      IN PTR  ns1.kuk.lab.
    
    ; A Record list of vsphere in kuk home lab
    ; vCenter
    100    IN PTR  vcsa.kuk.lab.
    ; esxi host in window workstation
    101    IN PTR  esxi1.kuk.lab.
    ; esxi host in window notebook
    102    IN PTR  esxi2.kuk.lab.

bind9 설정 검증

bind9에서 설정 파일의 검사를 할 수 있는 유틸리티를 제공하기 때문에 다음과 같이 설정을 검사해본다.

$ named-checkconf
# 아무 결과가 없는 것이 정상
$ /usr/sbin/named-checkzone kuk.lab /var/cache/bind/kuk.lab.zone
zone kuk.lab/IN: loaded serial 2019122114
OK
$ /usr/sbin/named-checkzone 192.168.100.3 /var/cache/bind/kuk.lab.zone.rev
zone 192.168.100.3/IN: loaded serial 2019122114
OK

bind9 자동 활성화, 재시작 그리고 상태 확인

  • OS 부팅시 자동으로 bind9 구동

    $ sudo systemctl enable bind9
  • 위에서 설정했던 내용을 적용하기 위해 재시작

    $ sudo systemctl restart bind9
  • 부팅이후 정상적으로 구동 되었는지 상태 검사

    $ sudo systemctl status bind9
    [sudo] password for dns:
    ● bind9.service - BIND Domain Name Server
      Loaded: loaded (/lib/systemd/system/bind9.service; enabled; vendor preset: enabled)
      Active: active (running) since Wed 2019-12-18 07:12:58 UTC; 17min ago
        Docs: man:named(8)
      Process: 1601 ExecStop=/usr/sbin/rndc stop (code=exited, status=0/SUCCESS)
    Main PID: 1604 (named)
        Tasks: 4 (limit: 2290)
      CGroup: /system.slice/bind9.service
              └─1604 /usr/sbin/named -f -u bind
    
    Dec 18 07:12:58 ns1.kuk.lab named[1604]: automatic empty zone: 9.E.F.IP6.ARPA
    Dec 18 07:12:58 ns1.kuk.lab named[1604]: automatic empty zone: A.E.F.IP6.ARPA
    Dec 18 07:12:58 ns1.kuk.lab named[1604]: automatic empty zone: B.E.F.IP6.ARPA
    Dec 18 07:12:58 ns1.kuk.lab named[1604]: automatic empty zone: 8.B.D.0.1.0.0.2.IP6.ARPA
    Dec 18 07:12:58 ns1.kuk.lab named[1604]: automatic empty zone: EMPTY.AS112.ARPA
    Dec 18 07:12:58 ns1.kuk.lab named[1604]: none:103: 'max-cache-size 90%' - setting to 1773MB (out of 1970MB)
    Dec 18 07:12:58 ns1.kuk.lab named[1604]: configuring command channel from '/etc/bind/rndc.key'
    Dec 18 07:12:58 ns1.kuk.lab named[1604]: command channel listening on 127.0.0.1#953
    Dec 18 07:12:58 ns1.kuk.lab named[1604]: configuring command channel from '/etc/bind/rndc.key'
    Dec 18 07:12:58 ns1.kuk.lab named[1604]: command channel listening on ::1#953

nslookup 커맨드를 통한 실제 동작을 확인

DNS 서버를 이용하는 다른 클라이언트들은 자체 캐시도 가지는 경우가 많으니 필요하면 자신의 환경에서 DNS 캐시를 클리어 하거나 재시작 통해서 테스트 전에 미리 준비한다.

  • DNS 서버 내부에서 확인

    • dns 서버 찾기

      dns 서버를 지정하여 ns1.kuk.lab 도메인을 찾아본다.

      $ nslookup ns1.kuk.lab localhost.localdomain
      Server:        localhost.localdomain
      Address:    ::1#53
      
      Name:    dns.kuk.lab
      Address: 192.168.100.3
    • A 레코드 도메인 찾기

      $ nslookup vcsa.kuk.lab localhost.localdomain
      Server:        localhost.localdomain
      Address:    ::1#53
      
      Name:    vcsa.kuk.lab
      Address: 192.168.100.100
  • DNS 외부의 클라이언트에서 확인

    DNS 서버를 지정한 클라이언트에서 다음 커맨드를 사용해서 nslookup 커맨드를 실행할 것을 유의한다.

    $ nslookup vcsa.kuk.lab
    Server:        192.168.100.3
    Address:    192.168.100.3#53
    
    Name:    vcsa.kuk.lab
    Address: 192.168.100.100

참고 레퍼런스(감사합니다. 블로거님들)

'IT 기술' 카테고리의 다른 글

C# EntityFramework 설정  (0) 2021.02.28
VSCode diff 툴  (0) 2020.08.25
[shell] if문에서 문자열 비교가 안될때  (0) 2019.12.05
[Kubernetes] StatefulSet podAntiAffinity  (0) 2019.08.03
[test] TestRestTemplate  (0) 2019.07.07
Comments