Bind9 명명 확인 영역에 실패했습니다. SOA 레코드가 영역 상단에 없습니다.

Bind9 명명 확인 영역에 실패했습니다. SOA 레코드가 영역 상단에 없습니다.

나는 1년 전에 완벽하게 Bind9을 설정했지만 내가 하고 있는 일을 정확히 문서화하는 것을 소홀히 했고 지금은 뭔가가 바뀌어서 고치려고 노력하고 있습니다. 문제는 먼저 LAN에서 DHCP/NS 호스트를 확인할 수 없는 DHCP 클라이언트에서 나타납니다.

바인딩 구성을 확인하면 named-checkzone오류가 발생합니다.

adam@gondolin:~$ sudo named-checkzone 192.168.0 /var/cache/bind/db.192.168.0
/var/cache/bind/db.192.168.0:2: SOA record not at top of zone (0.168.192.in-addr.arpa.192.168.0)
zone 192.168.0/IN: loading from master file /var/cache/bind/db.192.168.0 failed: not at top of zone
zone 192.168.0/IN: not loaded due to errors.

그리고 확실히 named영역을 로드하지 않습니다.

다음은 영역 파일입니다.

adam@gondolin:~$ sudo cat /var/cache/bind/db.192.168.0
$TTL 86400
0.168.192.in-addr.arpa  IN SOA  localdomain. root.localdomain. (
                                1123       ; serial
                                604800     ; refresh (1 week)
                                86400      ; retry (1 day)
                                2419200    ; expire (4 weeks)
                                86400      ; minimum (1 day)
                                )
                        NS      gondolin.localdomain.
$ORIGIN 0.168.192.in-addr.arpa.
adam@gondolin:~$ 

내 유일한 다른 영역 파일은 동일한 결과를 제공합니다.

adam@gondolin:~$ sudo cat /var/cache/bind/db.localdomain
$TTL 86400
localdomain             IN SOA  localdomain. root.localdomain. (
                                1650       ; serial
                                604800     ; refresh (1 week)
                                86400      ; retry (1 day)
                                2419200    ; expire (4 weeks)
                                86400      ; minimum (1 day)
                                )
                        NS      gondolin.localdomain.
$ORIGIN localdomain.
adam@gondolin:~$ 

바인딩 구성은 다음과 같습니다.

adam@gondolin:~$ cat /etc/bind/named.conf.options
acl goodclients {
    localhost;
    localnets;
};
options {
    listen-on {
        192.168.0.3;
        127.0.0.1;
    };
    listen-on-v6 {
        fe80::2a37:37ff:fe03:4225/64;
        ::1;
        #any;
    };
    directory "/var/cache/bind";
    forwarders {
           208.67.220.220;
           208.67.222.222;
    };
    allow-query {
           goodclients;
    };
    allow-recursion {
           goodclients;
    };
    allow-transfer {
           goodclients;
    };
    dnssec-enable no;
    #dnssec-validation auto;
    auth-nxdomain no;    # conform to RFC1035
};
adam@gondolin:~$ 

면적:

adam@gondolin:~$ cat /etc/bind/named.conf.local
//
// Do any local configuration here
//

// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";

include "/etc/bind/rndc.key";

zone "localdomain" {
    type master;
    notify no;
    file "/var/cache/bind/db.localdomain";
    allow-update {
        key "rndc-key";
    };
};

zone "0.168.192.in-addr.arpa" {
    type master;
    notify no;
    file "/var/cache/bind/db.192.168.0";
    allow-update {
        key "rndc-key";
    };
};
adam@gondolin:~$ 

여기에서 구성하는 것과 관련된 다른 항목이 무엇인지 잘 모르겠습니다. 그래서 제가 생각할 수 있는 모든 것을 보여 드리겠습니다.

adam@gondolin:~$ cat /etc/hostname
gondolin

adam@gondolin:~$ cat /etc/hosts
127.0.0.1   localhost localhost.localdomain gondolin
127.0.1.1   gondolin
192.168.0.3     gondolin.localdomain gondolin

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

resolv.conf문제가 될 수 있습니다:

adam@gondolin:~$ cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
# 127.0.0.53 is the systemd-resolved stub resolver.
# run "systemd-resolve --status" to see details about the actual nameservers.

nameserver 192.168.0.3
domain localdomain
search localdomain
adam@gondolin:~$ 

메시지가 관련이 없다고 생각했는데 systemd-resolve실행 상태를 보면 다음과 같습니다.

adam@gondolin:~$ sudo systemd-resolve --status
Failed to get global data: Unit dbus-org.freedesktop.resolve1.service not found.

호스트 머신에서 단순 조회를 실행합니다.

adam@gondolin:~$ dig gondolin

; <<>> DiG 9.11.3-1ubuntu1.9-Ubuntu <<>> gondolin
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 58942
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 083d35c6e1daa489584481225d74b44000978776cbc340e9 (good)
;; QUESTION SECTION:
;gondolin.          IN  A

;; AUTHORITY SECTION:
.           3600    IN  SOA a.root-servers.net. nstld.verisign-grs.com. 2019090800 1800 900 604800 86400

;; Query time: 7 msec
;; SERVER: 192.168.0.3#53(192.168.0.3)
;; WHEN: Sun Sep 08 08:56:48 BST 2019
;; MSG SIZE  rcvd: 140

adam@gondolin:~$ 

답변1

다음 영역 구성을 사용하십시오.

zone "0.168.192.in-addr.arpa" {
type master;
notify no;
file "/var/cache/bind/db.192.168.0";

영역 파일의 시작 부분은 다음과 같습니다.

$TTL 86400
0.168.192.in-addr.arpa  IN SOA  localdomain. root.localdomain. (

SOA 레코드는 실제로 0.168.192.in-addr.arpa.0.168.192.in-addr.arpa.이름이 잘못 지정된 영역을 참조합니다.

이유가 무엇인지 물어봐도 될까요?

생리를 놓쳤기 때문이죠.

영역 파일에서 마침표( )로 끝나지 않는 도메인 이름에는 자동으로 .영역이 추가됩니다. $ORIGIN명시적으로 지정하지 않으면 $ORIGIN구성문의 영역 이름이지만 zone구성문에서는 끝에 마침표가 있는 것으로 가정합니다. 영역 파일에서는 필요할 때 이를 명시적으로 지정해야 합니다.

이것을 깨닫고 나면 오류 메시지가 이해가 될 것입니다. BIND는 구성 라인과 동일한 도메인 이름을 가리키는 SOA 레코드를 볼 것으로 예상합니다 zone.

SOA 레코드의 첫 번째 줄은 다음과 같아야 합니다(사용되지 않은 경우 @).

0.168.192.in-addr.arpa.  IN SOA  localdomain. root.localdomain. (

.여기서는 0.168.192.in-addr.arpa 끝 부분의 마침표가 매우 중요합니다.

귀하의 localdomain지역구에도 동일한 문제가 있습니다. 그것은해야한다:

localdomain.             IN SOA  localdomain. root.localdomain. (

답변2

이 주제에 대한 수많은 웹 페이지 중에서 마침내 무엇을, 왜 설명하고 해결책을 제공하는 다음 페이지를 찾았습니다.

ftp://ftp.iitb.ac.in/LDP/en/DNS-HOWTO/DNS-HOWTO-5.html

위 구성에서 내 실수는 네임서버를 올바르게 선언해야 하는 영역 파일에 있었습니다. 위 구성에는 불필요한 항목이 너무 많았습니다. 이것은 작동하거나 적어도 다음을 만족합니다 named-checkzone.

$TTL 3D
@                       IN SOA  gondolin.localdomain. root.gondolin.localdomain. (
                                201909091  ; serial
                                8H         ; refresh (8 hours)
                                2H         ; retry (2 hours)
                                4W         ; expire (4 weeks)
                                1D         ; minimum (1 day)
                                )
                        NS      gondolin
gondolin                A       192.168.0.3

관련 정보