静看光阴荏苒
不管不顾不问不说也不念

搭建权威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 < /usr/share/doc/pdns-backend-sqlite3/schema.sqlite3.sql
chown -R pdns:pdns /powerdns-db

编辑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内添加新的域名了,设置你自己的解析记录:

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

赞(5)
未经允许不得转载:荒岛 » 搭建权威DNS服务器:PowerDNS+PowerDNS-Admin
分享到: 更多 (0)

评论 16

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    在全新DD的Debian10 64bit机器上测试,pdns启动报错

    pdns4年前 (2020-05-28) Google Chrome 81.0.4044.138 Google Chrome 81.0.4044.138 Windows 10 x64 Edition Windows 10 x64 Edition回复
  2. #2

    Fatal error: Trying to set unknown parameter ‘bind-config’

    pdns4年前 (2020-05-28) Google Chrome 81.0.4044.138 Google Chrome 81.0.4044.138 Windows 10 x64 Edition Windows 10 x64 Edition回复
    • 我更新了一下文章,再试试看应该没问题了。

      LALA4年前 (2020-05-28) Google Chrome 80.0.3987.163 Google Chrome 80.0.3987.163 Windows 10 x64 Edition Windows 10 x64 Edition回复
      • 成功了,非常感谢您! :mrgreen:

        pdns4年前 (2020-05-28) Google Chrome 81.0.4044.138 Google Chrome 81.0.4044.138 Windows 10 x64 Edition Windows 10 x64 Edition回复
  3. #3

    套路云的域名有胶水记录吗?

    Foliage4年前 (2020-05-28) Chrome 81.0.4044.124 Chrome 81.0.4044.124 iPhone iOS 13.5 iPhone iOS 13.5回复
    • 大厂应该是有的,但国内的DNS管理界面不一定叫胶水记录,这个你要问下他们客服,我基本没在国内注册过域名,不是很清楚。。。

      LALA4年前 (2020-05-28) Google Chrome 80.0.3987.163 Google Chrome 80.0.3987.163 Windows 10 x64 Edition Windows 10 x64 Edition回复
  4. #4

    大学选修课作业 :razz:

    橘子4年前 (2020-05-30) Google Chrome 81.0.4404.91 Google Chrome 81.0.4404.91 Windows 10 Windows 10回复
    • 橘酱做作业都这么销魂的嘛,我在想国内现在搭建DNS是违法的,你这作业怕不是有点难度。。 :razz:

      LALA4年前 (2020-05-30) Google Chrome 80.0.3987.163 Google Chrome 80.0.3987.163 Windows 10 x64 Edition Windows 10 x64 Edition回复
  5. #5

    咋设置多个dns服务器嘞 :cry: :cry:

    DouZi4年前 (2020-06-08) Google Chrome 83.0.4103.96 Google Chrome 83.0.4103.96 Android 10 Android 10回复
    • 配置powerdns的主从同步。。

      LALA4年前 (2020-06-10) Google Chrome 80.0.3987.163 Google Chrome 80.0.3987.163 Windows 10 x64 Edition Windows 10 x64 Edition回复
  6. #6

    lala哪个dns程序支持doh啊

    Gabreel4年前 (2020-06-21) Google Chrome 83.0.4103.106 Google Chrome 83.0.4103.106 Windows 10 x64 Edition Windows 10 x64 Edition回复
    • adguardhome,blocky都支持。

      LALA4年前 (2020-06-22) Google Chrome 80.0.3987.163 Google Chrome 80.0.3987.163 Windows 10 x64 Edition Windows 10 x64 Edition回复
  7. #7

    :smile: 我很好奇能不能这个加上 shell实现ddns 哈哈

    lingling4年前 (2020-07-14) Google Chrome 83.0.4103.116 Google Chrome 83.0.4103.116 Windows 10 x64 Edition Windows 10 x64 Edition回复
  8. #8

    真心请教,我实测搭建成功了,IPV4应该没问题。IPV6也能正常吗?不是很懂这些哈哈哈

    男神3年前 (2021-02-13) Google Chrome 87.0.4280.66 Google Chrome 87.0.4280.66 Windows 10 x64 Edition Windows 10 x64 Edition回复
  9. #9

    添加lua類型的記錄,一直解析不成功。用nslookup提示 Non-existent domain。 A記錄OK.

    cctv3年前 (2021-09-09) Google Chrome 86.0.4240.198 Google Chrome 86.0.4240.198 Windows 10 x64 Edition Windows 10 x64 Edition回复

分享创造快乐

广告合作资源投稿