安装部署PowerDNS--实现内网DNS解析(use)

使用PowerDNS实现内网DNS解析_powerdns-admin-CSDN博客

https://www.cnblogs.com/guangdelw/p/17348982.html

一、概念介绍

PowerDNS是一个域名解析服务,官网提供了三个组件:AuthoritativeRecursordnsdist,分别用来作为权威服务器、域名递归解析、dns服务负载均衡来提供dns服务,每个服务独立存在,可按需部署。PowerDNS域名区域数据不再使用bind格式文件存储,而直接使用后端连接MySQL数据库,所有记录都存储在数据库中。

  1. Authoritative:作为权威服务器使用,仅提供域名解析服务,数据来源于配置文件指定的后端,若后端不存在或者宕机解析不可用,没有递归作用。它也支持普通bind区域解析文件,同时也支持数据库解析记录,包括但不限于 MySQL、PostgreSQL、SQLite3、Microsoft SQL Server、LDAP、纯文本文件和许多其他通过 ODBC 的 SQL 数据库。 数据库的主从复制(replication)也是支持的。
  2. Recursor:被人称为缓存服务器,用于进行域名的递归解析, 用于递归查询服务。
  3. dnsdist:也被称为DNS分发器DNS负载均衡器,用于进行DNS服务负载均衡。它本身并不提供解析服务,而是将DNS流量路由到指定服务器,为用户提供最佳解析性能,同时也可实现应用流量分摊。
  4. PowerDNS-Admin: PowerDNS-Admin提供一套解决方案,支持Web UI调用API管理域名CUDR;支持域名权限控制和子域委托;支持SAML / LDAP / Active Directory 用户认证等等。PowerDNS-Admin也需要单独一个实例数据库,存储PowerDNS-Admin相关数据,如用户名和密码以及PowerDNS-Admin相关的格式数据。

二、部署环境

公司内部安装powerdns实现局域网服务dns解析,避免通过ip访问。

系统: CentOS 7.9
mysql版本: 5.7.33
pdns版本: 4.4.1
pdns-recursor版本: 4.4.2
PowerDNS-admin版本: 0.2.3
DNS服务器主机: 10.x.x.109
测试服务器ip: 10.y.y.195

2.1 安装mysql

docker network create mysql
mkdir /data/mysql/data -p

使用docker方式安装mysqldocker-compose.yml如下所示:

---
version: '3.7'

services:
  mysql:
    hostname: mysql
    container_name: mysql
    restart: always
    image: mysql:5.7.33
    ports:
      - 3306:3306
    command: [
      '--default-authentication-plugin=mysql_native_password',
      '--max_connections=5000',
      '--expire_logs_days=5',
      '--character-set-server=utf8mb4',
      '--collation-server=utf8mb4_unicode_ci',
      '--slow_query_log=on',
      '--long_query_time=2',
      '--slow_query_log_file=/var/lib/mysql/slow_query.log'
    ]
    environment:
      MYSQL_DATABASE: powerdns
      MYSQL_ROOT_PASSWORD: XpWxxxxx0WmE
      MYSQL_USER: normal
      MYSQL_PASSWORD: 2GVoxxxxxtUsI5y
    volumes:
      - /data/mysql/data:/var/lib/mysql
      - /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime:ro
      - ./my.cnf:/etc/mysql/my.cnf
    networks:
      - mysql

networks:
  mysql:
    #external: true
    driver: bridge

mysql配置my.cnf如下:

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
secure-file-priv= NULL
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

slow_query_log = on
long_query_time = 2
slow_query_log_file = /var/lib/mysql/slow_query.log
log_queries_not_using_indexes = ON

max_connections = 4000

skip-name-resolve
#lower_case_table_names = 1

# Custom config should go here
!includedir /etc/mysql/conf.d/

2.3 安装pdns及pdns连接mysql插件

2.3.1 pdns安装

yum install epel-release yum-plugin-priorities

# 安装4.4版本pdns
curl -o /etc/yum.repos.d/powerdns-auth-44.repo https://repo.powerdns.com/repo-files/centos-auth-44.repo 

yum makecache fast

# 这里以mysql作为后端存储服务,所以这里安装的是pdns-backend-mysql
yum install pdns.x86_64 pdns-backend-mysql.x86_64 -y

# ================== 安装4.6版本,参考 ================= #
curl -o /etc/yum.repos.d/powerdns-auth-46.repo https://repo.powerdns.com/repo-files/el-auth-46.repo 

# 参考
# 其它版本列表:
https://repo.powerdns.com/repo-files/
# eg:
https://repo.powerdns.com/repo-files/centos-auth-45.repo

2.3.2 pdns.conf配置

vi /etc/pdns/pdns.conf

#设置数据库相关的
launch=gmysql
gmysql-host=10.0.0.10
gmysql-port=3306
gmysql-dbname=powerdns
#管理数据库的相关用户和密码
gmysql-user=powerdns
gmysql-password=powerdns
#访问权限
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=Qno9k64Vkkkyfz1LtC3klk
#启动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

# ============================ use ============================== #
vi /etc/pdns/pdns.conf

#设置数据库相关的
launch=gmysql
gmysql-host=192.168.31.153
gmysql-port=3306
gmysql-dbname=powerdns
#管理数据库的相关用户和密码
gmysql-user=root
gmysql-password=XpWxxxxx0WmE
#访问权限
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=Qno9k64Vkkkyfz1LtC3klk
#启动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

2.3.3 初始化数据库:

mysql -h10.x.x.109 -uroot -pXpWxxxxx0WmE -e "use powerdns; source /usr/share/doc/pdns-backend-mysql-4.4.1/schema.mysql.sql;"

# use
$. ll /usr/share/doc/pdns-backend-mysql-4.4.3/schema.mysql.sql
$. docker cp /usr/share/doc/pdns-backend-mysql-4.4.3/schema.mysql.sql mysql:/opt
$. docker exec -it mysql bash
$. mysql -h127.0.0.1 -uroot -pXpWxxxxx0WmE -e "use powerdns; source /opt/schema.mysql.sql;"

2.3.4 启动pdns服务:

# 会启动 8081, 5300端口
systemctl start pdns 
systemctl restart pdns 
systemctl enable pdns
systemctl stop pdns
systemctl status pdns 

journalctl -xefu pdns 

2.4 部署pdns-recursor递归服务

配置yum源

curl -o /etc/yum.repos.d/powerdns-rec-44.repo https://repo.powerdns.com/repo-files/centos-rec-44.repo 
 
yum makecache fast -y

安装pdns-recursor

yum install pdns-recursor -y

systemctl enable pdns-recursor
systemctl status pdns-recursor

修改pdns-recursor.conf配置

vi /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外其他所有的请求发至forward-zones-recurse字段内容
#forward-zones-file=/etc/pdns-recursor/zones

# 除forward-zones外其他所有的请求发至223.5.5.5, 180.76.76.76, 114.114.114.114
# forward-zones-recurse=.=223.5.5.5, .=180.76.76.76, .=114.114.114.114  

#forward-zones-recurse是找不到就递归,找的到就转发,用逗号分隔  这里是将pdns中定义的域名,转发到pdns服务的54端口上
forward-zones-recurse=hexug.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

# ============================== use ==============================
vi /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外其他所有的请求发至forward-zones-recurse字段内容
#forward-zones-file=/etc/pdns-recursor/zones

# 除forward-zones外其他所有的请求发至223.5.5.5, 180.76.76.76, 114.114.114.114
# forward-zones-recurse=.=223.5.5.5, .=180.76.76.76, .=114.114.114.114           
#forward-zones-recurse是找不到就递归,找的到就转发,用逗号分隔  这里是将pdns中定义的域名,转发到pdns服务的54端口上
forward-zones-recurse=tpp1212.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

/etc/pdns-recursor/zones内容示例:

ppp123.com=127.0.0.1:54
ttt123.com=127.0.0.1:54

启动pdns-recursor服务

systemctl start pdns-recursor 
systemctl enable pdns-recursor --now

systemctl restart pdns-recursor 
systemctl status pdns-recursor 

journalctl -xefu pdns-recursor 

2.5 安装powerdns-admin

docker network create pdns

mkdir /data/pdnsadmin/data -p 
chmod 777 /data/pdnsadmin/data -R

# 创建docker-compose.yml
mkdir /root/pdns-admin -p
cd /root/pdns-admin
vi docker-compose.yml
docker-compose up

# 其它命令参考
docker-compose up -d
docker-compose down
$. docker-compose logs -f --tail=100 -t spring-cloud-dataflow

安装PowerDNS管理后台服务powerdns-admindocker-compose.yml如下

---
version: '3.7'

services:
  powerdnsadmin:
    hostname: pdnsadmin
    container_name: pdnsadmin
    image: ngoduykhanh/powerdns-admin:0.3.0
    restart: always
    ports:
      - 9191:80
    networks:
      - pdns
    volumes:
      - /data/pdnsadmin/data:/data
    logging:
      driver: json-file
      options:
        max-file: '3'
        max-size: '10m'

networks:
  pdns:
    driver: bridge
    external: true

2.6 配置 powerdns-admin

配置Server

http:{ip}:9191

打开Web界面,到登录界面,PowerDNS没有管理员用户,登录之前需要首先注册第一个用户,就是管理员用户。

打开Setting,点击Server,配置API信息:

# 查看 api key:
cat /etc/pdns/pdns.conf

到此就完成基本配置,完善了之前PowerDNS-Admin的搭建,也简化了之前的搭建步骤,从DNS的递归到权威以及第三方Web界面管理权威服务器实现DNS记录CUDR

添加Domain

$. pdnsutil -h

# list-all-zones [master|slave|native] -- List all zone names
$. pdnsutil list-all-zones
rpp.com
rpp2.com
rpp3.com

pdnsutil list-zone tpp1212.com
# check-zone ZONE      -- Check a zone for correctness
$. pdnsutil check-zone tpp1212.com

dig +short www.tpp1212.com

# check-all-zones [exit-on-error] -- Check all zones for correctness. Set exit-on-error to exit immediately after finding an error in a zone.
$. pdnsutil check-all-zones

# clear-zone ZONE -- Clear all records of a zone, but keep everything else
$. pdnsutil clear-zone tpp1212.com

pdnsutil test-schema tpp1212.com
pdnsutil show-zone tpp1212.com
pdnsutil edit-zone tpp1212.com
pdnsutil delete-zone tpp1212.com
# ========================== 参考 ============================ #
pdnsutil generate-zone-key zsk rsasha256 2048
pdnsutil add-zone-key tpp1212.com zsk active published rsasha256

添加A记录

第一步:

第二步:

添加记录结果查看:

  • 修改测试客户端10.y.y.195的dns ip为10.x.x.109并解析上一步添加的A记录

解析A记录

# pdns服务解析记录测试
dig +short www.tpp1212.com @127.0.0.1 -p54
dig www.tpp1212.com @127.0.0.1 -p54
dig lpf.tpp1212.com @127.0.0.1 -p54
dig +short lpf.dev.tpp1212.com @127.0.0.1 -p54

# pdns-recursor服务解析记录测试
dig +short www.tpp1212.com @127.0.0.1 -p53
dig www.tpp1212.com @127.0.0.1 -p53
dig lpf.tpp1212.com @127.0.0.1 -p53
dig +short lpf.dev.tpp1212.com @127.0.0.1 -p53
===========================================================================
# 使用示例:
    ………………………………………………………………
    # 查询域名对应的IP地址
    dig dns.rpp.comm A
    dig dns.rpp.comm A
    dig test.dev.mydomain.com A
    ………………………………………………………………
    # 查询指定域名的MX记录
    dig example.com MX
    ………………………………………………………………
    # 查询域名的TXT记录
    dig example.com TXT
    ………………………………………………………………
    # 反向查询,根据IP地址查找对应的域名
    dig -x 8.8.8.8

解析baidu.com,通过内网递归查询到外部域名

至此内网单机版dns服务器部署完毕,可以正常解析域名。

备注:
高可用dns服务可通过后端mysql实现主从实现,配置两个pdns。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/144359.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++ VS2015安装教程,下载和安装(下载地址+图解+详细步骤)

说明:VS2015的三个版本分别为: Visual Studio Community(社区版):满足大部分程序员的需求(推荐) Visual Studio Professional(专业版) Visual Studio Enterprise(企业版) 1、下载地址(这里只提供Community版) htt…

5 个基本步骤,学会创建自己的CRM流程

客户关系管理 (CRM) 系统是必备的客户数据库工具,用于跟踪潜在客户、现有客户、接触点等。使用可靠的技术来跟踪所有客户数据固然重要,但为该技术制定的流程更为关键。因这是用来管理客户和整个客户生命周期的策略。 什么是CRM流程? CRM流程…

如何利用「深度上下文兴趣网络」提升点击率?

美团到店广告平台在用户行为序列建模算法的迭代落地中,基于对业务实际场景中用户决策心智的观察,创新性地提出了深度上下文兴趣网络,精确建模了用户的兴趣,提升了CTR等线上业务指标。本文介绍了相应算法背后的动机、建模方法以及工…

高防CDN:构筑网络安全的钢铁长城

在当今数字化的世界里,网络安全问题日益突显,而高防CDN(高防御内容分发网络)正如一座坚不可摧的钢铁长城,成为互联网安全的不可或缺之物。本文将深入剖析高防CDN在网络安全环境中的关键作用,探讨其如何构筑…

漏洞复现--用友U8-cloud RegisterServlet SQL注入

免责声明: 文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…

提高软件测试覆盖率的5个重点

软件测试覆盖率是软件测试中的一个重要指标,它有利于保障软件质量、提高软件可靠性和可维护性。软件测试覆盖率能够发现并修复代码缺陷,确保代码的正确性,提高软件的稳定性,降低成本和风险。 因此进一步提高软件测试覆盖率对于软件…

pip 更换国内镜像

方法 1 在C:\Users\85249\AppData\Roaming位置新建一个pip文件夹(之前已经有了就不用管) 在文件夹里面新建一个pip.ini文件。 文件一开始是空的,用文本文档打开后写入如下文所示。这里使用的是清华源,而且设置为信任&#xff0…

各路大神献出自定义GPTs,24小时Top名单

没有 GPTs 做不到的,只有你想不到的。 11 月 10 日凌晨, OpenAI 上线 GPTs,所有的 ChatGPT Plus 订阅用户都可以自己定制 GPT,无需任何编码知识,在聊天过程中就构建好了。 发布当天,OpenAI CEO 山姆・奥特曼…

若依框架修改包名报错

1.首先看下报错截图 启动GateWay 2.这个是因为 我改了里面的包名就是下面 ruoyi改成screen爆了上面的问题 3.那么关键的来了,我测了下 改了core不管启动gateway还是modules里面任何一个都会爆打不开工具类的问题 ,我看了其他pom也没有引用core&#xff…

超详细!必看!!STM32--时钟树原理

一、什么是时钟? 时钟是单片机的脉搏,是系统工作的同步节拍。单片机上至CPU,下至总线外设,它们工作时序的配合,都需要一个同步的时钟信号来统一指挥。时钟信号是周期性的脉冲信号。 二、什么是时钟树? S…

K8S的基础知识

K8S的意义与入门 专有名词 容器:包含了运行一个应用程序所需要的所有东西,包括:代码、运行时、各种依赖和配置。pod:K8s调度的最小单元,包含一个或多个容器。一个容器组中的容器具有紧密耦合性,共享资源,存储空间和IP。即同一个容器组中的容器可以通过localhost:xxx访问…

中馥集团双11当日发货销售额突破1000万!

昨日,中馥集团双十一当日发货销售额突破1000万,再创新高!双十一大促期间,中馥集团全体上下通力合作,每场直播商品经层层筛选、严格评选的“名品”,既有优质精品文化酒,也有市场火爆的高端酱酒&a…

【JavaEE初阶】IP协议简介

文章目录 前言🌴IP协议的概念🌳IP数据报🚩IPv4协议头格式🚩IPv6的诞生 🎍IP地址🚩IP地址的格式:🚩IP地址的分类🎈网络号与主机号的划分 🚩特殊的IP地址&#…

stable diffusion comfyui的api使用教程

一、为什么要使用comfyui的api?对比webui的api,它有什么好处? 1、自带队列 2、支持websocket 3、无需关心插件是否有开放api接口,只要插件在浏览器中可以正常使用,接口就一定可以使用 4、开发人员只需关心绘图流程的搭建 5、切换…

SAP 70策略测试简介

在前面的文章中我们已经测试了10、11、20、40、50、52、60、62策略的测试,接下来我们需要对70策略进行测试,很多的项目中也都会用到70策略。 70策略是一种比较常见的、基于按库存且主要用于半成品或者原材料的计划策略。 我们还是按照之前的惯例,先看下70策略的后台配置 我…

C语言仅凭自学能到什么高度?

今日话题,C语言仅凭自学能到什么高度?学习C语言的决定我确实非常推荐,毕竟它是编程领域的“通用工具”,初学者可以尝试并在发现编程的乐趣后制定长期学习计划。至于能够达到何种高度,这实在无法准确回答。即使是经验丰…

CentOS修改root用户密码

一、适用场景 1、太久没有登录CentOS系统,忘记管理密码。 2、曾经备份的虚拟化OVA或OVF模板,使用模板部署新系统后,忘记root密码。 3、被恶意攻击修改root密码后的紧急修复。 二、实验环境 1、VMware虚拟化的ESXI6.7下,通过曾经…

Android Studio的代码笔记--JSON解析学习2

JSON学习2 生成JSON解析JSON java解析json字符串和合成json字符串 json字符串 {"type":"getConfig","ip":"192.168.1.100"}使用 String ss groupJS("Config","192.168.1.100"); splitJS(ss);回显 I/lxh: group…

工业交换机的解决方案

在工业网络产品的早期阶段,主要关注的是工业交换机的电气、物理、结构等方面的特点。如今的工业网络,在规范硬件条件的同时,也正在向智能、灵活、高效的方向发展。除了注重硬件方面,它还越来越重视软件特性,如网管、环…

深度对话:以实在RPA Agent智能体安全机制破解LLM应用谜题

AI大模型席卷全球,为各个行业带来了颠覆式创新机遇,同时也打开了未知的潘多拉魔盒。随着大语言模型能力的不断增强和适用范围延伸,大模型本身带来的隐私泄漏、数据安全等问题越发成为各大厂商关注的核心,引发了各界更多的思考与发…