DockerでBIND9動かしてみた

 SambaのDocker化作業の一環で急遽BINDのコンテナが必要になったのでコンテナイメージを探していたけれど見つからないので適当なものを自分で準備したよ。と言っても相変わらずのコピペですが。一応Ubuntu20.04LTSで最新版のBIND9を引いてくるようにはしたつもりです。一応意図していることはできている模様。そしていよいよ本丸に突入する


■設定ファイル関連

・Dockerfile

-------------------------------------------------

FROM ubuntu:latest

ENV DEBIAN_FRONTEND noninteractive

# Bind install
RUN apt-get update && apt-get upgrade -y && \
    apt-get install -y tzdata vim dnsutils bind9 bind9utils supervisor

# Setup shell
ADD init.sh /init.sh
RUN chmod 755 /init.sh
CMD /init.sh setup

-------------------------------------------------

・init.sh

-------------------------------------------------

#!/bin/bash
set -e

# utility
function get_host_ip(){
    dnsarray=($(echo $1 | tr "." "\n"))
    echo ${dnsarray[3]}
}

function get_reverse_ip(){
    iparray=($(echo $1 | tr "." "\n"))
    str="${iparray[2]}.${iparray[1]}.${iparray[0]}"
    echo ${str}
}

function appStart(){
     /usr/bin/supervisord
}

# Set variables
DOMAIN=${DOMAIN:-yourdomain}
ACLIPRANGE=${ACLIPRANGE:-youracliprange}
DNS_IP=${DNS_IP:-dnsserverip}
FORWERDER_IP=${FORWERDER_IP:-forworderdnsip}
MAINAD_IP=${MAINAD_IP:-main}
SUBAD_IP=${SUBAD_IP:-sub}
MAINAD_HOSTNAME=${MAINAD_HOSTNAME:-main_hostname}
SUBAD_HOSTNAME=${SUBAD_HOSTNAME:-sub_hostname}
DNS_HOST_IP=$(get_host_ip ${DNS_IP})
MAINAD_HOST_IP=$(get_host_ip ${MAINAD_IP})
SUBAD_HOST_IP=$(get_host_ip ${SUBAD_IP})
REVERSEIP=$(get_reverse_ip ${DNS_IP})

# Setting named.conf
cat << EOF > /etc/bind/named.conf
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.zones";
EOF

# Setting named.conf.options
cat << EOF > /etc/bind/named.conf.options
acl internal-network {
        ${ACLIPRANGE};
};

options {
        directory "/var/cache/bind";

        forwarders {
                ${FORWERDER_IP};
        };
        allow-query {
           localhost;
           internal-network;
        };
        recursion yes;

             dnssec-validation auto;
             listen-on-v6 { any; };
};
EOF

# Setting named.conf.zones
cat << EOF > /etc/bind/named.conf.zones
zone "nishimura.local" IN {
        type    master;
        file    "/etc/bind/db.${DOMAIN}";
};

zone "${REVERSEIP}.in-addr.arpa" IN {
        type    master;
        file    "/etc/bind/db.${REVERSEIP}";
};
EOF

# Setting Forward
cat << EOF > /etc/bind/db.${DOMAIN}
\$TTL 86400
@       IN      SOA     dns.${DOMAIN}. root.${DOMAIN}. (
        2021013001      ;Serial
        3600            ;Refresh
   1800            ;Retry
   604800          ;Expire
   865400          ;Minimum TTL
)

            IN      NS      dns.${DOMAIN}.
dns         IN      A       ${DNS_IP}
${MAINAD_HOSTNAME} IN      A       ${MAINAD_IP}
${SUBAD_HOSTNAME}  IN      A       ${SUBAD_IP}
EOF

# Setting Reverse
cat << EOF > /etc/bind/db.${REVERSEIP}
\$TTL 86400
@       IN      SOA     dns.${DOMAIN}. root.${DOMAIN}. (
        2021013001      ;Serial
        3600            ;Refresh
        1800            ;Retry
        604800          ;Expire
        86400           ;Minimum TTL
)

                   IN      NS      dns.${DOMAIN}.
${DNS_HOST_IP}     IN      PTR     dns.${DOMAIN}.
${MAINAD_HOST_IP}     IN      PTR     main-ad-srv.${DOMAIN}.
${SUBAD_HOST_IP}     IN      PTR     sub-ad-srv.${DOMAIN}.
EOF

# Set up supervisor
cat << EOF > /etc/supervisor/conf.d/supervisord.conf
[supervisord]
nodaemon=true

[program:named]
command=/usr/sbin/named -f
EOF

appStart

exit 0

-------------------------------------------------

■起動方法

yourworkingdirはそれぞれ作業環境に置換する。

$ cd /yourworkingdir/bind
$ mkdir conf
$ docker build -t "ad-dns:latest" .
$ docker run -v /yourworkingdir/bind/conf:/etc/bind --name ad-dns -p 53:53/udp -d ad-dns

■参考サイト

https://serip39.hatenablog.com/entry/2020/06/26/073000

https://blog.kurokobo.com/archives/2466

https://github.com/labbsr0x/docker-dns-bind9

https://tryota.hatenablog.com/entry/2021/02/06/Ubuntu_server_DNS%E3%82%B5%E3%83%BC%E3%83%90%E3%81%AE%E6%A7%8B%E7%AF%89

https://www.hiroom2.com/2018/05/06/ubuntu-1804-bind-ja/

http://philosy.com/blog/2019/05/27/bind-%E3%82%92-docker-%E3%81%A7%E5%8B%95%E3%81%8B%E3%81%99/

https://torajirousan.hatenadiary.jp/entry/2020/08/08/084253

コメント

このブログの人気の投稿

証券外務員1種勉強(計算式暗記用メモ)

GASでGoogleDriveのサブフォルダとファイル一覧を出力する

マクロ経済学(IS-LM分析)