跳转到内容
登录关注  
洛汐

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

已推荐帖子

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

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

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

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

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

lala.im_2020-05-27_14-46-57.png

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

lala.im_2020-05-27_14-51-53.png

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

lala.im_2020-05-27_14-54-27.png

域名这块就设置好了。接下来就可以着手安装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.d/imlala.conf

写入如下配置:

launch=gsqlite3
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面板说明一切正常:

lala.im_2020-05-27_14-22-55.png

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

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

lala.im_2020-05-27_15-04-39.png

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

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的运行状态:

lala.im_2020-05-27_15-06-26.png

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

lala.im_2020-05-27_15-11-04.png

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

lala.im_2020-05-27_15-07-07.png

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

lala.im_2020-05-27_15-08-50.png

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

lala.im_2020-05-27_15-12-58.png

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

lala.im_2020-05-27_19-25-58.png

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

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

lala.im_2020-05-27_19-29-51.png

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

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

lala.im_2020-05-27_19-33-33.png

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

lala.im_2020-05-27_19-42-35.png

查看完整帖子

分享这篇帖子


链接帖子

参与讨论

你现在可以发表并稍后注册。 如果你有帐户,现在就登录参与讨论。

游客
回复主题...

×   粘贴为富文本.   粘贴为纯文本来代替

  只允许使用75个表情符号.

×   你的链接已自动嵌入.   显示为链接来代替

×   你之前的内容已恢复.   清除编辑器

×   你无法直接粘贴图片。要从网址上传或插入图片。

登录关注  

×
×
  • 创建新的...