systemli.bind9

在Debian上安装和维护Bind9名称服务器的Ansible角色

构建状态
Ansible Galaxy

该角色在Debian上安装和配置Bind9名称服务器。

功能:

  • 支持配置DNS区域的权威名称服务器和/或DNS递归服务器
  • 广泛的DNSSEC支持:
    • 自动生成KSK和ZSK密钥
    • 自动配置区域DNSEC
    • 支持通过XMPP发送DNSKEY/DS格式的输出
  • 支持隐藏的主服务器和权威的从服务器配置
  • 支持所谓的“静态”区域,即通过上传其原始.db绑定文件定义的区域
  • 使用named-checkzone进行区域文件的有效性检查
  • 对所谓的“动态”区域的基本支持,即通过YAML变量集定义的区域

基本服务器配置

主服务器

  • host_vars/master_name/vars/XX_bind.yml 中设置主服务器的变量,例如带有example.com静态区域和转发器的配置:
bind9_authoritative: yes
bind9_zones_static: 
- { name: example.com , type=master }
bind9_forward: yes
bind9_forward_servers:
- 8.8.8.8
- 4.4.4.4
bind9_slaves:
- slave_ip_1
- slave_ip_2
- slave_ip_3
bind9_our_neighbors:
- slave_ip_1
- slave_ip_2
- slave_ip_3
  • 将BIND区域文件放在ansible目录中(而不是角色目录):files/bind/zones/db.example.com

从服务器

  • 设置从服务器的变量:
bind9_zones_static: 
- { name: example.com, type: slave }
bind9_forward: yes
bind9_forward_servers:
- 8.8.8.8
- 4.4.4.4
bind9_masters:
- { name: master_name, addresses: [master_ip] }
bind9_recursor: our_network

动态区域

所谓的“动态”区域记录通过YAML ansible变量 bind9_zones_dynamic 定义,该变量由 bind/zones/db.template.j2 模板解析。 由于可能有多个区域,并且区域定义可能很长,因此区域变量可以在不同的变量文件中进行合理定义,例如在 host_vars/master_name/vars/YY_zones.yml 中。 bind9_zones_dynamic 可以拆分为多个变量,这些变量可以在特定文件中定义,如下面的示例所示。

YY_zones.yml 中,我们可能会有:

bind9_zones_dynamic: >
        {{ zones_my_domains
        | union ( zone_my_reverse_inaddr_arpa )
        | union ( zone_my_reverse_ip6_arpa ) }}

# bind9_zone_static: 从 `files/bind/zones/` 复制的区域文件

bind9_zones_static:
- name: static_dom.org
  type: master
- name: static_dom2.org
  type: master
- name: static_dom3.org
  type: slave

在其他变量文件中:

zones_my_domains:
# 这是我域名的变量集
- name: dyn_domain.org
  type: master
  default_ttl: 600
  serial: 2022050501
  refresh: 1D
  retry: 2H
  expire: 1000H
  # NS和其他预格式化记录的值必须给出为完全限定的域名,可以有结束点,也可以没有,但是相对于区域不可以
  primary: ns1.dyn_domain.org         # 可选,如果不定义,将取第一个NS 
  admin: postmaster.dyn_domain.org
  ns_records:
  - ns1.dyn_domain.org
  - ns2.dyn_domain.org
  # RR值要么相对于区域,要么在外部时带有结束点。
  rrs:
  - {label: "@", type: MX, rdata: 10 mail}
  - {label: webmail, type: CNAME, rdata: mail}
  - {label: "@", type: A, rdata: 8.8.8.221}
  - {label: "@", type: AAAA, rdata: 2001:db8:6a::95}
  - {label: www, type: CNAME, rdata: webserver.dyn_domain.org.}
  - {label: mail, type: A, rdata: 8.8.8.222}
  - {label: mail, type: AAAA, rdata: 2001:db8:6a::22}
  - {label: webserver, ttl: 86400, type: A, rdata: 8.8.8.223}
  - {label: webserver, ttl: 86400, type: AAAA, rdata: 2001:db8:6a::23}

同样,zone_my_reverse_inaddr_arpazone_my_reverse_ip6_arpa 用于IP反向DNS解析。请注意,对于通用NS记录,我们采用了在 RFC 1034, Section 3.6 中定义的术语。

  • 将角色部署到您的服务器上

DDNS更新

密钥生成

如果您希望此角色生成DDNS密钥,请配置 bind9_generate_ddns_key

-  bind9_generate_ddns_key: true

密钥默认将存储在您剧本位置的 files/bind/zones 中,但您可以使用 bind9_local_keydir 自定义此设置:

-  bind9_local_keydir: credentials/bind

区域数据库

请注意,要使DDNS更新工作,区域文件的位置需要对BIND进程可写。 具有强制访问控制(Apparmor,SELinux)的Linux发行版通常不允许写入默认的/etc/bind/zones路径。为了避免这一情况,您可能想将区域文件的位置更改为/var/lib/bind/zones

-  bind9_zonedir: /var/lib/bind/zones

依赖项

对于XMPP通知功能,需要安装 python-xmpp

角色变量

请查看 defaults/main.yml 以获取角色变量的列表。

测试与开发

测试

为了开发和测试该角色,我们使用Github Actions、Molecule和Vagrant。在本地环境中,您可以轻松地测试该角色。

在本地运行测试:

molecule test 

许可证

此Ansible角色根据GNU GPLv3许可。

作者

版权 2017-2020 systemli.org (https://www.systemli.org/)

关于项目

Role to install and maintain the Bind9 nameserver on Debian

安装
ansible-galaxy install systemli.bind9
许可证
gpl-3.0
下载
5.7k
拥有者
Your friendly tech collective