00:文章简介
记录使用powerdns和powerdns-admin自建dns-server。
参考地址:
https://zhuanlan.zhihu.com/p/467704808
https://blog.csdn.net/p243679396/article/details/119575860
https://u.sb/debian-install-powerdns/
官方地址:
https://doc.powerdns.com/recursor/changelog/4.7.html
https://doc.powerdns.com/recursor/getting-started.html#debian-based-distributions
先了解一下什么是权威服务器和递归服务器
递归服务器与权威服务器的区别在于,递归服务器本身并不提供解析,而是将客户端需要解析的内容交由其它服务器来进行解析,而权威服务器则是直接查询数据库去尝试解析,数据库中若不存在此记录,则直接返回空结果。
为了更简单理解,不妨举个例子:
用户要通过权威服务器来解析big.wind域名,权威服务器的做法是,查询本地数据库,有则返回结果,木有则返回空,当然对于用户来说,返回空则代表解析失败;
用户通过递归服务器来解析big.wind域名,递归服务器此时可以设置成两种方式,
方式一:把解析请求转给权威服务器,权威服务器上若存在该记录,则返回该记录的解析结果,若不存在该记录,则返回空,用户解析失败;
方式二:把继续请求转给权威服务器,权威服务器上若存在该记录,则返回该记录的解析结果,若不存在该记录,则继续通过递归方式向其它DNS查询该记录,最终,若查询到,则返回结果,若查询不到,则返回空,用户解析失败。
引用自:https://zhuanlan.zhihu.com/p/467704808
01:服务器清单
由于家里只有1台服务器,做高可用并没有实际用处,我这里只做了单机版本,如果要做高可用,可以参考下面大佬的文章
id | 虚拟机名称 | 主机名 | CPU配置 (核数) | 内存配置 (单位G) | 硬盘配置 (单位G) | IP地址 | 用途 |
---|---|---|---|---|---|---|---|
1 | linux98-Pdns-Auth-192.168.31.253 | pdns | 4 | 8 | 100 | 192.168.31.253 | 权威服务器 |
2 | linux98-Pdns-Recu-192.168.31.254 | pdns-rr | 2 | 4 | 100 | 192.168.31.254 | 递归服务器 |
3 | linux98-Test-192.168.31.205 | test | 1 | 1 | 20 | 192.168.31.205 | 测试主机 |
02:服务器初始化
权威服务器配置2.1-2.3,递归服务器配置2.1-2.2,测试服务器配置2.1-2.2
2.1:卸载systemd-resolvd
systemctl disable systemd-resolved
systemctl stop systemd-resolved
unlink /etc/resolv.conf
echo "nameserver 192.168.31.1" > /etc/resolv.conf
2.2:设置apt源
我这里用的是本地的apt源,需要设置外网的,可以自己替换地址
>/etc/apt/sources.list
写入本地源
deb http://192.168.31.202:8081/repository/aliyun-apt-proxy/ focal main restricted universe multiverse
deb http://192.168.31.202:8081/repository/aliyun-apt-proxy/ focal-security main restricted universe multiverse
deb http://192.168.31.202:8081/repository/aliyun-apt-proxy/ focal-updates main restricted universe multiverse
deb http://192.168.31.202:8081/repository/aliyun-apt-proxy/ focal-proposed main restricted universe multiverse
deb http://192.168.31.202:8081/repository/aliyun-apt-proxy/ focal-backports main restricted universe multiverse
更新缓存
apt update -y
2.3:安装docker
后续安装powerdns-admin要用到
apt-get -y install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
add-apt-repository "deb [arch=amd64] http://192.168.31.202:8081/repository/aliyun-docker-ce-apt/ $(lsb_release -cs) stable"
apt-get -y update && apt-get -y install docker-ce
03:权威服务器-安装mariadb-server
apt install mariadb-server -y
设置root密码
mysql
set password for "root"@'localhost'=password('root@pwd');
quit;
systemctl restart mariadb
创建pdns账户
mysql -u root
CREATE DATABASE pdns_database DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
GRANT ALL ON pdns_database.* TO 'pdns_user'@'%' IDENTIFIED BY 'pdns@pwd';
FLUSH PRIVILEGES;
EXIT;
导入数据库文件
cd /usr/share/pdns-backend-mysql/schema
mysql -u pdns_user --default-character-set=utf8mb4 -p pdns_database < schema.mysql.sql
mysql -u pdns_user --default-character-set=utf8mb4 -p pdns_database < enable-foreign-keys.mysql.sql
查看数据库
mysql -e "show databases;\G"
设置数据库监听地址
/etc/mysql/mariadb.conf.d/50-server.cnf
bind-address = 0.0.0.0
重启数据库
systemctl restart mariadb
04:权威服务器-安装软件
PowerDNS Authoritative Server,权威服务器,域名解析的最顶端,可以自定义域名的解析,类似于阿里云的域名解析配置
4.1:设置源
/etc/apt/sources.list.d/pdns.list
deb [arch=amd64] http://repo.powerdns.com/ubuntu focal-auth-master main
/etc/apt/preferences.d/pdns
Package: pdns-*
Pin: origin repo.powerdns.com
Pin-Priority: 600
4.2:安装
curl https://repo.powerdns.com/CBC8B383-pub.asc | sudo apt-key add - && apt-get update && apt-get install pdns-server pdns-backend-mysql
4.3:设置配置文件
rm -rf /etc/powerdns/pdns.d/bind.conf
cat >> /etc/powerdns/pdns.d/dns.conf << EOF
launch=gmysql # 后端为mysql
gmysql-host=localhost # mysql主机地址
gmysql-user=pdns_user # mysql用户名
gmysql-dbname=pdns_database # mysql数据库
gmysql-password=pdns@pwd # mysql用户密码
gmysql-dnssec=yes # 是否开启dnssec
api=yes # 开启api
api-key=123456 # api的token
local-address=0.0.0.0 :: # 服务绑定地址
local-port=53 # 服务监听端口
webserver-address=0.0.0.0 # webserver绑定地址
webserver-allow-from=0.0.0.0/0 # webserver允许访问范围
webserver-port=8081 # webserver监听端口
EOF
重启服务
systemctl restart pdns
systemctl enable pdns
4.4:测试
dig @127.0.0.1
05:权威服务器-安装UI
PowerDNS-Admin
5.1:使用docker安装
docker run -d --restart=always \
-e SECRET_KEY='a-very-secret-key' \ # 这个key随机即可
-v pda-data:/data \
-p 80:80 \
ngoduykhanh/powerdns-admin:latest
# 如果忘记了加重启选项
docker container update --restart=always 容器名字
5.2:创建管理员
默认创建的第一个用户就是管理员
5.3:设置pdns-api
这里需要注意的地方,很多博客中都是使用的本地安装,这里使用docker安装的话,api url要设置为宿主机的ip地址。
这里的版本我没有安装最新,害怕pda与最新版本不兼容,有需要的可以自行测试
5.4:开启soa
5.5:设置模板
按照图片指示,创建模板
5.6:创建域
这里如果是400,请检查pds-api的地址和key是否正确,可以通过docker logs -f 容器id,来查看日志并解决问题
创建完成后,在dashboard就可以看到
5.7:添加域名解析
点击manage
添加方式与云厂商的类似,没有学习成本
5.8:测试
可以在pds服务器测试
root@pdns:/etc/powerdns/pdns.d# pdnsutil list-zone linux98.com
$ORIGIN .
big.linux98.com 60 IN A 1.1.1.1
linux98.com 3600 IN NS ns1.linux98.com.
linux98.com 3600 IN SOA ns1.linux98.com root.linux98.com 2022041503 3600 14400 604800 3600
test.linux98.com 60 IN A 192.168.31.111
找一个测试主机,将dns地址指向pds-ip
此时我们只能解析权威服务器上配置的域名解析
06:递归服务器-安装软件
PowerDNS Recursor ,递归域名解析,可以自定义哪些域名通过哪些服务器来解析
6.1:配置源
/etc/apt/sources.list.d/pdns.list
deb [arch=amd64] http://repo.powerdns.com/ubuntu focal-rec-46 main
/etc/apt/preferences.d/pdns
Package: pdns-*
Pin: origin repo.powerdns.com
Pin-Priority: 600
6.2:安装
curl https://repo.powerdns.com/FD380FBB-pub.asc | sudo apt-key add - && apt-get update && apt-get install pdns-recursor
6.3:配置
/etc/powerdns/recursor.conf
allow-from=0.0.0.0/0 # 允许哪些客户端访问
config-dir=/etc/powerdns
dnssec=off
forward-zones=linux98.com=192.168.31.253 # 转发请求,不允许递归,多个配置使用","分割
forward-zones-recurse=.=114.114.114.114 # 转发请求,允许递归,多个配置使用","分割
hint-file=/usr/share/dns/root.hints
include-dir=/etc/powerdns/recursor.d
local-address=0.0.0.0 # 监听地址
lua-config-file=/etc/powerdns/recursor.lua
quiet=yes
setgid=pdns
setuid=pdns
重启服务
systemctl restart pdns-recursor
systemctl enable pdns-recursor
6.4:测试
此时将客户端的地址设置为recursor服务器地址
评论区