Bind9区域文件的预处理器
项目描述
bindtool
bind9区域文件的预处理器。
此工具对于管理bind9 DNS服务器的区域文件非常有用。它提供了基本的变量替换和自动生成多种类型的DNS记录,特别是基于外部资源(如公钥)的记录。当密钥更改时,无需编辑区域文件,这极大地简化了保持DNS区域更新的过程。
安装
需要Python3.7以上。
sudo pip3 install bindtool
可选地创建一个虚拟环境并在其中安装。
配置
示例配置文件列出了所有可能的选项及其默认值。只需列出与默认值不同的值。
配置文件bindtool.json
可以放置在当前工作目录中、/etc/bindtool或与bindtool工具安装在同一目录下。可以在命令行上指定不同的配置文件名。如果指定的文件名不是绝对路径,它将在相同的位置中搜索,例如,bindtool --config config.json
将加载./config.json
、/etc/bindtool/config.json
或<install-dir>/config.json
。文件必须遵循标准的JSON格式。
特定区域的配置文件可以放置在具有名称bindtoool.<zone-name>.json
的配置文件旁边。如果存在,特定区域的配置文件中的值将覆盖处理该区域时配置文件中的值。
默认值
默认值部分指定了各种记录命令的所有参数的默认值。
例如,要更改SOA记录的默认expire
值:
"defaults": {
"soa": {
"expire": "7d",
}
},
...
LDAP
LDAP部分指定了LDAP记录的连接和搜索参数。
目录
目录部分指定了寻找各种文件类型的目录。
目录值可能包括用于变量替换的Python格式字符串。所有目录类型都接受{name}字段。证书和私钥目录也接受{key_type}、{suffix}和{username}字段。DKIM目录接受{selector}和{domain}字段。
密钥类型后缀
每个证书和密钥文件都将有一个后缀,位于文件扩展名之前,指示文件的密钥类型。
可以在key_type_suffixes
部分覆盖每种密钥类型默认的后缀。如果您只使用一种密钥类型,或者想省略一种密钥类型的后缀,将其设置为空字符串。请注意,如果使用多种密钥类型,后缀必须唯一,否则文件将被覆盖。
文件名
可以使用标准的Python格式字符串覆盖所有输出文件名。所有文件名类型都接受{name}字段。证书和私钥文件名也接受{key_type}、{suffix}和{username}字段。DKIM文件名接受{selector}和{domain}字段。
用法
运行以下命令
bindtool <zone-file> [<output-directory-or-file>]
该工具将处理源区域文件并输出一个供DNS服务器使用的区域文件。
最好将源区域文件保存在DNS服务器使用的区域文件不同的目录中。例如,将源文件保存在/etc/bind/zones
中,并配置DNS服务器从/var/cache/bind
加载区域文件。当更改区域时,编辑/etc/bind/zones
中的文件,删除服务器的日志文件,然后运行命令
bindtool /etc/bind/zones/myzone.com /var/cache/bind
提供的脚本reload-zone.sh
(位于此存储库中)可以用来自动化此过程,并在成功运行后重新配置和重新启动DNS服务器。
变量替换
可以通过以下语法在源文件中声明变量:
{{name=value}}
并通过以下语法进行替换:
{{name}}
例如
{{ip4=192.0.2.0}}
@ A {{ip4}}
www A {{ip4}}
变为
@ A 192.0.2.0
www A 192.0.2.0
变量在其声明后可随时使用。
包含文件
可以通过以下语法包含额外的源文件:
{{include:file_path:local_variable=value:...}}
位于file_path
的文件将被包含在输出中,就好像该文件的正文被内联包含一样。文件路径将相对于包含include
命令的文件、主区域文件或配置的include
目录进行搜索。包含文件可以包含额外的文件。文件路径可以包含标准的glob模式,所有匹配该模式的文件都将被包含。在包含文件中定义的变量可以在包含include
命令的文件中随时使用。
可以在包含文件路径之后跟有额外的命名参数,这些参数将定义仅在内联文件或由该文件包含的文件内部可用的局部变量。局部变量将覆盖具有相同名称的正常变量。
记录生成
该工具还可以自动生成几种类型的资源记录。这些记录的格式如下:
{{type:arg1:arg2:arg3}}
可以省略可选参数,但是如果省略所有参数,至少必须在记录类型后面跟一个冒号,以将其与变量区分开来。可以通过名称指定参数,以跳过可选参数,例如。
{{tlsa:443:ttl=300}}
如果需要包含冒号、等号或引号的参数值,可以使用反斜杠进行转义,例如\\:
,或者值可以包含在双引号中。
可以通过在记录类型前加上-
来禁用记录。
SOA记录
SOA记录的指定方式如下:
{{soa:primary_server:admin:refresh:retry:expire:minimum:master_server:ttl}}
必需参数为 primary_server
和 admin
,其他参数为可选。请注意,区域序列号未指定,工具将自动使用格式 YYYYMMDD## 生成序列号,并确保生成的序列号至少比区域当前部署的序列号大1。
primary_server
是该区域的主要名称服务器的名称。admin
是区域管理员的电子邮件地址。它可以指定为 bind 格式或标准电子邮件格式,例如:admin.example.com
或admin@example.com
。refresh
是从主服务器刷新从服务器的时刻。默认值是4h
。retry
是从主服务器刷新失败时从服务器重试的间隔。默认值是1h
。expire
是从主服务器刷新后,从服务器保持区域文件的时间长度。默认值是14d
。minimum
是从服务器缓存区域文件的最短时间。默认值是10m
。master_server
是查询除primary_server
以外的现有 SOA 序列号的服务器。默认值是区域的主要服务器名称。如果主服务器不可公开访问,因此不是primary_server
,则此选项很有用。如果primary_server
不是主服务器,请确保设置此值,以便更新后正确执行从服务器区域传输。ttl
是 SOA 记录的 TTL 值。默认值为空。
示例
{{soa:ns1.example.com:admin@example.com}}
变为
@ SOA ns1.example.com. admin.example.com. 2016120900 4h 1h 14d 5m
SSHFP 记录
SSHFP 记录的指定如下
{{sshfp:hostname:key_file:ttl:type}}
所有参数都是可选的。
hostname
是 SSHFP 记录的域名。默认值是@
。key_file
是 SSH 主机密钥文件的名称。密钥文件名可以是绝对路径或相对路径。如果文件名是绝对路径,则将按原样使用,否则文件路径将相对于配置的ssh
目录(默认为/etc/ssh
)并且文件名将传递给ssh
文件名格式字符串,添加密钥类型和扩展名。默认值是ssh_host
。如果使用绝对路径,则还必须指定type
。ttl
是 SSHFP 记录的 TTL 值。默认值为空。type
为空白或以下之一:rsa
、dsa
、ecdsa
、ed25519
。如果type
为空白,将为可以找到公钥文件的密钥类型生成 SSHFP 记录,否则只为指定的密钥类型生成记录。
对于每个现有的密钥文件,将生成两个 SSHFP 记录,一个带有 SHA1 摘要,一个带有 SHA256 摘要。
示例
{{sshfp:}}
变为
@ SSHFP 1 1 8e97a98a87d8e88f17e9100ed1dc852d0b65dea7
@ SSHFP 1 2 cae4c8dc466978685915a030cdd518df707b4aa2cdaec6bb60b5b303b9d65207
@ SSHFP 3 1 04224f436dafa603aa7d335dd59cb03514bcb224
@ SSHFP 3 2 44cd6dd4363ab585280904ad41013de13eaba4d35842cd2d8c25778b1defc2d9
TLSA 记录
TLSA 记录的指定如下
{{tlsa:port:host:cert_file:usage:selector:proto:ttl:type:pass}
必需参数是 port
,其他参数为可选。
port
是服务的 TCP 端口。host
是服务的域名。默认值是@
。cert_file
是用于保护服务的证书或私钥的文件名。如果文件名是绝对路径,则将按原样使用,否则文件路径将相对于配置的certificate
、private_key
、backup_key
或previous_key
目录,并且文件名将传递给相应的文件名格式字符串。私钥将在每个密钥目录中查找。默认值是源区域文件的名称。- 使用方式为以下之一:
pkix-ta
、pkix-ee
、dane-ta
或dane-ee
。默认值是pkix-ee
。 selector
为cert
或spki
。对于cert
选择器,cert_file
必须是证书;对于spki
选择器,cert_file
可以是证书或私钥。默认值是spki
。proto
为以下之一:tcp
、udp
、sctp
或dccp
。默认值是tcp
。ttl
是 TLSA 记录的 TTL 值。默认值为空。type
为空或以下之一:rsa
、ecdsa
。如果指定,它将限制 TLSA 记录为该密钥类型,否则将生成所有可用的密钥的 TLSA 记录。密钥将通过在cert_file
的名称后附加.rsa
和.ecdsa
来定位(在文件扩展名之前,例如example.com.ecdsa.key
)。RSA 密钥的.rsa
后缀是可选的。pass
是加密私钥文件的密码。默认值为空。
对于每种可用的密钥类型,将生成两个 TLSA 记录,一个使用 SHA256 摘要,一个使用 SHA512 摘要。当使用 spki
选择器时,工具还将查找备份和以前的密钥文件。如果找到备份或以前的密钥,将为这些密钥生成额外的 TLSA 记录。
示例
{{tlsa:443:www}}
变为
_443._tcp.www TLSA 1 1 1 90cebb19a148038c14e875153311bfc27603cbc64c78c9e9432114dd76425ab4
_443._tcp.www TLSA 1 1 2 0f5ccb1dc77b699281c671976991acd6b597f42265329921d3273a9fcf71f599e1c6c7e15da4689a239eed9dbad0fbdfc0279ddefcf93a8f40680172ea60c4e0
TLSA 证书记录
TLSA 证书记录指定如下
{{tlsa_cert:port:cert_file:usage:selector:proto:ttl:type}
必需参数是 port
,其他参数为可选。
port
是服务的 TCP 端口。cert_file
是用于保护服务的证书的文件名。如果文件名是绝对路径,则将原样使用,否则文件路径将相对于配置的certificate
目录,文件名将传递给相应的文件名格式字符串。默认值是源区域文件的名称。- 使用方式为以下之一:
pkix-ta
、pkix-ee
、dane-ta
或dane-ee
。默认值是pkix-ee
。 selector
是cert
或spki
。默认值是spki
。proto
为以下之一:tcp
、udp
、sctp
或dccp
。默认值是tcp
。ttl
是 TLSA 记录的 TTL 值。默认值为空。type
为空或以下之一:rsa
、ecdsa
。如果指定,它将限制 TLSA 记录为该密钥类型,否则将为所有可用的密钥生成 TLSA 记录。密钥将通过在cert_file
的名称后附加.rsa
和.ecdsa
来定位(在文件扩展名之前,例如example.com.ecdsa.pem
)。RSA 密钥的.rsa
后缀是可选的。
用于 TLSA 记录的主机名将来自证书文件中的主题备用名称。对于证书中每个存在的主题备用名称以及每个可用的密钥类型,将生成两个 TLSA 记录,一个使用 SHA256 摘要,一个使用 SHA512 摘要。证书不得包含包含通配符的主题备用名称。
示例
{{tlsa_cert:443}}
变为
_443._tcp.www TLSA 1 1 1 90cebb19a148038c14e875153311bfc27603cbc64c78c9e9432114dd76425ab4
_443._tcp.www TLSA 1 1 2 0f5ccb1dc77b699281c671976991acd6b597f42265329921d3273a9fcf71f599e1c6c7e15da4689a239eed9dbad0fbdfc0279ddefcf93a8f40680172ea60c4e0
SMIMEA 记录
SMIMEA 记录指定如下
{{smimea:user:host:cert_file:usage:selector:ttl:type:pass}
user
参数是必需的,其余参数都是可选的。
user
是用户电子邮件地址的左侧(在@
之前)或*
。host
是电子邮件地址的主机名。默认值是@
。cert_file
是用于用户 S/MIME 电子邮件的证书或私钥的文件名。如果文件名是绝对路径,则将原样使用,否则文件路径将相对于配置的certificate
、private_key
、backup_key
或previous_key
目录,文件名将传递给相应的文件名格式字符串。私钥将在每个密钥目录中搜索。默认值是源区域文件的名称。默认情况下,将user
参数 +@
预先附加到文件名,例如,{{smimea:user}} 将搜索user@example.com.rsa.pem
等。- 使用方式为以下之一:
pkix-ta
、pkix-ee
、dane-ta
或dane-ee
。默认值是pkix-ee
。 selector
是cert
或spki
。对于cert
选择器,cert_file
必须是证书,对于spki
选择器,cert_file
必须是私钥。默认值是cert
。ttl
是 SMIMEA 记录的 TTL 值。默认值是空的。type
为空或以下之一:rsa
、ecdsa
。如果指定,它将限制 TLSA 记录为该密钥类型,否则将生成所有可用的密钥的 TLSA 记录。密钥将通过在cert_file
的名称后附加.rsa
和.ecdsa
来定位(在文件扩展名之前,例如example.com.ecdsa.key
)。RSA 密钥的.rsa
后缀是可选的。pass
是加密私钥文件的密码。默认值为空。
对于每种可用的密钥类型,将生成两个 SMIMEA 记录,一个使用 SHA256 摘要,另一个使用 SHA512 摘要。对于 cert
选择器,将生成一个包含证书全部内容的附加记录。当使用 spki
选择器时,工具还将查找备份和旧密钥文件。如果找到备份或旧密钥,将为这些密钥生成额外的 SMIMEA 记录。
示例
{{smimea:username}}
变为
16f78a7d6317f102bbd95fc9a4f3ff2e3249287690b8bdad6b7810f8._smimecert SMIMEA 1 0 1 90cebb19a148038c14e875153311bfc27603cbc64c78c9e9432114dd76425ab4
16f78a7d6317f102bbd95fc9a4f3ff2e3249287690b8bdad6b7810f8._smimecert SMIMEA 1 0 2 0f5ccb1dc77b699281c671976991acd6b597f42265329921d3273a9fcf71f599e1c6c7e15da4689a239eed9dbad0fbdfc0279ddefcf93a8f40680172ea60c4e0
ACME 挑战记录
ACME 挑战 (TXT) 记录的指定如下
{{acme:challenge_file:ttl}}
所有参数都是可选的。
challenge_file
是存储 ACME 挑战信息的 json 文件的文件名。如果文件名是绝对路径,则将直接使用,否则文件路径将相对于配置的acme
目录,文件名将传递给相应的文件名格式字符串。默认值是源区域文件的名称。ttl
是 TXT 记录的 TTL 值。默认值是空的。
ACME 挑战文件的內容是一个字典,其键是主机名,值是 ACME 挑战值。对于每个键/值对将生成一个记录。这种记录类型旨在与自动 ACME 证书管理机器人(如 acmebot)一起使用,进行 dns-01 授权。如果挑战文件不存在,则不会生成任何记录,也不会发生错误。
示例
{{acme:}}
变为
_acme-challenge.example.com TXT "Tu6B_E8PvD1aE1S4CqHPfsgkU3YcdIjhpRDFlhLu0r4"
DKIM 记录
DKIM (TXT) 记录的指定如下
{{dkim:selector:domain:host:ttl}}
所有参数都是可选的。
selector
是 DKIM 选择器。默认值在配置文件的settings
部分指定。domain
是 OpenDKIM 私钥的名称。如果domain
是绝对路径,则将直接使用,否则文件路径将相对于配置的dkim
目录,文件名将传递给相应的文件名格式字符串。默认值是源区域文件的名称。host
是 DKIM 键的主机名。默认值是@
ttl
是 TXT 记录的 TTL 值。默认值是空的。
示例
{{dkim:}}
变为
default._domainkey TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2G8vw5hMce1Zy2ovLnBTEbXxiOqY/CsLu+uqlyMOdOjOGtQqx1wX2aXksazjEIQ3x5RfbuvRfVn/84W4J6WI90/a606veHHalQouXLfQIlu3QuTUkjsj+aldchivc/AI/wZNiIPrPR96UGIzBbSE9zGvwpQ23Z1LzGUXAsPKx1wIDAQAB"
DMARC 记录
DMARC (TXT) 记录的指定如下
{{dmarc:policy:rua:ruf:subdomain_policy:options:dkim_alignment:spf_alignment:report_format:interval:percent:host:ttl}}
所有参数都是可选的。
policy
是以下之一:none
、quarantine
或reject
。默认值是none
。rua
是接收汇总报告的电子邮件地址的逗号分隔列表。ruf
是接收取证报告的电子邮件地址的逗号分隔列表。subdomain_policy
是以下之一:none
、quarantine
或reject
。默认值是none
。options
是以下之一:all
、any
、dkim
或spf
。默认值是any
。dkim_alignment
是以下之一:relaxed
或strict
。默认值是relaxed
。spf_alignment
是以下之一:relaxed
或strict
。默认值是relaxed
。report_format
是以下之一:afrf
或iodef
。默认值是afrf
。interval
是数值(秒)。默认值是86400
(1 天)。percent
是从 0 到 100 的数值。默认值是100
。host
是 DKIM 键的主机名。默认值是@
ttl
是 TXT 记录的 TTL 值。默认值是空的。
示例
{{dmarc:rua@example.com:ruf@example.com}}
变为
_dmarc TXT "v=DMARC1; rua=mailto:rua@example.com; ruf=mailto:ruf@example.com; p=none; sp=none; fo=1; adkim=r; aspf=r; rf=afrf; ri=86400; pct=100;"
CAA 记录
CAA 记录的指定如下
{{caa:tag:caname:flag:ttl}}
tag
和 caname
参数是必需的,所有其他参数都是可选的。
tag
是 CAA 记录的标签,通常是issue
或issuewild
。caname
是 CA 的名称。flag
是 CAA 记录的标志值。默认值为1
。ttl
是 CAA 记录的 TTL 值。默认值为空。
示例
{{caa:issue:letsencrypt.org}}
变为
@ TYPE257 \# 22 010569737375656c657473656e63727970742e6f7267
LDAP 记录
LDAP 记录的指定方式如下
{{ldap:}}
在配置的 LDAP 服务器中找到的任何与当前区域匹配的 DNS 记录都将被包含。支持的记录类型包括:A、AAAA、TXT、SRV 和 SSHFP。
示例源区域文件
以下是一个简单的源区域文件的示例
{{soa:ns1.example.com:admin@example.com}}
{{ip4=192.0.2.0}}
{{pool6=2001:db8}}
@ NS ns1.example.com.
@ NS ns2.example.com.
; Mail
@ MX 10 smtp.example.com.
@ TXT "v=spf1 a:smtp.example.com -all"
; A records
@ A {{ip4}}
@ AAAA {{pool6}}::
smtp A {{ip4}}
smtp AAAA {{pool6}}::1
www A {{ip4}}
www AAAA {{pool6}}::1:0
; DANE records - certificate in /etc/ssl/certs/example.com.pem
{{tlsa:25:smtp:usage=dane-ee}}
{{tlsa:443}}
{{tlsa:443:www}}
; DKIM - certificate in /etc/opendkim/keys/example.com/default.private
{{dkim:}}
_adsp._domainkey TXT "dkim=all"
; CAA Records
{{caa:issue:letsencrypt.org}}
; ACME
{{acme:}}
将生成以下输出
@ SOA ns1.example.com. admin.example.com. 2016120900 4h 1h 14d 5m
@ NS ns1.example.com.
@ NS ns2.example.com.
; Mail
@ MX 10 smtp.example.com.
@ TXT "v=spf1 a:smtp.example.com -all"
; A records
@ A 192.0.2.0
@ AAAA 2001:db8::
smtp A 192.0.2.0
smtp AAAA 2001:db8::1
www A 192.0.2.0
www AAAA 2001:db8::1:0
; DANE records - certificate in /etc/ssl/certs/example.com.pem
_25._tcp.smtp TLSA 3 1 1 90cebb19a148038c14e875153311bfc27603cbc64c78c9e9432114dd76425ab4
_25._tcp.smtp TLSA 3 1 2 0f5ccb1dc77b699281c671976991acd6b597f42265329921d3273a9fcf71f599e1c6c7e15da4689a239eed9dbad0fbdfc0279ddefcf93a8f40680172ea60c4e0
_443._tcp TLSA 1 1 1 90cebb19a148038c14e875153311bfc27603cbc64c78c9e9432114dd76425ab4
_443._tcp TLSA 1 1 2 0f5ccb1dc77b699281c671976991acd6b597f42265329921d3273a9fcf71f599e1c6c7e15da4689a239eed9dbad0fbdfc0279ddefcf93a8f40680172ea60c4e0
_443._tcp.www TLSA 1 1 1 90cebb19a148038c14e875153311bfc27603cbc64c78c9e9432114dd76425ab4
_443._tcp.www TLSA 1 1 2 0f5ccb1dc77b699281c671976991acd6b597f42265329921d3273a9fcf71f599e1c6c7e15da4689a239eed9dbad0fbdfc0279ddefcf93a8f40680172ea60c4e0
; DKIM - certificate in /etc/opendkim/keys/example.com/default.private
default._domainkey TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2G8vw5hMce1Zy2ovLnBTEbXxiOqY/CsLu+uqlyMOdOjOGtQqx1wX2aXksazjEIQ3x5RfbuvRfVn/84W4J6WI90/a606veHHalQouXLfQIlu3QuTUkjsj+aldchivc/AI/wZNiIPrPR96UGIzBbSE9zGvwpQ23Z1LzGUXAsPKx1wIDAQAB"
_adsp._domainkey TXT "dkim=all"
; CAA Records
@ TYPE257 \# 22 010569737375656c657473656e63727970742e6f7267
; ACME
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源分发
构建分发
bindtool-1.4.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 39cd67e6e9c200b06d5b266df52ae6a1d5694ad7332f696e711f87941efcf6ac |
|
MD5 | 8b23506a0c3075c3aa4d5fc39000f53f |
|
BLAKE2b-256 | cce7448cfdee8e9bc3a2c553fd16a3298389c5eedf17fbdbbe2f8b3e3e875c26 |
bindtool-1.4.0-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9f84fe93528592238516fb07685e15b1761c73b45ec04f8539dc6ad34f67c98c |
|
MD5 | 853bcc56bf56de770aa7d27704149873 |
|
BLAKE2b-256 | 2b30ccb9bdff29665e169f7322f7ca91730f14896a3ba16d0381b1888c4ca748 |