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 密碼(要輸三次,第一次是 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 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的主要功能。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM