海运的博客

PowerDNS使用

发布时间:February 1, 2014 // 分类:DNS // No Comments

使用EPEL源可直接安装:

yum install pdns pdns-backend-mysql

添加MySQL数据库:

create database powerdns;
grant all privileges on powerdns.* to 'powerdns'@'localhost' identified by 'password';
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              INT 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,
  primary key(id)
) Engine=InnoDB;

CREATE INDEX nametype_index ON records(name,type);
CREATE INDEX domain_id ON records(domain_id);

create table supermasters (
  ip         VARCHAR(64) NOT NULL, 
  nameserver VARCHAR(255) NOT NULL, 
  account    VARCHAR(40) DEFAULT NULL,
  PRIMARY KEY (ip, nameserver)
) Engine=InnoDB;

将SQL信息添加到PowerDNS配置文件:

launch=gmysql
gmysql-host=localhost
gmysql-user=powerdns
gmysql-password=password
gmysql-dbname=powerdns

添加域名记录:

INSERT INTO domains (name, type) values ('example.com', 'NATIVE');
insert  into `records`(`domain_id`,`name`,`type`,`content`,`ttl`,`prio`,`change_date`) values 
 (1,'example.com','SOA','localhost root@example.com 1',86400,NULL,NULL);
insert  into `records`(`domain_id`,`name`,`type`,`content`,`ttl`,`prio`,`change_date`) values
 (1,'example.com','NS','ns.example.com',86400,NULL,NULL);
insert  into `records`(`domain_id`,`name`,`type`,`content`,`ttl`,`prio`,`change_date`) values
 (1,'example.com','A','192.0.2.10',120,NULL,NULL);
insert  into `records`(`domain_id`,`name`,`type`,`content`,`ttl`,`prio`,`change_date`) values
 (1,'*.example.com','A','192.0.2.10',120,NULL,NULL);
insert  into `records`(`domain_id`,`name`,`type`,`content`,`ttl`,`prio`,`change_date`) values
 (1,'ns.example.com','A','192.0.2.10',120,NULL,NULL);

看看效果:

/etc/init.d/pdns monitor

PHP:

<?php
   try { 
      $dbo = new PDO('mysql:host=localhost;dbname=powerdns', 'powerdns', 'password');
   } catch (PDOException $e) { 
      $error = $e->getMessage();
      die("PDO Execute Error : ".$error."\n");       
   }
   $domain = 'www.haiyun.me';
   $sql = "SELECT `id` FROM domains WHERE NAME = \"$domain\"";
   $stmt = $dbo->query($sql);
   //var_dump($stmt);
   $result = $stmt->fetch(PDO::FETCH_ASSOC);
   var_dump($result);
   if ($result) {
      $id = $result['id'];
   } else {
      $sql = "INSERT INTO domains (name, TYPE) VALUES (\"$domain\", 'NATIVE')";
      $dbo->query($sql);
      $id = $dbo->lastInsertId();
   }
   $sql = "INSERT INTO `records` (`domain_id`, `name`, `TYPE`, `content`, `ttl`) VALUES (:id, :name, :type, :content, :ttl)";
   $stmt = $dbo->prepare($sql);    
   $stmt->execute(array(':id'=>$id, ':name'=>'a.'.$domain, ':type'=>'A', ':content'=>'192.168.1.1', ':ttl'=>'600')); 
   $stmt->execute(array(':id'=>$id, ':name'=>'b.'.$domain, ':type'=>'A', ':content'=>'192.168.1.1', ':ttl'=>'600')); 
?>

标签:dns

评论已关闭

分类
最新文章
最近回复
  • opnfense: 谢谢博主!!!解决问题了!!!我之前一直以为内置的odhcp6就是唯一管理ipv6的方式
  • liyk: 这个方法获取的IPv6大概20分钟之后就会失效,默认路由先消失,然后Global IPV6再消失
  • 海运: 不好意思,没有。
  • zongboa: 您好,請問一下有immortalwrt設定guest Wi-Fi的GUI教學嗎?感謝您。
  • 海运: 恩山有很多。
  • swsend: 大佬可以分享一下固件吗,谢谢。
  • Jimmy: 方法一 nghtp3步骤需要改成如下才能编译成功: git clone https://git...
  • 海运: 地址格式和udpxy一样,udpxy和msd_lite能用这个就能用。
  • 1: 怎么用 编译后的程序在家里路由器内任意一台设备上运行就可以吗?比如笔记本电脑 m参数是笔记本的...
  • 孤狼: ups_status_set: seems that UPS [BK650M2-CH] is ...