systemli.bind9

Debian上にBind9ネームサーバをインストールし、管理するためのAnsibleロール

Build Status Ansible Galaxy

このロールは、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_arpazone_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/)

プロジェクトについて

Role to install and maintain the Bind9 nameserver on Debian

インストール
ansible-galaxy install systemli.bind9
ライセンス
gpl-3.0
ダウンロード
5.7k
所有者
Your friendly tech collective