systemli.bind9
Debian上にBind9ネームサーバをインストールし、管理するためのAnsibleロール
このロールは、Debian上にBind9ネームサーバをインストールし、設定します。
特徴:
- DNSゾーン用の権威ネームサーバやDNSリカーサの設定をサポート
- 拡張DNSSECサポート:
- 自動KSKおよびZSKキー生成
- 自動ゾーンDNSSEC設定
- 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
primary: ns1.dyn_domain.org # オプション、これを定義しない場合、最初のNSが取られます
admin: postmaster.dyn_domain.org
ns_records:
- ns1.dyn_domain.org
- ns2.dyn_domain.org
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}
同じように、IP逆引きDNS解決のためにzone_my_reverse_inaddr_arpa
とzone_my_reverse_ip6_arpa
があります。一般的な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プロセスが書き込み可能である必要があります。
Mandatory Access Control(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/)