systemli.bind9
在Debian上安装和维护Bind9名称服务器的Ansible角色
该角色在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_arpa
和 zone_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/)