使用ansible配置DNS服务器master、slave与unbound

2023-05-16

文章目录

    • 1、环境配置 :
    • 2、ansible配置文件以及 资源清单相关配置:
      • a、ansible配置文件
      • b、 inventory文件
      • c、primary DNS与 secondary DNS服务的配置如下
    • 3、准备工作完成了,让我们快乐的开始写playbook叭
      • a、主dns的playbook的写法
      • b、然后将我们主dns的playbook文件复制一份,我们稍加修改,就可以变成辅dns服务器
    • 4、最后一步,编写unbound缓存服务器的playbook

经历了项目上的与甲方唇枪舌战,生离死别,多少得死一个的局面之后,终于闲下来能够好好整理自己的一些技术和心得了。

事情是这样的,当我们完成工作比较出色,部署服务器飞快的一批的时候,问题来了,甲方粑粑看我们比较闲,就希望多给我们搞点任务,本来不属于我们管的dns服务器,要求让我们在新的环境下再部署一套

八嗦了,累了,团队好兄弟萌都是刚出来的小伙子,谁经得住这架势啊,纷纷不想干,结果我们的PM还是妥协了(他们给的太多了
于是乎有了这篇文章

1、环境配置 :

#控制端
control.lab.example.com

#缓存服务器
servera.lab.example.com
192.168.0.10
#主DNS
serverb.lab.example.com
192.168.0.11
#辅dns
serverc.lab.example.com
192.168.0.12
#酱油server
serverd.lab.example.com
192.168.0.13

为了数据脱敏,为了新鲜热乎的经验,所以这次我就用的我实验环境的四台虚拟机来搞了

2、ansible配置文件以及 资源清单相关配置:

a、ansible配置文件

可以说是非常的朴实无华了
(反正是做完配置之后就要移除的东西,甲方不想用,觉得不安全)(反正不是我运维)

[defaults]
inventory=./inventory
remote_user=devops

[privilege_escalation]
become = False
become_method = sudo
become_user = root
become_ask_pass = False

b、 inventory文件

[control_node]
workstation.lab.example.com

[caching_dns]
servera.lab.example.com

[primary_dns]
serverb.lab.example.com

[secondary_dns]
serverc.lab.example.com

c、primary DNS与 secondary DNS服务的配置如下

primary-192.168.0.zone

$TTL 300
@ IN SOA serverb.backend.lab.example.com. root.serverb.backend.lab.example.com. (
                    2020041805    ;serial number
                    1H            ;refresh secondary
                    5M            ;retry refresh
                    1W            ;expire zone
                    1M )          ;cache time-to-live for negative answers

; owner                   TTL   CL  type    RDATA
                          600   IN  NS      serverb.backend.lab.example.com.

10.0.168.192.IN-ADDR.ARPA.      IN  PTR     servera.backend.lab.example.com.
11                              IN  PTR     serverb.backend.lab.example.com.
12                              IN  PTR     serverc.backend.lab.example.com.
13                              IN  PTR     serverd.backend.lab.example.com.

primary-backend.lab.example.com.zone

$TTL 300
@ IN  SOA serverb.backend.lab.example.com. root.serverb.backend.lab.example.com. (
                        2020041806  ;serial number
                        1H          ;refresh secondary
                        5m          ;retry refresh
                        1w          ;expire zone
                        1m )        ;cache time-to-live for negative answers

; owner                   TTL     CL  type    RDATA
                          600     IN  NS      serverb
;                                  IN  MX 10   serverb.backend.lab.example.com.
;                                  IN  A       192.168.0.11

servera                           IN  A       192.168.0.10
serverb                           IN  A       192.168.0.11
serverc                           IN  A       192.168.0.12
serverd                           IN  A       192.168.0.13

primary-named.backend.conf

zone "backend.lab.example.com" IN {
        type master;
        file "backend.lab.example.com.zone";
        forwarders {};
};

zone "0.168.192.in-addr.arpa" IN {
        type master;
        file "192.168.0.zone";
        forwarders {};
};

primary-named.conf

# /etc/named.conf (primary/secondary)
# 
# For this exercise, primary and secondary name.conf files are identical but
# have separate names in the project directory to avoid confusion when
# configuring playblooks.
#
# Template file for BIND labs.

options {
        listen-on port 53 { any; };
        directory "/var/named";
        allow-transfer { 192.168.0.12; };
        allow-query { localhost; 172.25.250.254; 192.168.0.0/24; };
        recursion no;

#Added the following
        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";

        /* https://fedoraproject.org/wiki/Changes/CryptoPolicy */
        include "/etc/crypto-policies/back-ends/bind.config";

};

#Added the following
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
include "/etc/named.backend.conf";

secondary-named.conf

# /etc/named.conf (primary/secondary)
# 
# For this exercise, primary and secondary name.conf files are identical but
# have separate names in the project directory to avoid confusion when
# configuring playblooks.
#
# Template file for BIND labs.

options {
        listen-on port 53 { any; };
        directory "/var/named";
        allow-transfer { 192.168.0.12; };
        allow-query { localhost; 172.25.250.254; 192.168.0.0/24; };
        recursion no;

#Added the following
        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";

        /* https://fedoraproject.org/wiki/Changes/CryptoPolicy */
        include "/etc/crypto-policies/back-ends/bind.config";

};

#Added the following
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
include "/etc/named.backend.conf";

secondary-named.backend.conf

zone "backend.lab.example.com" IN {
        type slave;
        file "slaves/backend.lab.example.com.zone";
        masters { 192.168.0.11; };
};

zone "0.168.192.in-addr.arpa" IN {
        type slave;
        file "slaves/192.168.0.zone";
        masters { 192.168.0.11; };
};

以及unbound的配置文件
unbound.conf.j2

server:
        interface: {{ interface }}
        interface-automatic: {{ interface_automatic }}
{% for acl in access_control %}
        access-control: {{ acl }}
{% endfor %}
        domain-insecure: "{{ domain_insecure }}"

forward-zone:
        name: "{{ forward_zone_name }}"
        forward-addr: {{ forward_zone_addr }}

目录结构如下:

 tree .
.
├── ansible.cfg
├── files
│   ├── primary-192.168.0.zone
│   ├── primary-backend.lab.example.com.zone
│   ├── primary-named.backend.conf
│   ├── primary-named.conf
│   ├── secondary-named.backend.conf
│   └── secondary-named.conf
├── inventory
└── templates
    └── unbound.conf.j2

2 directories, 9 files

3、准备工作完成了,让我们快乐的开始写playbook叭

a、主dns的playbook的写法

---
- name: Configure primary nameserver
  hosts: serverb.lab.example.com              #设置主dns
  remote_user: devops
  become: yes

  tasks:
    - name: Install BIND9
      yum:
        name: bind                           #安装bind
        state: latest

    - name: Copy primary config file
      copy:
        src: files/primary-named.conf        #复制主dns的配置文件
        dest: /etc/named.conf
        owner: root
        group: named
        mode: 0640
      notify:
        - reload_named

    - name: Copy forward zone file to primary
      copy:
        src: files/primary-backend.lab.example.com.zone    #复制主dns的zone配置文件
        dest: /var/named/backend.lab.example.com.zone
        owner: root
        group: named
        mode: 0640
      notify:
        - reload_named

    - name: Copy reverse zone file to primary
      copy:                                               #复制反向解析文件
        src: file/primary-192.168.0.zone
        dest: /var/named/192.168.0.zone
        owner: root
        group: named
        mode: 0640
      notify:
        - reload_named

    - name: Copy backend config file (for zones)
      copy:                                                #复制backend主配置文件
        src: files/primary-named.backend.conf
        dest: /etc/named.backend.conf
        owner: root
        group: named
        mode: 0640
      notify:
        - reload_named

    - name: Allow dns service on firewall
      firewalld:
        service: dns
        state: enabled
        immediate: true
        permanent: yes

    - name: Ensure named is running and enabled
      service:
        name: named
        state: started
        enabled: true

  handlers:
    - name: reload_named
      service:
        name: named
        state: reloaded

b、然后将我们主dns的playbook文件复制一份,我们稍加修改,就可以变成辅dns服务器

---
- name: Configure second nameserver
 hosts: serverc.lab.example.com
 remote_user: devops
 become: yes

 tasks:
   - name: Install BIND9
     yum:
       name: bind
       state: latest

   - name: Copy primary config file
     copy:
       src: files/secondary-named.conf
       dest: /etc/named.conf
       owner: root
       group: named
       mode: 0640
     notify:
       - reload_named

   - name: Copy backend config file (for zones)
     copy:
       src: files/secondary-named.backend.conf
       dest: /etc/named.backend.conf
       owner: root
       group: named
       mode: 0640
     notify:
       - reload_named

   - name: Allow dns service on firewall
     firewalld:
       service: dns
       state: enabled
       immediate: true
       permanent: yes

   - name: Ensure named is running and enabled
     service:
       name: named
       state: started
       enabled: true

 handlers:
   - name: reload_named
     service:
       name: named
       state: reloaded

检查我们的剧本

ansible-playbook --syntax-check playbook1.yml
ansible-playbook --syntax-check playbook2.yml

如果没有消息,那就是最好的消息,直接开始你的剧本叭~

之后我们,记得要dig一下验证我们是否成功配置完成dns

dig servera.backend.lab.example.com @serverb.lab.example.com

4、最后一步,编写unbound缓存服务器的playbook

---
- name: Install cache only nameserver
  hosts: servera.lab.example.com
  remote_user: devops
  become: yes

  vars:
    interface: 0.0.0.0
    interface_automatic: "yes"
    access_control:
      - "172.25.250.0/24 allow"
    domain_insecure: example.com
    forward_zone_name: .
    forward_zone_addr: "172.25.250.254"

  tasks:
    - name: Install cache only nameserver
      yum:
        name: unbound
        state: present

    - name: Create configuration file on caching server host
      template:
        src: unbound.conf.j2
        dest: /etc/unbound/conf.d/unbound.conf

    - name: Allow dns service on firewall
      firewalld:
        service: dns
        state: enabled
        immediate: yes
        permanent: yes

    - name: Ensure unbound is running and enabled
      service:
        name: unbound
        state: started
        enabled: yes

  handlers:
    - name: restart_unbound
      service:
        name: unbound
        state: restarted

至此,我们三个playbook均已编写完成

感谢大家的观看,我们下波再见

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用ansible配置DNS服务器master、slave与unbound 的相关文章

  • 如何在 Ansible playbook api 中设置“--limit”选项

    我正在编写 python 脚本来运行 ansible playbook 使用 Ansible 2 4 2 0 据我所知有一个选择 limit 这可以限制 Ansible 在特定主机上的运行 例如 这是 etc ansible hosts t
  • ssl:身份验证方法 ssl 需要密码

    在尝试通过 Ansible 连接到 Windows 虚拟机时 我遇到了以下问题 TASK setup lt 10 xx xx xx gt ESTABLISH WINRM CONNECTION FOR USER winad admin on
  • DNS预取和页面优化[重复]

    这个问题在这里已经有答案了 今天我在一个网页的 HTML 源代码中看到了这个片段
  • 如何使用 Ansible 在远程文件中搜索字符串?

    基于一个问题 如何使用 Ansible 在文件中搜索字符串 https superuser com a 1764857 754490 Ansible 如何从文件内容中提取特定字符串 https stackoverflow com a 750
  • 在 Ansible 中将 Python 脚本的输出转换为 dict

    我有一个名为test py这是 usr bin python a A 2 nB 5 print a 现在 在我的 Ansible 剧本中 我正在运行此脚本并使用此任务将输出注册到变量 name Create variable from th
  • 每个用户的子域

    我拥有一个网站 为每个注册用户提供一个专用空间 如下所示 www mywebpage com user1 www mywebpage com user2 www mywebpage com user3在这条路径中 用户有他的迷你网站 我想为
  • Ansible:shell 脚本输出始终为空

    我试图将 Linux shell 的输出插入到变量中 但由于某种原因 该变量始终为空 这是 Ansible 代码 name Check PHP version shell php v 2 gt dev null awk print 2 ex
  • Ansible:从意图文件创建字典

    shell gt cat myfile yml ABC ABC C01 host a1 prefixlen 19 host a2 prefixlen 19 DEF DEF C01 host d1 prefixlen 19 host d2 p
  • 根据磁盘可用空间获取节点IP

    我正在尝试编写一个 Ansible 剧本来检查多个服务器上的磁盘空间 到目前为止 这是我的 Ansible 剧本 hosts all become yes tasks name Check freespace shell df h awk
  • 在 JavaScript 中确定域名?

    使用有什么区别 if document domain toLowerCase indexOf domainName 1 and if window location href match 1 toLowerCase indexOf doma
  • 如何从 Ansible 中的指定组中删除用户?

    我们假设user01定义了两个组 groupA and groupB 除了主要组之外 我可以将帐户添加到groupC 确保user01属于groupC using user name user01 groups groupC append
  • ansible安装node.js版本6

    要安装 Node 6 x 版本 请执行以下命令 curl sL https deb nodesource com setup 6 x sudo E bash sudo apt get install y nodejs 现在我到底该如何在an
  • 如果第一个域有文件夹路径,如何将一个域 301 重定向到另一个域

    我想要从 www olddomain com 进行 301 重定向到 newdomain com 的根目录 但无论旧域上的文件夹路径是什么 我都希望它能够正常工作 例如 以下内容都应重定向到 newdomain com 的根目录 www o
  • 每个域都有唯一的 IP 吗?

    我想知道每个域名地址是否都有唯一的IP地址 此外 这些IP位于哪里 这个重定向系统是如何工作的 当我们尝试通过写入域名来访问网站时 它有多少个重定向 谢谢 否 每个域没有自己的 IP 地址 多个域可以托管在同一台服务器上 并且位于同一 IP
  • 使用 ansible SSH 到远程服务器

    我正在使用 ansible 来自动化一些任务 其中之一要求我ssh到服务器A 然后从A到B 然后从B到C 我似乎找不到任何方法来做到这一点 有什么建议么 鉴于您不使用 Paramiko 进行 ssh transport ssh https
  • 带变量的 ansible regex_search

    如何在ansible playbook中使用正则表达式查找匹配项 其中变量出现在regex search争论 以下剧本在使用以下命令运行时找不到匹配项 ansible playbook playbook yml hosts localhos
  • 如何在 Windows 中拦截 DNS 查询

    我正在研究如何在 Windows 中拦截 DNS 查询 以一种不需要将 DLL 注入到每个进程中的方式 并且理想情况下能够根据发出查询的进程做出决策 因此简单的 DNS 代理服务器是不够的 从表面上看 DNS 查询所采用的路径如下所示 某些
  • Java 无法从 AIX 解析 DNS 地址:UnknownHostException

    我遇到了这个奇怪的错误 在 AIX 上 如果我可以从命令行访问我的服务器 使用 ping telnet 但是如果我尝试使用 java 我会遇到 UnknownHostException 这是因为 Java 无法以某种方式 使用 DNS 但我
  • 在 Ansible 中检查已安装的 yum 包/rpm 版本并使用它的最佳方法

    我已经在 CentOS 7 上尝试使用 Ansible 2 0 0 2 我试图从已安装的 rpm yum 软件包中获取版本 但在运行脚本时遇到警告消息 安塞布尔脚本 name Get version of RPM shell yum lis
  • 是否可以为 IP 地址而不是域名提供 SSL 证书? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我希望我的网站使用类似的 URLhttp 192 0 2 2 and https 192 0 2 2 用于静态内容 以避免请求中不必要的

随机推荐

  • Python_pytorch(四)网络搭建

    搭建架构 span class token keyword import span torch span class token keyword import span torchvision span class token keywor
  • Python_pytorch(五)模型训练

    反向传播 Loss Function span class token keyword import span torchvision span class token keyword from span torch span class
  • 【计蒜客】泥塑课C++

    泥塑课 描述 小米是一个幼儿园老师 xff0c 每学期的泥塑课上 xff0c 她都会给每个学生发不超过 250 立方厘米的等量橡皮泥 xff0c 教大家做泥塑 在上课过程中 xff0c 她发现每个班都恰好有一个小朋友会去抢另一个小朋友的橡皮
  • linux无法粘贴文件

    无粘贴功能的主要原因是无权限复制 xff0c 所以解决方案是 xff1a 打开终端 xff0c 输入 xff1a sudo nautilus 那么就会打开一个有管理员权限的文件夹资源器 xff0c 现在右键就有粘贴功能了
  • Zookeeper详解(三)——开源客户端curator

    开源客户端curator true re de curator是Netflix公司开源的一个zookeeper客户端 xff0c 后捐献给apache xff0c curator框架在zookeeper原生API接口上进行了包装 xff0c
  • mysql 修改字段类型

    修改字段类型 xff1a span class token keyword alter span span class token keyword table span 表名 span class token keyword modify
  • 【python】字符串(二)

    今天我们来学习如何判断字符串格式的内容 xff0c 针对基础判断 文章目录 一 基础知识二 例题 xff08 一 xff09 找元音 xff08 二 xff09 判断电话号码合法 一 基础知识 我们先来看看一般会用到那些知识点 xff1a
  • CentOS7 个性化

    CentOS美化 前言一 上图看效果原生桌面效果图美化后的效果图 二 使用步骤1 安装相关的包2 调整主题和字体 总结 前言 咳咳咳 xff5e 无论什么系统 xff0c 美化是必不可少的 xff0c 可以没用 xff0c 但不能没有 xf
  • freeswitch 1.10版本 centos7安装

    文章目录 简介安装使用ODBC连接mysql可能出现的问题 简介 FreeSWITCH 是一个电话的软交换解决方案 xff0c 包括一个软电话和软交换机用以提供语音和聊天的产品驱动 FreeSWITCH 可以用作交换机引擎 PBX 多媒体网
  • Airsim_API

    AirSim API 参考自知乎大佬https www zhihu com column multiUAV 讲的非常好 xff01 无人机姿态角 pitch是俯仰角 xff0c 是 点头 yaw是偏航角 xff0c 是 摇头 roll是旋转
  • JWT详解

    JWT详解 什么是JWTJWT能做什么JWT的认证流程JWT认证的优势JWT结构 1 Header 2 Payload 3 Signature Java中使用JWT实际开发中的应用 Springboot 43 Spring Security
  • Java获取天气情况的方式

    说明 经过搜集和参考网上的相关资料 xff0c Java获取天气情况数据的通用步骤如下 xff1a 调用天气接口api xff1b 解析返回的XML 或 JSON数据 xff1b 这里我并不去用代码实现一个Demo xff0c 而是记录一下
  • Epoll的两种工作模式

    Epoll的两种工作模式 LT模式 xff08 水平触发 xff09 假设委托内核检测读事件 检测fd的读缓冲区 都缓冲区有数据 epoll检测到了会给用户通知 用户不读数据 xff0c 数据一直在缓冲区 xff0c epoll会一直通知用
  • QT环境搭建:解决在linux上Qt的模块缺失问题

    Qt的媒体模块 Qt multimedia 缺少模块multimedia的问题 解决 sudo apt install libqt5multimedia qtmultimedia5 Unknown module s in QT serial
  • QT基础入门【环境搭建篇】Linux(ARM架构)下的QT开发环境搭建

    目录总览 QT基础入门目录总览 在 架构下安装 开发环境有两种方式 一是编译 官方静态库 比较费时间 有很多未知错误 二是通过源的方式安装 开发环境 本文采用第二种办法 安装QT5 sudo apt get install qt5 defa
  • QT基础入门【调试篇】QT远程部署与调试嵌入式ARM开发板

    目录总览 QT基础入门目录总览 一 环境配置 nbsp 1 根据开发板完成交叉编译链以及GDB的配置 因开发板而异 首先在虚拟机上配置好开发板厂家提供的交叉工具编译链 之后在qtcreator中添加交叉编译链以及GDB的配置 1 1 设置交
  • Mysql密码忘记怎么办?重置密码完整教程

    新手经常会在安装完Mysql时密码设置错误 xff0c 导致登录不进去的问题 xff0c 这就需要重置MySQL数据库的密码了 1 首先打开cmd命令行 xff0c 执行net stop mysql xff0c 把mysql服务先关掉 xf
  • gcd算法以及exgcd

    1 欧几里得算法 欧几里得是求最大公约数的经典算法 xff0c 又称辗转相除法 gcd函数就是用来求 a b 的最大公约数的 gcd函数的基本性质 xff1a gcd a b 61 gcd b a 61 gcd a b 61 gcd a b
  • Mysql分组后排序取第一条。按月份以及编号分组,查询当月最大值以及对应的时间返回。

    SELECT from SELECT ROW NUMBER OVER partition by DATE FORMAT tm 39 Y m 39 stcd ORDER BY st 96 drp 96 DESC num DATE FORMAT
  • 使用ansible配置DNS服务器master、slave与unbound

    文章目录 1 环境配置 xff1a 2 ansible配置文件以及 资源清单相关配置 xff1a a ansible配置文件b inventory文件c primary DNS与 secondary DNS服务的配置如下 3 准备工作完成了