PowerDNS实现递归+权威解析
PowerDNS 4.1以后已经移除了 Authoritative Server 的递归功能,推荐将权威DNS和递归DNS分离。
- 权威DNS:PowerDNS Authoritative Server(pdns_server)
- 递归DNS:PowerDNS Recursor(pdns_recursor)
1.架构
客户端
|
| DNS Query
v
+----------------+
| PowerDNS |
| Recursor |
| 53/UDP TCP |
+----------------+
|
---------------------
| |
v v
本地缓存 外部DNS层级查询
|
|
root -> .com -> example.com
|
v
权威DNS服务器
+----------------+
| PowerDNS Auth |
| pdns_server |
| 5300端口 |
+----------------+
内部域名解析
2.compose
2.1init.sql
2.2docker-compose.yml
1 | services: |
.env
MYSQL_ROOT_PASSWORD=321.321
MYSQL_DATABASE=powerdns
MYSQL_USER=pdns
MYSQL_PASSWORD=changeme
MYSQL_HOST=pdns-mysql
API_KEY=9aaecc263862c77f7cf726202a1190ab
2.3pdns.conf
# pdns.conf
local-address=0.0.0.0
local-port=53
include-dir=/etc/powerdns/pdns.d
2.4recursor.conf
# recursor.conf
local-address=0.0.0.0
local-port=53
# 1.允许哪些客户端递归
allow-from=127.0.0.0/8, 10.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12
# 2.允许向私有 IP 转发(关键)
dont-query=
# 3.关闭内部域名的 DNSSEC 校验(关键)
dnssec=off
# 4.内部域交给pdns-auth(多个逗号分割)
forward-zones=g.lo=192.168.9.12:53
# 5.上游DNS
forward-zones-recurse=.=8.8.8.8;1.1.1.1
2.5start
docker-compose pull && docker-compose up -d
3. dns测试
3.1递归查询:
1 | dig @127.0.0.1 www.baidu.com |
正常:
;; flags: qr rd ra
其中:
| 标志 | 含义 |
|---|---|
| rd | 客户端请求递归 |
| ra | 服务器支持递归 |
客户端查询:
db.corp.local
|
v
pdns-recursor
|
+---- g.lo
|
v
pdns_server:5300
返回内部记录
3.3权威查询
dig @127.0.0.1 m1.g.lo
dig @127.0.0.1 -p 5300 m1.g.lo
其他公网域:
www.google.com
走正常递归:
pdns-recursor
|
root DNS
|
.com
|
google.com