PowerDNS简单教程(1):安装篇

这一篇开始直接是PowerDNS教程,连续四篇。DNS的相关背景知识我就不介绍了,有需要的话看看

http://baike.baidu.com/link?url=QcthFpAb2QydMqcMJr9qnxjfAKKkncDG1IL6IJkfwK85N8OXXC2u2hzbuGQlRDxLU-LwzPy967ODIoL37zoqcTL8_yJEyt_2hRJIhc5oBjC

或自行百度。

目录:

PowerDNS简单教程(1):安装篇(本篇)

PowerDNS简单教程(2):功能篇

PowerDNS简单教程(3):管理篇

PowerDNS简单教程(4):优化篇

现在开始第一篇。

之前写过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密码(要输三次,第一次是 mysql的root 用户的密码,后两次是用作 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);

其实最重要的还是 domains和records 这两个表,尤其是 records,pdns 在查找域名的时候,会到这个表里来找。如果没有这个表的话无法查询。

可以先装模作样的往数据库里面灌点数据,便于测试:

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 [email protected] 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的主要功能。

时间: 2025-01-11 11:00:12

PowerDNS简单教程(1):安装篇的相关文章

PowerDNS简单教程(2):功能篇

目录: PowerDNS简单教程(1):安装篇 PowerDNS简单教程(2):功能篇(本篇) PowerDNS简单教程(3):管理篇 PowerDNS简单教程(4):优化篇 安装完PowerDNS之后,它就已经在运行了.可通过 ps -ef |grep pdns看到pdns 的进程——通常 pdns是有两个进程在运行的. 通过apt安装的PowerDNS,主要使用的文件在如下目录中: /etc/default/pdns /init.d/pdns /powerdns/pdns.conf /usr

PowerDNS简单教程(3):管理篇

目录: PowerDNS简单教程(1):安装篇 PowerDNS简单教程(2):功能篇 PowerDNS简单教程(3):管理篇(本篇) PowerDNS简单教程(4):优化篇 说到管理,其实是对于PowerDNS的管理.我们可以通过Poweradmin来管理 PowerDNS.我参考了这个网页 http://www.unixmen.com/install-poweradmin-a-web-based-control-panel-for-powerdns-in-linux/ 来安装 Powerad

Thrift 基础教程(一)安装篇

1.Thrift简介 Thrift是一款由Fackbook开发的可伸缩.跨语言的服务开发框架,该框架已经开源并且加入的Apache项目.Thrift主要功能是:通过自定义的Interface Definition Language(IDL),可以创建基于RPC的客户端和服务端的服务代码.服务代码的生成是通过Thrift内置的代码生成器来实现的.Thrift 的跨语言性体现在,它可以生成C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#,

Thrift 基础教程(二)编码篇

上接Thrift 基础教程(一)安装篇,今天来介绍下Thrift的编码过程,首先通过命令行生成框架代码. 命令格式如下: thrift -gen language xxx.thrift 1.首先介绍下那个xxx.thrift文件,我们需要先创建myserver.thrift文件,这个接口主要定义服务接口和数据格式. 介绍一下thrift文件的语法格式,以我写的myserver.thrift说明. /** * thrift中的数据类型 * bool 布尔类型 * byte 同java里的byte

简单几步制作 Windows 10 正式版U盘可启动安装盘图文教程 (全新安装Win10)

简单几步制作 Windows 10 正式版U盘可启动安装盘图文教程 (全新安装Win10) 相信不少朋友现在已经下载好 Windows 10 RTM 正式版的镜像文件了,虽然说微软提供了在原系统基础上升级的方式,但对于很多追求干净.稳定的朋友还是想要进行全新的安装的. 虽然将 Win10 系统的 ISO 镜像刻录成光盘来安装非常简单,但现在很多电脑已经不再配备光驱了,怎样制作 USB 的可启动 Windows 10 U盘安装盘成了很多同学的需求.今天吉他锅就给大家带来快速创建 Win10 启动安

史上最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现(Eureka)

最新Finchley版本请访问:https://www.fangzhipeng.com/springcloud/2018/08/30/sc-f1-eureka/或者http://blog.csdn.net/forezp/article/details/81040925 spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选.分布式会话等等.它运行环境简单,可以在开发人员的电脑上跑.另外说明spring cl

python3.7 下easygui 0.98的安装和简单教程

安装方法 1.去官网下载最新版的ZIP包 发现是easygui-0.97.zip,没关系,解压到任意地方 找到easygui.py,拷贝进电脑Python安装目录下的Lib\site-packages文件夹下 这时打开IDLE,import easygui,回车,如果没报错,那就是识别到了. 但是运行时会报错,比如 AttributeError: module 'easygui' has no attribute 'msgbox' 不要急,这时打开cmd,直接输入: 输入pip uninstal

SQLAlchemy 教程 —— 基础入门篇

SQLAlchemy 教程 -- 基础入门篇 一.课程简介 1.1 实验内容 本课程带领大家使用 SQLAlchemy 连接 MySQL 数据库,创建一个博客应用所需要的数据表,并介绍了使用 SQLAlchemy 进行简单了 CURD 操作及使用 Faker 生成测试数据. 1.2课程知识点 学会用 SQLALchemy 连接数据库(MySQL, SQLite, PostgreSQL), 创建数据表: 掌握表数据之间一对一,一对多及多对多的关系并能转化为对应 SQLAlchemy 描述: 掌握使

Systemd 入门教程:实战篇

Systemd 入门教程:实战篇 上一篇文章,介绍了 Systemd 的主要命令,这篇文章主要介绍如何使用 Systemd 来管理我们的服务,以及各项的含义: 一.开机启动 对于那些支持 Systemd 的软件,安装的时候,会自动在/usr/lib/systemd/system目录添加一个配置文件,如果你想让该软件开机启动,就执行下面的命令(以httpd.service为例). $ sudo systemctl enable httpd 上面的命令相当于在/etc/systemd/system目