目 录CONTENT

文章目录

HomeLab之自建DNS服务器

cplinux98
2022-04-16 / 0 评论 / 0 点赞 / 74 阅读 / 2,081 字 / 正在检测是否收录...

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台服务器,做高可用并没有实际用处,我这里只做了单机版本,如果要做高可用,可以参考下面大佬的文章

https://u.sb/debian-install-powerdns/

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

项目地址:https://github.com/PowerDNS-Admin/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:创建管理员

默认创建的第一个用户就是管理员

image-20220415211710553

5.3:设置pdns-api

这里需要注意的地方,很多博客中都是使用的本地安装,这里使用docker安装的话,api url要设置为宿主机的ip地址。

这里的版本我没有安装最新,害怕pda与最新版本不兼容,有需要的可以自行测试

image-20220415211853477

5.4:开启soa

image-20220415212208069

5.5:设置模板

按照图片指示,创建模板

image-20220415212417595

5.6:创建域

这里如果是400,请检查pds-api的地址和key是否正确,可以通过docker logs -f 容器id,来查看日志并解决问题

image-20220415212522943

创建完成后,在dashboard就可以看到

image-20220415212650518

5.7:添加域名解析

点击manage

添加方式与云厂商的类似,没有学习成本

image-20220415212753697

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

image-20220415213046811

此时我们只能解析权威服务器上配置的域名解析

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服务器地址

image-20220415214059781

0

评论区