本地查询不显示域记录

本地查询不显示域记录

pdns 版本:0.0.2081g7b9b55d(主分支和版本 4.1)
pdns-recursor 版本:0.0.1960g7b9b55d(主分支和版本 4.1)
dnsdist 版本:1.2.0

有 3 台服务器带有 galera 后端,其中两个主题是 pdns + pdns-recursor + dnsdist

其中一个配置:

/etc/pdns-recursor/recursor.conf

setuid=pdns-recursor
setgid=pdns-recursor
local-address=127.0.0.1
local-port=5301
hint-file=/etc/pdns-recursor/root.zone
allow-from=127.0.0.0/8

/etc/pdns/pdns.conf

setuid=pdns
setgid=pdns
launch=gmysql
gmysql-host=127.0.0.1
gmysql-user=powerdns_user
gmysql-dbname=powerdns
gmysql-password=
allow-axfr-ips=127.0.0.0/8, 192.0.2.5/32
cache-ttl=60
control-console=no
default-soa-name=ns2.example.ru
[email protected]
default-ttl=3600
disable-axfr=no
local-port=5300
local-address=127.0.0.1
do-ipv6-additional-processing=yes
log-dns-queries=yes
logging-facility=0
loglevel=4
master=yes
max-queue-length=5000
max-tcp-connections=20

/etc/dnsdist/dnsdist.conf

setLocal('127.0.0.1')
addLocal('192.0.1.5')
setACL({'0.0.0.0/0', '::/0'}) -- Allow all IPs access
newServer({address='127.0.0.1:5300', pool='auth'})
newServer({address='127.0.0.1:5301', pool='recursor'})
recursive_ips = newNMG()
recursive_ips:addMask('127.0.0.0/8')
recursive_ips:addMask('192.0.1.0/24')
recursive_ips:addMask('192.0.2.0/24')
addAction(NetmaskGroupRule(recursive_ips), PoolAction('recursor'))
addAction(AllRule(), PoolAction('auth'))

权威服务器上有域名。例如 google123.com

当我尝试从允许的 IP(recursive_ips包括 @127.0.0.1)解析该地址时,得到以下结果:

# dig ANY google123.com @192.0.1.5

; <<>> DiG 9.9.4-RedHat-9.9.4-51.el7_4.1 <<>> ANY google123.com @192.0.1.5
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 54293
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;google123.com.         IN  ANY

;; AUTHORITY SECTION:
com.            2118    IN  SOA a.dns.ripn.net. hostmaster.ripn.net. 4032536 86400 14400 2592000 3600

;; Query time: 64 msec
;; SERVER: 192.0.1.5#53(192.0.1.5)
;; WHEN: Sat Jan 27 01:11:38 MSK 2018
;; MSG SIZE  rcvd: 102

如果我尝试从另一个网络解析该域名 - 获取以下内容:

#dig ANY google123.com @192.0.1.5
;; Truncated, retrying in TCP mode.

; <<>> DiG 9.9.4-RedHat-9.9.4-51.el7_4.1 <<>> ANY google123.com @192.0.1.5
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34025
;; flags: qr aa rd; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 3
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1680
;; QUESTION SECTION:
;google123.com.                  IN      ANY

;; ANSWER SECTION:
google123.com.           86400   IN      A       192.0.1.7
google123.com.           86400   IN      NS      ns1.example.ru.
google123.com.           86400   IN      NS      ns2.example.ru.
google123.com.           86400   IN      SOA     ns1.example.ru. hostmaster.example.ru. 2018012603 28800 7200 604800 86400

;; ADDITIONAL SECTION:
ns1.example.ru.         86400   IN      A       192.0.1.5
ns2.example.ru.         86400   IN      A       192.0.2.5

;; Query time: 3 msec
;; SERVER: 192.0.1.5#53(192.0.1.5)
;; WHEN: Fri Jan 26 23:16:29 CET 2018
;; MSG SIZE  rcvd: 181

看起来,递归器得到了答案并且一切正常。

我如何设置 dnsdist 来从 中的 IP 获取有关 Authoritative 上的域记录的答案recursive_ips。我尝试了不同的方法,但都没有用。

答案1

Dnsdist 将使用第一个匹配的操作。根据您的配置,它将根据源地址优先使用“recursor”池,否则使用“auth”池。即,将使用其中一个池来回答当前查询,而不是两者的某种组合。

根据结果​​,听起来好像您在 pdns-auth 上的域没有委派,因此当查询转到 pdns-rec 时,它无法解析您的本地域。

有多种方法可以解决这个问题,具体取决于最终目标是什么。

使 pdns-rec 与您的域名兼容的选项

  • 通常明智的选择:在 pdns-auth 上为您的区域设置委派(无论如何,您都需要它才能让世界其他地方解析您的域)。

  • 本地测试的替代方案:使用例如配置 pdns-recforward-zones具体告诉它在哪里可以找到您的域名(例如forward-zones=example.org=192.0.2.1, example.net=192.0.2.1)。这显然只能在本地工作,并且可能需要配置负信任锚(addNTALua 配置) 如果启用了 dnssec 验证。

使 dnsdist 始终将针对您的区域的查询直接发送到 pdns-auth 的选项

  • 您可以使用所有区域名称列表配置 dnsdist,并始终将它们定向到“auth”池。即,SuffixMatchNode使用所有区域名称构建一个并将其与您的规则相结合。我想您可以做类似的事情addAction(AndRule({ NetmaskGroupRule(recursive_ips), NotRule(SuffixMatchNodeRule(my_zones)) }), PoolAction('recursor'))(或者甚至只是内联列出后缀)。

相关内容