DNS 설정 · 12 min read · Sep 08, 2025

우분투 22.04에서 Unbound로 로컬 DNS 리졸버 설정하는 방법

Unbound는 유효성 검사, 재귀 및 캐싱 DNS 리졸버로 사용할 수 있는 무료 오픈 소스 DNS 서버 소프트웨어입니다. 이는 DNS-over-TLS (DoT), DNS-over-HTTPS (DoH), 쿼리 이름 최소화, DNSSEC 검증 캐시의 공격적인 사용 및 권한 영역 지원을 지원하는 기능이 풍부한 DNS 서버입니다. Unbound는 DNS의 개인 정보 보호 및 보안에 중점을 두고 있지만 속도와 성능을 희생하지 않습니다.

Unbound는 주로 NLnet Labs에 의해 개발되며 BSD 라이센스 하에 배포되며, DNS 서버의 개방형 표준에서 현대적인 기능을 지원합니다. Unbound는 철저하게 감사되었으며 Linux, BSD 및 macOS에서 실행할 수 있습니다. Unbound는 이러한 OS의 대부분에서 사용할 수 있으며 시스템 패키지 관리자를 통해 설치할 수 있습니다.

이 튜토리얼에서는 우분투 22.04 서버에 Unbound를 설치하고 DNSSEC, DNS 캐시, 로컬 도메인 이름 및 하위 도메인, DNS-over-TLS (DoT)와 같은 몇 가지 기능을 활성화하여 로컬 DNS 서버로 설정합니다. 또한 Rsyslog 및 logrotate를 통해 Unbound 로깅을 설정하고 Unbound 설치를 확인하기 위해 우분투 클라이언트 머신을 설정합니다.

전제 조건

이 튜토리얼을 완료하려면 다음 요구 사항이 필요합니다:

  • 우분투 22.04 서버 - 이 예제에서는 호스트 이름이 ‘unbound-server‘이고 IP 주소가 ‘192.168.5.100‘인 우분투 서버를 사용합니다.
  • sudo/root 관리자 권한이 있는 비루트 사용자.

그게 전부입니다. 이제 Unbound 설치를 진행할 준비가 되었습니다.

Unbound DNS 서버 설치

기본적으로 우분투 저장소는 APT를 통해 쉽게 설치할 수 있는 Unbound 패키지를 제공합니다. Unbound 설치를 시작하기 전에 다음 apt 명령을 실행하여 우분투 패키지 인덱스를 업데이트하고 새로 고칩니다.

sudo apt update

이제 다음 명령을 통해 Unbound 패키지의 세부 정보를 확인합니다.

sudo apt info unbound

이 글을 작성할 당시 기본 우분투 저장소는 Unbound 1.13을 제공합니다.

show unmbound paackage

다음으로, 다음 apt 명령을 사용하여 Unbound를 설치합니다. 프롬프트가 표시되면 y를 입력하여 확인하고 ENTER를 눌러 진행합니다.

sudo apt install unbound

출력:

install unbound

Unbound가 설치되면 아래 systemctl 명령을 실행하여 Unbound 서비스를 확인합니다.

sudo systemctl is-enabled unbound  
sudo systemctl status unbound

출력 ‘ enabled ‘는 Unbound가 활성화되어 있으며 시스템 시작 시 자동으로 시작됨을 확인합니다. 그리고 출력 ‘ active (running) ‘는 Unbound가 실행 중임을 확인합니다.

verify unbound

Unbound를 로컬 DNS 서버로 구성하기

기본 Unbound 구성은 ‘/etc/unbound/unbound.conf’에 위치합니다. 이 단계에서는 선호하는 편집기를 사용하여 기본 Unbound 구성 파일 ‘/etc/unbound/unbound.conf’를 수정합니다.

이제 Unbound DNS 서버의 기본 구성에 대해 배우고, DNS 캐시를 활성화하고, 로컬 도메인 이름 및 하위 도메인을 설정하고, DoT (DNS-over-TLS)가 활성화된 DNS 리졸버로 Unbound를 설정합니다.

기본 구성

선호하는 편집기를 사용하여 기본 Unbound 구성 파일 ‘/etc/unbound/unbound.conf’를 엽니다. 이 예제에서는 nano를 사용하여 구성 파일 ‘/etc/unbound/unbound.conf’를 편집합니다.

sudo nano /etc/unbound/unbound.conf

파일에 다음 줄을 추가합니다. ‘ server ‘ 섹션에서는 기본 Unbound 구성을 설정할 수 있습니다. 이 예제에서는 기본 포트 53로 로컬 IP 주소 ‘192.168.5.100‘에서 Unbound를 실행합니다. 또한 Syslog 메시지에 로깅을 설정하고 IPv6를 비활성화합니다. 마지막으로, ‘ root-hints ‘ 파일을 통해 루트 DNS 서버에서 모든 호스트 이름을 재귀적으로 쿼리하도록 Unbound를 설정합니다.

#DNS-Over-TLS 지원 추가  
server:  
    use-syslog: yes  
    username: "unbound"  
    directory: "/etc/unbound"  
    tls-cert-bundle: /etc/ssl/certs/ca-certificates.crt  
     
    do-ip6: no  
    interface: 192.168.5.100  
    port: 53  
    prefetch: yes  
  
    root-hints: /usr/share/dns/root.hints  
    harden-dnssec-stripped: yes

세부 매개변수:

  • use-syslog: Syslog 메시지에 로깅을 활성화합니다.
  • username: 기본 사용자 unbound로 실행합니다.
  • directory: Unbound의 기본 작업 디렉토리는 ‘/etc/unbound’ 디렉토리입니다.
  • tls-cert-bundle: 업스트림에서 연결을 인증하는 데 사용되는 인증서입니다. Debian 기반 배포에서는 인증서 파일이 ‘/etc/ssl/certs/ca-certificates.crt’에 위치합니다.
  • do-ip6: Unbound를 IPv6로 실행하려면 ‘yes‘로 설정하거나 IPv6를 비활성화하려면 ‘no‘로 설정합니다.
  • interface: Unbound가 실행될 네트워크 인터페이스 또는 IP 주소입니다. IP 주소 또는 ‘ eth0 ‘와 같은 인터페이스 이름을 사용할 수 있습니다. 또한 ‘ IP-ADDRESS@PORT ‘와 같은 형식을 추가하여 특정 포트에서 실행할 수 있습니다.
  • port: Unbound가 실행될 포트를 지정하며, 이 포트는 클라이언트의 연결을 처리합니다. 기본 DNS 포트는 53입니다.
  • prefetch: 거의 만료된 메시지 캐시 항목의 프리패칭을 활성화하려면 ‘yes‘로 설정합니다.
  • root-hints: 루트 DNS 서버 세부정보를 포함하는 파일입니다. 파일 ‘/usr/share/dns/root.hints’는 ‘dns-root-data‘ 패키지에서 제공됩니다. 또한 여기에서 root-hints 파일을 다운로드할 수 있습니다 ‘ https://www.internic.net/domain/named.cache ‘.
  • harden-dnssec-stripped: dnssec-stripped 데이터를 수신하는 것을 강화하려면 ‘yes‘로 설정합니다.

DNS 캐시 활성화

다음으로, Unbound 설치에서 DNS 캐시 쿼리를 활성화하려면 다음 줄을 추가합니다.

    cache-max-ttl: 14400  
    cache-min-ttl: 11000

세부 매개변수:

  • cache-max-ttl: DNS 캐시에서 RRSets 및 메시지의 TTL 또는 생존 시간입니다. 형식은 초 단위입니다.
  • cache-min-ttl: 캐시의 최소 생존 시간입니다. 기본값은 0이지만, ‘ 11000 ‘초와 같은 값으로 변경할 수 있습니다. 1시간 이상 설정하지 마십시오. 그렇지 않으면 오래된 데이터로 인해 문제가 발생할 수 있습니다.

Unbound 개인 정보 보호 및 보안

이제 Unbound의 기본 개인 정보 보호 및 보안을 설정하기 위해 다음 줄을 추가할 수 있습니다.

    aggressive-nsec: yes  
    hide-identity: yes  
    hide-version: yes  
    use-caps-for-id: yes

세부 매개변수:

  • aggressive-nsec: DNSSEC NSEC 체인을 사용하여 NXDOMAIN 및 기타 거부를 합성하기 위해 공격적인 NSEC을 활성화하려면 ‘yes‘로 설정합니다. ‘NSEC’에 대한 IETF 웹 페이지를 확인하십시오 https://www.ietf.org/archive/id/draft-ietf-dnsop-nsec-ttl-00.html.
  • hide-identity: id.server 또는 hostname.bind에 대한 쿼리에서 응답을 비활성화하려면 ‘yes‘로 설정합니다.
  • hide-version: version.server 및 version.bind 쿼리를 비활성화하려면 ‘yes‘로 설정합니다.
  • use-caps-for-id: 스푸핑 시도를 방지하기 위해 쿼리에서 ‘0x100-encoded‘ 사용을 활성화하려면 ‘yes‘로 설정합니다.

개인 네트워크 및 접근 제어 목록 (ACL) 정의

다음으로, 네트워크의 개인 주소 및 ACL(접근 제어 목록)을 정의해야 합니다. 아래 줄에서 로컬 서브넷을 현재 네트워크 환경에 맞게 변경해야 합니다.

    private-address: 192.168.0.0/16  
    private-address: 192.168.5.0/24  
    private-address: 169.254.0.0/16  
    private-address: 172.16.0.0/12  
    private-address: 10.0.0.0/8  
    private-address: fd00::/8  
    private-address: fe80::/10  
  
    #어떤 클라이언트가 (재귀적) 쿼리를 할 수 있는지 제어합니다.  
    access-control: 127.0.0.1/32 allow_snoop  
    access-control: ::1 allow_snoop  
    access-control: 127.0.0.0/8 allow  
    access-control: 192.168.5.0/24 allow

세부 매개변수:

  • private-address: 인프라에서 개인 네트워크 서브넷을 정의합니다. ‘ private-domain ‘ 및 ‘local-data’ 이름만 이러한 개인 주소를 가질 수 있습니다.
  • access-control: 클라이언트가 Unbound 서버에 (재귀적) 쿼리를 할 수 있는 접근 제어를 정의합니다. 매개변수 ‘ allow ‘는 재귀를 활성화하고, ‘allow_snoop ‘는 재귀 및 비재귀를 모두 활성화합니다.

로컬 도메인 설정

개인 주소 및 접근 제어 목록을 구성한 후, 도메인 이름의 로컬 영역을 정의합니다. 이는 특히 로컬 네트워크에서 여러 자가 호스팅 애플리케이션이 있는 경우 매우 유용합니다. 도메인 이름이나 하위 도메인을 쉽게 정의하고 특정 대상 IP 주소로 포인팅할 수 있습니다.

이 예제에서는 도메인 ‘home.lan‘에 대한 영역을 생성하고, 유형을 ‘static‘으로 설정한 다음, ‘ local-data ‘ 매개변수를 통해 여러 하위 도메인을 생성합니다. 각 하위 도메인은 특정 IP 주소로 포인팅되며, ‘ local-data-ptr ‘ 매개변수를 통해 PTR 레코드를 생성합니다.

    # 로컬 영역  
    local-zone: "home.lan." static  
  
    local-data: "firewall.home.lan.  IN A 10.0.0.1"  
    local-data: "vault.home.lan.    IN A 10.0.0.2"  
    local-data: "media.home.lan.   IN A 10.0.0.3"  
    local-data: "docs.home.lan.       IN A 10.0.0.4"  
    local-data: "wiki.home.lan.     IN A 10.0.0.5"  
  
    local-data-ptr: "10.0.0.1  firewall.home.lan"  
    local-data-ptr: "10.0.0.2  vault.home.lan"  
    local-data-ptr: "10.0.0.3  media.home.lan"  
    local-data-ptr: "10.0.0.4  docs.home.lan"  
    local-data-ptr: "10.0.0.5  wiki.home.lan"

세부 매개변수:

  • local-zone: 여기에서 로컬 도메인을 정의합니다.
  • local-data: 하위 도메인에 대한 A 레코드를 정의하고 어떤 로컬 IP 주소가 해결될지를 정의합니다.
  • local-data-ptr: 하위 도메인에 대한 ptr 레코드를 정의합니다.

Unbound 성능 조정 및 조정

더 나은 성능을 얻기 위해 다음 줄을 추가합니다. 아래 매개변수는 현재 환경에 맞게 조정할 수 있습니다.

    num-threads: 4  
    msg-cache-slabs: 8  
    rrset-cache-slabs: 8  
    infra-cache-slabs: 8  
    key-cache-slabs: 8  
    rrset-cache-size: 256m  
    msg-cache-size: 128m  
    so-rcvbuf: 8m

세부 매개변수:

  • num-threads: 생성될 스레드의 수입니다. 값은 서버 CPU 코어와 일치해야 합니다.
  • msg-cache-slabs: 메시지 캐시에 사용할 슬랩의 수입니다. Unbound가 캐싱을 위해 더 많은 메모리를 사용하도록 최적화하려면 8로 설정합니다.
  • rrset-cache-slabs: RRset 캐시에 사용할 슬랩의 수입니다. Unbound가 RRSet 캐싱을 위해 더 많은 메모리를 사용하도록 최적화하려면 8로 설정합니다.
  • infra-cache-slabs: 인프라 캐시에 사용할 슬랩의 수입니다. Unbound가 인프라 캐싱을 위해 더 많은 메모리를 사용하도록 최적화하려면 8로 설정합니다.
  • key-cache-slabs: 키 캐시에 사용할 슬랩의 수입니다. Unbound가 키 캐싱을 위해 더 많은 메모리를 사용하도록 최적화하려면 8로 설정합니다.
  • rrset-cache-size: RRSet 캐시에 대한 메모리 양을 지정합니다. 이 예제에서는 256MB를 사용하며, 기본값은 4MB에 불과합니다.
  • msg-cache-size: 메시지 캐시에 대한 메모리 양을 지정합니다. 이 예제에서는 128MB를 사용하며, 기본값은 4MB에 불과합니다.
  • so-rcvbuf: DNS 포트 53/udp에 대한 버퍼 크기를 8MB로 설정합니다. 우분투 시스템에서는 ‘ net.core.rmem_max ‘에 대한 커널 매개변수를 더 높은 값으로 설정해야 합니다.

DNS-over-TLS (DoT)로 DNS 리졸버로 Unbound 설정하기

마지막으로, 로컬 네트워크에 대한 DNS 리졸버로 Unbound를 설정하기 위해 새로운 섹션 ‘forward-zone’을 추가합니다. 이 예제에서는 DoT (DNS-over-TLS)가 활성화된 Quad9 DNS 서버를 사용합니다.

forward-zone:  
    name: "."  
    forward-ssl-upstream: yes  
    ## IBM IPv6 Quad9 over TLS 추가  
    forward-addr: 9.9.9.9@853#dns.quad9.net  
    forward-addr: 149.112.112.112@853#dns.quad9.net

세부 매개변수:

  • forward-zone: Unbound의 포워드 존을 정의합니다.
  • name: 모든 DNS 쿼리를 포워드하기 위해 ‘.‘로 설정합니다.
  • forward-addr: 모든 DNS 쿼리를 포워드하기 위해 특정 포워더를 사용합니다. 이 예제에서는 DoT (DNS-over-TLS)가 활성화된 Quad9 DNS를 사용합니다.

작업이 끝나면 파일 ‘/etc/unbound/unbound.conf’를 저장하고 종료합니다. Unbound 구성 파일이 수정되었으므로 이제 Unbound 서비스를 재시작하고 변경 사항을 적용할 수 있습니다.

아래 명령을 실행하여 Unbound 구성을 확인하고 검증합니다. 성공하면 ‘ unbound-checkconf: no errors in /etc/unbound/unbound.conf’와 같은 출력을 받아야 합니다.

sudo unbound-checkconf

다음으로, 아래 명령을 실행하여 ‘/etc/sysctl.conf’ 파일을 통해 시스템의 기본 ‘net.core.rmem_max’를 증가시킵니다. 그런 다음 ‘ sysctl ‘ 명령을 통해 변경 사항을 적용합니다.

echo "net.core.rmem_max= 8388608" >> /etc/sysctl.conf  
sudo sysctl -p

그 후, 아래 systemctl 명령을 실행하여 Unbound 서비스를 재시작하고 변경 사항을 적용합니다.

sudo systemctl restart unbound

이로써 Unbound 서비스는 IP 주소 192.168.5.100에서 포트 53으로 새 구성으로 실행되고 있어야 합니다.

configure unbound

아래 ss 명령을 통해 시스템에서 열린 포트 목록을 확인합니다.

ss -tulpn

다음과 같은 출력을 받게 됩니다 - 기본 DNS udp 포트 53는 Unbound 서비스에서 사용됩니다.

check unbound port

이제 Unbound 구성을 완료했으므로 UFW 방화벽을 설정하고 기본 DNS 포트 53을 열겠습니다.

UFW 방화벽 설정하기

우분투에서 설치된 기본 방화벽은 UFW입니다. 설치되어 있지만 여전히 비활성 상태입니다. 이 단계에서는 UFW 방화벽을 설정하고 Unbound를 위한 UDP 포트를 엽니다.

아래 명령을 실행하여 UFW를 통해 OpenSSH 서비스를 엽니다. 그런 다음, UFW 방화벽에 DNS 포트 53/udp를 추가할 수 있습니다.

sudo ufw allow OpenSSH  
sudo ufw allow 53/udp

다음으로, 아래 명령을 실행하여 UFW 방화벽 서비스를 시작하고 활성화합니다. 프롬프트가 표시되면 y를 입력하여 확인하고 ENTER를 눌러 진행합니다.

sudo ufw enable

출력 ‘ Firewall is active and enabled on system startup ‘는 UFW 방화벽이 실행 중이며 활성화되었음을 확인합니다. 즉, UFW 방화벽은 시스템 시작 시 자동으로 시작됩니다.

출력:

setup ufw

이제 아래 ufw 명령을 실행하여 UFW 방화벽의 상태를 확인합니다. UFW 상태가 ‘ active ‘이며 OpenSSH 서비스와 DNS 포트 53/udp가 활성화되어 있다는 출력을 받아야 합니다.

sudo ufw status

출력:

verify ufw

Rsyslog 및 Logrotate를 통한 Unbound 로그 설정하기

UFW 방화벽을 구성한 후, 이제 rsyslog 및 logrotate를 통해 Unbound의 로그 파일을 설정합니다. rsyslog 서비스는 Unbound에 대한 특정 로그 파일을 생성하고 logrotate는 특정 시간에 Unbound 로그 파일을 회전시킵니다.

아래 명령을 실행하여 Unbound 서비스에 대한 새로운 Rsyslog 구성 ‘/etc/rsyslog.d/unbound.conf’를 추가합니다. 이를 통해 Unbound 로그는 ‘/var/log/unbound.log‘에 저장됩니다.

cat <

다음으로, Unbound 서비스에 대한 로그 회전 구성을 ‘/etc/logrotate.d/unbound ‘에 추가하기 위해 아래 명령을 실행합니다. 이는 Unbound 로그 파일 ‘/var/log/unbound.log‘에 대한 로그 회전을 매일 생성합니다.

cat <

setup logging unbound

이제 아래 systemctl 명령을 실행하여 Rsyslog 및 Logrotate 서비스를 재시작합니다. 이는 두 서비스에 대해 변경한 사항을 적용합니다.

sudo systemctl restart rsyslog logrotate

마지막으로, 아래 명령을 사용하여 Unbound 서비스를 재시작하여 로그 파일을 확인할 수 있습니다.

이로써 Unbound 서비스가 재시작 과정에서 생성한 메시지는 로그 파일 ‘/var/log/unbound.log‘에 저장됩니다. 아래 명령을 실행하여 로그 파일 ‘/var/log/unbound.log‘의 내용을 표시합니다.

sudo systemctl restart unbound  
cat /var/log/unbound.log

출력:

check unbound log

클라이언트에서 DNS 리졸버 설정하기

클라이언트 측에서는 DNS 리졸버를 설정하고 Unbound를 클라이언트 시스템의 기본 리졸버로 사용해야 합니다. 우분투 배포에서는 NetworkManager, systemd-resolved 서비스 또는 ‘/etc/resolv.conf’에 대한 정적 파일을 설정할 수 있습니다.

이 단계에서는 우분투 데스크탑 및 우분투 서버에서 DNS 리졸버를 설정하는 방법을 배웁니다.

우분투 데스크탑의 경우

NetworkManager 서비스는 우분투 데스크탑 버전의 기본 네트워킹을 처리합니다. 따라서 NetworkManager를 통해 DNS 리졸버를 쉽게 설정할 수 있으며, 이는 명령줄 GUI를 통해 수행하거나 각 네트워크 인터페이스에 대한 구성 파일을 편집하여 수행할 수 있습니다.

명령줄을 통해 DNS 리졸버를 설정하려면 nmcli를 사용할 수 있습니다. 아래 명령을 실행하여 특정 네트워크 인터페이스에 대한 DNS 리졸버를 설정합니다. 인터페이스 이름을 eth0로 교체할 수 있습니다.

sudo nmcli connection modify eth0 ipv4.dns "192.168.5.100"

NetworkManager에서 관리하는 모든 인터페이스는 ‘/etc/NetworkManager/system-connections’ 디렉토리에 ‘.nmconnection ‘ 형식으로 저장된 특정 구성 파일을 가지고 있습니다.

선호하는 텍스트 편집기를 사용하여 인터페이스 구성을 수정하고 ‘ [ipv4] ‘ 섹션에 다음 줄을 추가할 수 있습니다.

[ipv4]  
dns=192.168.5.100  
ignore-auto-dns=true  
ever-default=true

GUI 애플리케이션을 사용하는 것을 선호하는 경우, 머신에서 NetworkManager 애플리케이션을 열고 수정하려는 인터페이스 이름을 편집합니다. ‘IPv4 Settings ‘ 탭을 클릭하고 로컬 DNS 서버를 입력합니다. 그런 다음 저장을 클릭하여 확인합니다.

dns resolver guyide network manager

일반 우분투 서버의 경우

일반 우분투 서버 머신의 경우, 네트워킹은 netplan과 백엔드 systemd-networkd 서비스에 의해 처리됩니다. DNS 리졸버 구성의 경우, systemd-networkd는 systemd-resolved를 사용합니다. 따라서 일반 우분투 서버에서 DNS 리졸버를 설정하려면 systemd-resolved 서비스를 통해 이를 달성할 수 있습니다.

선호하는 편집기를 사용하여 systemd-resolved 구성 파일을 엽니다. 이 예제에서는 nano 편집기를 사용합니다.

sudo nano /etc/systemd/resolved.conf

[Resolve] ‘ 섹션에서 ‘ DNS ‘ 매개변수의 주석을 제거하고 로컬 DNS 서버의 IP 주소를 입력합니다.

[Resolve]  
DNS=192.168.5.100

작업이 끝나면 파일을 저장하고 종료합니다.

이제 아래 명령을 실행하여 systemd-resolved 서비스를 재시작하고 변경 사항을 적용합니다. 그런 다음, 아래 resolvectl 명령을 통해 DNS 리졸버의 상태를 확인할 수 있습니다.

sudo systemctl restart systemd-resolved  
sudo resolvectl status

성공하면 다음과 같은 출력이 표시됩니다 - 기본 DNS 리졸버가 Unbound 로컬 DNS 서버 IP 주소 192.168.5.100으로 변경되었습니다.

dns resolver systemd resolved

Unbound DNS 서버 테스트하기

Unbound DNS가 DNS 리졸버로 작동하는지 확인하려면 아래 dig 명령을 우분투 클라이언트 머신에서 실행합니다. 매개변수 ‘ @192.168.5.100 ‘는 IP 주소 ‘ 192.168.5.100 ‘에서 실행 중인 Unbound DNS 서버를 사용하고 있음을 보장합니다.

dig @192.168.5.100

성공하면 다음과 같은 출력으로 루트 DNS 서버에서 응답을 받게 됩니다. 또한 헤더 출력에서 ‘ ad ‘ ( authentic data) 플래그가 표시되며, 이는 DNSSEC가 활성화되었음을 의미합니다.

verify dig dns server

다음으로, 아래 명령을 실행하여 클라이언트가 인터넷의 도메인 이름에 접근할 수 있는지 확인합니다.

dig github.com  
dig duckduckgo.com

성공하면 도메인 ‘github.com‘ 및 ‘duckduckgo.com‘에 대한 DNS 레코드 세부 정보를 받게 됩니다. 쿼리를 응답하는 DNS 리졸버가 ‘127.0.0.53#53’인 것을 볼 수 있으며, 이는 systemd-resolved가 Unbound를 기본 리졸버로 사용하고 있음을 나타냅니다. 또한 각 쿼리에 대한 ‘Query time ‘을 볼 수 있으며, 도메인 ‘github.com‘에 대한 ‘ Query time ‘은 ‘ 1748 ‘이고, ‘duckduckgo.com‘에 대한 것은 ‘ 999 ‘입니다.

github.com에 대한 출력:

dig github.com

duckduckgo.com에 대한 출력:

dig ducducgo before

위의 dig 명령을 다시 실행하면 ‘Query time’이 줄어들어야 합니다. 이는 쿼리가 캐시되었음을 확인하며, DNS 캐시가 작동하고 있음을 나타냅니다.

dig github.com  
dig duckduckgo.com

캐시가 저장된 후 Github에 접근:

dns cache verify

캐시가 저장된 후 duckduckgo에 접근:

after stored

다음으로, 아래 dig 명령을 실행하여 로컬 도메인 또는 하위 도메인을 확인합니다. 성공하면 각 하위 도메인이 Unbound 구성 파일 ‘/etc/unbound/unbound.conf‘에 구성된 올바른 IP 주소로 포인팅됩니다.

dig firewall.home.lan +short  
dig vault.home.lan +short  
dig media.home.lan +short

출력:

verify local domains

이제 아래 dig 명령을 실행하여 PTR 레코드가 올바른 도메인 이름을 가리키고 있는지 확인합니다.

dig -x 10.0.0.1 +short  
dig -x 10.0.0.2 +short  
dig -x 10.0.0.3 +short

출력:

test ptr records

또한 DoT (DNS over TLS)를 tcpdump를 통해 확인할 수 있습니다. Unbound 서버에 ‘ tcpdump ‘ 패키지를 설치합니다.

sudo apt install tcpdump

프롬프트가 표시되면 y를 입력하고 ENTER를 눌러 진행합니다.

install tcpdump

이제 아래 tcpdump 명령을 실행하여 DoT 포트 853에서 인터페이스 ‘ eth0 ‘의 트래픽을 모니터링합니다. 이 예제에서는 Unbound DNS가 IP 주소 ‘ 192.168.5.100 ‘에서 실행되고 있으며 인터페이스는 ‘ eth0 ‘입니다.

tcpdump -vv -x -X -s 1500 -i eth0 'port 853'

클라이언트 머신으로 이동하여 아래 명령을 실행하여 외부/인터넷 도메인 이름에 접근합니다.

dig google.com

출력:

dig google

그 후, Unbound 서버로 돌아가면 tcpdump 출력에서 다음과 유사한 출력을 얻을 수 있습니다.

dns encrypted with DoT

이로써 Unbound를 통해 우분투 서버에서 로컬 DNS 서버를 설치하고 구성하였습니다. 또한 NetworkManager 및 systemd-resolved를 통해 우분투 데스크탑 및 서버에서 DNS 리졸버를 구성하였습니다.

결론

이 가이드에서는 우분투 22.04 서버에 Unbound 로컬 DNS 서버를 설치했습니다. DNS 캐시, DNSSEC(기본적으로 활성화됨)을 활성화하고, 개인 주소 및 ACL을 구성하고, local-zone을 통해 로컬 도메인을 추가한 다음, DoT(DNS-over-TLS)와 함께 DNS 리졸버로 Unbound를 구성했습니다.

또한 기본 DNS 개인 정보 보호 및 보안을 구성하고 Unbound를 최적화하며 rsyslog 및 logrotate를 통해 Unbound 로그를 구성했습니다.

이 가이드의 끝에서, NetworkManager 및 systemd-resolved를 통해 우분투 데스크탑 및 서버에서 DNS 리졸버를 설정하는 방법을 배웠습니다. 또한 DNS 서버를 확인하기 위한 dig 명령의 기본 사용법도 배웠습니다.

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.