【Ansible】仮想CentOS7環境でBIND(DNS)Playbookでインストールと動作確認


VMware仮想環境においてAnsible Playbookを利用してBIND(DNS)のインストールを実施したので構築方法をメモします。

前回、Dockerコンテナ間でAnsibleを動作した際の記事はこちらから

ansible

【Ansible】Dockerコンテナ間でBIND(DNS)のPlaybookインストール・起動確認まで

2020年9月27日

VMware仮想環境下で「Ansible」playbookを実行(BINDインストール)と動作確認まで

前回、Dockerコンテナ間でAnsible Playbookを実行し、BINDをインストールしたのですが、named、named-chrootがどれも起動しないという事象が発生しました。

今回、同じ設定でvShere環境のVMを利用して動作するか確認します。

OS環境は以下となります。

  • OS:CentOS7
  • (latest)

  • Ansibleサーバー(192.168.140.100)
  • dnsサーバー(192.168.140.101)

AnsiblePlaybookのファイル構成

今回配置したファイル構成は以下となります。
配置、せって内容は前回Dockerコンテナで設定した内容とほぼ変わりません。

[root@Ansible_test dns]# tree
.
|- config_files
    - 140.168.192.in-addr.arpa.rev
    - named.conf
    - test-network.local
|- hosts
|- playbook
    - dns_install.yml


「named.conf」作成

リモート先のDNSサーバーへコピーする「named.conf」の設定内容を作成します。

[root@Ansible_test dns]# cat config_files/named.conf
acl "test-network" {
        192.168.140.0/24;
};

options {
        listen-on port 53 { 127.0.0.1; 192.168.140.101; };
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        secroots-file   "/var/named/data/named.secroots";
        recursing-file  "/var/named/data/named.recursing";
        allow-query     { localhost; test-network; };

        recursion yes;

        dnssec-enable no;
        dnssec-validation no;

        managed-keys-directory "/var/named/dynamic";

        pid-file "/var/named/named.pid";
        session-keyfile "/var/named/session.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

view "internal" {
        match-clients { localhost; test-network; };

        zone "." IN {
                type hint;
                file "named.ca";
        };

        zone "test-network.local" {
                type master;
                file "test-network.local";
        };

        zone "140.168.192.in-addr.arpa" {
                type master;
                file "140.168.192.in-addr.arpa.rev";
        };

        include "/etc/named.rfc1912.zones";
        include "/etc/named.root.key";
};

「正引き」ゾーンファイルの作成

正引きゾーンファイルの設定内容は以下となります。

  • ansible.test-network.local→192.168.140.100
  • dns.test-network.local→192.168.140.101
[root@Ansible_test dns]# cat config_files/test-network.local
$TTL 3600
@                IN      SOA dns.test-network.local. root.test-network.local. (
                         2020011202 ; serial
                         3600       ; refresh 1hr
                         900        ; retry 15min
                         604800     ; expire 1w
                         86400      ; min 24hr
)

                 IN      NS     dns.test-network.local.
dns              IN      A      192.168.140.101
ansible          IN      A      192.168.140.100

「逆引き」ゾーンファイルの作成

逆引きゾーンファイルの内容は以下となります。

  • 192.168.140.100→ansible.test-network.local
  • 192.168.140.101→dns.test-network.local
[root@Ansible_test dns]# cat config_files/140.168.192.in-addr.arpa.rev
$TTL 3600
@                IN      SOA dns.test-network.local. root.test-network.local. (
                         2020011202 ; serial
                         3600       ; refresh 1hr
                         900        ; retry 15min
                         604800     ; expire 1w
                         86400      ; min 24hr
)

                 IN      NS     dns.test-network.local.
100              IN      PTR    ansible.test-network.local.
101              IN      PTR    dns.test-network.local.

「hosts」インベントリファイル作成

Playbook実行対象機器を設定します。
今回のリモート対象のサーバーは(192.168.140.101)となります。

[root@Ansible_test dns]# cat hosts
[dns]
192.168.140.101

[all:vars]
ansible_ssh_port=22
ansible_ssh_user=root
ansible_ssh_pass=(password)
ansible_sudo_pass=(password)

「Playbook」作成

Playbookの内容は以下となります。

  1. 「hosts」から対象のリモートサーバーへアクセス
  2. bind,bind-chroot,bind-utilsをインストール
  3. named-chroot停止
  4. named.confをリモートサーバーへコピー
  5. 正引きゾーンファイルをリモートサーバーへコピー
  6. 逆引きゾーンファイルをリモートサーバーへコピー
  7. named-chroot起動
[root@Ansible_test dns]# cat playbook/dns_install.yml
- hosts: dns
  become: yes
  tasks:
  - name: bind install
    yum:
      name: bind
      state: present
  - name: bind-chroot install
    yum:
      name: bind-chroot
      state: present
  - name: bind-utils install
    yum:
      name: bind-utils
      state: present
  - name: stop_named-chroot
    service:
      name: named-chroot
      state: stopped
  - name: copy named.conf
    copy:
       src: /etc/ansible/roles/dns/config_files/named.conf
       dest: /etc/named.conf
       owner: root
       group: named
       mode: 0640
  - name: copy zone file
    copy:
       src: /etc/ansible/roles/dns/config_files/test-network.local
       dest: /var/named/test-network.local
       owner: root
       group: named
       mode: 0640
  - name: copy reverse zone file
    copy:
       src: /etc/ansible/roles/dns/config_files/140.168.192.in-addr.arpa.rev
       dest: /var/named/140.168.192.in-addr.arpa.rev
       owner: root
       group: named
       mode: 0640
  - name: start_and_enable_named-chroot
    service:
      name: named-chroot
      state: started
      enabled: yes

「Ansible Playbook」 実行

以下コマンドでPlaybookを実行します。

[root@Ansible_test dns]# ansible-playbook -i hosts playbook/dns_install.yml

PLAY [dns] *************************************************************************************************************************************************

TASK [Gathering Facts] *************************************************************************************************************************************
ok: [192.168.140.101]

TASK [bind install] ****************************************************************************************************************************************
ok: [192.168.140.101]

TASK [bind-chroot install] *********************************************************************************************************************************
ok: [192.168.140.101]

TASK [bind-utils install] **********************************************************************************************************************************
ok: [192.168.140.101]

TASK [stop_named-chroot] ***********************************************************************************************************************************
changed: [192.168.140.101]

TASK [copy named.conf] *************************************************************************************************************************************
ok: [192.168.140.101]

TASK [copy zone file] **************************************************************************************************************************************
ok: [192.168.140.101]

TASK [copy reverse zone file] ******************************************************************************************************************************
ok: [192.168.140.101]

TASK [start_and_enable_named-chroot] ***********************************************************************************************************************
changed: [192.168.140.101]

PLAY RECAP *************************************************************************************************************************************************
192.168.140.101            : ok=9    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

問題なく実行されると上記の様にエラーがカウントされず、「ok」、及び「changed」がカウントされます。

動作確認

実際にリモートサーバーでBINDがインストールされ、正常動作をしているか確認します。
以下ではnslookupを実行し、DNSをリモートサーバー(192.168.140.101)を指名します。

正引き:ansible.test-network.local

[root@Ansible_test dns]# nslookup ansible.test-network.local 192.168.140.101
Server:         192.168.140.101
Address:        192.168.140.101#53

Name:   ansible.test-network.local
Address: 192.168.140.100

逆引き:ansible.test-network.local

[root@Ansible_test dns]# nslookup 192.168.140.100 192.168.140.101
100.140.168.192.in-addr.arpa    name = ansible.test-network.local.

正引き:dns.test-network.local

[root@Ansible_test dns]# nslookup dns.test-network.local 192.168.140.101
Server:         192.168.140.101
Address:        192.168.140.101#53

Name:   dns.test-network.local
Address: 192.168.140.101

逆引き:dns.test-network.local

[root@Ansible_test dns]# nslookup 192.168.140.101 192.168.140.101
101.140.168.192.in-addr.arpa    name = dns.test-network.local.

上記の様にDNSサーバーから応答があれば成功です。

応答がない場合は対象のサーバーで「53」番ポートの開放をしましょう。
permitしていない場合は名前解決の確認ができません。

設定は以上となります。


関連記事


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

ABOUTこの記事をかいた人

blank

インターネット関連のSEをやっています。 ネットワーク、サーバー、ストレージ、仮想基盤まで幅広く手を出しており、MVNOの構築経験もあります。 現在は、Pythonを使ったプログラミングの開発をしネットワークの自動化ツールを作成しています! Pythonの入門書も作成しているので、ぜひ参考にしてください!