웹사이트 검색

Ubuntu 22.04에서 언바운드로 로컬 DNS 확인자를 설정하는 방법


이 페이지에서

  1. 전제 조건
  2. 언바운드 DNS 서버 설치
  3. 언바운드를 로컬 DNS 서버로 구성
    1. 기본 구성
    2. DNS 캐시 활성화\n
    3. 언바운드 프라이버시 및 보안\n
    4. 개인 네트워크 및 액세스 제어 목록(ACL) 정의
    5. 로컬 도메인 설정
    6. 언바운드 성능 조정 및 조정
    7. DoT(DNS-over-TLS)를 사용하여 DNS 확인자로 언바운드 설정\n

    1. Ubuntu 데스크톱의 경우
    2. 일반 Ubuntu 서버의 경우

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

    Unbound는 주로 NLnet Labs에서 개발하고 BSD 라이선스에 따라 배포되며 DNS 서버의 개방형 표준에 대한 최신 기능을 지원합니다. Unbound는 엄격한 감사를 받았으며 Linux, BSD 및 macOS에서 실행할 수 있습니다. Unbound는 대부분의 이러한 OS에서 사용할 수 있으며 시스템 패키지 관리자를 통해 설치할 수 있습니다.

    이 튜토리얼에서는 Unbound를 Ubuntu 22.04 서버에 설치하고 DNSSEC, DNS 캐시, 로컬 도메인 이름 및 하위 도메인, DNS-over-TLS(DoT)와 같은 일부 기능을 활성화하여 로컬 DNS 서버로 설정합니다. ). 또한 Rsyslog 및 logrotate를 통해 언바운드 로깅을 설정하고 Ubuntu 클라이언트 시스템을 설정하여 언바운드 설치를 확인합니다.

    전제 조건

    이 자습서를 완료하려면 다음 요구 사항이 있어야 합니다.

    • Ubuntu 22.04 서버 - 이 예에서는 호스트 이름이 unbound-server이고 IP 주소가 192.168.5.100인 Ubuntu 서버를 사용합니다.\n
    • sudo/root 관리자 권한이 있는 루트가 아닌 사용자.\n

    그게 다야. 이제 Unound 설치를 진행할 준비가 되었습니다.

    언바운드 DNS 서버 설치

    기본적으로 Ubuntu 리포지토리는 APT를 통해 쉽게 설치할 수 있는 언바운드 패키지를 제공합니다. 언바운드 설치를 시작하기 전에 다음 apt 명령을 실행하여 Ubuntu 패키지 인덱스를 업데이트하고 새로 고칩니다.

    sudo apt update

    이제 다음 명령을 통해 바인딩되지 않은 패키지의 세부 정보를 확인하십시오.

    sudo apt info unbound

    이 글을 쓰는 시점에서 기본 Ubuntu 리포지토리는 Unbound 1.13을 제공합니다.

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

    sudo apt install unbound

    산출:

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

    sudo systemctl is-enabled unbound
    sudo systemctl status unbound

    활성화된 출력은 언바운드가 활성화되었음을 확인하고 시스템 시작 시 자동으로 시작됩니다. 그리고 출력 활성(실행 중)은 Unbound가 실행 중임을 확인합니다.

    언바운드를 로컬 DNS 서버로 구성

    기본 언바운드 구성은 /etc/unbound/unbound.conf에 있습니다. 이 단계에서는 선호하는 편집기를 통해 기본 Unbound 구성 파일 /etc/unbound/unbound.conf를 수정합니다.

    이제 언바운드 DNS 서버의 기본 구성, DNS 캐시 활성화, 로컬 도메인 이름 및 하위 도메인 설정, DoT(DNS-over-TLS)가 활성화된 DNS 확인자로 언바운드 설정에 대해 알아봅니다.

    기본 구성

    원하는 편집기를 사용하여 기본 언바운드 구성 파일 /etc/unbound/unbound.conf를 엽니다. 이 예에서는 구성 파일 /etc/unbound/unbound.conf를 편집하기 위해 nano를 사용합니다.

    sudo nano /etc/unbound/unbound.conf

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

    #Adding DNS-Over-TLS support
    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 메시지에 대한 로깅을 활성화합니다.\n
    • 사용자 이름: 기본 사용자인 바인딩되지 않은 사용자로 실행합니다.\n
    • 디렉토리: 언바운드의 기본 작업 디렉토리는 /etc/unbound 디렉토리입니다.
    • tls-cert-bundle: 업스트림 연결을 인증하는 데 사용되는 인증서입니다. Debian 기반 배포에서 인증서 파일은 /etc/ssl/certs/ca-certificates.crt에 있습니다.
    • do-ip6: IPv6으로 Unbound를 실행하려면 yes를 사용하고 IPv6를 비활성화하려면 no를 설정합니다.\n
    • 인터페이스: 언바운드가 실행될 네트워크 인터페이스 또는 IP 주소. IP 주소 또는 eth0과 같은 인터페이스 이름을 사용할 수 있습니다. 또한 [이메일 보호]와 같은 형식을 추가하여 특정 포트에서 실행할 수 있습니다.\n
    • 포트: Unbound가 실행될 포트를 지정하고 이 포트는 클라이언트 연결을 처리합니다. 기본 DNS 포트는 53입니다.
    • prefetch: yes로 설정하면 거의 만료된 메시지 캐시 항목을 미리 가져올 수 있습니다.\n
    • root-hints: 루트 DNS 서버 세부 정보가 포함된 파일입니다. /usr/share/dns/root.hints 파일은 dns-root-data 패키지에서 제공합니다. 또한 https://www.internic.net/domain/named.cache에서 루트 힌트 파일을 다운로드할 수 있습니다.\n
    • harden-dnssec-stripped: dnssec-stripped 데이터 수신에 대해 강화하려면 yes로 설정합니다.\n

    DNS 캐시 활성화

    다음으로 다음 줄을 추가하여 언바운드 설치에서 DNS 캐시 쿼리를 활성화합니다.

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

    세부 매개변수:

    • cache-max-ttl: RRSets 및 DNS 캐시의 메시지에 대한 TTL 또는 TTL(Time To Live). 형식은 초 단위입니다.\n
    • cache-min-ttl: 캐시에 대한 최소 TTL(Time To Live)입니다. 기본값은 0이지만 11000초와 같이 원하는 대로 변경할 수 있습니다. 1시간 이상 설정하지 마십시오. 오래된 데이터로 인해 문제가 발생할 수 있습니다.\n

    제한 없는 개인 정보 보호 및 보안

    이제 다음 줄을 추가하여 Unbound에 대한 기본 개인 정보 보호 및 보안을 설정할 수 있습니다.

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

    세부 매개변수:

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

    개인 네트워크 및 액세스 제어 목록(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

        #control which clients are allowed to make (recursive) queries
        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: 인프라에서 개인 네트워크 서브넷을 정의합니다. 개인 도메인 및 로컬 데이터 이름만 이러한 개인 주소를 가질 수 있습니다.\n
    • access-control: 클라이언트가 바인딩되지 않은 서버에 대해 (재귀적) 쿼리를 수행할 수 있도록 액세스 제어를 정의합니다. 매개 변수 allow는 재귀를 활성화하고 allow_snoop는 재귀 및 비재귀를 모두 활성화합니다.\n

    로컬 도메인 설정

    개인 주소 및 액세스 제어 목록을 구성한 후 도메인 이름 로컬 영역을 정의합니다. 이것은 특히 로컬 네트워크에 여러 자체 호스팅 응용 프로그램이 있는 경우 매우 유용합니다. 도메인 이름 또는 하위 도메인을 쉽게 정의하고 특정 대상 IP 주소를 가리킬 수 있습니다.

    이 예에서는 정적 유형으로 도메인 home.lan에 대한 영역을 만든 다음 local-data 매개 변수를 통해 여러 하위 도메인을 만듭니다. 각 하위 도메인은 특정 IP 주소를 가리키며 local-data-ptr 매개변수를 통해 PTR 레코드를 생성합니다.

        # local zone
        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: 여기에서 로컬 도메인을 정의합니다.\n
    • local-data: 하위 도메인에 대한 A 레코드와 확인할 로컬 IP 주소를 정의합니다.\n
    • local-data-ptr: 하위 도메인에 대한 ptr 레코드를 정의합니다.\n

    언바운드 성능 조정 및 조정

    성능을 높이려면 다음 줄을 추가하십시오. 현재 환경에서 아래 매개변수를 조정할 수 있습니다.

        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 코어와 일치해야 합니다.\n
    • msg-cache-slabs: 메시지 캐시에 사용할 슬랩 수. 8로 설정하여 Unbound를 최적화하여 캐싱에 더 많은 메모리를 사용합니다.\n
    • rrset-cache-slabs: RRset 캐시에 사용할 슬랩 수입니다. RRSet 캐시에 더 많은 메모리를 사용하도록 Unbound를 최적화하려면 8로 설정하십시오.\n
    • infra-cache-slabs: 인프라 캐시에 사용할 슬랩 수입니다. 인프라 캐시에 더 많은 메모리를 사용하도록 Unbound를 최적화하려면 8로 설정합니다.\n
    • key-cache-slabs: 키 캐시에 사용할 슬랩 수입니다. 키 캐시에 더 많은 메모리를 사용하도록 Unbound를 최적화하려면 8로 설정하십시오.\n
    • rrset-cache-size: RRSet 캐시의 메모리 양을 지정합니다. 이 예에서는 256MB를 사용하며 기본값은 4MB입니다.\n
    • msg-cache-size: 메시지 캐시의 메모리 양을 지정합니다. 이 예에서는 128MB를 사용하며 기본값은 4MB입니다.\n
    • so-rcvbuf: DNS 포트 53/udp의 버퍼 크기를 8MB로 설정합니다. Ubuntu 시스템에서는 커널 매개변수 net.core.rmem_max에 더 높은 값을 설정해야 합니다.\n

    DoT(DNS-over-TLS)를 사용하여 DNS 확인자로 Unbound 설정

    마지막으로 새 섹션 forward-zone을 추가하여 Unbound를 로컬 네트워크의 DNS 확인자로 설정합니다. 이 예에서는 DoT(DNS-over-TLS)가 활성화된 Quad9 DNS 서버를 사용합니다.

    forward-zone:
        name: "."
        forward-ssl-upstream: yes
        ## Also add IBM IPv6 Quad9 over TLS
        forward-addr: #dns.quad9.net

    세부 매개변수:

    • forward-zone: 언바운드에 대한 포워드 영역을 정의합니다.\n
    • 이름: 모든 DNS 쿼리를 전달하려면 "."로 설정합니다.\n
    • forward-addr: 특정 전달자를 사용하여 모든 DNS 쿼리를 전달합니다. 이 예에서는 DoT(DNS-over-TLS)가 활성화된 Quad9 DNS를 사용합니다.\n

    완료되면 /etc/unbound/unbound.conf 파일을 저장하고 종료합니다. 언바운드 구성 파일이 수정되었으므로 이제 언바운드 서비스를 다시 시작하고 변경 사항을 적용할 수 있습니다.

    아래 명령 검사를 실행하고 바인딩되지 않은 구성을 확인합니다. 성공하면 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

    이를 통해 바인딩되지 않은 서비스는 포트 53의 IP 주소 192.168.5.100에서 새 구성으로 실행되어야 합니다.

    아래 ss 명령을 통해 시스템의 열린 포트 목록을 확인하십시오.

    ss -tulpn

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

    언바운드 구성을 완료했으므로 이제 UFW 방화벽을 설정하고 기본 DNS 포트 53을 엽니다.

    UFW 방화벽 설정

    Ubuntu에서 설치되는 기본 방화벽은 UFW입니다. 설치되었지만 여전히 비활성 상태입니다. 이 단계에서는 UFW 방화벽을 설정하고 Unbound용 UDP 포트를 엽니다.

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

    sudo ufw allow OpenSSH
    sudo ufw allow 53/udp

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

    sudo ufw enable

    출력 방화벽이 활성화되고 시스템 시작 시 활성화됨은 UFW 방화벽이 실행 중이고 활성화되었음을 확인합니다. 즉, 시스템 시작 시 UFW 방화벽이 자동으로 시작됩니다.

    산출:

    이제 아래 ufw 명령을 실행하여 UFW 방화벽의 상태를 확인하십시오. OpenSSH 서비스 및 DNS 포트 53/udp가 활성화된 상태에서 UFW 상태가 활성이라는 출력을 받아야 합니다.

    sudo ufw status

    산출:

    Rsyslog 및 Logrotate를 통해 바인딩되지 않은 로그 설정

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

    아래 명령을 실행하여 언바운드 서비스에 대한 새 Rsyslog 구성 /etc/rsyslog.d/unbound.conf를 추가합니다. 이를 통해 바인딩되지 않은 로그는 /var/log/unbound.log에 저장됩니다.

    cat <<EOF | sudo tee /etc/rsyslog.d/unbound.conf
    # Log messages generated by unbound application
    if $programname == 'unbound' then /var/log/unbound.log
    # stop processing it further
    & stop
    EOF

    다음으로 아래 명령을 실행하여 Unbound 서비스에 대한 logrotate 구성 /etc/logrotate.d/unbound를 추가합니다. 이렇게 하면 바인딩되지 않은 로그 파일 /var/log/unbound.log에 대한 로그 회전이 매일 생성됩니다.

    cat <<EOF | sudo tee /etc/logrotate.d/unbound
    /var/log/unbound.log {
      daily
      rotate 7
      missingok
      create 0640 root adm
      postrotate
        /usr/lib/rsyslog/rsyslog-rotate
      endscript
    }
    EOF

    이제 아래 systemctl 명령을 실행하여 Rsyslog 및 Logrotate 서비스를 다시 시작하십시오. 이렇게 하면 두 서비스에 대한 변경 사항이 적용됩니다.

    sudo systemctl restart rsyslog logrotate

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

    이를 통해 재시작 과정에서 Unbound 서비스에 의해 생성된 메시지는 /var/log/unbound.log 로그 파일에 저장됩니다. cat 명령을 실행하여 로그 파일 /var/log/unbound.log의 내용을 표시합니다.

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

    산출:

    클라이언트에서 DNS 확인자 설정

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

    이 단계에서는 Ubuntu Desktop 및 Ubuntu Server에서 DNS 확인자를 설정하는 방법을 배웁니다.

    우분투 데스크탑의 경우

    NetworkManager 서비스는 Ubuntu Desktop 버전의 기본 네트워킹을 처리합니다. 따라서 명령줄 GUI를 통해 또는 각 네트워크 인터페이스에 대한 구성 파일을 편집하여 수행할 수 있는 NetworkManager를 통해 DNS 확인자를 쉽게 설정할 수 있습니다.

    명령줄을 통해 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
    never-default=true

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

    일반 우분투 서버의 경우

    일반 Ubuntu 서버 시스템의 경우 백엔드 systemd-networkd 서비스를 사용하여 netplan에서 네트워킹을 처리합니다. 그리고 DNS 확인자 구성의 경우 systemd-networkd는 systemd-resolved를 사용합니다. 따라서 일반 Ubuntu 서버에 DNS 리졸버를 설정하려면 systemd-resolved 서비스를 통해 이를 달성할 수 있습니다.

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

    sudo nano /etc/systemd/resolved.conf

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

    [Resolve]
    DNS=192.168.5.100

    완료되면 파일을 저장하고 종료합니다.

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

    sudo systemctl restart systemd-resolved
    sudo resolvectl status

    성공하면 다음과 같은 출력이 표시됩니다. 기본 DNS 확인자가 바인딩되지 않은 로컬 DNS 서버 IP 주소 192.168.5.100으로 변경됩니다.

    언바운드 DNS 서버 테스트

    언바운드 DNS가 DNS 리졸버로 작동하는지 확인하려면 Ubuntu 클라이언트 시스템에서 아래의 dig 명령을 실행하십시오. 매개 변수 @192.168.5.100은 IP 주소 192.168.5.100에서 실행되는 바인딩되지 않은 DNS 서버를 사용하고 있는지 확인합니다.

    dig @192.168.5.100

    성공하면 루트 DNS 서버에서 아래 출력과 같은 응답을 받습니다. 또한 헤더 출력에서 광고(인증 데이터) 플래그를 확인할 수 있습니다. 이는 DNSSEC가 활성화되었음을 의미합니다.

    그런 다음 아래 명령을 실행하여 클라이언트가 인터넷에서 도메인 이름에 액세스할 수 있는지 확인합니다.

    dig github.com
    dig duckduckgo.com

    성공하면 도메인 github.com 및 duckduckgo.com에 대한 출력 세부 정보 DNS 레코드를 받아야 합니다. 쿼리에 응답하는 DNS 리졸버는 Unbound를 기본 리졸버로 사용하는 systemd-resolved인 127.0.0.53#53임을 알 수 있습니다. 또한 각 쿼리에 대한 쿼리 시간을 볼 수 있습니다. 도메인 github.com에 대한 쿼리 시간은 1748이고 duckduckgo.com에 대한 쿼리 시간은 999입니다.

    github.com의 출력:

    duckduckgo.com의 출력:

    위에서 dig 명령을 다시 실행하면 쿼리 시간이 줄어들어야 합니다. 그러면 쿼리가 캐시되었고 DNS 캐시가 작동 중임을 확인할 수 있습니다.

    dig github.com
    dig duckduckgo.com

    캐시가 저장된 후 Github에 액세스:

    캐시가 저장된 후 duckduckgo에 액세스:

    다음으로 아래의 dig 명령을 통해 로컬 도메인 또는 하위 도메인을 확인합니다. 성공하면 각 하위 도메인은 언바운드 구성 파일 /etc/unbound/unbound.conf에 구성된 올바른 IP 주소를 가리킵니다.

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

    산출:

    이제 아래 dig 명령을 실행하여 PTR 레코드가 올바른 도메인 이름을 가리키는지 확인하십시오.

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

    산출:

    tcpdump를 통해 DoT(DNS over TLS)를 확인할 수도 있습니다. 언바운드 서버에 tcpdump 패키지를 설치합니다.

    sudo apt install tcpdump

    메시지가 표시되면 y를 입력하고 ENTER를 눌러 계속 진행합니다.

    이제 아래 tcpdump 명령을 실행하여 DoT 포트 853이 있는 인터페이스 eth0에서 트래픽을 모니터링합니다. 이 예에서 언바운드 DNS는 인터페이스 eth0이 있는 IP 주소 192.168.5.100에서 실행됩니다.

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

    클라이언트 머신으로 이동하고 아래 명령을 실행하여 아래의 dig 명령을 통해 외부/인터넷 도메인 이름에 액세스합니다.

    dig google.com

    산출:

    그런 다음 언바운드 서버로 다시 이동하면 이제 tcpdump 출력에 이와 유사한 출력이 표시되어야 합니다.

    이것으로 이제 Ubuntu 서버에서 Unbound를 통해 로컬 DNS 서버를 설치하고 구성했습니다. 또한 NetworkManager 및 systemd-resolved를 통해 Ubuntu 데스크톱 및 서버에서 DNS 확인자를 구성했습니다.

    결론

    이 가이드에서는 Unbound Local DNS Server를 Ubuntu 22.04 서버에 설치했습니다. DNS 캐시, DNSSEC(기본적으로 활성화됨)를 활성화하고 개인 주소 및 ACL을 구성하고 로컬 영역을 통해 로컬 도메인을 추가한 다음 Unbound를 DoT(DNS-over-TLS)를 사용하는 DNS 확인자로 구성했습니다.

    또한 기본 DNS 프라이버시 및 보안을 구성하고 언바운드를 최적화했으며 rsyslog 및 logrotate를 통해 언바운드 로그를 구성했습니다.

    이 가이드를 마치면서 NetworkManager 및 systemd-resolved를 통해 Ubuntu 데스크톱 및 서버에서 DNS 확인자를 설정하는 방법도 배웠습니다. 그리고 DNS 서버를 확인하기 위한 dig 명령의 기본 사용법도 배웠습니다.