搭建权威DNS服务器:PowerDNS+PowerDNS-Admin

很多时候我们自建的DNS服务器都是递归DNS,其实权威DNS也可以很方便自建的,PowerDNS+PowerDNS-Admin就是一套现成的开源方案。

这篇文章水一下PowerDNS+PowerDNS-Admin的搭建过程,为了让大家能够快速部署起来,避免踩坑,这里我尽量用简单(偷懒)的方法来部署。

开始之前,你首先要准备一个顶级域名,并且这个域名的服务商要支持添加Glue Record(胶水记录)

这里我拿gandi.net的DNS管理界面演示(草,特地花了11块钱注册了这个域名,11块钱买包薯片它不香嘛)

每个域名注册局的界面肯定都大同小异,gandi.net就这个样子:

然后随便填个你喜欢的主机名,下面IP地址就填你要搭建权威DNS的这台服务器IP:

最后把域名的NS的服务器地址改成你刚添加的胶水记录的值:

域名这块就设置好了。接下来就可以着手安装PowerDNS了。

系统使用Debian10,先把需要用到的基本工具装一哈:

apt -y update
apt -y install curl gnupg

这里添加官方的存储库安装最新版:

echo "deb [arch=amd64] http://repo.powerdns.com/debian buster-auth-master main" > /etc/apt/sources.list.d/pdns.list

新建一个pdns软件包优先级的配置文件:

nano /etc/apt/preferences.d/pdns

写入如下配置,让apt始终从powerdns的源安装软件包:

Package: pdns-*
Pin: origin repo.powerdns.com
Pin-Priority: 600

添加密钥/安装:

curl https://repo.powerdns.com/CBC8B383-pub.asc | apt-key add -
apt -y update
apt -y install pdns-server pdns-backend-sqlite3 sqlite3

注:PowerDNS支持很多种数据库后端,这里为了简单,我选择使用sqlite3,如果你的域名数量相当多,这里建议你使用mysql或者pgsql。

配置sqlite3数据库:

mkdir -p /powerdns-db
sqlite3 /powerdns-db/pdns.sqlite3

编辑PowerDNS的主配置文件:

nano /etc/powerdns/pdns.conf

修改launch的值为如下所示:

launch=gsqlite3

新建一个PowerDNS的配置文件:

nano /etc/powerdns/pdns.d/imlala.conf

写入如下配置:

gsqlite3-database=/powerdns-db/pdns.sqlite3
gsqlite3-pragma-synchronous=0
gsqlite3-pragma-foreign-keys=yes
gsqlite3-dnssec=yes
api=yes
api-key=设置你的api密码
webserver-address=0.0.0.0
webserver-allow-from=0.0.0.0/0,::/0

重启PowerDNS使之前更改的配置生效/设置开机自启:

systemctl restart pdns
systemctl enable pdns

PowerDNS的配置就OK了,接下来是PowerDNS-Admin,这是PowerDNS的WEB面板,基于Python开发的。由于安装过程很繁琐,这里为了简单直接用Docker一把梭!

首先把docker和docker-compose装好:

curl -sSL https://get.docker.com/ | sh
systemctl start docker
systemctl enable docker
curl -L https://github.com/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

创建一个目录:

mkdir -p /opt/powerdns-admin && cd /opt/powerdns-admin

新建docker-compose:

nano docker-compose.yml

直接粘贴下面的配置即可:

version: '3.5'
volumes:
pda-data:
services:
powerdns-admin:
image: ngoduykhanh/powerdns-admin:latest
container_name: powerdns_admin
ports:
- 9191:80
environment:
- GUNICORN_TIMEOUT=60
- GUNICORN_WORKERS=2
- OFFLINE_MODE=False
volumes:
- pda-data:/data
restart: unless-stopped

启动:

docker-compose up -d

访问你的VPSIP:9191能看到PowerDNS-Admin的WEB面板说明一切正常:

注:初次访问,注册的第一个账号默认就是管理员权限。

登录进去之后,默认会跳转到pdns的api配置界面,这里填写之前配置的api信息:

安装的软件版本号一定要填写正确,查看你当前安装的版本:

apt-cache policy pdns-server

可以看到当前安装的版本是4.4.0:

pdns-server:
Installed: 4.4.0~alpha0+master.404.ga0289598b-1pdns.buster
Candidate: 4.4.0~alpha0+master.404.ga0289598b-1pdns.buster

如果PowerDNS-Admin和PowerDNS对接正常的话,点击如图所示的菜单,应该能看到PowerDNS的运行状态:

现在找到Settings-Records,把Forward Zone内的SOA记录勾上:

如果你不想公开给别人使用你的DNS服务器,现在应该把注册功能关掉:

现在我们就可以添加域名了:

添加域名之后,默认应该就有一条SOA解析记录,编辑这个记录,把Primary Name Server的值改成如下图所示(改成你自己的NS服务器地址):

现在在这个域名下面添加一条A记录,记录的值是NS服务器的地址:

等待解析生效后,你的NS服务器就搭建完成了。对于我文中的这个域名而言,我的NS服务器地址就是:sometimesnaive.imlala.best

你的其他域名都可以把NS服务器地址换成这个,例如我的另外一个域名,在域名服务商那里修改NS服务器地址:

这其实就和你平常把域名接入到CloudFlare的操作是一样的,只不过这次是修改成你自己的NS服务器。

然后我们就可以在PowerDNS-Admin内添加新的域名了,设置你自己的解析记录:

最后测试一下是否能够正常工作:

全部为采集文章,文中的 联系方式 均不是 本人 的!

发表评论