這一篇開始直接是PowerDNS教程,連續四篇。DNS的相關背景知識我就不介紹了,有需要的話看看
http://baike.baidu.com/link?url=QcthFpAb2QydMqcMJr9qnxjfAKKkncDG1IL6IJkfwK85N8OXXC2u2hzbuGQlRDxLU-LwzPy967ODIoL37zoqcTL8_yJEyt_2hRJIhc5oBjC
或自行百度。
目錄:
PowerDNS簡單教程(1):安裝篇(本篇)
現在開始第一篇。
之前寫過
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
就算安裝完成了,使用
重啟一下服務,就可以運行了。下一節將介紹PowerDNS的主要功能。
sudo service pdns restart