Bind 无法解析域名(仅可转发)

Bind 无法解析域名(仅可转发)

我跟着本教程在我的 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 – 您直接指定全名。

相关内容