PowerDNS 是一个跨平台的开源 DNS 服务组件, 它是高性能的域名服务器, 除了支持普通的 BIND 配置文件, PowerDNS 还可以从 MySQL,Oracle,PostgreSQL 等的数据库读取数据. PowerDNS 安装了 Poweradmin(基于 PHP 实现), 能实现 web 管理 DNS 记录, 非常方便.
PowerDNS 官网: https://www.powerdns.com/
PowerDNS 文档: https://doc.powerdns.com/
Poweradmin 官网: http://www.poweradmin.org/
准备一台主机 CentOS 7.5 (192.168.21.104)
配 EPEL 源
- #VIM epel.repo
- name=epel repo
- baseurl= http://mirror.sohu.com/fedora-epel/7/x86_64/
- gpgcheck=0
- enabled=1
安装包: 基于 EPEL 源
- #yum -y install pdns pdns-backend-MySQL
- #rpm -q mariadb-server
- #systemctl start mariadb
- #systemctl enable mariadb
- #MySQL
利用下面两条 sql 语句和链接创建 pdsql.sql 的脚本: 准备 mariadb 中的数据库, 表和用户
- create database powerdns;
- grant all on powerdns.* to 'powerdns'@'localhost' identified by 'magedu';
- VIM pdsql.sql // 创建 pdsql.sql, 添加下面内容
- create database powerdns;
- grant all on powerdns.* to 'powerdns'@'localhost' identified by 'magedu';
- 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 DEFAULT NULL,
- account VARCHAR(40) DEFAULT NULL,
- PRIMARY KEY (id)
- ) Engine=InnoDB;
- 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;
- CREATE INDEX nametype_index ON records(name,type);
- CREATE INDEX domain_id ON records(domain_id);
- CREATE INDEX recordorder ON records (domain_id, ordername);
- CREATE TABLE supermasters (
- ip VARCHAR(64) NOT NULL,
- nameserver VARCHAR(255) NOT NULL,
- account VARCHAR(40) NOT NULL,
- PRIMARY KEY (ip, nameserver)
- ) Engine=InnoDB;
- 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) NOT NULL,
- comment VARCHAR(64000) NOT NULL,
- PRIMARY KEY (id)
- ) Engine=InnoDB;
- CREATE INDEX comments_domain_id_idx ON comments (domain_id);
- 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;
- 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;
- 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;
- CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);
- #MySQL <pdns.sql
配置 PowerDNS 使用 mariadb 作为后台数据存储
- #VIM /etc/pdns/pdns.conf // 查找到包含 launch= 的行, 修改并添加下面的内容
- launch=bind // 删除此行
- launch=gmysql
- gmysql-host=localhost
- gmysql-port=3306
- gmysql-dbname=powerdns
- gmysql-user=powerdns
- gmysql-password=magedu
启动 pdns 服务前, 确保 53 端口未被占用
- #ss -ntl
- #lsof -i:53 // 显示所有打开 53 端口的进程
- #kill -9 1382
- #systemctl start pdns
- #systemctl enable pdns
安装 httpd 和 PHP 相关包
- #yum -y install httpd PHP PHP-devel PHP-gd PHP-mcrypt PHP-imap PHP-ldap PHP-MySQL PHP-odbc PHP-Pear PHP-xml PHP-xmlrpc PHP-mbstring PHP-mhash gettext
- #systemctl start httpd
- #systemctl enable httpd
- #cd /var/www/html
- #wget
- #tar xvf poweradmin-2.1.7.tgz
- #mv poweradmin-2.1.7 pdns
浏览器输入下面地址, 按提示进一步配置:
http://192.168.21.104/pdns/install/
操作进行到第 5 步:
登陆 mariadb, 执行以下语句:
- MariaDB [powerdns]> GRANT SELECT, INSERT, UPDATE, DELETE
- -> ON powerdns.*
- -> TO 'powerdnsadmin'@'localhost'
- -> IDENTIFIED BY 'centos';
- Query OK, 0 rows affected (0.00 sec)
操作进行到第 6 步:
- #cd /var/www/HTML/pdns
- #VIM inc/config.inc.PHP
- <?PHP
- $db_host = 'localhost';
- $db_user = 'powerdnsadmin';
- $db_pass = 'centos';
- $db_name = 'powerdns';
- $db_type = 'mysql';
- $db_layer = 'PDO';
- $session_key = 'lPubca)P32J)*9b5JTX0MiqE^erq948PI[0[Zt=0%x)Oc0';
- $iface_lang = 'en_EN';
- $dns_hostmaster = 'powerdnsserver';
- $dns_ns1 = '192.168.21.104';
- $dns_ns2 = '';
操作进行到第 7 步, 配置完成:
#rm -rf /var/www/HTML/pdns/install/
登陆 powerdns:
http://192.168.21.104/pdns/
添加域: b.com
给 b.com 这个域添加一条记录: www.b.com 8.8.8.8
在 DNSserver 上测试:
- [root@centos7 pdns]#dig www.b.com @192.168.21.104
- ; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<>> www.b.com @192.168.21.104
- ;; global options: +cmd
- ;; Got answer:
- ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12657
- ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
- ;; WARNING: recursion requested but not available
- ;; OPT PSEUDOSECTION:
- ; EDNS: version: 0, flags:; udp: 1680
- ;; QUESTION SECTION:
- ;www.b.com. IN A
- ;; ANSWER SECTION:
- www.b.com. 86400 IN A 8.8.8.8
- ;; Query time: 2 msec
- ;; SERVER: 192.168.21.104#53(192.168.21.104)
- ;; WHEN: Tue Mar 05 15:19:35 CST 2019
- ;; MSG SIZE rcvd: 54
来源: http://www.bubuko.com/infodetail-2979783.html