PowerDNS简介
PowerDNS是一个跨平台的开源DNS服务组件,成立于20世纪90年代末,是开源DNS软件、服务和支持的主要供应商。它提供了三个核心组件:Authoritative、Recursor和dnsdist,分别作为权威服务器、域名递归解析和DNS服务负载均衡来使用,每个服务独立存在,可根据需求进行部署。PowerDNS支持多种数据库后端,包括MySQL、PostgreSQL和SQLite等,以适应不同的实际需求。在Windows环境下,PowerDNS使用Access的mdb文件记录DNS信息,而在Linux/Unix环境下则使用MySQL来记录。
PowerDNS的主要特点包括高性能、可扩展性、安全性和灵活性。它采用多线程和多进程的架构,能够处理大量的DNS查询请求,并提供快速的响应时间。同时,PowerDNS支持分布式部署,可以通过添加更多的服务器来扩展系统的容量和吞吐量。在安全性方面,PowerDNS具有DNSSEC(DNS安全扩展)支持和防止DNS缓存污染等功能。
安装
- # 这边是用ubuntu。
- sudo apt install pdns pdns-backend-mysql pdns-recursor
配置
mysql
mysql的服务上网找,我这里用的宝塔。
创建pdns_server数据库
- 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 BIGINT AUTO_INCREMENT,
- domain_id INT DEFAULT NULL,
- name VARCHAR(255) DEFAULT NULL,
- type VARCHAR(10) DEFAULT NULL,
- content BLOB(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 BLOB(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);
pdns server
- vim /etc/pdns/pdns.conf
- #设置数据库相关的
- launch=gmysql
- gmysql-host=10.0.0.110
- gmysql-port=3306
- gmysql-dbname=pdns_server
- #管理数据库的相关用户和密码
- gmysql-user=pdns_server
- gmysql-password=pdns_server
- #访问权限
- allow-axfr-ips=0.0.0.0/0,::1
- allow-dnsupdate-from=0.0.0.0/0,::1
- allow-notify-from=0.0.0.0/0,::/0
- allow-unsigned-notify=yes
- also-notify=10.0.0.10
- #daemon 启动
- daemon=yes
- disable-axfr=no
- guardian=no
- #是否master
- master=yes
- #是否slave
- slave=no
- #启动权限
- setgid=pdns
- setuid=pdns
- #打印日志
- log-dns-details=yes
- log-dns-queries=no
- loglevel=6
- log-timestamp=yes
- logging-facility=0
- #开启api
- api=yes
- api-key=dnsadmin1syn
- #启动webserver 监控
- webserver=yes
- webserver-address=0.0.0.0
- webserver-allow-from=0.0.0.0/0
- webserver-port=8081
- #监听的地址端口
- local-address=0.0.0.0
- local-port=54
- #记录query 日志
- query-logging=yes
pdns-recursor 递归解析
- vim /etc/pdns-recursor/recursor.conf
- #允许访问的地址
- allow-from=0.0.0.0/0
- #开启日志
- disable-syslog=yes
- #关闭dnssec 转发有用
- dnssec=off
- #forward-zones是只转发,不递归 少用
- #forward-zones=hexug.com=127.0.0.1:54
- #forward-zones-recurse是找不到就递归,找的到就转发,用逗号分隔 这里是将pdns中定义的域名,转发到pdns服务的54端口上
- forward-zones-recurse=test.com=127.0.0.1:54,abc.com=127.0.0.1:54,.=114.114.114.114
- #绑定在所有端口商
- local-address=0.0.0.0
- local-port=53
- log-common-errors=yes
- security-poll-suffix=
- setgid=pdns-recursor
- setuid=pdns-recursor
启动服务并且设置为开机启动
- sudo systemctl start pdns
- sudo systemctl start pdns-recursor
- sudo systemctl enable pdns
- sudo systemctl enable pdns-recursor
WEB管理界面 phpDNSadmin
部署的话直接用的宝塔python项目部署的。就不介绍了。