zoukankan      html  css  js  c++  java
  • PowerDNS简单教程(1):安装篇

    这一篇开始直接是PowerDNS教程,连续四篇。DNS的相关背景知识我就不介绍了,有需要的话看看
    http://baike.baidu.com/link?url=QcthFpAb2QydMqcMJr9qnxjfAKKkncDG1IL6IJkfwK85N8OXXC2u2hzbuGQlRDxLU-LwzPy967ODIoL37zoqcTL8_yJEyt_2hRJIhc5oBjC 
    或自行百度。
     
    目录:
     
    现在开始第一篇。
    之前写过PowerDNS的安装,不过那篇是有问题的,安装完之后还是不能正常使用。后来经过多方探索,各种重装机、装虚拟机、做快照和克隆,终于把PowerDNS装好了——实际上是特别简单的,因为系统是Ubuntu,有apt神器。
    以下是参考这两篇网页安装的(后面一篇是 PowerDNS官网的安装,可以看到,使用 centos的话用yum 也是一样简便的):
    http://www.unixmen.com/how-to-install-powerdns-on-ubuntu-14-04
    https://doc.powerdns.com/md/authoritative/installation/
    鉴于我还是对 Ubuntu比较熟悉,所以还是写一下 Ubuntu下的安装方法。安装过程如下:
    1)安装 mysql
    sudo apt-get -y install mysql-client mysql-server
    中间要输入 root用户密码(两次)
    设置 mysql
    sudo vim /etc/mysql/my.cnf
    找到 bind-address          = 127.0.0.1 这行,把这行注释掉
    sudo service mysql restart
     
    2)安装 powerdns
    sudo apt-get -y install pdns-server pdns-backend-mysql
    中间要输入 pdns-backend-mysql密码(要输三次,第一次是 mysqlroot 用户的密码,后两次是用作 pdns后端的密码)
    设置 powerdns
    cd /etc/powerdns
    保留 pdns.conf文件及pdns.d 目录,删掉其他文件,包括 pdns.d目录中的所有文件(保留空目录),然后 sudo vim pdns.conf修改配置,里面找到对应的参数位置:
    launch=gmysql    # pdns 后端
     
    gmysql-host=localhost
    gmysql-user=pdns
    gmysql-password=(这里是刚才安装 backend时候后两次输入的密码) 
    gmysql-dbname=pdns
    gmysql-port=3306    # 如果对 mysql进行了设置,就把这里的端口也改掉
     
    query-logging=yes
    webserver=yes    # 开启 powerdns的web 状态监控 
    webserver-address=127.0.0.1
    webserver-password=(这个我也不知道是干嘛的,就写了个 pdns)
    webserver-port=8081
    有两点需要说明一下:
    几个gmysql-* 的参数原来配置文件里是没有的,要自己加上。其实这几个参数是原来的 pdns.d目录下的pdns.local.gmysql.conf 文件里面的,不过配置文件可以写在一起,写多了乱,所以就放在这里好啦。
    网上介绍的powerdns 安装的博客通常有 use-logfile和日志文件存放位置的参数,实际上是不能使用的,后面启动会报错参数不存在。但是诡异的是 pdns.conf文件里面本身还有这两个参数,不是后加的。不知为何。反正 log的作用不是很大,不用也罢。
     
    就这么简单?老子辛辛苦苦折腾了两个多礼拜才装上,还不好使,你丫才装了十几分钟,就特么这么简单?没错,就这么简单。
     
    3)建立 mysql数据库表:
    mysql -updns -p 输入密码进入mysql,然后 use pdns;进入pdns 数据库中建立表及相关索引:
    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,
      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);
    其实最重要的还是 domainsrecords 这两个表,尤其是 recordspdns 在查找域名的时候,会到这个表里来找。如果没有这个表的话无法查询。
    可以先装模作样的往数据库里面灌点数据,便于测试:
    mysql> INSERT INTO domains (name, type) values ('example.com', 'NATIVE');
    INSERT INTO records (domain_id, name, content, type,ttl,prio)
    VALUES (1,'example.com','localhost ahu@ds9a.nl 1','SOA',86400,NULL);
    INSERT INTO records (domain_id, name, content, type,ttl,prio)
    VALUES (1,'example.com','dns-us1.powerdns.net','NS',86400,NULL);
    INSERT INTO records (domain_id, name, content, type,ttl,prio)
    VALUES (1,'example.com','dns-eu1.powerdns.net','NS',86400,NULL);
    INSERT INTO records (domain_id, name, content, type,ttl,prio)
    VALUES (1,'www.example.com','192.0.2.10','A',120,NULL);
    INSERT INTO records (domain_id, name, content, type,ttl,prio)
    VALUES (1,'mail.example.com','192.0.2.12','A',120,NULL);
    INSERT INTO records (domain_id, name, content, type,ttl,prio)
    VALUES (1,'localhost.example.com','127.0.0.1','A',120,NULL);
    INSERT INTO records (domain_id, name, content, type,ttl,prio)
    VALUES (1,'example.com','mail.example.com','MX',120,25);
     
    至此, PowerDNS就算安装完成了,使用
    sudo service pdns restart
    重启一下服务,就可以运行了。下一节将介绍PowerDNS的主要功能。
  • 相关阅读:
    约瑟夫
    用过的ps操作
    guns框架试用笔记
    让使用WebForm的.aspx文件写的WebApi能够跨域访问
    DevExpress的GridView的行变和列变
    SSMS18.0缺少调试功能
    EF_CodeFirst框架版本问题
    微信小程序框架了解2---js的写法
    微信小程序框架了解1---总体了解
    Chrome浏览器写代码片段的地方
  • 原文地址:https://www.cnblogs.com/anpengapple/p/5205130.html
Copyright © 2011-2022 走看看