没有互联网的虚拟机上的 DNS 配置

问题描述

我正在尝试在我的没有互联网连接的虚拟计算机上配置 DNS 服务器

我正在使用带有 BIND 后端的 PowerDNS。

这是我的区域配置:

$ORIGIN example.com.
$TTL 86400
@   IN  SOA example2.com. (
        2017020401   ; serial
        3600         ; refresh
        1800         ; retry
        604800       ; expire
        86400 )      ; minimum TTL
example.com.  172800  IN  NS  example1.com.
example.com.  172800  IN  NS  example2.com.
example.com.  172800  IN  NS  example3.com.

我正在使用命令 dig 测试服务器,如下所示:

root@osboxes:~# dig example.com @127.0.0.1 -p 5301

; <<>> DiG 9.16.1-Ubuntu <<>> example.com @127.0.0.1 -p 5301
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY,status: NOERROR,id: 13819
;; flags: qr rd ra; QUERY: 1,ANSWER: 0,AUTHORITY: 1,ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0,flags:; udp: 512
;; QUESTION SECTION:
;example.com.           IN  A

;; AUTHORITY SECTION:
example.com.        3600    IN  SOA example2.com. 2017020401.example.com. 3600 1800 604800 86400 3600

;; Query time: 180 msec
;; SERVER: 127.0.0.1#5301(127.0.0.1)
;; WHEN: Wed Feb 03 16:45:50 EST 2021
;; MSG SIZE  rcvd: 96

我希望将请求委托给其他服务器 example1.com、example2.com 和 example3.com。

为此,我需要在 dig 输出的 AUTHORITY SECTION 中拥有我的 NS 记录。 但是,它没有发生,只有 SOA 记录。 我试图删除 SOA 记录,但之后我在 AUTHORITY SECTION 中没有记录。 有人可以帮我解决这个问题吗?我错过了什么?

编辑:添加配置

recursor.conf

local-address=0.0.0.0
local-port=5301
allow-from=127.0.0.0/8,10.0.0.0/8
forward-zones=example.com=127.0.0.1:5300
pdns.conf

launch=bind
bind-config=/etc/powerdns/named.conf
local-address=127.0.0.1
local-port=5300
named.conf

zone "example.com" IN {
        type slave;                           # type of zone
        file "/var/lib/powerdns/zone.net"; # location of forward zone file
        allow-query { any; };
};
/var/lib/powerdns/zone.net

$ORIGIN example.com.
$TTL 86400
@   IN  SOA example2.com. (
        2017020401   ; serial
        3600         ; refresh
        1800         ; retry
        604800       ; expire
        86400 )      ; minimum TTL
example.com.  172800  IN  NS  example1.com.
example.com.  172800  IN  NS  example2.com.
example.com.  172800  IN  NS  example3.com.

解决方法

编辑

我假设您使用的是 BIND9。如果是,则需要在 minimal-responses 部分将 no 设置为 options。很可能在 /etc/bind/named.conf.options 中,如果没有,请检查 /etc/bind/named.conf。

我在 readthedocs for BIND 上找到了这个,向下滚动一点,您会看到突出显示的最少回复。

结束编辑

您尝试的 dig 查询是 example.com 类型 A,这是一个 IPv4 地址。您的区域文件没有 example.com 的任何 A 记录,因此您可以做的一件事是添加一个,例如:

example.com.  172800  IN  A  1.2.3.4

然后,您对 example.com 的 dig 查询应在答案部分返回 1.2.3.4,并在授权部分返回 NS 记录(尽管这可能取决于您的 DNS 服务器配置)。

如果您为 example1.com、example 2.com 和 example3.com 添加 A(或 AAAA)记录,然后再次执行 dig 命令,您可能会在附加部分中获得这些 A 记录。 (IIRC,这就是所谓的“胶水”)

多一点背景知识,您从 dig 查询中得到的响应通常称为“无数据”响应。这意味着您查找的名称(example.com)有一条记录,但它的类型(NS)与您要求的类型(A)不同,因此它返回一个没有答案的 NOERROR rcode(没有答案部分) .如果您要求一个根本不存在的名称,您将得到相同的结果(无答案部分),但会得到 NXDOMAIN rcode 而不是 NOERROR。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...