![Bind 无法解析域名(仅可转发)](https://linux22.com/image/1620394/Bind%20%E6%97%A0%E6%B3%95%E8%A7%A3%E6%9E%90%E5%9F%9F%E5%90%8D%EF%BC%88%E4%BB%85%E5%8F%AF%E8%BD%AC%E5%8F%91%EF%BC%89.png)
我跟着本教程在我的 Fedora 31 机器上也能做到。我有一个运行在 192.168.1.1 上的路由器和两台具有固定 IP 地址的机器:mando (192.168.1.2) 和 carbon (192.168.1.3)。我想让 mando 成为 DNS 服务器。
我像这样配置了我的新的 DNS 服务器 (mando):
// /etc/named.conf
options {
listen-on port 53 { 127.0.0.1; 192.168.1.2; };
// ...
allow-query { localhost; 192.168.1.0/24; };
// ...
};
// ...
zone "mando.intranet" IN {
type master;
file "forward.intranet";
allow-update { none; };
};
zone "1.168.192.in-addr.arpa" IN {
type master;
file "reverse.intranet";
allow-update { none; };
};
// ...
然后,根据说明,我使用以下配置创建了区域文件:
$ pwd
/var/named
$ sudo cat forward.intranet
$TTL 86400
$ORIGIN mando.intranet.
@ IN SOA mando.intranet. root.intranet. (
2011071001 ;Serial
3600 ;Refresh
1800 ;Retry
604800 ;Expire
86400 ;Minimum TTL
)
@ IN NS mando.intranet.
@ IN A 192.168.1.2
mando.intranet IN A 192.168.1.2
carbon.intranet IN A 192.168.1.3
$ sudo cat reverse.intranet
$TTL 86400
@ IN SOA mando.intranet. root.intranet. (
2011071001 ;Serial
3600 ;Refresh
1800 ;Retry
604800 ;Expire
86400 ;Minimum TTL
)
@ IN NS mando.intranet.
@ IN PTR intranet.
mando IN A 192.168.1.2
carbon IN A 192.168.1.3
2 IN PTR mando.intranet.
3 IN PTR carbon.intranet.
我还在两个主机的 /etc/resolv.conf 上将 DNS 服务器设置为 192.168.1.2,并在 DNS 服务器上(重新)启动绑定。
结果:
- 两个服务器都可以解析万字串,正向和反向。
- 两台服务器都可以正向和反向解析互联网网站。
- 两台服务器都可以解决碳只能反向。
- 两台服务器无法解决碳(192.168.1.3)。
我到处都找过了,但还是没能找出我可能遗漏了什么。免责声明:这是我第一次设置 DNS 服务器。
为了澄清起见,还有更多输出:
[mando ~]$ dig carbon.intranet
; <<>> DiG 9.11.10-RedHat-9.11.10-1.fc29 <<>> carbon.intranet
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 138
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: fe8f986e44b3c029e54805715e8fc6504fb2c9b9451b2464 (good)
;; QUESTION SECTION:
;carbon.intranet. IN A
;; AUTHORITY SECTION:
. 10750 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2020040903 1800 900 604800 86400
;; Query time: 0 msec
;; SERVER: 192.168.1.2#53(192.168.1.2)
;; WHEN: Thu Apr 09 20:05:20 CDT 2020
;; MSG SIZE rcvd: 147
[mando ~]$ nslookup 192.168.1.3
3.1.168.192.in-addr.arpa name = carbon.intranet.
答案1
首先你没有区域这将包含carbon.intranet
。您在 named.conf 中定义的唯一内容是“mando.intranet” – 这是不同的。
区域名称很重要。它们不仅仅是标签——它们告诉名称服务器哪个后缀此区域文件将处理,即您允许它解析以 结尾的任何内容.mando.intranet
。而“carbon.intranet”域名显然不以此结尾。
如果你想处理全部以 结尾的名称.intranet
,那么您应该使用:
zone "intranet" IN {
(是的,您应该相应地更新区域文件中的 $ORIGIN。)
第二,你没有完全遵循区域文件语法规则关于写下域名。$ORIGIN 参数的主要目的是自动附加所有“不完全合格”的域名 - 即不以点结尾的域名。
假设您已经将区域名称和原点固定为“intranet”,如上一节所述。假设您有此区域:
$ORIGIN intranet
carbon.intranet IN A 192.168.1.3
在区域文件中,由于记录名称不以点结尾,因此总是将 $ORIGIN 附加到它 – 因此您定义的实际域是carbon.intranet.intranet.
!
正确的定义方法carbon.intranet.
是下列之一:
$ORIGIN intranet
carbon IN A 192.168.1.3
或者
carbon.intranet. IN A 192.168.1.3
在第二种情况下,请注意名称以结尾,.
因此它根本不使用 $ORIGIN – 您直接指定全名。