Ubuntu 22.04 에서 NSD 4.8.0 설치하기

리눅스/DNS|2023. 12. 19. 14:40
반응형

NLnet Labs 에서 제작한 NSD (Name Server Daemon) 은 BSD 라이센스를 가지고 있는 오픈소스 DNS 로써 속도, 신뢰성, 안정성 및 높은 보안성이 특징입니다. NSD 는 타 DNS 에 비해 월등히 빠른 속도를 보입니다. 몇 십만개 또는 몇 백만개의 쿼리를 요청하는 경우에도 쉽게 처리가 가능한 성능을 발휘하기 때문에 최상위 루트 네임서버중 몇 대는 NSD 로 사용되고 있다고 알려져 있습니다.

여기에서는 간단히 NSD 를 소스로 설치하고 sysdocu.kr 도메인을 등록해 질의 테스트하는 부분까지 안내합니다.

 

* 참고 : 패키지 설치 방법

# apt -y update

# apt -y install nsd

 

 

1. 설치

 

NSD 소스 파일을 다운로드 합니다.

공식 홈페이지에서는 현재 4.8.0 버전을 배포하고 있습니다.

- 공식 홈페이지 : https://nlnetlabs.nl/projects/nsd/about/
# wget https://nlnetlabs.nl/downloads/nsd/nsd-4.8.0.tar.gz

 

압축을 해제하고 설치 디렉토리로 이동합니다.

# tar xvzf nsd-4.8.0.tar.gz

# cd nsd-4.8.0


NSD 설치에 필요한 패키지를 사전 설치합니다.
# apt -y update
# apt -y install build-essential libssl-dev libevent-dev bison flex

 

NSD 설치를 계속 진행합니다.
# ./configure
# make
# make install

 

설치가 완료되었으면 명령어를 통해 설치 버전을 확인합니다.

# nsd -v
NSD version 4.8.0
Written by NLnet Labs.

Configure line:
Event loop: libevent 2.1.12-stable (uses epoll)
Linked with OpenSSL 3.0.2 15 Mar 2022

Copyright (C) 2001-2020 NLnet Labs.  This is free software.
There is NO warranty; not even for MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE.

 

 

2. 설정

 

기본 설정 파일을 생성합니다.

# cp -arp /etc/nsd/nsd.conf.sample /etc/nsd/nsd.conf

 

기본 파일에 옵션이 많이 있는것을 확인할 수 있습니다.

하지만 모든 옵션에 대한 설명을 다루지 않을 예정이므로 아래와 같이 몇가지 옵션만으로 구성해 보겠습니다.

아래 내용에 없는 옵션을 사용하고자 할 경우 공식 Ducoment 를 참고하시기 바랍니다.

https://nsd.docs.nlnetlabs.nl/en/latest/manpages/nsd.conf.html

설정파일에 사용할 key 파일과 pem 파일은 생성 명령이 준비되어 있으므로, 우선 테스트를 위해 아래 도메인 부분만 보유한 도메인으로 변경하고, 나머지는 같은 내용으로 작성합니다.

# vi /etc/nsd/nsd.conf

server:
        server-count: 1
        ip-address: 0.0.0.0
        do-ip4: yes
        port: 53
        username: nsd
        zonesdir: "/etc/nsd"
        zonelistfile: "/var/db/nsd/zone.list"
        logfile: "/var/log/nsd.log"
        pidfile: "/var/run/nsd.pid"
        xfrdfile: ""
        tcp-count: 1000
        tcp-query-count: 0
        tcp-timeout: 120

remote-control:
        control-enable: yes
        control-interface: 127.0.0.1
        control-port: 8952
        server-key-file: /etc/nsd/nsd_server.key
        server-cert-file: /etc/nsd/nsd_server.pem
        control-key-file: "/etc/nsd/nsd_control.key"
        control-cert-file: "/etc/nsd/nsd_control.pem"

zone:
        name: "sysdocu.kr"
        zonefile: "sysdocu.kr.zone"

 

도메인을 여러개 등록하려는 경우 nsd.conf 파일 하단 3줄 (zone 부분) 을 복사하여 아래로 붙여넣고 도메인과 zone 파일명을 적절히 수정하면 됩니다.

설정이 제대로 되었는지 명령을 통해 확인합니다.

출력되는 내용은 고쳐야 하는 내용이며, 아무런 결과가 나오지 않으면 정상입니다.

# nsd-checkconf /etc/nsd/nsd.conf

 

설정파일에 사용했던 key 파일과 pem 파일을 생성합니다.

# nsd-control-setup
setup in directory /etc/nsd
Certificate request self-signature ok
subject=CN = nsd-control
removing artifacts
Setup success. Certificates created. Enable in nsd.conf file to use

 

생성된 key 파일과 pem 파일을 확인합니다.

# ll /etc/nsd
total 52
drwxr-xr-x   2 root root  4096 12월 21 10:56 ./
drwxr-xr-x 108 root root  4096 12월 20 22:38 ../
-rw-r--r--   1 root root   666 12월 21 10:56 nsd.conf
-rw-r--r--   1 root root 16685 12월 20 21:50 nsd.conf.sample
-rw-------   1 root root  2484 12월 21 10:56 nsd_control.key
-rw-r-----   1 root root  1484 12월 21 10:56 nsd_control.pem
-rw-------   1 root root  2484 12월 21 10:56 nsd_server.key
-rw-r-----   1 root root  1529 12월 21 10:56 nsd_server.pem

 

zone 파일을 생성합니다.

# vi /etc/nsd/sysdocu.kr.zone

$ORIGIN sysdocu.kr.
$TTL 86400

@       IN        SOA        ns1.sysdocu.kr. admin.sysdocu.kr. (
        2023121901  ;Serial
        7200        ;Refresh
        3600        ;Retry
        1209600     ;Expire
        3600        ;Negative response caching TTL
)

@               NS      ns1.sysdocu.kr.
@               NS      ns2.sysdocu.kr.
@               MX      10 mail.sysdocu.kr.
@               A       115.68.249.232
ns1             A       115.68.249.232
ns2             A       115.68.249.232
www             A       115.68.249.232
mail            A       115.68.249.232
*               A       115.68.249.232

 

마찬가지로 zone 파일의 설정이 제대로 되었는지 체크해봅니다.

형식) nsd-checkzone {zone이름} {zone파일}

# nsd-checkzone sysdocu.kr /etc/nsd/sysdocu.kr.zone
zone sysdocu.kr is ok

 

NSD 사용자를 생성합니다.

# useradd -r nsd

 

* 참고

이제 데몬을 구동해야 하는데, 이전에 53번 포트를 systemd-resolved  데몬이 사용하고 있을 경우 nsd 가 시작되지 않으므로 해당 데몬을 중지하고, 서버에서 외부 DNS 를 사용하기 위해서 /etc/resolv.conf 파일 최상단에 nameserver 8.8.8.8 를 추가해 줍니다.

방법은 netstat -nltp 로 확인이 가능합니다.

예) systemctl stop systemd-resolved

 

nsd 데몬을 구동하고 상태를 확인합니다.

# nsd-control start

# nsd-control status

version: 4.8.0
verbosity: 0

 

 

3. 테스트

 

외부에서 도메인 질의를 합니다.

 

# nslookup sysdocu.kr 115.68.249.135
Server: 115.68.249.135
Address: 115.68.249.135#53

Name: sysdocu.kr
Address: 115.68.249.232

 

# nslookup -type=mx sysdocu.kr 115.68.249.135
Server: 115.68.249.135
Address: 115.68.249.135#53

sysdocu.kr mail exchanger = 10 mail.sysdocu.kr.

 

반응형

댓글()