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

news2024/11/25 1:55:49

使用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。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Leetcode——岛屿的最大面积

1. 题目链接:695. 岛屿的最大面积 2. 题目描述: 给你一个大小为 m x n 的二进制矩阵 grid 。 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都…

ssh脚本找不到命令或者执行无效的解决办法

如图:今天在编写脚本时发现的这个问题, 在排除脚本语法错误、编码格式等情况下,仍然出现“bash 。。未找到命令”的字样 解决办法: 给每台虚拟机的环境变量source一下: 命令如下 source /etc/profile或者输入 vim ~…

【数据结构】直接选择排序(你知道最不常用的排序算法有哪些吗?)

👦个人主页:Weraphael ✍🏻作者简介:目前正在学习c和算法 ✈️专栏:数据结构 🐋 希望大家多多支持,咱一起进步!😁 如果文章有啥瑕疵 希望大佬指点一二 如果文章对你有帮助…

【2023云栖】黄博远:阿里云人工智能平台PAI年度发布

本文根据2023云栖大会演讲实录整理而成,演讲信息如下: 演讲人:黄博远 | 阿里云计算平台事业部资深产品专家、阿里云人工智能平台PAI产品负责人 演讲主题:阿里云人工智能平台PAI年度发布 AIGC是我们这个时代的新机遇 今年云栖大…

单相过压继电器DVR-G-100-1 0~500V AC/DC220V 导轨安装

系列型号 DVR-G-100-1X3数字式过压继电器; DVR-G-100-3三相过压继电器; DVR(H)-G-100-1单相过压继电器; DVR-Q-100-3三相欠压继电器; DVR(H)-Q-100-3三相欠压继电器 一、用途 主要应用于电机、变压器等主设备以及输配电系统的继…

人工智能与大数据:驱动现代业务转型的双引擎

在当今数字化时代,人工智能(AI)和大数据已成为驱动业务和技术创新的关键力量。它们的结合不仅重塑了传统行业,也催生了新的商业模式和服务方式。 AI与大数据在零售行业的应用 在零售行业,AI和大数据的应用已经成为提…

代码随想录Day45 动态规划13 LeetCode T1143最长公共子序列 T1135 不相交的线 T53最大子数组和

LeetCode T1143 最长公共子序列 题目链接:1143. 最长公共子序列 - 力扣(LeetCode) 题目思路: 动规五部曲分析 1.确定dp数组的含义 这里dp数组的含义是结尾分别为i-1,j-1的text1和text2的最长公共子序列长度 至于为什么是i-1,j-1我之前已经说过了,这里再…

电池故障估计:Realistic fault detection of li-ion battery via dynamical deep learning

昇科能源、清华大学欧阳明高院士团队等的最新研究成果《动态深度学习实现锂离子电池异常检测》,用已经处理的整车充电段数据,分析车辆当前或近期是否存在故障。 思想步骤: 用正常电池的充电片段数据构造训练集,用如下的方式构造…

重生奇迹mu圣导师加点

重生奇迹mu圣导师加点:要攻击高可以加力量,平衡系建议加点力量600~800,智力200~400,敏够装备要求,统帅1000,其余加体力。 圣导师靠加力量培养高攻圣导师不现实,建议玩家练魔,低级圣…

【随手记录】Llama Tutorial 大语言模型实践 手把手系列带实践源码

这个tutorial的契机是yy突然看到了一个workshop 所以类似于一周大作业的形式,输入command输出使用了自动驾驶哪些模块,代码在这里 所以就干一干,顺便写一个tutorial给大家参考和教程 引申更多的应用 参考资料: https://github.c…

【软考篇】中级软件设计师 第三部分(二)

中级软件设计师 第三部分(二) 二十四. 概念设计阶段24.1 E-R模式24.2 E-R图 二十五. 网络和多媒体25.1 计算机网络分类25.2 OSI/RM参考模型25.3 网络互联硬件25.4 TCP/IP分层模型 二十六. IP地址26.1 子网划分26.2 特殊IP26.3 IPv626.4 冲突与和广播域26…

使用html2canvas插件进行页面截屏

使用纯html实现过程 <!DOCTYPE html> <html><head><title>使用html2canvas生成网页截图</title><script src"https://html2canvas.hertzen.com/dist/html2canvas.min.js"></script> </head><body><h1>…

jQuery使用echarts循环插入图表

目录 jQuery动态循环插入echarts图表 y轴显示最大值和最小值 x轴只显示两个值&#xff0c;开始日期和结束日期 jQuery动态循环插入echarts图表 html .center_img_list 是我们循环数据的地方 <div class"center_img shadow"><div class"center_img_b…

python_pycharm安装与jihuo

目录 环境&#xff1a; 安装包与jihuo文件&#xff1a; 安装python3.8.10 安装pycharm jihuo pycharm 概述 过程 jihuo 相关文件 环境&#xff1a; window11 python3.8.10 pycharm-professional-2019.1.3 安装包与jihuo文件&#xff1a; 安装python3.8.10 安装pyc…

算法通关村——归并排序

归并排序 1、归并排序原理 ​ 归并排序是一种很经典的分治策略。 ​ 归并排序(MERGE-SORT)简单来说就是将大的序列先视为若干小的数组&#xff0c;分成几个比较小的结构&#xff0c;然后是利用归并的思想实现的排序方法。将一个大的问题分解成一些小的问题分别求解&#xff…

mask-rcnn原理与实战

一、Mask R-CNN是什么&#xff0c;可以做哪些任务&#xff1f; Mask R-CNN是一个实例分割&#xff08;Instance segmentation&#xff09;算法&#xff0c;可以用来做“目标检测”、“目标实例分割”、“目标关键点检测”。 1. 实例分割&#xff08;Instance segmentation&am…

pipeline + node +jenkins+kubernetes部署yarn前端项目

1、编写Dockerfile文件 # Set the base image FROM node:16.10.0# WORKDIR /usr/src/app/ WORKDIR /home/option# Copy files COPY ./ /home/option/# Build arguments LABEL branch${BRANCH} LABEL commit${COMMIT} LABEL date${BUILD_DATE} ARG ENV# Set ENV variables ENV …

Python循环的技巧和注意事项

在Python中&#xff0c;主要使用for循环和while循环进行迭代。为了更有效的使用循环&#xff0c;避免一些常见的陷阱&#xff0c;总结了一些关于使用循环的注意事项。 1. 避免无限循环 在while循环中&#xff0c;程序会一直执行循环体&#xff0c;直到条件不再满足&#xff0c…

2023年05月 Python(五级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 有列表L=[‘UK’,‘china’,‘lili’,“张三”],print(L[-2])的结果是?( ) A: UK B: ‘lili’,‘张三’ C: lili D: ‘UK’,‘china’,‘lili’ 答案:C 列表元素定位 第2题 …

【VSCode】配置C/C++开发环境教程(Windows系统)

下载和配置MinGW编译器 首先&#xff0c;我们需要下载并配置MinGW编译器。 下载MinGW编译器&#xff0c;并将其放置在一个不含空格和中文字符的目录下。 配置环境变量PATH 打开控制面板。可以通过在Windows搜索栏中输入"控制面板"来找到它。 在控制面板中&#xf…