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-rec
forward-zones
具体告诉它在哪里可以找到您的域名(例如forward-zones=example.org=192.0.2.1, example.net=192.0.2.1
)。这显然只能在本地工作,并且可能需要配置负信任锚(addNTA
在Lua 配置) 如果启用了 dnssec 验证。
使 dnsdist 始终将针对您的区域的查询直接发送到 pdns-auth 的选项
- 您可以使用所有区域名称列表配置 dnsdist,并始终将它们定向到“auth”池。即,
SuffixMatchNode
使用所有区域名称构建一个并将其与您的规则相结合。我想您可以做类似的事情addAction(AndRule({ NetmaskGroupRule(recursive_ips), NotRule(SuffixMatchNodeRule(my_zones)) }), PoolAction('recursor'))
(或者甚至只是内联列出后缀)。