나는 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