问题描述
我正在尝试在我的没有互联网连接的虚拟计算机上配置 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。