智慧DNS部署文件(基於powerDNS)
阿新 • • 發佈:2022-05-12
1.安裝libmaxminddb
wget https://github.com/maxmind/libmaxminddb/archive/refs/tags/1.6.0.tar.gz
./configure
make -j4
make check
make install
echo /usr/local/lib >> /etc/ld.so.conf.d/local.conf
ldconfig
下載GeoLite2免費地址庫
https://dev.maxmind.com/geoip/geolite2-free-geolocation-data?lang=en
這裡使用GeoLite2-City
文件資料夾內已附有資料庫,無需重新下載。GeoLite2免費地址庫支援線上更新,需要到官網註冊賬號申請免費license
2.安裝Pdns Authoritative Server(權威伺服器)
這裡需要預先安裝好mysql
wget https://downloads.powerdns.com/releases/pdns-4.6.0.tar.bz2
tar xvf pdns-4.6.0.tar.bz2
cd pdns-4.6.0
開啟mysql和geoip後端、並指定mysql目錄、開啟lua-record
./configure --prefix=/usr/local/powerdns --with-modules="bind gmysql geoip" --with-mysql=/usr/local/mysql --enable-verbose-logging --enable-lua-records make -j4 && make install
遇到錯誤
configure: error: cannot find Boost headers version >= 1.42.0
解決
yum install boost-devel -y
錯誤
configure: error: Could not find yaml-cpp
解決
yum install yaml-cpp yaml-cpp-devel -y
建立powerdns資料庫、資料表
mysql -uroot -p create database pdns; use 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 UNSIGNED DEFAULT NULL, account VARCHAR(40) CHARACTER SET 'utf8' DEFAULT NULL, PRIMARY KEY (id) ) Engine=InnoDB CHARACTER SET 'latin1'; CREATE UNIQUE INDEX name_index ON domains(name); CREATE TABLE records ( id BIGINT 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, disabled TINYINT(1) DEFAULT 0, ordername VARCHAR(255) BINARY DEFAULT NULL, auth TINYINT(1) DEFAULT 1, PRIMARY KEY (id) ) Engine=InnoDB CHARACTER SET 'latin1'; CREATE INDEX nametype_index ON records(name,type); CREATE INDEX domain_id ON records(domain_id); CREATE INDEX ordername ON records (ordername); CREATE TABLE supermasters ( ip VARCHAR(64) NOT NULL, nameserver VARCHAR(255) NOT NULL, account VARCHAR(40) CHARACTER SET 'utf8' NOT NULL, PRIMARY KEY (ip, nameserver) ) Engine=InnoDB CHARACTER SET 'latin1'; 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) CHARACTER SET 'utf8' DEFAULT NULL, comment TEXT CHARACTER SET 'utf8' NOT NULL, PRIMARY KEY (id) ) Engine=InnoDB CHARACTER SET 'latin1'; 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 CHARACTER SET 'latin1'; 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, published BOOL DEFAULT 1, content TEXT, PRIMARY KEY(id) ) Engine=InnoDB CHARACTER SET 'latin1'; 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 CHARACTER SET 'latin1'; CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm); ALTER TABLE records ADD CONSTRAINT `records_domain_id_ibfk` FOREIGN KEY (`domain_id`) REFERENCES `domains` (`id`) ON DELETE CASCADE ON UPDATE CASCADE; ALTER TABLE comments ADD CONSTRAINT `comments_domain_id_ibfk` FOREIGN KEY (`domain_id`) REFERENCES `domains` (`id`) ON DELETE CASCADE ON UPDATE CASCADE; ALTER TABLE domainmetadata ADD CONSTRAINT `domainmetadata_domain_id_ibfk` FOREIGN KEY (`domain_id`) REFERENCES `domains` (`id`) ON DELETE CASCADE ON UPDATE CASCADE; ALTER TABLE cryptokeys ADD CONSTRAINT `cryptokeys_domain_id_ibfk` FOREIGN KEY (`domain_id`) REFERENCES `domains` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
修改pdns.conf
local-address=0.0.0.0
local-port=5300
launch=gmysql,geoip #開啟mysql、gepip後端
gmysql-host=localhost
gmysql-port=3306
gmysql-user=root
gmysql-password=123456
gmysql-dbname=pdns
write-pid=yes
daemon=yes
api=yes #開啟api
api-key=自定義 #配置api訪問金鑰
webserver=yes
webserver-address=0.0.0.0
webserver-allow-from=0.0.0.0/0 #api允許訪問來源
webserver-port=8081 #api訪問埠
config-dir=/usr/local/powerdns/etc #指定pdns配置檔案目錄
enable-lua-records=shared #開啟lua-record
geoip-database-files=/usr/local/powerdns/etc/GeoLite2-City.mmdb #指定geoip資料庫
啟動pdns
/usr/local/powerdns/sbin/pdns_server