搭建自己的DNS服务器--PowerDNS

时间:2024-02-18 09:10:09

1. PowerDNS简介:

  在Linux平台下配置DNS服务器,大家一定首选想到的是BIND,不错BIND绝对是DNS服务器软件的老大,全球13台根域名服务器中有10台使用的是BIND。不过使用开源软件有一个很大的好处就是无论你要做什么永远会有不止一种选择,如果你不想使用BIND配置DNS服务器,那么PowerDNS会是一个不错的选择。

  PowerDNS(官方网站:http://www.powerdns.com/)是一个跨平台的开源DNS服务组件,PowerDNS同时有Windows和Linux/Unix的版本。PowerDNS在Windows下可以使用Access的mdb文件记录DNS信息,而在Linux/Unix下则可以使用MySQL来记录DNS信息。

2. 搭建PowerDNS 服务器

  2.1 安装环境

[root@powerdns-test ~]# cat /etc/issue
CentOS release 6.3 (Final)
Kernel \r on an \m
[root@powerdns-test ~]# uname -r
2.6.32-279.el6.x86_64

  2.2 架构分析

 

  2.3 配置Mysql

    在Linux操作系统我们需要将PowerDNS的数据保存到MySQL数据库中,所以首先需要在服务器上部署MySQL环境。(注:实际生产环境可以考虑DB和web分离,应为测试的服务器数量有限,所以将DB和web放在同一台机器上。 

#安装Mysql
[root@powerdns-test ~]# yum install mysql-server mysql-client -y													
[root@powerdns-test ~]# /etc/init.d/mysqld start
[root@powerdns-test yum.repos.d]# netstat -launpt | grep mysql
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      25307/mysqld 
#开启远程访问Mysql的功能
[root@powerdns-test yum.repos.d]# sed -i -e \'s/bind-address/#bind-address/\' /etc/my.cnf     

[root@powerdns-test yum.repos.d]# /etc/init.d/mysqld restart
Stopping mysqld:                                           [  OK  ]
Starting mysqld:                                           [  OK  ]

#为Mysql设置密码
mysql> grant all on *.* to \'root\'@\'localhost\' IDENTIFIED BY \'123321\' with grant option;     
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

#创建powerdns的数据库(DnsDB)
mysql> create database DnsDB;																												
Query OK, 1 row affected (0.00 sec)

#建立一个名为pdnsuser的用户密码是:"DnsTest",用于PowerDNS服务访问dnsdb数据库。
mysql> grant all on DnsDB.* TO \'pdnsuser\'@\'localhost\' IDENTIFIED BY \'DnsTest\' ; 		
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

#打开dnsdb数据库。
mysql> use dnsdb;																							  
Database changed

#建立PowerDNS所需的表。
mysql> 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)
    -> );
Query OK, 0 rows affected (0.09 sec)
 
mysql> CREATE TABLE records (
    -> id INT auto_increment,
    -> domain_id INT DEFAULT NULL,
    -> name VARCHAR(255) DEFAULT NULL,
    -> type VARCHAR(6) DEFAULT NULL,
    -> content VARCHAR(255) DEFAULT NULL,
    -> ttl INT DEFAULT NULL,
    -> prio INT DEFAULT NULL,
    -> change_date INT DEFAULT NULL,
    -> primary key(id)
    -> );
Query OK, 0 rows affected (0.06 sec)
 
mysql> CREATE TABLE supermasters (
    -> ip VARCHAR(25) NOT NULL,
    -> nameserver VARCHAR(255) NOT NULL,
    -> account VARCHAR(40) DEFAULT NULL
    -> );
Query OK, 0 rows affected (0.05 sec)
 
#建立索引,方便数据查询。
 mysql> CREATE UNIQUE INDEX name_index ON domains(name);				      
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0
 
mysql> CREATE INDEX rec_name_index ON records(name);
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0
 
mysql> CREATE INDEX nametype_index ON records(name,type);
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0
 
mysql> CREATE INDEX domain_id ON records(domain_id);
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> quit;

   2.4 编译安装pdns

#安装编译环境
[root@powerdns-test ~]#yum -y install gcc gcc-c++ autoconf automake libtool libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers pcre pcre-devel kernel-devel fontconfig fontconfig-devel gd gd-devel
[root@powerdns-test ~]# wget  https://downloads.powerdns.com/releases/pdns-3.4.6.tar.bz2
[root@powerdns-test ~]# mv pdns-3.4.6.tar.bz2 /tmp/
[root@powerdns-test tmp]# cd /tmp
[root@powerdns-test pdns-3.4.6]# tar -xf pdns-3.4.6.tar.bz2 
[root@powerdns-test tmp]# cd pdns-3.4.6
[root@powerdns-test pdns-3.4.6]# vim README
[root@powerdns-test pdns-3.4.6]# ./bootstrap 
[root@powerdns-test pdns-3.4.6]# ./configure --with-modules="bind gmysql" --prefix=/usr/local/pdns-3.4.6
[root@powerdns-test pdns-3.4.6]# make
[root@powerdns-test pdns-3.4.6]# make install

  

 

 3. 异常处理

  3.1 安装powerdns报错

  

  

 

 

提示没有boost 环境,解决方法:yum install boost* -y 

 

 提示没有mysql.h,解决方法:yum -y install mysql mysql-devel