MENU
  • VPS(レンタルサーバ)比較
  • ITエンジニアの転職
  • IT技術入門(Engineers.LOG)
カテゴリー
  • IT関連 (623)
    • Bootstrap (2)
    • クラウド (4)
    • サーバー技術 (185)
    • ストレージ (7)
      • NetApp (7)
    • ネットワーク技術 (91)
      • Cisco (36)
      • Juniper (18)
      • 負荷分散装置 (17)
    • パソコン関連 (92)
      • MAC (25)
      • Windows (54)
    • プログラミング (154)
      • Ansible (11)
      • C言語 (23)
      • Python (111)
        • Django (20)
    • 仮想化 (88)
      • Docker (63)
      • VMware (23)
  • VPS (200)
    • ABLENET VPS (16)
    • Amazon Lightsail(VPS) (2)
    • ConoHaVPS (37)
    • mixhostVPS (4)
    • WebARENAIndigo (16)
    • XServerVPS (34)
    • お名前.com VPS (12)
    • さくらのVPS (24)
    • カゴヤクラウドVPS (13)
    • シンVPS (7)
  • レンタルサーバー (56)
    • エックスサーバー (38)
  • 光回線 (8)
  • 技術スキルアップ開発・学習 (7)
    • Envader (2)
    • RareTECH (2)
    • Udemy (3)
もう現役20年超えましたー。経験値ならだれにも負けないエンジニア技術ブログ
インフラエンジニアの技術LOG
  • VPS(レンタルサーバ)比較
  • ITエンジニアの転職
  • IT技術入門(Engineers.LOG)
インフラエンジニアの技術LOG
  • VPS(レンタルサーバ)比較
  • ITエンジニアの転職
  • IT技術入門(Engineers.LOG)
  1. ホーム
  2. IT関連
  3. プログラミング
  4. Ansible
  5. 【Ansible】Dockerコンテナ間でBIND(DNS)のPlaybookインストール・起動確認まで

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

2020 9/30
Ansible
2020年9月27日2020年9月30日

AnsibleのPlaybookを利用して、リモートサーバーへのBINDインストールと動作確認までを実施したのでまとめました。

現状として、インストール先のDNSサーバーは動作不具合を出しているので微妙な感じですが動作確認まではできる様になっています。

Ansibleインストールはこちらの記事を参照

あわせて読みたい
Ansibleインストール_Docker(CentOS8)コンテナ環境 Dockerコンテナ上でCentOS8を構築し、Ansibleをインストールしたので手順を作成しました。 DockerコンテナでCentOS8の構築手順は以下のページを参考にしてください。 Do...

目次
安くて高速!高性能VPSで快適開発!
最速5分でサーバー構築
>>>こちらをチェック

エンジニア必見! 技術力を伸ばすVPS徹底比較
>>>VPS比較

Dockerコンテナ間で「Ansible」PlaybookでBINDインストールと動作確認

コンテナ間の接続は、172.17.0.0/24のセグメントで構成は以下となります。

[ansible]——[dns]

  • OS:CentOS7(latest)
  • Ansibleサーバー(172.17.0.2)
  • dnsサーバー(172.17.0.3)

また、今回BINDのインストール・起動を実施するPlaybookの構成は以下となります。
BINDに設定する「name.conf」、正引き・逆引きのzone設定は「config_files」配下に設置します。

[root@ansible /]# tree /etc/ansible/roles/dns/
/etc/ansible/roles/dns/
|-- config_files
|   |-- 0.17.172.in-addr.arpa.rev
|   |-- named.conf
|   `-- test-network.local
|-- hosts
`-- playbook
    `-- dns_install.yml

2 directories, 5 files

上記構成を踏まえて、以下でそれぞれのファイルを作成していきます。

「named.conf」作成

まずは、ansibleからリモート先のサーバーへBINDをインストールした後にコピーする「named.conf」を作成します。

[root@ansible /]# cat /etc/ansible/roles/dns/config_files/named.conf 
acl "test-network" {
        172.17.0.0/24;
};

options {
        listen-on port 53 { 127.0.0.1; 172.17.0.3; };
        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 "0.17.172.in-addr.arpa" {
                type master;
                file "0.17.172.in-addr.arpa.rev";
        };

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

この後に正引き・逆引きのゾーンファイルを作成するので以下の設定を、named.confへ記載します。

  • 正引き:test-network.local
  • 逆引き:0.17.172.in-addr.arpa.rev

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

正引きゾーンファイルを作成します。
今回は「test-network.local」というゾーンファイルを作成します。

また、以下でそれぞれの正引きの設定をしました。

  • ansible.test-network.local→172.17.0.2
  • dns.test-network.local→172.17.0.3

設定内容は以下となります。

[root@ansible /]# cat /etc/ansible/roles/dns/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      172.17.0.3
ansible          IN      A      172.17.0.2

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

次に逆引きゾーンファイルを作成します。

[root@ansible /]# cat /etc/ansible/roles/dns/config_files/0.17.172.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.
2                IN      PTR    ansible.test-network.local.
3                IN      PTR    dns.test-network.local.

逆引きの設定は正引きに設定した内容を反映させます。

  • 172.17.0.2→ansible.test-network.local
  • 172.17.0.3→dns.test-network.local

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

次にPlaybookの実行対象となるリモートサーバの登録をするための「インベントリファイル」の作成をします。

今回のPlaybookの対象となるのが別コンテナの「dnsサーバ」となるので、対象のIPアドレスの設定と、「all:vars」でsshアクセス情報を登録します。

[root@ansible /]# cat /etc/ansible/roles/dns/hosts                                  
[dns]
172.17.0.3

[all:vars]
ansible_ssh_port=22
ansible_ssh_user=root
ansible_ssh_pass=xxxxxx
ansible_sudo_pass=xxxxxx

Ansibleで実行する「Playbook」作成

Playbookでは実際に実行した際の設定をします。
流れは以下となります。

  1. 「hosts」から対象のリモートサーバーへアクセス
  2. bind,bind-chroot,bind-utilsをインストール
  3. named-chroot停止
  4. named.confをリモートサーバーへコピー
  5. 正引きゾーンファイルをリモートサーバーへコピー
  6. 逆引きゾーンファイルをリモートサーバーへコピー

※最後に「named-chroot」を起動しますが、エラーを吐くため一旦削除してください。

[root@ansible 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/0.17.172.in-addr.arpa.rev
       dest: /var/named/0.17.172.in-addr.arpa.rev
       owner: root
       group: named
       mode: 0640

#以下はエラーを吐くため削除
  - name: start_named-chroot
    service:
      name: named-chroot
      state: started
      enabled: yes

「Playbook」 実行

Playbookの実行は以下のコマンドとなります。
今回は「dns」フォルダ配下に移動している状態でのコマンドとなります。

またコマンド体系は以下の通りとなります。

$ ansible-playbook -i (インベントリファイル) (ymlファイル)

実際にPlaybookを実行した結果です。

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

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

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

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

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

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

TASK [stop_named-chroot] ******************************************************************************************************************************************************************************
ok: [172.17.0.3]

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

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

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

TASK [start_and_enable_named-chroot] ******************************************************************************************************************************************************************
fatal: [172.17.0.3]: FAILED! => {"changed": false, "msg": "Unable to start service named-chroot: Job for named-chroot.service canceled.\n"}

PLAY RECAP ********************************************************************************************************************************************************************************************
172.17.0.3                 : ok=8    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0   

問題なくインストールができれば「ok」がカウントされます。
本来は「named-chroot」で起動するのですが、コンテナ環境ではなぜかうまく「named」も「named-chroot」も起動しませんでした。

コンテナ「dns」サーバーでBINDが起動できないエラーが発生

リモート先のDNSサーバーへアクセスし、以下のコマンドを実行しましたが、エラーが発生します。

[root@dns ~]# systemctl start named-chroot
Job for named-chroot.service failed because the control process exited with error code. See "systemctl status named-chroot.service" and "journalctl -xe" for details.

こちらに関してはPlaybookでchrootをスタートさせず、リモート先のサーバーへアクセスし、直接BINDを実行します。

リモート先のサーバーへアクセス実施

リモート先のサーバーへアクセスし、ファイルに問題が無いか以下の「namedd-checkconf」を実施します。

[root@dns ~]# named-checkconf
[root@dns ~]# named-checkzone test-network.local /var/named/test-network.local 
zone test-network.local/IN: loaded serial 2020011202
OK
[root@dns ~]# named-checkzone 0.17.172.local.rev /var/named/0.17.172.in-addr.arpa.rev 
zone 0.17.172.local.rev/IN: loaded serial 2020011202
OK

問題が無い場合は以下のコマンドを実行します。

[root@dns ~]# systemctl start named-chroot

※エラー内容によって上記でもうまく実行できない場合があります。
ここは現在確認中

正常に名前解決ができるか正常性の確認

Dockerコンテナ環境下でBINDを実行させると一定時間は起動しますが、少しすると落ちてしまう事象が発生しています。
一時的に起動している際に名前解決ができたか確認を以下でしました。

正引き(dns.test-network.local)

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

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

逆引き(dns.test-network.local)

[root@ansible ~]# nslookup 172.17.0.3 172.17.0.3
3.0.17.172.in-addr.arpa	name = dns.test-network.local.

正引き(ansible.test-network.local)

[root@ansible ~]# nslookup ansible.test-network.local 172.17.0.3
Server:		172.17.0.3
Address:	172.17.0.3#53

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

逆引き(ansible.test-network.local)

[root@ansible ~]# nslookup 172.17.0.2 172.17.0.3
2.0.17.172.in-addr.arpa	name = ansible.test-network.local.

まだ、設定は調整中ですが、正常に起動次第追って報告します。

エンジニアスキルをアップする勉強法

ITエンジニアの開発・検証・学習としてインターネット上で専用のサーバ(VPS)を利用しましょう!
実務経験はVPSで学べます。

あわせて読みたい
現役エンジニアがおすすめするVPSレンタルサーバ比較(高速SSD限定) 格安VPS比較(2025年最新版)

Ansible
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする コメントをキャンセル

email confirm*

post date*

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



検索
カテゴリー
新着記事
  • XServerVPS アニメ風 男の子 プログラミングをしている VPSを利用している 楽しそうにしている
    XServerVPSで証明書(SSL)を取得する方法
    2025年3月24日
    XServerVPS
  • レンタルサーバ アニメ風 女の子 楽しんでパソコンをしている 目がキラキラ
    WordPressがレンタルサーバよりVPSで利用する方がおすすめの理由
    2025年3月19日
    VPS
  • VPS レンタルサーバー アニメ風 女の子 プログラミングをしている VPSを利用している 楽しそうにしている
    VPSとクラウドの違いとは?初心者向けにわかりやすく解説
    2025年3月5日
    VPS
  • シンVPS アニメ風 女の子 パソコン プログラミングをしている VPSを利用している 楽しそうにしている
    シンVPSはWindows serverを利用できない。その理由と利用できるOSは?
    2025年3月4日
    シンVPS
  • シンVPS アニメ風 女の子 パソコン プログラミングをしている VPSを利用している 楽しそうにしている
    シンVPSでゲームを利用する環境はあるのか
    2025年3月4日
    シンVPS
  • シンVPS アニメ風 女の子 パソコン プログラミングをしている VPSを利用している 楽しそうにしている
    シンVPSのサイトの表示速度は他社に比べて早いのか?
    2025年3月4日
    シンVPS
目次
目次