原作者:Josphat Mutai  转载来源:https://computingforgeeks.com/install-powerdns-and-powerdns-admin-on-ubuntu-18-04-debian-9-mariadb-backend/

使用MariaDB后端在Ubuntu18.04/Debian 9上安装PowerDNS和PowerDNS-Admin

在本指南中,我们将介绍在Ubuntu 18.04和Debian 9版Linux上安装PowerDNS权威名称服务器和PowerDNS-Admin。PowerDNS是一个DNS服务器,用C ++编写并根据GPL许可。它运行在大多数Linux和所有其他Unix衍生产品上。在撰写本文时,最新版本是4.1.X版本。


在Ubuntu 18.04 / Debian 9上安装PowerDNS

在本节中,我们将安装和配置:

  • MariaDB数据库服务器。
  • PowerDNS服务

步骤1:安装和配置MariaDB数据库服务器

我们需要安装数据库服务器,PowerDNS将使用它来存储区域文件。请注意,您还可以选择使用BIND等文本文件。我们选择的数据库服务器是MariaDB。

要在Ubuntu 18.04上安装MariaDB,请检查

在Ubuntu 18.04和CentOS 7上安装MariaDB 10.x.

对于Debian 9 / Debian使用:

如何在Debian 9 / Debian 8上安装MariaDB 10.3

安装并运行数据库服务器后,继续在MariaDB中创建PowerDNS数据库和用户帐户。

$ mysql -u root -p
create database powerdns;

接下来是创建powerdns 数据库用户和分配权限:

grant all on powerdns *.* 'powerdns'@'localhost' identified by 'password';

刷新权限以更新用户设置:

flush privileges;

切换到powerdns数据库以创建表:

use powerdns;

创建所需的表:

CREATE TABLE domains (id                    INT AUTO_INCREMENT,name                  VARCHAR(255) NOT NULL,master                VARCHAR(128) DEFAULT NULL,last_check            INT DEFAULT NULL,type                  VARCHAR(6) NOT NULL,notified_serial       INT UNSIGNED DEFAULT NULL,account               VARCHAR(40) CHARACTER SET 'utf8' DEFAULT NULL,PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';CREATE UNIQUE INDEX name_index ON domains(name);CREATE TABLE records (id                    BIGINT AUTO_INCREMENT,domain_id             INT DEFAULT NULL,name                  VARCHAR(255) DEFAULT NULL,type                  VARCHAR(10) DEFAULT NULL,content               VARCHAR(64000) DEFAULT NULL,ttl                   INT DEFAULT NULL,prio                  INT DEFAULT NULL,change_date           INT DEFAULT NULL,disabled              TINYINT(1) DEFAULT 0,ordername             VARCHAR(255) BINARY DEFAULT NULL,auth                  TINYINT(1) DEFAULT 1,PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';CREATE INDEX nametype_index ON records(name,type);
CREATE INDEX domain_id ON records(domain_id);
CREATE INDEX ordername ON records (ordername);CREATE TABLE supermasters (ip                    VARCHAR(64) NOT NULL,nameserver            VARCHAR(255) NOT NULL,account               VARCHAR(40) CHARACTER SET 'utf8' NOT NULL,PRIMARY KEY (ip, nameserver)
) Engine=InnoDB CHARACTER SET 'latin1';CREATE TABLE comments (id                    INT AUTO_INCREMENT,domain_id             INT NOT NULL,name                  VARCHAR(255) NOT NULL,type                  VARCHAR(10) NOT NULL,modified_at           INT NOT NULL,account               VARCHAR(40) CHARACTER SET 'utf8' DEFAULT NULL,comment               TEXT CHARACTER SET 'utf8' NOT NULL,PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';CREATE INDEX comments_name_type_idx ON comments (name, type);
CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);CREATE TABLE domainmetadata (id                    INT AUTO_INCREMENT,domain_id             INT NOT NULL,kind                  VARCHAR(32),content               TEXT,PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';CREATE INDEX domainmetadata_idx ON domainmetadata (domain_id, kind);CREATE TABLE cryptokeys (id                    INT AUTO_INCREMENT,domain_id             INT NOT NULL,flags                 INT NOT NULL,active                BOOL,content               TEXT,PRIMARY KEY(id)
) Engine=InnoDB CHARACTER SET 'latin1';CREATE INDEX domainidindex ON cryptokeys(domain_id);CREATE TABLE tsigkeys (id                    INT AUTO_INCREMENT,name                  VARCHAR(255),algorithm             VARCHAR(50),secret                VARCHAR(255),PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);

您可以确认您的表已创建:

MariaDB [powerdns]> show tables;
+--------------------+
| Tables_in_powerdns |
+--------------------+
| comments           |
| cryptokeys         |
| domainmetadata     |
| domains            |
| records            |
| supermasters       |
| tsigkeys           |
+--------------------+
7 rows in set (0.000 sec)

现在我们有了一个数据库和一个空表。PowerDNS现在应该可以用它启动了。

第2步:在Ubuntu 18.04 / Debian 9上安装PowerDNS

Ubuntu 18.04附带systemd-resolve,你需要禁用它,因为它绑定到端口  53 ,这将与PowerDNS端口冲突。

运行以下命令以禁用已解析的服务:

sudo systemctl禁用systemd-resolved
sudo systemctl stop systemd-resolved

另外,删除符号链接的resolv.conf文件

$ ls -lh /etc/resolv.conf
lrwxrwxrwx 1 root root 39 Jul 24 15:50 /etc/resolv.conf  - > ../run/systemd/resolve/stub-resolv.conf
$ sudo rm /etc/resolv.conf

然后创建新的resolv.conf文件。

sudo echo“nameserver 8.8.8.8”> /etc/resolv.conf

请注意,您可以从官方apt存储库或PowerDNS存储库安装PowerDNS。要从apt存储库安装,请运行:

sudo apt-get update
sudo apt-get install pdns-server pdns-backend-mysql

为Ubuntu 18.04添加官方PowerDNS存储库。

$ cat /etc/apt/sources.list.d/pdns.list
deb [arch = amd64] http://repo.powerdns.com/ubuntu bionic-auth-41 main

导入GPG密钥:

卷曲https://repo.powerdns.com/FD380FBB-pub.asc | sudo apt-key add  - 

更新软件包列表并安装PowerDNS软件包(pdns-server)和MySQL后端(pdns-backend-mysql)。

sudo apt-get update
sudo apt-get install pdns-server pdns-backend-mysql

对于Debian 9,从apt存储库安装软件包而不添加新的repo:

sudo apt-get update
sudo apt-get install pdns-server pdns-backend-mysql

当询问是否使用dbconfig-common配置PowerDNS数据库时  ,请 回答  

配置PowerDNS以使用MySQL后端:

这是我对PowerDNS的MySQL配置:

#cat /etc/powerdns/pdns.d/pdns.local.gmysql.conf
#MySQL配置
#启动gmysql后端
推出+ = gmysql
#gmysql参数
gmysql主机=本地主机
gmysql端口= 3306
gmysql-DBNAME = powerdns
gmysql用户= powerdns
gmysql密码= strongpassword
gmysql-DNSSEC = YES
#gmysql-socket =

重新启动pdns服务

sudo systemctl restart pdns

您现在可以测试PowerDNS以确认该服务是否在线:

# netstat -tap | grep pdnstcp        0      0 0.0.0.0:domain          0.0.0.0:*               LISTEN      31719/pdns_server
tcp6       0      0 [::]:domain             [::]:*      

检查PowerDNS服务是否正确响应:

# dig @127.0.0.1; <<>> DiG 9.11.3-1ubuntu1.1-Ubuntu <<>> @127.0.0.1
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 65465
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1680
;; QUESTION SECTION:
;.              IN  NS;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Fri Aug 10 15:57:10 UTC 2018
;; MSG SIZE  rcvd: 28

在Ubuntu 18.04 / Debian 9上安装PowerDNS-Admin

PowerDNS-Admin是一个具有以下高级功能的PowerDNS Web界面:

  • 多域管理
  • 域模板
  • 用户管理
  • 基于域的用户访问管理
  • 用户活动记录
  • 本地DB / LDAP / Active Directory用户身份验证
  • 支持SAML身份验证
  • Google OAuth身份验证
  • Github OAuth身份验证
  • 支持双因素身份验证(TOTP)
  • 仪表板和pdns服务统计信息
  • DynDNS 2协议支持
  • 直接使用IPv6地址编辑IPv6 PTR(不再编辑文字地址!)

安装Python 3开发包

sudo apt-get install python3-dev

从requirements.txt文件安装构建python库所需的包

sudo apt-get install -y libmysqlclient-dev python-mysqldb libsasl2-dev libffi-dev \
libldap2-dev libssl-dev libxml2-dev libxslt1-dev libxmlsec1-dev pkg-config

安装纱线以构建资产文件:

sudo curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add  -
sudo echo“deb https://dl.yarnpkg.com/debian/ stable main”> /etc/apt/sources.list.d/yarn.list
sudo apt-get update
sudo apt-get安装纱线

结帐源代码并创建virtualenv:

git clone https://github.com/ngoduykhanh/PowerDNS-Admin.git / opt / web / powerdns-admin
cd / opt / web / powerdns-admin
virtualenv -p python3 flask

输出:

已经使用解释器/ usr / bin / python3
使用基本前缀'/ usr'
/ opt / web / powerdns-admin / flask / bin / python3中的新python可执行文件
还在/ opt / web / powerdns-admin / flask / bin / python中创建可执行文件
安装setuptools,pkg_resources,pip,wheel ...... done。

激活python3环境并安装库:

。./flask/bin/activate
pip install -r requirements.txt

创建和配置数据库:

$ mysql -u root -p
CREATE DATABASE powerdnsadmin;
grant all privileges on powerdnsadmin.* to 'pdnsadminuser'@'%' identified by 'password';
flush privileges;

在运行PowerDNS-Admin之前,请确保您具有config.py可用。让我们从模板中创建一个:

cp config_template.py config.py

编辑文件到

vim config.py

这些是必需的配置:

  • 数据库连接信息
  • PNDS API服务端点和API密钥
  • 使用的端口号
  • 绑定地址

注释掉SQLite SQLALCHEMY_DATABASE_URI行并取消注释MySQL:

# DATABASE CONFIG
#You'll need MySQL-python
SQLA_DB_USER = 'powerdns'
SQLA_DB_PASSWORD = 'strongpassword'
SQLA_DB_HOST = 'localhost'
SQLA_DB_NAME = 'powerdns'#MySQL
SQLALCHEMY_DATABASE_URI = 'mysql://'+SQLA_DB_USER+':'\
+SQLA_DB_PASSWORD+'@'+SQLA_DB_HOST+'/'+SQLA_DB_NAME
#SQLite
#SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'pdns.db')

见下面的截图:

一旦你的config.py准备好了。通过运行命令创建数据库模式:

(flask) $ export FLASK_APP=app/__init__.py
(flask)$ flask db upgrade
INFO [alembic.runtime.migration] Context impl MySQLImpl.
INFO [alembic.runtime.migration] Will assume non-transactional DDL.
INFO [alembic.runtime.migration] Running upgrade -> 787bdba9e147, Init DB

然后运行db migrate:

(flask)$ flask db migrate -m "Init DB"
INFO [alembic.runtime.migration] Context impl MySQLImpl.
INFO [alembic.runtime.migration] Will assume non-transactional DDL.
INFO [alembic.autogenerate.compare] Detected removed index 'domainidindex' on 'cryptokeys'
INFO [alembic.autogenerate.compare] Detected removed table 'cryptokeys'
INFO [alembic.autogenerate.compare] Detected removed index 'namealgoindex' on 'tsigkeys'
INFO [alembic.autogenerate.compare] Detected removed table 'tsigkeys'
INFO [alembic.autogenerate.compare] Detected removed table 'supermasters'
INFO [alembic.autogenerate.compare] Detected removed index 'nametype_index' on 'records'
INFO [alembic.autogenerate.compare] Detected removed table 'records'
INFO [alembic.autogenerate.compare] Detected removed index 'domainmetadata_idx' on 'domainmetadata'
INFO [alembic.autogenerate.compare] Detected removed table 'domainmetadata'
INFO [alembic.autogenerate.compare] Detected removed index 'name_index' on 'domains'
INFO [alembic.autogenerate.compare] Detected removed table 'domains'
INFO [alembic.autogenerate.compare] Detected removed index 'comments_name_type_idx' on 'comments'
INFO [alembic.autogenerate.compare] Detected removed index 'comments_order_idx' on 'comments'
INFO [alembic.autogenerate.compare] Detected removed table 'comments'
Generating /opt/web/powerdns-
admin/migrations/versions/42ca771ac430_init_db.py ... done

使用yarn生成资产文件:

(flask)$ yarn install --pure-lockfile
yarn install v1.9.4
[1/4] Resolving packages...
[2/4] Fetching packages...
[3/4] Linking dependencies...
[4/4] Building fresh packages...
Done in 14.59s.(flask)$ flask assets build
Building bundle: generated/login.js
[INFO] Building bundle: generated/login.js
Building bundle: generated/login.css
[INFO] Building bundle: generated/login.css
Building bundle: generated/main.js
[INFO] Building bundle: generated/main.js
Building bundle: generated/main.css
[INFO] Building bundle: generated/main.css

测试您的PowerDNS-Admin是否正常运行:

$ ./run.py
[INFO] *在http://127.0.0.1:9191/上运行(按CTRL + C退出)
[INFO] *使用stat重新启动
[警告] *调试器处于活动状态!
[INFO] *调试器密码:466-405-858

配置systemd服务和Nginx

我们将使用systemd管理PowerDNS-Admin。创建如下的服务单元文件:

$ sudo vim /etc/systemd/system/powerdns-admin.service
[Unit]
Description=PowerDNS-Admin
After=network.target[Service]
User=root
Group=root
WorkingDirectory=/opt/web/powerdns-admin
ExecStart=/opt/web/powerdns-admin/flask/bin/gunicorn --workers 2 --bind unix:/opt/web/powerdns-admin/powerdns-admin.sock app:app[Install]
WantedBy=multi-user.target

启动Powerdns-Admin服务并将其设置为在启动时启动:

sudo systemctl daemon-reload
sudo systemctl start powerdns-admin
sudo systemctl enable powerdns-admin

确认状态是否正在运行状态:

# systemctl status powerdns-admin
● powerdns-admin.service - PowerDNS-AdminLoaded: loaded (/etc/systemd/system/powerdns-admin.service; enabled; vendor preset: enabled)Active: active (running) since Fri 2018-08-10 16:45:16 UTC; 22s agoMain PID: 10405 (gunicorn)Tasks: 3 (limit: 1152)CGroup: /system.slice/powerdns-admin.service├─10405 /opt/web/powerdns-admin/flask/bin/python3 /opt/web/powerdns-admin/flask/bin/gunicorn --workers 2 --bind unix:/opt/web/powerdns-admi├─10427 /opt/web/powerdns-admin/flask/bin/python3 /opt/web/powerdns-admin/flask/bin/gunicorn --workers 2 --bind unix:/opt/web/powerdns-admi└─10428 /opt/web/powerdns-admin/flask/bin/python3 /opt/web/powerdns-admin/flask/bin/gunicorn --workers 2 --bind unix:/opt/web/powerdns-admiAug 10 16:45:16 ubuntu-01 systemd[1]: Started PowerDNS-Admin.
Aug 10 16:45:17 ubuntu-01 gunicorn[10405]: [2018-08-10 16:45:17 +0000] [10405] [INFO] Starting gunicorn 19.7.1
Aug 10 16:45:17 ubuntu-01 gunicorn[10405]: [2018-08-10 16:45:17 +0000] [10405] [INFO] Listening at: unix:/opt/web/powerdns-admin/powerdns-admin.sock (
Aug 10 16:45:17 ubuntu-01 gunicorn[10405]: [2018-08-10 16:45:17 +0000] [10405] [INFO] Using worker: sync
Aug 10 16:45:17 ubuntu-01 gunicorn[10405]: [2018-08-10 16:45:17 +0000] [10427] [INFO] Booting worker with pid: 10427
Aug 10 16:45:17 ubuntu-01 gunicorn[10405]: [2018-08-10 16:45:17 +0000] [10428] [INFO] Booting worker with pid: 10428

为Powerdns-Admin安装和配置Nginx

使用以下命令安装Nginx:

sudo apt-get install nginx

配置Nginx

sudo vim /etc/nginx/conf.d/powerdns-admin.conf

添加如下内容:

server {listen *:80;server_name               powerdns-admin.example.com www.powerdns-admin.example.com;index                     index.html index.htm index.php;root                      /opt/web/powerdns-admin;access_log                /var/log/nginx/powerdns-admin.local.access.log combined;error_log                 /var/log/nginx/powerdns-admin.local.error.log;client_max_body_size              10m;client_body_buffer_size           128k;proxy_redirect                    off;proxy_connect_timeout             90;proxy_send_timeout                90;proxy_read_timeout                90;proxy_buffers                     32 4k;proxy_buffer_size                 8k;proxy_set_header                  Host $host;proxy_set_header                  X-Real-IP $remote_addr;proxy_set_header                  X-Forwarded-For $proxy_add_x_forwarded_for;proxy_headers_hash_bucket_size    64;location ~ ^/static/  {include  /etc/nginx/mime.types;root /opt/web/powerdns-admin/app;location ~*  \.(jpg|jpeg|png|gif)$ {expires 365d;}location ~* ^.+.(css|js)$ {expires 7d;}}location / {proxy_pass            http://unix:/opt/web/powerdns-admin/powerdns-admin.sock;proxy_read_timeout    120;proxy_connect_timeout 120;proxy_redirect        off;}
}

检查nginx语法然后重启nginx服务:

# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful# systemctl restart nginx

访问PowerDNS-Admin Web界面。

http://powerdns-admin.example.com/

单击“创建帐户”  按钮并注册用户。第一个用户将处于管理员角色。

当您使用创建的用户名和密码登录时,您应该获得如下界面:

享受在Ubuntu 18.04 / Debian 9服务器上使用PowerDNS-Admin管理PowerDNS。

使用MariaDB后端在Ubuntu 18.04 / Debian 9上安装PowerDNS和PowerDNS-Admin相关推荐

  1. debian 网络代理_在Ubuntu 18.04/Debian 10上设置系统范围的Proxy(代理)

    本文介绍在Ubuntu 18.04/Debian 10上设置系统范围的Proxy(代理)的方法,代理服务器在其基本级别上是一个计算机系统,其服务位于发出Web请求的计算机(客户端)和包含所请求内容的服 ...

  2. 在Ubuntu 18.04 Bionic Beaver上安装Wine

    目标 目标是在Ubuntu 18.04 Bionic Beaver Linux上安装Wine 操作系统及软件版本 操作系统: - Ubuntu 18.04 Bionic Beaver 软件: - Wi ...

  3. linux 添加repository,Ubuntu 18.04/16.04/Debian 9上安装add-apt-repository的方法

    如果安装了Ubuntu 18.04/Ubuntu 16.04/Debian 9系统,那么所安装的系统中可能没有commandadd-apt-repository,如果在尝试添加PPA存储库时出现错误: ...

  4. debian linux 进入单用户模式 修复系统,在单用户模式/紧急模式下启动Ubuntu 18.04/Debian 9系统...

    单用户模式也称为救援模式,还有一个紧急模式,它们是 Linux 系统在关键时刻需要修复的时候采用的故障排除模式,我们将在 Ubuntu 18.04/Debian 9 系统中启用它,救援模式和紧急模式它 ...

  5. Ubuntu 18.04 下wine的安装以及wine-mono, wine-gecko 的安装

    Ubuntu 18.04 下wine的安装以及wine-mono, wine-gecko 的安装 deepin-wine 的安装 安装方法: 问题汇总: wine 的安装 安装方法: 问题汇总: 因为 ...

  6. ubuntu 18.04 LTS 国内源安装docker

    ubuntu 18.04 LTS 国内源安装docker 检查系统内核版本 $uname -r 4.15.0-42-generic 修改apt国内源为中科大源 sudo cp /etc/apt/sou ...

  7. opencv4.0在linux下编译,Ubuntu 18.04源码编译安装OpenCV 4.0步骤

    Ubuntu 18.04下标准常规安装方法安装的OpenCV版本比较低,想尝鲜使用4.0版本,只好源码安装. 安装环境 OS:Ubuntu 18.04 64 bit 显卡:NVidia GTX 108 ...

  8. 浅谈Ubuntu 18.04.1 LTS x86_64安装,美化配置及常用软件安装配置的历程

    浅谈Ubuntu 18.04.1 LTS x86_64安装,美化及常用软件安装配置的历程 这几天入坑Ubuntu,本着双系统来的却不小心把Windows玩崩了.期间各种问题各种坑,查阅了很多文章来解决 ...

  9. ubuntu 18.04.2 server基本安装配置

    ubuntu 18.04.2 server基本安装配置 忽然相感觉一下云服务器的操作方式,今天空闲使用Windows10 + VMWare15 + ubuntu server模拟一下,以下是搞了一天的 ...

最新文章

  1. AngularJS之Filter(二)
  2. 《Windows核心编程》学习笔记(10)– 同步设备I/O与异步设备I/O
  3. 【转】解决:ORA-19602: cannot backup or copy active file in NOARCHIVELOG mode
  4. 10分钟零基础带你入门Ribbon小项目-啥?小白都能看懂?
  5. hdu 1556:Color the ball(第二类树状数组 —— 区间更新,点求和)
  6. 滚动截屏软件_华为指关节截屏不如三指截屏好用?一步到位,实践出真知
  7. 中英文国家名及手机号码前缀
  8. 高校图书馆管理系统 php 漏洞,江苏汇文Libsys图书馆管理系统几处通用SQL注入漏洞...
  9. extmail如何登陆mysql_linux下ExtMail邮件使用及管理平台
  10. 手推SVM(二)-核方法
  11. 如何写好一个打动投资人的计划书
  12. Facebook新模型SEER|图像预训练的内卷
  13. 【Excel】工作中会用到的excel操作和技巧
  14. 基于GD32实现CS5530电子秤称重方案及驱动
  15. 腾讯游戏天美工作室实习感悟
  16. 计算机网络检查方式,一种计算机网络环路检测方法与流程
  17. “手撕“ BootStrap 方法
  18. 《推荐算法工程师培养计划》
  19. 数据库优化有哪些? 分别需要注意什么
  20. 华为交换机网页配置vlan

热门文章

  1. 面向Linux的10款最佳剪贴板管理器
  2. 使用Skrollr创建视差滚动效果页面
  3. 使用Tab Bar切换视图
  4. iPhone开发之Rotation
  5. linux下PS1命令提示符设置
  6. vim Ctrl+S锁定屏幕
  7. LeetCode 88. Merge Sorted Array
  8. Qt QMYSQL driver not loaded 解决办法
  9. temp变量this变量base变量 c# 1613715552
  10. mysql-索引操作