标签 Recursor 下的文章

教程 | PowerDNS的部署与使用


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

源码Github地址
PowerDNS-Admin-0.4.2.zip 下载地址

部署的话直接用的宝塔python项目部署的。就不介绍了。